Ayuda en OnPlayerDeath
#1

Bueno Hola Amigos Ya e estado con estos problema Ultimamente xD y bueno pues creo que ya e posteado problemas como estos no? pero bueno esta vez es otra cosa y la verdad ando confundio :/ no se que es

el problema es en el OnPlayerDeath.. al momento que me matan o pongo /kill me sale esto en el Server_log o en el registro..

Quote:

06:41:02] [debug] Run time error 4: "Array index out of bounds"
[06:41:02] [debug] Accessing element at index 65535 past array upper bound 499
[06:41:02] [debug] AMX backtrace:
[06:41:02] [debug] #0 00054f64 in public OnPlayerDeath () from sadmin.amx
[06:41:02] [death] ]SOB[_Ricardo died 255

Aqui les dejo las lineas del OnPlayerDeath PD: el sadmin es el sistema de adminstraciуn...

pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
//----------------------------- [ anti fake kill ] ---------------------------//
    antifakekill[playerid] ++;
    SetTimerEx("antifakekill2", 1000,false,"i",playerid);
//-------------------------- [ bomba nuclear vip ] ---------------------------//
    if(BuscadoPorNuclear[playerid]==1)
    {
        HanDesactivadaoLaBomba[playerid]=1;
    }
//---------------------------------- [ configuracion ] -----------------------//
    BoCmd4[playerid] = 0;
    BoCmd5[playerid] = 0;
    TextDrawHideForPlayer(playerid,HAYTD[playerid]);
    JoinedHay[playerid] = 0;
    modoheno[playerid] = 0;
    scoreheno[playerid] = 0;
    tiempohen[playerid] = 0;
//--------------------------- [ evento ] -------------------------------------//
    if(TaNoEvento[playerid])
    {
        TaNoEvento[playerid] = false;
    }
    if(GetVehicleModel(Cars[playerid]))
    {
        DestroyVehicle(Cars[playerid]);
    }
//------------------------------ [ aquaman ] ---------------------------------//
    new strs[128];
    if(Minigamer_{playerid} == true)
    {
        if(inProgress > 1)
        {
            format(strs,sizeof(strs),"*"VERDECLARO"%s "BLAN"ha abandonado "ROJOS"aquaman"AZULES" minijuego, "ROJOS"clasificar %d",PlayerName2(playerid),Iter_Count(_Minigamer));
            SendClientMessageToAll(LIME,strs);
            Iter_Remove(_Minigamer,playerid);
            Minigamer_{playerid} = false;
            if(Iter_Count(_Minigamer) < 2)
            {
                foreach(_Minigamer,i)MinigameWinner(i);
            }
        }
        else
        {
            SendClientMessage(playerid,LIME,""BLAN"Tu entrada para "ROJOS"aquaman"BLAN" minijuego ha sido cancelada." );
            Iter_Remove(_Minigamer,playerid);
            Minigamer_{playerid} = false;
        }
    }
//------------------------------- [ lspec ] ----------------------------------//
    for(new x=0; x<MAX_PLAYERS; x++)
        if(GetPlayerState(x) == PLAYER_STATE_SPECTATING && PlayerInfo[x][SpecID] == playerid)
           AdvanceSpectate(x);
//------------------------------- [ flecha ] ---------------------------------//
    if(Empezado == 1)
    {
        if(killerid != INVALID_PLAYER_ID && playerid == Portador)
        {
            AttachObjectToPlayer(Flecha, killerid, 0, 0, 2, 0, 0, 0);
            Portador = killerid;
            GameTextForPlayer(killerid,"~g~~H~GANASTE ~w~20 DE SCORE ~g~POR MATAR~n~~w~AL PORTADOR DE LA FLECHA", 3000, 3);

            SetPlayerScore(killerid,GetPlayerScore(killerid)+20);
            PlayerInfo[killerid][Kills] = GetPlayerScore(killerid);
        }
        else if(killerid == INVALID_PLAYER_ID && playerid == Portador)
        {
            Suplantar();
        }
    }
//------------------------- [ carreras ] -------------------------------------//
    if(Joined[playerid] == true)
    {
        JoinCount--;
        Joined[playerid] = false;
        DestroyVehicle(CreatedRaceVeh[playerid]);
        DisablePlayerRaceCheckpoint(playerid);
        TextDrawHideForPlayer(playerid, RaceInfo[playerid]);
        TextDrawHideForPlayer(playerid, abandonar[playerid]);
        CPProgess[playerid] = 0;
        franco[playerid][tirador] = 1;
        BoCmd[playerid] = 0;
        KillTimer(InfoTimer[playerid]);
        #if defined RACE_IN_OTHER_WORLD
        SetPlayerVirtualWorld(playerid, 0);
        #endif
    }
    if(BuildRace == playerid+1) BuildRace = 0;
//------------------------------- [ duelos ] ---------------------------------//
    if (EnDuelo[playerid] == 1 && EnDuelo[killerid] == 1)
    {
      for (new i=1; i<= ARENAS; i++)
      {
         if ((Duelos[i][DesaId] == playerid || Duelos[i][DesaId] == killerid) && (Duelos[i][DesafiadoId] == playerid) || (Duelos[i][DesafiadoId] == killerid))
         {
             new str0[128];
             format(str0,sizeof(str0),"[INFO]: Haz perdido el duelo contra %s",PlayerName2(killerid));
             SendClientMessage(playerid,COLOR_DUELO,str0);
             format(str0,sizeof(str0),"[INFO]: Haz ganado elduelo contra %s",PlayerName2(playerid));
             SendClientMessage(killerid,COLOR_DUELO,str0);
             SendClientMessage(killerid,COLOR_DUELO,"[INFO]: Ahora estas en las graderias, para volver a tener un duelo usa /duelo invitar.");
             EnDuelo[playerid] = 0;
             EnDuelo[killerid] = 0;
             BoCmd2[playerid] = 0;
             BoCmd2[killerid] = 0;
             PlayerInfo[playerid][Bloqueado] = 0;
             PlayerInfo[killerid][Bloqueado] = 0;
             PlayerInfo[killerid][Dwin] ++;
             PlayerInfo[playerid][Dlose] ++;
             Duelos[i][DesafiadoId] = -1;
             Duelos[i][DesaId] = -1;
             Duelos[i][ArmasId] = -1;
             Duelos[i][Libre] = 0;
             ShowInformationTxt(killerid);
             ShowInformationTxt(playerid);
             switch (i)
             {
               case 1: {
                       SetPlayerPos(killerid,2626.5664,1206.4237,28.0004);
                       SetPlayerFacingAngle(killerid,274.9405);
                       SetPlayerVirtualWorld(killerid, 0);
                       }
               case 2: {
                       SetPlayerPos(killerid,-1562.8058,310.9799,53.4609);
                       SetPlayerFacingAngle(killerid,278.5559);
                       SetPlayerVirtualWorld(killerid, 0);
                       }
               case 3: {
                       SetPlayerPos(killerid,-2030.9362,-425.7924,71.554);
                       SetPlayerFacingAngle(killerid,145.0746);
                       SetPlayerVirtualWorld(killerid, 0);
                       GivePlayerWeapon(playerid,46,1);
                       }
               case 4: {
                       SetPlayerPos(killerid,2792.4976,-1455.7574,40.048);
                       SetPlayerFacingAngle(killerid,353.4433);
                       SetPlayerVirtualWorld(killerid, 0);
                       }
             }
             for (new j=0; j< MAX_PLAYERS; j++)
             {
                if (ViendoDuelo[j] == i)
                {
                   new str20[256];
                   format(str20,sizeof(str20),"~r~%s ~w~es el ganador del duelo",PlayerName2(killerid));
                   GameTextForPlayer(j,str20,5000,0);
                   ViendoDuelo[j] =-1;
                   SetPlayerVirtualWorld(j, 0);
                }
             }
             return 1;
         }
      }
    }
    if (EnDuelo[playerid] == 1 && EnDuelo[killerid] == 0)
    {
    }
//--------------------------------- [ hitman ] -------------------------------//
    new playercash;
    new ajustshit[256];
    new killedplayer[MAX_PLAYER_NAME];
    if(killerid == INVALID_PLAYER_ID)
    {
    }
    else
    {
        if(bounty[playerid] > 0)
        {
            GetPlayerName(playerid, killedplayer, sizeof(killedplayer));
            format(ajustshit, sizeof(ajustshit), "Has recibido una recompensa de %d de score por matar a %s.", bounty[playerid], killedplayer);
            SendClientMessage(killerid, COLOR_YELLOW, ajustshit);

            SetPlayerScore(killerid,GetPlayerScore(killerid)+bounty[playerid]);
            PlayerInfo[killerid][Kills] = GetPlayerScore(killerid);
            if(PlayerInfo[killerid][LoggedIn] == 1)
            {
                GuardarDatos(killerid);
                SetPlayerVip(killerid);
                SetPlayerVip2(killerid);
            }
            ShowInformationTxt(killerid);

            bounty[playerid] = 0;
        }
        if(playercash > 0)
        {
            SetPlayerScore(killerid,GetPlayerScore(killerid)+playercash);
            PlayerInfo[killerid][Kills] = GetPlayerScore(killerid);
            if(PlayerInfo[killerid][LoggedIn] == 1)
            {
                GuardarDatos(killerid);
                SetPlayerVip(killerid);
                SetPlayerVip2(killerid);
            }
            ShowInformationTxt(killerid);
        }
    }

    if(playercash > 0)
    {
        ResetPlayerMoney(playerid);
    }
//------------------------------- [ stats ] ----------------------------------//
    SetPlayerScore(killerid,GetPlayerScore(killerid)+1);
    PlayerInfo[killerid][Kills] = GetPlayerScore(killerid);
   
    PlayerInfo[playerid][Deaths]++;
       
    if(IsPlayerConnected(killerid) && killerid != INVALID_PLAYER_ID)
    {
        if(GetPlayerWeapon(killerid) == 34){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+5;}
        if(GetPlayerWeapon(killerid) == 33){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+4;}
        if(GetPlayerWeapon(killerid) == 32){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+2;}
        if(GetPlayerWeapon(killerid) == 30){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+3;}
        if(GetPlayerWeapon(killerid) == 31){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+3;}
        if(GetPlayerWeapon(killerid) == 29){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+3;}
        if(GetPlayerWeapon(killerid) == 28){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+2;}
        if(GetPlayerWeapon(killerid) == 27){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+4;}
        if(GetPlayerWeapon(killerid) == 26){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+2;}
        if(GetPlayerWeapon(killerid) == 25){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+5;}
        if(GetPlayerWeapon(killerid) == 24){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+4;}
        if(GetPlayerWeapon(killerid) == 23){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+3;}
        if(GetPlayerWeapon(killerid) == 22){PlayerInfo[killerid][Experiencia]=PlayerInfo[killerid][Experiencia]+3;}
    }
   
    ShowInformationTxt(playerid);
    ShowInformationTxt(killerid);
   
    if(PlayerInfo[playerid][LoggedIn] == 1)
    {
        GuardarDatos(playerid);
        SetPlayerVip(playerid);
        SetPlayerVip2(playerid);
    }
   
    if(PlayerInfo[killerid][LoggedIn] == 1)
    {
        GuardarDatos(killerid);
        SetPlayerVip(killerid);
        SetPlayerVip2(killerid);
    }
    return 1;
}
Espero solucionar esto D: gracias n.n saludos a todos!!
Reply
#2

