При стрельбе отнимаеться ХП и у стрелька и у игрока.(больше в теме)
#1

Здравствуйте, недавно(сегодня) я заметил такой баг. Если игрок1 стреляет по игрок2, то у обойх снимается количество ХП, не-знаю в чём проблема. Впервые такое вижу. Я заметил этот баг при капте(тестил у себя на сервере), но когда начал снимать видео то заметил что такая фигня и при обычной стрельбе. Я записал видео дабы вы сами увидели в чём дело.
Видео:
https://*********/KRNLZdT1cus - незнаю как сделать чтобы проигрователь сработал сразу на форуме.
Надеюсь там видно вся суть проблему. Надеюсь на вашу помощь.
И когда едёт капт територий, и один из игроов умирает выевляеться в консоль такая ошибка:
PHP код:
[19:10:01] [debug]  Accessing element at index 65535 past array upper bound 999
[19:10:01] [debugAMX backtrace:
[
19:10:01] [debug#0 0004cd98 in public OnPlayerDeath (playerid=0, killerid=65535, reason=255) at D:\Pawn\Corso RPG\gamemodes\Corso.pwn:5046
[19:12:19] [debugRun time error 4"Array index out of bounds"
[19:12:19] [debug]  Accessing element at index 65535 past array upper bound 999 
Код:
PHP код:
    for(new 049i++)//доработать
    
{
        if(
PlayerToKvadrat(playerid,GZInfo[i][gCoords][0], GZInfo[i][gCoords][1],GZInfo[i][gCoords][2],GZInfo[i][gCoords][3]) && ZoneOnBattle[i] == 1)//5046 строка...
        
{
            if((
PlayerInfo[playerid][pMember] == GZInfo[i][gFrakVlad] || PlayerInfo[playerid][pLeader] == GZInfo[i][gFrakVlad]) && (PlayerInfo[killerid][pMember] == GZInfo[i][gNapad] || PlayerInfo[killerid][pLeader] == GZInfo[i][gNapad]))
            {
                
CaptureDeaths[i][0]++;
                
format(string,sizeof(string),"{0095b6}•{FFFFFF}Территория № %d: %s %s(%d) убил %s %s(%d) счёт %d:%d",
                
i,GetGangName(GZInfo[i][gNapad]),Name(killerid),killerid,GetGangName(GZInfo[i][gFrakVlad]),Name(playerid),playerid,CaptureDeaths[i][0],CaptureDeaths[i][1]);
                
SendFamilyMessage(GZInfo[i][gNapad],COLOR_WHITE,string);
                
SendFamilyMessage(GZInfo[i][gFrakVlad],COLOR_WHITE,string);
            }
            else if((
PlayerInfo[playerid][pMember] == GZInfo[i][gNapad] || PlayerInfo[playerid][pLeader] == GZInfo[i][gNapad]) && (PlayerInfo[killerid][pMember] == GZInfo[i][gFrakVlad] || PlayerInfo[killerid][pLeader] == GZInfo[i][gFrakVlad]))
            {
                
CaptureDeaths[i][1]++;
                
format(string,sizeof(string),"{0095b6}•{FFFFFF}Территория № %d: %s %s(%d) убил %s %s(%d) счёт %d:%d",
                
i,GetGangName(GZInfo[i][gFrakVlad]),Name(killerid),killerid,GetGangName(GZInfo[i][gNapad]),Name(playerid),playerid,CaptureDeaths[i][1],CaptureDeaths[i][0]);
                
SendFamilyMessage(GZInfo[i][gNapad],COLOR_WHITE,string);
                
SendFamilyMessage(GZInfo[i][gFrakVlad],COLOR_WHITE,string);
            }
            return 
true;
        }
    } 
Reply
#2

Лол. Первая ошибка (где лог крашдетекта) из-за того, что обращаетесь к массиву без проверки на INVALID_PLAYER_ID и IsPlayerConnected, поэтому выходите за его пределы.

А вторая скорее всего из-за кривой системы урона. Ищите изменение хп в OnPlayerWeaponShot/OnPlayerGiveDamage/OnPlayerTakeDamage, оно не должно применяться к стрелку.
Reply
#3

Quote:
Originally Posted by stabker
Посмотреть сообщение
Лол. Первая ошибка (где лог крашдетекта) из-за того, что обращаетесь к массиву без проверки на INVALID_PLAYER_ID и IsPlayerConnected, поэтому выходите за его пределы.

А вторая скорее всего из-за кривой системы урона. Ищите изменение хп в OnPlayerWeaponShot/OnPlayerGiveDamage/OnPlayerTakeDamage, оно не должно применяться к стрелку.
INVALID_PLAYER_ID и IsPlayerConnected я хз незнаю где его ставить в системе.
А вот из OnPlayerWeaponShot/OnPlayerGiveDamage/OnPlayerTakeDamage, есть только последние 2.
PHP код:
public OnPlayerTakeDamage(playeridissueridFloatamountweaponid)
{
    if(
weaponid == 25 || weaponid == 24 || weaponid == 31 || weaponid == 29)
    {
        if(
togkol[issuerid] == 0)
        {
            
PlayerPlaySound(issuerid64010.00.00.0);
        }
        else if(
togkol[issuerid] == 1) { }
    }
     new 
Float:Dmg[3];//Ниже типа Anti-GM система...
      
GetPlayerArmour(issueridDmg[1]);
    
GetPlayerHealth(issueridDmg[0]);
     if(
Dmg[1] > 0)
      {
           if(
amount Dmg[1])
         {
              
Dmg[2] = amount Dmg[1];
            
Dmg[0] = Dmg[0] - Dmg[2];
             
SetPlayerArmour(issuerid0.0);
              return 
SetPlayerHealth(issueridDmg[0]);
        }
          
Dmg[1] = Dmg[1] - amount;
        
SetPlayerArmour(issueridDmg[1]);
    }
    if(
Dmg[1] < 1)
    {
        
Dmg[0] = Dmg[0] - amount;
        
SetPlayerHealth(issueridDmg[0]);
    }
    return 
true;

PHP код:
public OnPlayerGiveDamage(playeriddamagedidFloat:amountweaponid)
{
    new 
FloatvidaFloatarmadura;
    
GetPlayerArmour(damagedidarmadura); GetPlayerHealth(damagedidvida);
    if(
IsAPistol(weaponid))
    {
        if(
PlayerInfo[playerid][pAmmo2] < 0) return AntiWeapon(playerid);
        
PlayerInfo[playerid][pAmmo2] -= amount;
    }
    else if(
IsAShotgun(weaponid))
    {
        if(
PlayerInfo[playerid][pAmmo2] < 0) return AntiWeapon(playerid);
        
PlayerInfo[playerid][pAmmo3] -= amount;
    }
    else if(
IsAMachineGun(weaponid))
    {
        if(
PlayerInfo[playerid][pAmmo2] < 0) return AntiWeapon(playerid);
        
PlayerInfo[playerid][pAmmo4] -= amount;
    }
    else if(
IsAnAssault(weaponid))
    {
        if(
PlayerInfo[playerid][pAmmo2] < 0) return AntiWeapon(playerid);
        
PlayerInfo[playerid][pAmmo5] -= amount;
    }
    else if(
IsARifle(weaponid))
    {
        if(
PlayerInfo[playerid][pAmmo2] < 0) return AntiWeapon(playerid);
        
PlayerInfo[playerid][pAmmo6] -= amount;
    }
    else if(
IsAHeavyAssault(weaponid))
    {
        if(
PlayerInfo[playerid][pAmmo2] < 0) return AntiWeapon(playerid);
        
PlayerInfo[playerid][pAmmo7] -= amount;
    }
    else if(
IsAHeavyAssault(weaponid))
    {
        if(
PlayerInfo[playerid][pAmmo2] < 0) return AntiWeapon(playerid);
        
PlayerInfo[playerid][pAmmo7] -= amount;
    }
    else if(
IsAGrenade(weaponid))
    {
        if(
PlayerInfo[playerid][pAmmo2] < 0) return AntiWeapon(playerid);
        
PlayerInfo[playerid][pAmmo8] -= amount;
    }
    else if(
IsAStuff1(weaponid))
    {
        if(
PlayerInfo[playerid][pAmmo2] < 0) return AntiWeapon(playerid);
        
PlayerInfo[playerid][pAmmo9] -= amount;
    }
    if(
PlayerPaintballing[playerid])
    {
        
SetPVarFloat(playerid,"painthealths",GetPVarFloat(playerid,"painthealths")+1);
        if(
weaponid == 25 || weaponid == 24PlayerInfo[playerid][pUron] += 100;
        if(
weaponid == 31 || weaponid == 29PlayerInfo[playerid][pUron] += 50;
    }
    if(
weaponid == 3)
    {
        if(
IsACop(playerid))
        {
            if(
IsACop(damagedid)) return SendClientMessage(playeridCOLOR_WHITE"Нельзя надедь наручники на законника.");
            new 
randa random(2)+1;
            new 
string[200];
            if(
randa == 1)
            {
                
format(stringsizeof(string), "%s надел наручники на %s (удачно)",PlayerInfo[playerid][pName],PlayerInfo[damagedid][pName]);
                
SetPlayerAttachedObject(damagedid0194186, -0.0110000.028000, -0.022000, -15.600012, -33.699977, -81.7000350.8919991.0000001.168000);
                
SetPlayerSpecialAction(damagedid,SPECIAL_ACTION_CUFFED);
                
ApplyAnimation(damagedid,"PED","BIKE_fall_off",4.1,0,1,1,1,1);
                
TogglePlayerControllable(damagedid0);
                
PlayerCuffed[damagedid] = 2;
                
PlayerCuffedTime[damagedid] = 30;
            }
            else { 
format(stringsizeof(string), "%s попытался надеть наручники на %s (неудачно)",PlayerInfo[playerid][pName],PlayerInfo[damagedid][pName]);}
            
ProxDetector(30.0playeridstringCOLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
        }
    }
    return 
true;

Reply
#4

Quote:
Originally Posted by Johhnyllll
Посмотреть сообщение
INVALID_PLAYER_ID и IsPlayerConnected я хз незнаю где его ставить в системе
Ставить в OnPlayerDeath к killerid ' у.
Reply
#5

Quote:
Originally Posted by OstGot
Посмотреть сообщение
Ставить в OnPlayerDeath к killerid ' у.
Можно по подробнее ибо я не-понял суть.
Reply
#6

Стрельбу по пингу же хочешь, да? Так зачем тогда тебе вообще производить какие-либо манипуляции с чьими-либо ХПшечками? Просто в конфиге сервера поставь lagcompmode = 0. А от этой "типа antigm системы" толку вообще нет.

Выше говорят вообще про http://forum.sa-mp.com/showthread.ph...19#post3593219
Reply
#7

Quote:
Originally Posted by S4D
Посмотреть сообщение
Стрельбу по пингу же хочешь, да? Так зачем тогда тебе вообще производить какие-либо манипуляции с чьими-либо ХПшечками? Просто в конфиге сервера поставь lagcompmode = 0. А от этой "типа antigm системы" толку вообще нет.

Выше говорят вообще про http://forum.sa-mp.com/showthread.ph...19#post3593219
Нет, мне нужна стрельба по скину. Ну-ну, я проверял анти гм с гм-ом от собейта, вроде работает. Надо ещё потестить потом посмотрю. А за сылку спасибо,сейчас сделаю.
PHP код:
//update 
Только что заметил в моде вот эти строки...
PHP код:
//из OnPlayerDeath
    
if(killerid != INVALID_PLAYER_ID)
    {
        
PlayerInfo[killerid][pKills]++;
        if(
PlayerInfo[killerid][pPaintDost] < 500PlayerInfo[killerid][pPaintDost]++;
        
PlayerInfo[playerid][pDeaths]++;
    }
    else if(
killerid == INVALID_PLAYER_ID)
    {
        
PlayerInfo[playerid][pDeaths]++;
    } 
//update
Поставил я что ты мне дал, при смерти показываеться 2 раза "wasted"...
Незнаю почему так. Проблема актуальна.
Reply
#8

Quote:
Originally Posted by Johhnyllll
Посмотреть сообщение
Ну-ну, я проверял анти гм с гм-ом от собейта, вроде работает.
Про NOP'ы слышал?
Quote:
Originally Posted by Johhnyllll
Посмотреть сообщение
Нет, мне нужна стрельба по скину.
Ну тогда тебе нужно смотреть в сторону OnPlayerGiveDamage/OnPlayerWeaponShot.
Quote:
Originally Posted by Johhnyllll
Посмотреть сообщение
Поставил я что ты мне дал, при смерти показываеться 2 раза "wasted"...
Reply
#9

Quote:
Originally Posted by S4D
Посмотреть сообщение
Про NOP'ы слышал?

Ну тогда тебе нужно смотреть в сторону OnPlayerGiveDamage/OnPlayerWeaponShot.

Слышал.
OnPlayerWeaponShot - нету у меня в моде. А OnPlayerGiveDamage скинул выше.
Дать скрин?
Reply
#10

Quote:
Originally Posted by Johhnyllll
Посмотреть сообщение
Слышал.
OnPlayerWeaponShot - нету у меня в моде. А OnPlayerGiveDamage скинул выше.
Дать скрин?
Понятненько
Reply
#11

Решил проблему одной строкой:
PHP код:
killerid INVALID_PLAYER_ID
Тему можно закрывать.
Reply
#12

Reply
#13

Quote:
Originally Posted by stabker
Посмотреть сообщение
В чём сарказм?
P.S: Я знаю что решение мне дали давно, но я сегодня только заметил и решил попробовать. Выложил строку потому-что если у кого-то будет также смог решить проблему сразу.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)