Portal SAMP
[Ajuda] Crash no pawn - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Crash no pawn (/showthread.php?tid=1717)



Crash no pawn - DeathSync - 12/10/2021

Alguém sabe me falar onde pode esse código esta gerando crash no pawn, e me explicar o porque disso?

Código:
timer MoveZombie[100](zombieid, newkeys)
{
    new Float:xa, Float:ya, Float:za, Float:health;
    if(FCNPC_IsDead(zombieid)) return 1;
    foreach(new i : Player)
    {
        GetPlayerPos(i, xa, ya, za);
        if(IsPlayerInRangeOfPoint(zombieid, 1, xa, ya, za))
        {
            HumanFound[zombieid] = 2;
            FCNPC_MeleeAttack(zombieid,500);
            GetPlayerHealth(i, health);
            break;
        }
        else if(IsPlayerInRangeOfPoint(zombieid,ZOMBIE_RANGE / 4, xa, ya, za))
          {
            if(GetPlayerSpecialAction(zombieid) == SPECIAL_ACTION_DUCK)
            {
                if(HumanFound[zombieid] == 2)
                {
                    FCNPC_StopAttack(zombieid);
                }
                HumanFound[zombieid] = 1;
                FCNPC_GoTo(zombieid, xa, ya, za, FCNPC_MOVE_TYPE_RUN);
                SetTimer("ResetDetectRange", 5000, false);
            }
            break;
        }
        else if(IsPlayerInRangeOfPoint(zombieid, ZOMBIE_RANGE / 2, xa, ya, za))
        {
            if(HumanFound[zombieid] == 2)
            {
                FCNPC_StopAttack(zombieid);
            }
            HumanFound[zombieid] = 1;
            FCNPC_GoTo(zombieid, xa, ya, za, FCNPC_MOVE_TYPE_RUN);
            SetTimer("ResetDetectRange", 5000, false);
            break;
        }
        else if(IsPlayerInRangeOfPoint(zombieid, ZOMBIE_RANGE, xa, ya, za))
        {
            if(HumanFound[zombieid] == 2)
            {
                FCNPC_StopAttack(zombieid);
            }
            HumanFound[zombieid] = 1;
            FCNPC_GoToPlayerEx(zombieid, i, 5, 5, FCNPC_MOVE_TYPE_RUN);
            SetTimer("ResetDetectRange", 5000, false);
            break;
        }
        else if(IsPlayerInRangeOfPoint(zombieid, ZOMBIE_RANGE * 2 , xa, ya, za))
        {
            if(newkeys & KEY_SPRINT)
            {
                GetPlayerPos(zombieid, xa, ya, za);
                if(HumanFound[zombieid] == 2)
                {
                    FCNPC_StopAttack(zombieid);
                }
                HumanFound[zombieid] = 1;
                FCNPC_GoToPlayerEx(zombieid, i, 5, 5, FCNPC_MOVE_TYPE_RUN);
                SetTimer("ResetDetectRange", 5000, false);
                break;
            }
        }
        else if(IsPlayerInRangeOfPoint(zombieid,ZOMBIE_RANGE * 5, xa, ya, za))
        {
            if(GetPlayerWeapon(i) == 22 && GetPlayerWeapon(i) >= 23 && GetPlayerWeapon(i) <= 38)
            {
                GetPlayerPos(zombieid, xa, ya, za);
                if(HumanFound[zombieid] == 2)
                {
                    FCNPC_StopAttack(zombieid);
                }
                HumanFound[zombieid] = 1;
                FCNPC_GoToPlayerEx(zombieid, i, 5, 5, FCNPC_MOVE_TYPE_RUN);
                SetTimer("ResetDetectRange", 5000, false);
                break;
            }
        }
        else
        {
            HumanFound[zombieid] = 0;
            new Float:x, Float:y, Float:z;
            GetPlayerPos(zombieid, x, y, z);
            FCNPC_StopAttack(zombieid);
            if(HumanFound[zombieid] == 0)
            {
                new pos = random(4);
                if(pos == 0) { x = x + 100.0; }
                else if(pos == 1) { x = x - 100.0; }
                else if(pos == 2) { y = y + 100.0; }
                else if(pos == 3) { y = y - 100.0; }

                FCNPC_SetKeys(zombieid, 0, 0, 0);
                FCNPC_GoTo(zombieid, x, y, z, FCNPC_MOVE_TYPE_WALK);
            }
        }
    }
    return 1;
}



RE: Crash no pawn - xbruno1000x - 12/10/2021

https://github.com/pawn-lang/compiler

Use o Pawn Community Compiler. Ele resolve alguns problemas, inclusive esses crashs no pawno.


RE: Crash no pawn - DeathSync - 12/10/2021

Eu já tentei, o zeex da erro na include e os demais crasha


RE: Crash no pawn - xbruno1000x - 13/10/2021

"#include <YSI\y_timers>" foi inclusa no gamemode?


RE: Crash no pawn - DeathSync - 13/10/2021

Estou sim, pelo que vi o motivo é esse codigo, já procurei em todo FS, isolei cada parte, função etc, só não consigo identificar o erro.
Ví que ele tá gerando o amx, só que quando abro o servidor, me retorna esse log de crash do FCNPC

Código:
=========================== FCNPC Exception Handler ============================
Address: 0x401696

Registers:
EAX: 0x2d96900 - EBX: 0x4bbb68 - ECX: 0x0 - EDX: 0x64a884d8
ESI: 0x2d96900 - EDI: 0x19fdd8 - EBP: 0x19fdb8 - ESP: 0x19fd4c