Es demasiado codigo, y dudo mucho que te hayas tomado el trabajo de debuguearlo. Te sugiero eliminar (comentar) secciones completas del codigo hasta que deje de crashear. Luego tendras un rango de lineas entre las cuales buscar y te sera mucho mas facil ver el error.

Nota: Como declaraste "Minigamer_" ?
Reply
#3

Quote:
Originally Posted by the_chaoz
Посмотреть сообщение
Es demasiado codigo, y dudo mucho que te hayas tomado el trabajo de debuguearlo. Te sugiero eliminar (comentar) secciones completas del codigo hasta que deje de crashear. Luego tendras un rango de lineas entre las cuales buscar y te sera mucho mas facil ver el error.

Nota: Como declaraste "Minigamer_" ?
ok n.n estare en eso... el Minigamer es un minijego de notemojes o aquaman..

me ayudas en otra cosa para no hacer otro post.. xD

bueno queria decirte si me puedes ayudar puse el minijuego Horafeliz un minijuego de guerra al momento de activarlo puedes sacar autos de guerra, y bueno cuando lo desactiva se te desparece el hydra hunter ect... bueno yo tengo hydra rhino hunter en el area51 como hago que cuando el minijuego este desactivado al momento de que un player entre a el vehiculo de guerra lo saque hasta que un admin o yo active el minijuego de nuevo??... thx
Reply
#4

