GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: vardanega le 06 Avril 2010, 20:30:43

Titre: Problème de Callback ?
Posté par: vardanega le 06 Avril 2010, 20:30:43
Bonsoir, actuellement j'ai un petit problème avec ma callback qui avant fonctionnais mais maintenant on dirais que le code ne s'exécute plus, pourtant aucune erreur n'est a prendre en compte sur ce code.

public OnPlayerDeath(playerid, killerid, reason)
{
if(gTeam[killerid] == 1)
{
new Float:X, Float:Y, Float:Z;
new pName[MAX_PLAYER_NAME], string[48];
SetPlayerInterior(playerid,0);
SetPlayerColor(playerid,COLOR_ZOMBIE);
SetPlayerTeam(playerid,1);
gTeam[playerid] = 1;
SetPlayerHealth(playerid, 200);
GivePlayerWeapon(playerid, 9, 9999);
GetPlayerName(playerid, pName, sizeof(pName));
SetPlayerScore(killerid,GetPlayerScore(killerid)+1);
SendDeathMessage(killerid,playerid,reason);
/*GetPlayerPos(killerid,X,Y,Z);
SetPlayerPos(playerid,X+2,Y,Z);*/
}
  if(gTeam[killerid] == 0)
{
gTeam[playerid] = 1;
GivePlayerMoney(playerid,2500);
SetPlayerScore(killerid,GetPlayerScore(playerid)+1);
}
if(gTeam[playerid] == 1)
{
new pName[MAX_PLAYER_NAME], string[48];
SetPlayerInterior(playerid,0);
SetPlayerColor(playerid,COLOR_ZOMBIE);
SetPlayerTeam(playerid,1);
gTeam[playerid] = 1;
SetPlayerHealth(playerid, 200);
GivePlayerWeapon(playerid, 9, 9999);
GetPlayerName(playerid, pName, sizeof(pName));
SendDeathMessage(killerid,playerid,reason);
}
if(Infected[playerid] == 1)
{
new Float:X, Float:Y, Float:Z;
new pName[MAX_PLAYER_NAME], string[48];
SetPlayerInterior(playerid,0);
SetPlayerColor(playerid,COLOR_ZOMBIE);
SetPlayerTeam(playerid,1);
gTeam[playerid] = 1;
SetPlayerHealth(playerid, 200);
GivePlayerWeapon(playerid, 9, 9999);
GetPlayerName(playerid, pName, sizeof(pName));
SetPlayerScore(killerid,GetPlayerScore(killerid)+1);
SendDeathMessage(killerid,playerid,reason);
/*GetPlayerPos(killerid,X,Y,Z);
SetPlayerPos(playerid,X+2,Y,Z);*/
}
return 1;
}

Merci pour votre aide a venir, je ne suis pas tres doué en code.
Titre: Re : Problème de Callback ?
Posté par: FuSion le 06 Avril 2010, 20:38:47
Tes codes, il ne faut la mettre au moment ou le joueur meurt mais au moment ou le joueur spawn et donc dans la callback: OnPlayerSpawn  ;)
Titre: Re : Problème de Callback ?
Posté par: vardanega le 06 Avril 2010, 20:45:24
Merci, oui vous avez entièrement raison ma logique est mauvaise !, en tout cas merci beaucoup !

Une petite question, Est il possible utilisé les killerid dans une autre callback que OnPlayerDeath ?

Merci
Titre: Re : Problème de Callback ?
Posté par: FuSion le 06 Avril 2010, 22:28:37
Si la callback(OnVehicleDeath, OnPlayerDeath, ...) accepte cette valeur, oui cependant dans d'autres callbacks(OnPlayerSpawn, OnPlayerConnect) ne l'acceptent pas a part si tu renvoie le killerid sur une variable, en C++ c'est faisable mais j'ignore si c'est possible en pawn.
Titre: Re : Problème de Callback ?
Posté par: cristab le 06 Avril 2010, 22:55:55
c'est possible en PWN

new Killer=INVALID_PLAYER_ID;


dans la callback OnPLayerDeath

Killer=Killerid;


voila il te resteras plus qu'a utiliser la var Killer par contre une fois utiliser pense a remettre Killer=INVALID_PLAYER_ID;

Pas tester mais de memoire sa doit etre cela
Titre: Re : Problème de Callback ?
Posté par: Syg le 06 Avril 2010, 23:09:01
Il est plus prudent de faire un tableau :
KillerId[MAX_PLAYERS];
Et dans OnPlayerDeath de faire :
KillerId[playerid] = killerid;
Sinon, il n'y aura qu'un seul killerid pour tout les kill et si deux kill se produisent en même temps, le killerid du deuxième écrasera celui du premier.

++
Syg
Titre: Re : Problème de Callback ?
Posté par: vardanega le 07 Avril 2010, 21:01:36
Merci je vais essayé comme cela.