Stack:
0x0: 0x401726 - 0x4: 0x2d96900 - 0x8: 0x19fd68 - 0xC: 0x19fdd8 - 0x10: 0x2d96900 - 0x14: 0x19fdb8
0x18: 0x4bbb68 - 0x1C: 0x19fd80 - 0x20: 0x43fffb0

Information:
  System: Windows
  SA-MP: 0.3.DL R1
  FCNPC: 2.0.3

Functions:
  FUNC_CPlayerPool__DeletePlayer: 0x466550
  FUNC_CPlayer__Kill: 0x485020
  FUNC_CPlayer__EnterVehicle: 0x485670
  FUNC_CPlayer__ExitVehicle: 0x485790
  FUNC_CPlayer__SpawnForWorld: 0x487730
  FUNC_GetVehicleModelInfo: 0x4892a0
  FUNC_CConsole__GetIntVariable: 0x490c80
  FUNC_ClientJoin_RPC: 0x497ef0

Pointers:
  VAR_ServerAuthentication: 0x4fc470
  VAR_NetVersion: 0xfde

Offsets:
  OFFSET_RemoteSystemManager: 0x33c
  OFFSET_RemoteSystemSize: 0xcb8
  OFFSET_RemoteSystem__ConnectMode: 0xcb0
  OFFSET_RemoteSystem__Unknown: 0xcb5

Callbacks:
  FUNC_CGameMode__OnPlayerGiveDamage: 0x46f050
  FUNC_CGameMode__OnPlayerTakeDamage: 0x46efd0
  FUNC_CGameMode__OnPlayerWeaponShot: 0x46f640
  FUNC_CGameMode__OnPlayerStreamIn: 0x46ebc0
  FUNC_CGameMode__OnPlayerStreamOut: 0x46ec30
  FUNC_CGameMode__OnGameModeExit: 0x46da90
=========================== FCNPC Exception Handler ============================


Agora reparei que o erro possivelmente está nessa parte

Código:
            /*if(HumanFound[zombieid] == 0)
            {
                new pos = random(4);
                if(pos == 0) { x = x + 100.0; }
                else if(pos == 1) { x = x - 100.0; }
                else if(pos == 2) { y = y + 100.0; }
                else if(pos == 3) { y = y - 100.0; }

                FCNPC_SetKeys(zombieid, 0, 0, 0);
                FCNPC_GoTo(zombieid, x, y, z, FCNPC_MOVE_TYPE_WALK);
            }*/

que me retorna 
Código:
pawno\include\fcnpc.inc(409) : error 001: expected token: "-identifier-", but found "("
pawno\include\fcnpc.inc(448) : warning 235: public function lacks forward declaration (symbol "fcnpc0_OnGameModeInit")
pawno\include\fcnpc.inc(450) : error 017: undefined symbol "Iter_Clear"
pawno\include\fcnpc.inc(450) : warning 215: expression has no effect
pawno\include\fcnpc.inc(450) : error 001: expected token: ";", but found ")"
pawno\include\fcnpc.inc(450) : error 029: invalid expression, assumed zero
pawno\include\fcnpc.inc(450) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664              Copyright (c) 1997-2006, ITB CompuPhase


5 Errors.



RE: Crash no pawn - k2bi_YT - 13/10/2021

Bom, dei uma olhada no seu code, pelo que eu entendi, sua funcao MoveZombie[100](zombieid, newkeys), no caso esse 'zombieid' se refere ao NPC? Caso seja isso, você não está usando corretamente as funções IsPlayerInRangeOfPoint & GetPlayerPos & GetPlayerSpecialAction

Porque essas funções se refere aos real players, caso use, por exemplo, GetPlayerSpecialAction(zombieid), ele ira usar o ID do zombieid como ID do Player Real:
Exemplo:
Código PHP:
MoveZombie[100](zombieidnewkeys)

// zombieid será o n°8 no caso... 

GetPlayerSpecialAction(zombieid//Ele ira pegar a ação do jogador ID:8 e não do NPC ID:8

//Uso Correto é:

FCNPC_GetSpecialAction(npcid

Espero que tenha compreendido. Talvez pode conter algum erro, porém já está sendo solucionado um bug que poderia atrapalhar por mal uso das funções.


RE: Crash no pawn - DeathSync - 13/10/2021

Não solucionou o problema, mas como você falou, já evita problemas futuros.


RE: Crash no pawn - k2bi_YT - 13/10/2021

Código PHP:
pawno\include\fcnpc.inc(409) : error 001expected token"-identifier-"but found "("
pawno\include\fcnpc.inc(448) : warning 235: public function lacks forward declaration (symbol "fcnpc0_OnGameModeInit")
pawno\include\fcnpc.inc(450) : error 017undefined symbol "Iter_Clear"
pawno\include\fcnpc.inc(450) : warning 215expression has no effect
pawno
\include\fcnpc.inc(450) : error 001expected token";"but found ")"
pawno\include\fcnpc.inc(450) : error 029invalid expressionassumed zero
pawno
\include\fcnpc.inc(450) : fatal error 107too many error messages on one line 
Isso é erro na include, tente atualizar ela

https://github.com/ziggi/FCNPC/releases/tag/v2.0.3


RE: Crash no pawn - DeathSync - 13/10/2021

Bom, não sei oque fiz, mas o erro sumiu e compilou de boas, mas com isso o FS tá desabilitando o textdrawn click kkkkkkkkkkkkk