Пользователь
- Регистрация
- 2 Апр 2025
- Сообщения
- 1
- Автор темы
- #1
С Чем связан плохой рег урона?
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
{
if(IsPlayerLogged[playerid] == 0) return Bypasser(playerid, "OnPlayerGiveDamage");
if(playerid == damagedid || damagedid == INVALID_PLAYER_ID) return 1;
if (PlayerOilBattle[playerid][pob_Faction] == PlayerOilBattle[damagedid][pob_Faction]) {
SCM(playerid, COLOR_RED, "DEBUG: anti team kill OnPlayerGiveDamage [1]");
return 0;
}
DamageData[playerid][d_target] = damagedid;
DamageData[playerid][d_amount] += amount;
DamageData[playerid][d_shots]++;
DamageData[playerid][d_weapon] = weaponid;
if(!DamageData[playerid][d_timer_active])
{
UpdateDamageTextDraw(playerid, damagedid);
DamageData[playerid][d_timer_active] = true;
SetTimerEx("ResetDamageAccumulation", 2000, false, "i", playerid);
}
else
{
UpdateDamageTextDraw(playerid, damagedid);
}
// Также обновляем данные для жертвы
DamageData[damagedid][d_attacker] = playerid;
DamageData[damagedid][d_in_amount] += amount;
DamageData[damagedid][d_in_shots]++;
DamageData[damagedid][d_in_weapon] = weaponid;
if(!DamageData[damagedid][d_in_timer_active])
{
UpdateDamageTextDraw(damagedid, playerid);
DamageData[damagedid][d_in_timer_active] = true;
SetTimerEx("ResetIncomingDamage", 2000, false, "i", damagedid);
}
else
{
UpdateDamageTextDraw(damagedid, playerid);
}
format(global_str, sizeof(global_str), "- %.2f HP", amount);
SetPlayerChatBubble(damagedid, global_str, COLOR_RED, 30.0, 5000);
PlayerPlaySound(damagedid, 1057, 0.0, 0.0, 0.0);
return true;
}
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
if(IsPlayerLogged[playerid] == 0) return Bypasser(playerid, "OnPlayerTakeDamage");
if(playerid == issuerid || issuerid == INVALID_PLAYER_ID) return 1;
SCMf(issuerid, -1, "DEBUG: HasIceSword = %d", PlayerHasIceSword[issuerid]);
if (PlayerOilBattle[playerid][pob_Faction] == PlayerOilBattle[issuerid][pob_Faction]) {
SCM(issuerid, COLOR_RED, "DEBUG: anti team kill OnPlayerTakeDamage [2] ");
return 0;
}
if(weaponid == 8 && PlayerHasIceSword[issuerid] && PlayerStatus[playerid][IsPlayerFrozen] == false)
{
SCM(playerid,COLOR_RED, "DEBUG: морозим");
SCMf(playerid, COLOR_RED, "%s[%d] заморозил вас ледяным мечом!",PN(issuerid), issuerid);
FreezePlayer(playerid);
return 1;
}
if (weaponid == 51) // Урон от взрыва
{
new playerWeapon = GetPlayerWeapon(issuerid);
if (playerWeapon == 16) // Граната
{
if (stunned[playerid] == 1) return 1; // Уже оглушён
if (StunTimer[playerid]) KillTimer(StunTimer[playerid]);
stunned[playerid] = 1;
StunTimer[playerid] = SetTimerEx("StunTick", 1000, true, "d", playerid);
}
stunTime[playerid] = 15;
return 1;
}
if(issuerid != INVALID_PLAYER_ID && PlayerInGreenZone[issuerid])
{
// Восстанавливаем здоровье игрока
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health + amount);
// Уведомляем атакующего
SendClientMessage(issuerid, 0xFF0000AA, "Вы находитесь в зеленой зоне! Атака запрещена!");
return 0;
}
// Если жертва находится в зеленой зоне, также отменяем урон
if(PlayerInGreenZone[playerid])
{
// Восстанавливаем здоровье
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health + amount);
// Уведомляем атакующего, если это другой игрок
if(issuerid != INVALID_PLAYER_ID)
{
SendClientMessage(issuerid, 0xFF0000AA, "Этот игрок находится в зеленой зоне! Атака запрещена!");
}
return 0;
}
if (weaponid != 0 && stunned[issuerid] == 0)
{
if (OilBattle[ob_Active] && OilBattle[ob_Stage] == STAGE_BATTLE && PlayerOilBattle[playerid][pob_Registered] &&
PlayerOilBattle[issuerid][pob_Registered] &&
PlayerOilBattle[playerid][pob_Faction] == PlayerOilBattle[issuerid][pob_Faction]) {
return 0; // Не оглушаем своих
}
if (gettime() - LastStunAttempt[issuerid] < 15) return 1;
LastStunAttempt[playerid] = gettime();
if (random(100) < 1)
{
stunned[playerid] = 1;
stunTime[playerid] = 5; // 5 секунд оглушения
ApplyAnimation(playerid, "CRACK", "CRCKDETH2", 4.0, 0, 0, 0, 1000, 0);
if (StunTimer[playerid]) KillTimer(StunTimer[playerid]);
StunTimer[playerid] = SetTimerEx("StunTick", 1000, true, "d", playerid);
SCMf(playerid, COLOR_LIGHTRED, "%s оглушил вас", PN(issuerid));
SCM(issuerid, COLOR_RED, "Вы оглушили игрока!");
}
return 1;
}
if(issuerid != INVALID_PLAYER_ID)
{
DamageData[issuerid][d_target] = playerid;
DamageData[issuerid][d_amount] += amount;
DamageData[issuerid][d_shots]++;
DamageData[issuerid][d_weapon] = weaponid;
if(!DamageData[issuerid][d_timer_active])
{
UpdateDamageTextDraw(issuerid, playerid);
DamageData[issuerid][d_timer_active] = true;
SetTimerEx("ResetDamageAccumulation", 2000, false, "i", issuerid);
}
else
{
UpdateDamageTextDraw(issuerid, playerid);
}
}
DamageData[playerid][d_attacker] = issuerid;
DamageData[playerid][d_in_amount] += amount;
DamageData[playerid][d_in_shots]++;
DamageData[playerid][d_in_weapon] = weaponid;
if(!DamageData[playerid][d_in_timer_active])
{
UpdateDamageTextDraw(playerid, issuerid);
DamageData[playerid][d_in_timer_active] = true;
SetTimerEx("ResetIncomingDamage", 2000, false, "i", playerid);
}
else
{
UpdateDamageTextDraw(playerid, issuerid);
}
format(global_str, sizeof(global_str), "- %.2f HP", amount);
SetPlayerChatBubble(playerid, global_str, COLOR_RED, 30.0, 5000);
PlayerPlaySound(issuerid, 1057, 0.0, 0.0, 0.0);
return true;
}
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
{
if(IsPlayerLogged[playerid] == 0) return Bypasser(playerid, "OnPlayerGiveDamage");
if(playerid == damagedid || damagedid == INVALID_PLAYER_ID) return 1;
if (PlayerOilBattle[playerid][pob_Faction] == PlayerOilBattle[damagedid][pob_Faction]) {
SCM(playerid, COLOR_RED, "DEBUG: anti team kill OnPlayerGiveDamage [1]");
return 0;
}
DamageData[playerid][d_target] = damagedid;
DamageData[playerid][d_amount] += amount;
DamageData[playerid][d_shots]++;
DamageData[playerid][d_weapon] = weaponid;
if(!DamageData[playerid][d_timer_active])
{
UpdateDamageTextDraw(playerid, damagedid);
DamageData[playerid][d_timer_active] = true;
SetTimerEx("ResetDamageAccumulation", 2000, false, "i", playerid);
}
else
{
UpdateDamageTextDraw(playerid, damagedid);
}
// Также обновляем данные для жертвы
DamageData[damagedid][d_attacker] = playerid;
DamageData[damagedid][d_in_amount] += amount;
DamageData[damagedid][d_in_shots]++;
DamageData[damagedid][d_in_weapon] = weaponid;
if(!DamageData[damagedid][d_in_timer_active])
{
UpdateDamageTextDraw(damagedid, playerid);
DamageData[damagedid][d_in_timer_active] = true;
SetTimerEx("ResetIncomingDamage", 2000, false, "i", damagedid);
}
else
{
UpdateDamageTextDraw(damagedid, playerid);
}
format(global_str, sizeof(global_str), "- %.2f HP", amount);
SetPlayerChatBubble(damagedid, global_str, COLOR_RED, 30.0, 5000);
PlayerPlaySound(damagedid, 1057, 0.0, 0.0, 0.0);
return true;
}
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
if(IsPlayerLogged[playerid] == 0) return Bypasser(playerid, "OnPlayerTakeDamage");
if(playerid == issuerid || issuerid == INVALID_PLAYER_ID) return 1;
SCMf(issuerid, -1, "DEBUG: HasIceSword = %d", PlayerHasIceSword[issuerid]);
if (PlayerOilBattle[playerid][pob_Faction] == PlayerOilBattle[issuerid][pob_Faction]) {
SCM(issuerid, COLOR_RED, "DEBUG: anti team kill OnPlayerTakeDamage [2] ");
return 0;
}
if(weaponid == 8 && PlayerHasIceSword[issuerid] && PlayerStatus[playerid][IsPlayerFrozen] == false)
{
SCM(playerid,COLOR_RED, "DEBUG: морозим");
SCMf(playerid, COLOR_RED, "%s[%d] заморозил вас ледяным мечом!",PN(issuerid), issuerid);
FreezePlayer(playerid);
return 1;
}
if (weaponid == 51) // Урон от взрыва
{
new playerWeapon = GetPlayerWeapon(issuerid);
if (playerWeapon == 16) // Граната
{
if (stunned[playerid] == 1) return 1; // Уже оглушён
if (StunTimer[playerid]) KillTimer(StunTimer[playerid]);
stunned[playerid] = 1;
StunTimer[playerid] = SetTimerEx("StunTick", 1000, true, "d", playerid);
}
stunTime[playerid] = 15;
return 1;
}
if(issuerid != INVALID_PLAYER_ID && PlayerInGreenZone[issuerid])
{
// Восстанавливаем здоровье игрока
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health + amount);
// Уведомляем атакующего
SendClientMessage(issuerid, 0xFF0000AA, "Вы находитесь в зеленой зоне! Атака запрещена!");
return 0;
}
// Если жертва находится в зеленой зоне, также отменяем урон
if(PlayerInGreenZone[playerid])
{
// Восстанавливаем здоровье
new Float:health;
GetPlayerHealth(playerid, health);
SetPlayerHealth(playerid, health + amount);
// Уведомляем атакующего, если это другой игрок
if(issuerid != INVALID_PLAYER_ID)
{
SendClientMessage(issuerid, 0xFF0000AA, "Этот игрок находится в зеленой зоне! Атака запрещена!");
}
return 0;
}
if (weaponid != 0 && stunned[issuerid] == 0)
{
if (OilBattle[ob_Active] && OilBattle[ob_Stage] == STAGE_BATTLE && PlayerOilBattle[playerid][pob_Registered] &&
PlayerOilBattle[issuerid][pob_Registered] &&
PlayerOilBattle[playerid][pob_Faction] == PlayerOilBattle[issuerid][pob_Faction]) {
return 0; // Не оглушаем своих
}
if (gettime() - LastStunAttempt[issuerid] < 15) return 1;
LastStunAttempt[playerid] = gettime();
if (random(100) < 1)
{
stunned[playerid] = 1;
stunTime[playerid] = 5; // 5 секунд оглушения
ApplyAnimation(playerid, "CRACK", "CRCKDETH2", 4.0, 0, 0, 0, 1000, 0);
if (StunTimer[playerid]) KillTimer(StunTimer[playerid]);
StunTimer[playerid] = SetTimerEx("StunTick", 1000, true, "d", playerid);
SCMf(playerid, COLOR_LIGHTRED, "%s оглушил вас", PN(issuerid));
SCM(issuerid, COLOR_RED, "Вы оглушили игрока!");
}
return 1;
}
if(issuerid != INVALID_PLAYER_ID)
{
DamageData[issuerid][d_target] = playerid;
DamageData[issuerid][d_amount] += amount;
DamageData[issuerid][d_shots]++;
DamageData[issuerid][d_weapon] = weaponid;
if(!DamageData[issuerid][d_timer_active])
{
UpdateDamageTextDraw(issuerid, playerid);
DamageData[issuerid][d_timer_active] = true;
SetTimerEx("ResetDamageAccumulation", 2000, false, "i", issuerid);
}
else
{
UpdateDamageTextDraw(issuerid, playerid);
}
}
DamageData[playerid][d_attacker] = issuerid;
DamageData[playerid][d_in_amount] += amount;
DamageData[playerid][d_in_shots]++;
DamageData[playerid][d_in_weapon] = weaponid;
if(!DamageData[playerid][d_in_timer_active])
{
UpdateDamageTextDraw(playerid, issuerid);
DamageData[playerid][d_in_timer_active] = true;
SetTimerEx("ResetIncomingDamage", 2000, false, "i", playerid);
}
else
{
UpdateDamageTextDraw(playerid, issuerid);
}
format(global_str, sizeof(global_str), "- %.2f HP", amount);
SetPlayerChatBubble(playerid, global_str, COLOR_RED, 30.0, 5000);
PlayerPlaySound(issuerid, 1057, 0.0, 0.0, 0.0);
return true;
}