GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: robyn59 le 09 Mai 2009, 21:15:41
-
Bonjour j'utilise un GM donc un amis ma passer et quand on meur , sa fait crash le jeu , d'où pourrait venir ce probleme ?
merci a ceux qui m'aiderons et bonne soiré
-
Salut,
il serait sans doute plus facile de t'aider si tu donnais le code de ta callback OnPlayerDeath
par expérience personnelle, il est possible que si tu as trop d'objets , à mes débuts j'avais une malheureuse tendance a mourrir à la fin d'un stunt et je crashais au moins 1 fois sur 2
++Sim++
-
Desoler je debute dans le script donc j'ai trouver ceci mais il avait rien d'autre, je ne sait pas si ses bon
public OnPlayerDeath(playerid, killerid, reason)
{
new name[MAX_PLAYER_NAME];
new string[256];
//new dmessage[128];
//new deathreason[20];
new playercash;
new victimteam;
new Float:px,Float:py,Float:pz;
new killerteam;
hospitalbill[playerid] = 1;
pizzajob[playerid] = 0;
cluckexit[playerid] = 0;
burgerexit[playerid] = 0;
storeexit[playerid] = 0;
gPlayerUsingLoopingAnim[playerid] = 0;
workingout[playerid] = 0;
GivePlayerPCash(killerid,100);
PlayerInfo[playerid][pSeatBelt] = 0;
victimteam = gTeam[playerid];
killerteam = gTeam[killerid];
gPlayerSpawned[playerid] = 0;
GetPlayerName(playerid, name, sizeof(name));
PlayerInfo[playerid][pLocal] = 255;
GetPlayerPos(playerid, px, py, pz);
if(killerid != 255)
{
if(GetPlayerState(killerid) == 2)
{
SendClientMessage(killerid, COLOR_YELLOW, "DriveBy Kill, n'en abusé pas, ou vous serait à pied $$$!");
return 1;
}
}
if(drivingtest[playerid] == 1 && drivingtestcheck[playerid] > 0)
{
SendClientMessage(playerid,RED,"Vous ètes Mort");
GameTextForPlayer(playerid, "~r~Mission Perdu", 5000, 3);
drivingtest[playerid] = 0;
drivingtestcheck[playerid] = 0;
drivingtesttime[playerid] = 0;
gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE;
DisablePlayerCheckpoint(playerid);
drivingtestfailed[playerid] = 1;
}
if(WantedLevel[playerid] > 0)
{
new dstring[128];
new wanted = WantedLevel[playerid];
new diecash = 0;
while(WantedLevel[playerid] > 0)
{
diecash += 10;
WantedLevel[playerid] --;
}
felon[playerid] = 0;
format(dstring, sizeof(dstring), "Tu a perdu $%d pour mourir avec %d Recherché Points.", diecash, wanted);
SendClientMessage(playerid, COLOR_YELLOW, dstring);
GivePlayerPCash(playerid, - diecash);
PlayerInfo[playerid][pWantedDeaths] += 1;
}
if(PlayerInfo[playerid][pHeadValue] >= 1 && PlayerInfo[killerid][pMember] == 8)
{
new sendername[MAX_PLAYER_NAME];
new playermoney = PlayerInfo[playerid][pHeadValue];
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "Vous avez terminé votre contrat:%s et a reçu $%d", sendername , playermoney);
SendClientMessage(killerid,COLOR_LIGHTBLUE,string);
GivePlayerPCash(killerid,playermoney);
GivePlayerPCash(playerid,-playermoney);
PlayerInfo[playerid][pHeadValue] = 0;
return 1;
}
if(PlayerInfo[killerid][pMember] != 1 && PlayerInfo[playerid][pMember] == 1)
{
WantedLevel[killerid] += 3;
SetPlayerCriminal(killerid,255, "Meurtre d'un agent de police");
felon[killerid] = 1;
SetPlayerColor(killerid,0xFF800096);
return 1;
}
if(PlayerInfo[killerid][pMember] != 1)
{
SetPlayerCriminal(killerid,255, "Meurtre au premier degré");
return 1;
}
if (gPlayerCheckpointStatus[playerid] > 4 && gPlayerCheckpointStatus[playerid] < 11)
{
DisablePlayerCheckpoint(playerid);
gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE;
}
new caller = Mobile[playerid];
if(caller != 255)
{
if(caller < 255)
{
SendClientMessage(caller, COLOR_GRAD2, " La ligne est coupé....");
CellTime[caller] = 0;
CellTime[playerid] = 0;
Mobile[caller] = 255;
}
Mobile[playerid] = 255;
CellTime[playerid] = 0;
}
ClearCrime(playerid);
if(PlayerPaintballing[playerid] != 0)
{
PlayerPaintballKills[killerid] ++;
if(PlayerPaintballKills[killerid] > PaintballWinnerKills)
{
new killer[MAX_PLAYER_NAME];
PaintballWinner = killerid;
PaintballWinnerKills = PlayerPaintballKills[killerid];
GetPlayerName(killerid, killer, sizeof(killer));
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerPaintballing != 0)
{
format(string, sizeof(string), "* %s est en tête avec %d Tue.",killer,PaintballWinnerKills);
SendClientMessage(i, COLOR_WHITE, string);
}
}
}
}
return 1;
}
if(GettingCK[playerid] < 999 || OnCK[playerid] < 999)
{
if(IsPlayerConnected(killerid))
{
if(GettingCK[killerid] < 999 || OnCK[playerid] < 999)
{
new killer[MAX_PLAYER_NAME];
new dier[MAX_PLAYER_NAME];
GetPlayerName(playerid, dier, sizeof(dier));
GetPlayerName(killerid, killer, sizeof(killer));
format(string, sizeof(string), "* %s a joué un Caractère Tuent sur vous, vous n'êtes pas capables de jouer avec ce Caractère.",killer);
SendClientMessage(playerid, COLOR_LIGHTRED, string);
format(string, sizeof(string), "** %s a tué le caractère de %s **",killer,dier);
CKLog(string);
PlayerInfo[playerid][pCK] = 1;
if(GettingCK[playerid] < 999) { GettingCK[playerid] = 999; }
else if(OnCK[playerid] < 999) { OnCK[playerid] = 999; }
if(GettingCK[killerid] < 999) { GettingCK[killerid] = 999; }
else if(OnCK[killerid] < 999) { OnCK[killerid] = 999; }
KickPlayer[playerid] = 1;
}
}
}
if(PlayerInfo[playerid][pHeadValue] > 0)
{
if(IsPlayerConnected(killerid))
{
if(gTeam[killerid] == 1 || PlayerInfo[killerid][pLeader] == 8)
{
if(GoChase[killerid] == playerid)
{
ConsumingMoney[killerid] = 1;
new killer[MAX_PLAYER_NAME];
GetPlayerName(killerid, killer, sizeof(killer));
GivePlayerPCash(killerid, PlayerInfo[playerid][pHeadValue]);
format(string,128,"<< Le Hitman %s a réalisé le contrat sur %s et s'est accumulé $%d>>",killer,name,PlayerInfo[playerid][pHeadValue]);
SendFamilyMessage(8, COLOR_YELLOW, string);
PlayerInfo[playerid][pHeadValue] = 0;
GotHit[playerid] = 0;
GetChased[playerid] = 999;
GoChase[killerid] = 999;
}
}
}
}
if(victimteam >= 4)
{
if(IsPlayerConnected(killerid))
{
//new killer[MAX_PLAYER_NAME];
//GetPlayerName(killerid, killer, sizeof(killer));
new slice = 100; //$100
playercash = GetPlayerPCash(playerid);
if(PlayerInfo[killerid][pMember] != 1 ) { WantedLevel[killerid] += 2; } //+ 2 wanted points
if(SafeTime[playerid] <= 0)
{
if(gTeam[killerid] != gTeam[playerid])
{
if(GetPlayerState(killerid) == 1)
{
PlayerInfo[killerid][pKills] = PlayerInfo[killerid][pKills] + 2;
}
else
{
PlayerInfo[killerid][pKills]++;
}
PlayerInfo[playerid][pKills]--;
}
}
/*if (strlen(deathreason) > 0)// patch
{
if (((gTeam[killerid]) == 1) || ((gTeam[killerid]) == 3 && civnokill) || gTeam[killerid] == gTeam[playerid])//med kill criminal
{
format(string, sizeof(string), ".: %s murdered %s. (%s) :.", killer, name, deathreason);
}
else
{
format(string, sizeof(string), ".: %s murdered %s. (%s) for $%d :.", killer, name, deathreason, slice);
}
}
else
{
if (((gTeam[killerid]) == 1) || ((gTeam[killerid]) == 3 && civnokill || gTeam[killerid] == gTeam[playerid]))
{
format(string, sizeof(string), ".: %s murdered %s :.", killer, name);
}
else
{
format(string, sizeof(string), ".: %s murdered %s for $%d :.", killer, name, slice);
}
}*/
if (((gTeam[killerid]) == 1) || ((gTeam[killerid]) == 3 && civnokill) || (gTeam[killerid] == gTeam[playerid] && gTeam[playerid] != 4))
{
slice = 0;
}
if (((gTeam[killerid]) != 4) && ((gTeam[killerid]) == gTeam[playerid]))//no team kill
{
slice = 0;
}
if (playercash > 0)
{
GivePlayerPCash(playerid, -slice);
}
else
{
slice = slice+500;
}
GivePlayerPCash(killerid, slice);
//GameTextForPlayer(playerid, dmessage, 5000, 2);
PlayerPlaySound(killerid, 1083, 0.0, 0.0, 0.0);
if (reason == 49)
{
SetPlayerCriminal(killerid,255, "Coup et Fuite");
}
}
}
else if (victimteam == 2)
{
if(IsPlayerConnected(killerid))
{
//new killer[MAX_PLAYER_NAME];
//GetPlayerName(killerid, killer, sizeof(killer));
// Cop kill
PlayerInfo[playerid][pKills]--;
if (gTeam[killerid] == 2)//cops kill cop
{
//format(string,128,".: Officer %s murdered Officer %s (%s) and was sued for $%d :.",killer,name,deathreason,suecost);
PlayerPlaySound(killerid, 1084, 0.0, 0.0, 0.0);
GivePlayerPCash(killerid, -suecost);
GivePlayerPCash(playerid, suecost+100);//+100pays hospital bill
}
else
{
//format(string,128,".: %s murdered Officer %s (%s) :.",killer,name,deathreason);
}
if(gTeam[killerid] >= 5 && SafeTime[playerid] <= 0)
{
if(GetPlayerState(killerid) == 1)
{
PlayerInfo[killerid][pKills] = PlayerInfo[killerid][pKills]+2;
}
else
{
PlayerInfo[killerid][pKills]++;
}
WantedLevel[killerid]+=2;
}
//BroadCast(COLOR_RED, string);
}
}
else if (victimteam == 3)
{
if(IsPlayerConnected(killerid))
{
//new killer[MAX_PLAYER_NAME];
//GetPlayerName(killerid, killer, sizeof(killer));
// Civ kill
if ((gTeam[killerid]) == 2)//cops kill civ
{
if(WantedLevel[playerid] < 1)
{
//format(string,128,".: Officer %s murdered %s (%s) and was sued for $%d :.",killer,name,deathreason,suecost);
PlayerPlaySound(killerid, 1084, 0.0, 0.0, 0.0);
GivePlayerPCash(killerid, -suecost);
GivePlayerPCash(playerid, suecost+100);//+100pays hospital bill
}
}
else
{
//format(string,128,".: %s murdered %s (%s) :.",killer,name,deathreason);
WantedLevel[killerid] += 2;
}
//BroadCast(COLOR_RED, string);
}
}
else if (victimteam == 1)
{
if(IsPlayerConnected(killerid))
{
//new killer[MAX_PLAYER_NAME];
//GetPlayerName(killerid, killer, sizeof(killer));
// Civ kill
if ((gTeam[killerid]) == 2)//cops kill civ
{
//format(string,128,".: Officer %s murdered Paramedic %s (%s) and was sued for $%d :.",killer,name,deathreason,suecost);
PlayerPlaySound(killerid, 1084, 0.0, 0.0, 0.0);
GivePlayerPCash(killerid, -suecost);
GivePlayerPCash(playerid, suecost+100);//+100pays hospital bill
}
else if ((gTeam[killerid]) == 1)//med kill civ
{
//format(string,128,".: Paramedic %s murdered %s (%s) and was sued for $%d :.",killer,name,deathreason,suecost);
PlayerPlaySound(killerid, 1084, 0.0, 0.0, 0.0);
GivePlayerPCash(killerid, -suecost);
GivePlayerPCash(playerid, suecost+100);//+100pays hospital bill
}
else
{
//format(string,128,".: %s murdered %s (%s) :.",killer,name,deathreason);
}
//BroadCast(COLOR_RED, string);
}
}
if (victimteam >= 3 && WantedLevel[playerid] > 0 && killerteam == 2)
{
SetPlayerFree(playerid,killerid, "Got Killed");
}
killerid = INVALID_PLAYER_ID;
SetPlayerColor(playerid,COLOR_GRAD2);
return 1;
}
-
Regarde si tu as dans OnGameModeInit des CreateObject, sa peut faire crasher si tu en as beaucoup.
-
non j'en ai meme pas 200
-
La limitte est d'environ 100-150 pour pas crasher.