Me referia a la declaracion de dicho array, no a lo que representa.

Y a tu segundo problema:

Metodo 1:
pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(!HoraFeliz && (newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER))//HoraFeliz representa la variable/array que estara en false o 0 si el evento no esta activo.
        new model = GetVehicleModel(GetPlayerVehicleID(playerid));

        switch(model)
        {
            case 425, 432, 520:
            {
                RemovePlayerFromVehicle(playerid);
                SendClientMessage(playerid, -1, "Este vehiculo solo puede ser utilizado dentro de la hora feliz");
            }
        }
    }
    return 1;
}
Nota: Tambien puedes hacer otro metodo, el cual seria mas eficiente mediante la funcion SetVehicleParamsForPlayer.
Reply
#5

Quote:
Originally Posted by the_chaoz
Посмотреть сообщение
Me referia a la declaracion de dicho array, no a lo que representa.

Y a tu segundo problema:

Metodo 1:
pawn Код:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(!HoraFeliz && (newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER))//HoraFeliz representa la variable/array que estara en false o 0 si el evento no esta activo.
        new model = GetVehicleModel(GetPlayerVehicleID(playerid));

        switch(model)
        {
            case 425, 432, 520:
            {
                RemovePlayerFromVehicle(playerid);
                SendClientMessage(playerid, -1, "Este vehiculo solo puede ser utilizado dentro de la hora feliz");
            }
        }
    }
    return 1;
}
Nota: Tambien puedes hacer otro metodo, el cual seria mas eficiente mediante la funcion SetVehicleParamsForPlayer.
mmm... lo agrege pero no me quiere copilar !!!
Reply
#6

Quote:
Originally Posted by !R1Ch@rD!
Посмотреть сообщение
mmm... lo agrege pero no me quiere copilar !!!
Tienes que definir HoraFeliz fuera de cualquier callback y agregar un comando para activar y desactivar la hora feliz

pawn Код:
new HoraFeliz;
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(strcmp(cmdtext, "/horafeliz", true) == 0)
    {
        HoraFeliz = (HoraFeliz == 1)?(0):(1);
        SendClientMessage(playerid, -1, (HoraFeliz == 1)?("Activaste la hora felнz"):("Desactivaste la hora felнz"));
        return 1;
    }
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)