SA-MP Forums Archive
Duda - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Duda (/showthread.php?tid=359412)



Duda - Lorkm - 13.07.2012

їComo puedo hacer que cuando un NPC crashee acceda inmediatamente?
їPor que crashean los npcs?


Respuesta: Duda - Bu11Sh0t - 14.07.2012

1. Puedes usar Kick(); para que se crashee. Es lo unico que se me ocurre
2. Generalmente crashean porque no existe el archivo .rec en servidor/npcmodes/recordings y no existe el archivo .amx en servidor/npcmodes. Tambien puede causarse a que tu servidor tiene un sistema de registro y logueo, y como el NPC no escribe contraseсas ni nada lo kickea.
En caso de ser el registro, puedes agregar a cada callback (OnPlayerConnect, OnPlayerRequestClass, OnPlayerRequestSpawn, OnPlayerSpawn, etc..) un
pawn Код:
if(IsPlayerNPC(playerid)) return 1;



Re: Duda - Lorkm - 14.07.2012

Muchas gracias por responder, lo primero quizбs no me explique bien.

Necesito que cuando un npc entre a mi servidor y en caso de que crashee, reingrese automaticamente


Respuesta: Duda - Bu11Sh0t - 14.07.2012

Lo siento, no leн muy bien. Puedes hacer un timer que detecte si el player este conectado, si no lo conecte:

pawn Код:
public OnGameModeInit()
{
    ConnectNPC("BotName", "BotFile");
    SetTimer("Server", 1000, 1);
    return 1;
}

forward Server();
public Server()
{
    new i = GetPlayerIDFromName("BotName");
    if(!IsPlayerConnected(i)) ConnectNPC("BotName", "BotFile");
}
La funcion GetPlayerIDFromName esta en el archivo FSDebug (creo) de no ser asi aqui lo dejo:
pawn Код:
stock GetPlayerIDFromName(const playername[], partofname=0)
{
    new i;
    new playername1[64];
    for (i=0;i<MAX_PLAYERS;i++)
    {
        if (IsPlayerConnected(i))
        {
            GetPlayerName(i,playername1,sizeof(playername1));
            if (strcmp(playername1,playername,true)==0)
            {
                return i;
            }
        }
    }
    new correctsigns_userid=-1;
    new tmpuname[128];
    new hasmultiple=-1;
    if(partofname)
    {
        for (i=0;i<MAX_PLAYERS;i++)
        {
            if (IsPlayerConnected(i))
            {
                GetPlayerName(i,tmpuname,sizeof(tmpuname));

                if(!strfind(tmpuname,playername1[partofname],true, 0))
                {
                    hasmultiple++;
                    correctsigns_userid=i;
                }
                if (hasmultiple>0)
                {
                    return -2;
                }
            }
        }
    }
    return correctsigns_userid;
}



Respuesta: Duda - iKeN - 14.07.2012

No se necesita crear un timer solo chequear si el npc a sido desconectado.
pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
     if( !reason && IsPlayerNPC(playerid) )
     {
          ConnectNPC("Bot", "recScript");
     }
     return 1;
}