Bueno, el problema que tengo con este script consiste en que por ejemplo (NO SIEMPRE), moris.. y spawneas donde habias logueado en vez de ser enviado al Hospital (ACLARACIУN: Si sos matado por armas SI apareces en el hospital, si te moris por el mundo o algo por el estilo apareces en donde logueaste)
pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
new string[128];
new name[MAX_PLAYER_NAME];
new name2[MAX_PLAYER_NAME];
new deathreason[20];
GetPlayerName(playerid, name, sizeof(name));
GetPlayerName(killerid, name2, sizeof(name2));
if(killerid != INVALID_PLAYER_ID)
{
if(reason == 0) { deathreason = "Melee"; }
else if(reason == 36 || reason == 35 || reason == 40 || reason == 16) { deathreason = "Explosion"; }
else if(reason == 18 || reason == 37) { deathreason = "Fire"; }
else if(reason == 51) { deathreason = "Explosion"; }
else if(reason == 50) { deathreason = "Heli-Kill"; }
else { GetWeaponName(reason, deathreason, sizeof(deathreason)); }
format(string, sizeof(string),"[INFO]: %s (%d) ha sido asesinado por %s (%d) - %s", name,playerid,name2,killerid,deathreason);
SendAdminMessage(COLOR_GREEN, string);
}
else
{
new text[30];
if(reason == 51) { text = "Explosion"; }
else if(reason == 53) { text = "Drowned"; }
else if(reason == 54) { text = "Collision"; }
else { text = "Death"; }
format(string, sizeof(string),"[INFO]: %s (%d) ha sido asesinado por el Servidor. (%s)",name,playerid, text);
SendAdminMessage(COLOR_GREEN, string);
}
new playercash;
new victimteam = gTeam[playerid];
new Float:px,Float:py,Float:pz;
new killerteam = gTeam[killerid];
ScriptMoneyUpdated[playerid] = 1;
TextDrawHideForPlayer(playerid, Textdraw39[playerid]);
TextDrawHideForPlayer(playerid, Textdraw40[playerid]);
gPlayerSpawned[playerid] = 0;
if(PlayerInfo[playerid][pAdminDuty] >= 1) { PlayerInfo[playerid][pAdminDuty] = 0; }
GetPlayerPos(playerid, px, py, pz);
if (PlayerInfo[killerid][pAchievement9] == 0 && PlayerInfo[killerid][pKills] == 1)
{
ShowPlayerDialog(killerid,509,DIALOG_STYLE_MSGBOX,"Logro: Asesino Novato (9)","Felicidades haz desbloqueado el logro 'Asesino Novato' \n Haz Ganado 100$","Okay","Cancelar");
SafeGivePlayerMoney(killerid,100);
PlayerInfo[killerid][pAchievement9] = 1;
}
if (PlayerInfo[killerid][pAchievement10] == 0 && PlayerInfo[killerid][pKills] == 75)
{
ShowPlayerDialog(killerid,510,DIALOG_STYLE_MSGBOX,"Logro: Asesino Serial (10)","Felicidades haz desbloqueado el logro 'Asesino Serial' \n Haz ganado 250$","Okay","Cancelar");
SafeGivePlayerMoney(killerid,250);
PlayerInfo[killerid][pAchievement10] = 1;
}
if (PlayerInfo[killerid][pAchievement11] == 0 && PlayerInfo[killerid][pKills] == 150)
{
ShowPlayerDialog(killerid,511,DIALOG_STYLE_MSGBOX,"Logro: Asesino (11)","Felicidades haz desbloqueado el logro 'Asesino' \n Haz ganado 500$","Okay","Cancelar");
SafeGivePlayerMoney(killerid,500);
PlayerInfo[killerid][pAchievement11] = 1;
}
if(gPlayerUsingLoopingAnim[playerid])
{
gPlayerUsingLoopingAnim[playerid] = 0;
TextDrawHideForPlayer(playerid,txtAnimHelper);
}
if(WantedPoints[playerid] > 0)
{
new dstring[128];
new wanted = WantedPoints[playerid];
new diecash = 0;
while(WantedPoints[playerid] > 0)
{
diecash += 500;
WantedPoints[playerid] --;
}
format(dstring, sizeof(dstring), "Haz perdido $%d por morir con %d Puntos de busqueda.", diecash, wanted);
SendClientMessage(playerid, COLOR_YELLOW, dstring);
SafeGivePlayerMoney(playerid, - diecash);
PlayerInfo[playerid][pWantedDeaths] += 1;
}
if(PlayerOnMission[playerid] > 0)
{
GameTextForPlayer(playerid, "~r~Mision fallida.", 5000, 3);
PlayerOnMission[playerid] = 0;
PlayerInfo[playerid][pMissionNr] = 0;
}
WantedPoints[playerid] = 0;
WantedLevel[playerid] = 0;
if(PlayerInfo[playerid][pRegularRank] > 0) { SetPlayerHealth(playerid, 100.0); }
else { SetPlayerHealth(playerid, 50.0+PlayerInfo[playerid][pSHealth]); }
MedicBill[playerid] = 1;
gPlayerSpawned[playerid] = 1;
SafeTime[playerid] = 60;
Checked[playerid] = 1;
PlayerGotSpottedRecently[playerid] = 1;
SetTimerEx("ResetAcWarn",20000,false, "i", playerid);
if(killerid != 255)
{
if(GetPlayerState(killerid) == 2)
{
if(ProxDetectorS(20, killerid, playerid))
{
if(!IsPlayerInAnyVehicle(playerid))
{
if(PlayerInfo[killerid][pMember] == 1||PlayerInfo[killerid][pLeader] == 1||PlayerInfo[killerid][pMember] == 2||PlayerInfo[killerid][pLeader] ==2)
{
SendClientMessage(killerid, COLOR_YELLOW, "Ese fue un drive-by. No abuse de el.");
return 1;
}
SetPlayerCriminal(killerid,255,"Manslaughter");
return 1;
}
}
}
}
if (reason == 22)
{
if (PlayerInfo[killerid][pPistSkill] >= 0 && PlayerInfo[killerid][pPistSkill] <= 1000)
{
PlayerInfo[killerid][pPistSkill] += 2;
SetPlayerSkills(killerid);
}
}
if (reason == 23)
{
if (PlayerInfo[killerid][pSilenSkill] >= 0 && PlayerInfo[killerid][pSilenSkill] <= 1000)
{
PlayerInfo[killerid][pSilenSkill] += 2;
SetPlayerSkills(killerid);
}
if (PlayerInfo[killerid][pAchievement0] == 0)
{
ShowPlayerDialog(killerid,500,DIALOG_STYLE_MSGBOX,"Logro: Asesino Silencioso (0)","Felicitaciones, usted ha alcanzado la Insignia de 'Asesino Silencioso!' \n Usted ganу $ 200 y 50 + de habilidad!","Okay","Cancelar");
PlayerInfo[killerid][pSilenSkill] += 50;
SafeGivePlayerMoney(killerid,200);
PlayerInfo[playerid][pAchievement0] = 0;
}
}
if (reason == 24)
{
if (PlayerInfo[killerid][pDesertSkill] >= 0 && PlayerInfo[killerid][pDesertSkill] <= 1000)
{
PlayerInfo[killerid][pDesertSkill] += 2;
SetPlayerSkills(killerid);
}
}
if (reason == 25)
{
if (PlayerInfo[killerid][pShotgSkill] >= 0 && PlayerInfo[killerid][pShotgSkill] <= 1000)
{
PlayerInfo[killerid][pShotgSkill] += 2;
SetPlayerSkills(killerid);
}
}
if (reason == 26)
{
if (PlayerInfo[killerid][pSawnSkill] >= 0 && PlayerInfo[killerid][pSawnSkill] <= 800)
{
PlayerInfo[killerid][pSawnSkill] += 2;
SetPlayerSkills(killerid);
}
}
if (reason == 27)
{
if (PlayerInfo[killerid][pCombSkill] >= 0 && PlayerInfo[killerid][pCombSkill] <= 1000)
{
PlayerInfo[killerid][pCombSkill] += 2;
SetPlayerSkills(killerid);
}
}
if (reason == 28 || reason == 32)
{
if (PlayerInfo[killerid][pUziSkill] >= 0 && PlayerInfo[killerid][pUziSkill] <= 800)
{
PlayerInfo[killerid][pUziSkill] += 2;
SetPlayerSkills(killerid);
}
}
if (reason == 29)
{
if (PlayerInfo[killerid][pSmgSkill] >= 0 && PlayerInfo[killerid][pSmgSkill] <= 1000)
{
PlayerInfo[killerid][pSmgSkill] += 2;
SetPlayerSkills(killerid);
}
}
if (reason == 30)
{
if (PlayerInfo[killerid][pAkSkill] >= 0 && PlayerInfo[killerid][pAkSkill] <= 1000)
{
PlayerInfo[killerid][pAkSkill] += 2;
SetPlayerSkills(killerid);
}
}
if (reason == 31)
{
if (PlayerInfo[killerid][pM4Skill] >= 0 && PlayerInfo[killerid][pM4Skill] <= 1000)
{
PlayerInfo[killerid][pM4Skill] += 2;
SetPlayerSkills(killerid);
}
}
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 lнnea se cortу solo....");
CellTime[caller] = 0;
CellTime[playerid] = 0;
Mobile[caller] = 255;
}
Mobile[playerid] = 255;
CellTime[playerid] = 0;
}
ClearCrime(playerid);
if(GettingCK[playerid] < 999)
{
if(IsPlayerConnected(killerid))
{
if(OnCK[killerid] < 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 ha realizado un CK en usted, tu no podras jugar mas con este Character nunca mas.",killer);
SendClientMessage(playerid, COLOR_LIGHTRED, string);
format(string, sizeof(string), "** %s ha realizado un Character Kill en %s **",killer,dier);
CKLog(string);
BroadCast(COLOR_LIGHTRED, 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] == 10 || PlayerInfo[killerid][pLeader] == 8)
{
if(GoChase[killerid] == playerid)
{
//ConsumingMoney[killerid] = 1;
new killer[MAX_PLAYER_NAME];
GetPlayerName(killerid, killer, sizeof(killer));
SafeGivePlayerMoney(killerid, PlayerInfo[playerid][pHeadValue]);
format(string,128,"<< Hitman %s ha cumplido con el contrato de %s y recogio $%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 = GetPlayerMoney(playerid);
if(gTeam[killerid] != 2) { WantedPoints[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)
{
SafeGivePlayerMoney(playerid, -slice);
}
else
{
slice = slice+500;
}
//SafeGivePlayerMoney(killerid, slice);
//GameTextForPlayer(playerid, dmessage, 5000, 2);
PlayerPlaySound(killerid, 1083, 0.0, 0.0, 0.0);
if (((gTeam[killerid]) == 3) && reason != 49)
{
SetPlayerCriminal(killerid,255, "First Degree Murder");
}
else if (((gTeam[killerid]) == 3) && reason == 49)
{
SetPlayerCriminal(killerid,255, "Hit And Run");
}
}
}
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,".: Oficial %s murdered Oficial %s (%s) and was sued for $%d :.",killer,name,deathreason,suecost);
PlayerPlaySound(killerid, 1084, 0.0, 0.0, 0.0);
SafeGivePlayerMoney(killerid, -suecost);
SafeGivePlayerMoney(playerid, suecost+100);//+100pays hospital bill
}
else
{
//format(string,128,".: %s murdered Oficial %s (%s) :.",killer,name,deathreason);
}
if (gTeam[killerid] >= 3)
{
WantedPoints[killerid] += 2; //+ 2 wanted points
if(reason != 49)
{
SetPlayerCriminal(killerid,255, "Asesinato en Primer Grado");
}
else if (reason == 49)
{
SetPlayerCriminal(killerid,255, "Golpe y Corre");
}
}
if(gTeam[killerid] >= 5 && SafeTime[playerid] <= 0)
{
if(GetPlayerState(killerid) == 1)
{
PlayerInfo[killerid][pKills] = PlayerInfo[killerid][pKills]+2;
}
else
{
PlayerInfo[killerid][pKills]++;
}
WantedPoints[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,".: Oficial %s murdered %s (%s) and was sued for $%d :.",killer,name,deathreason,suecost);
PlayerPlaySound(killerid, 1084, 0.0, 0.0, 0.0);
SafeGivePlayerMoney(killerid, -suecost);
SafeGivePlayerMoney(playerid, suecost+10);//+100pays hospital bill
}
}
else
{
//format(string,128,".: %s murdered %s (%s) :.",killer,name,deathreason);
WantedPoints[killerid] += 2;
}
if (((gTeam[killerid]) >= 3 || (gTeam[killerid]) == 1) && reason != 49)
{
SetPlayerCriminal(killerid,255, "Asesinato en Primer Grado");
}
else if (((gTeam[killerid]) >= 3 || (gTeam[killerid]) == 1) && reason == 49)
{
SetPlayerCriminal(killerid,255, "Golpear y Correr");
}
//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,".: Oficial %s murdered Paramedic %s (%s) and was sued for $%d :.",killer,name,deathreason,suecost);
PlayerPlaySound(killerid, 1084, 0.0, 0.0, 0.0);
SafeGivePlayerMoney(killerid, -suecost);
SafeGivePlayerMoney(playerid, suecost+10);//+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);
SafeGivePlayerMoney(killerid, -suecost);
SafeGivePlayerMoney(playerid, suecost+10);//+100pays hospital bill
}
else
{
//format(string,128,".: %s murdered %s (%s) :.",killer,name,deathreason);
}
if (((gTeam[killerid]) == 4) && reason != 49)
{
SetPlayerCriminal(killerid,255, "Asesinato en Primer Grado");
}
else if (((gTeam[killerid]) == 3) && reason == 49)
{
SetPlayerCriminal(killerid,255, "Golpe y Corre");
}
//BroadCast(COLOR_RED, string);
}
}
if (victimteam >= 3 && WantedPoints[playerid] > 0 && killerteam == 2)
{
SetPlayerFree(playerid,killerid, "fue asesinado");
}
if (BusrouteEast[playerid][0] != 0 || BusrouteWest[playerid][0] != 0)
{
if (BusrouteEast[playerid][0] != 0) BusrouteEnd(playerid, BusrouteEast[playerid][1]);
else if (BusrouteWest[playerid][0] != 0) BusrouteEnd(playerid, BusrouteWest[playerid][1]);
else BusrouteEnd(playerid, 0);
}
if(FarmerVar[playerid] != 0)
{
FarmerVar[playerid] = 0;
DisablePlayerCheckpoint(playerid);
}
if(DrugFarmerVar[playerid] != 0)
{
DrugFarmerVar[playerid] = 0;
DisablePlayerCheckpoint(playerid);
}
if(SmugglerWork[playerid] != 0)
{
SmugglerWork[playerid] = 0;
DisablePlayerCheckpoint(playerid);
}
killerid = INVALID_PLAYER_ID;
SetRealMoney(playerid, ScriptMoney[playerid]);
SetPlayerColor(playerid,0xBBBBBB00);
SafeResetPlayerWeapons(playerid);
return 1;
}
Y esto es lo que supuestamente seria el spawn del hospital (animacion de crack, timer y todo)
pawn Код:
if(MedicBill[playerid] == 1 && PlayerInfo[playerid][pJailed] == 0)
{
if(PlayerInfo[playerid][pAdminDuty] == 1) return 1;
if(FirstSpawn[playerid] != 1)
{
SetRealMoney(playerid, ScriptMoney[playerid]);
PlayerInfo[playerid][pDeaths] += 1;
SetPlayerHealth(playerid, 50.0);
SafeSetPlayerInterior(playerid, 3);
rand = random(sizeof(gMedicSpawns));
SafeSetPlayerPos(playerid, gMedicSpawns[rand][0], gMedicSpawns[rand][1], gMedicSpawns[rand][2]); // Warp the player
SetPlayerFacingAngle(playerid, 0);
TogglePlayerControllable(playerid, 0);
GameTextForPlayer(playerid, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~w~Usted necesita descansar ...", 5000, 3);
ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 0);
if(PlayerInfo[playerid][pRegularRank] == 1)
{
SetTimerEx("ReleaseFromHospital", 20000, 0, "i", playerid);
}
else if(PlayerInfo[playerid][pRegularRank] == 2)
{
SetTimerEx("ReleaseFromHospital", 17500, 0, "i", playerid);
}
else if(PlayerInfo[playerid][pRegularRank] == 3)
{
SetTimerEx("ReleaseFromHospital", 15000, 0, "i", playerid);
}
else if(PlayerInfo[playerid][pAdmin] >= 1)
{
SetTimerEx("ReleaseFromHospital", 12500, 0, "i", playerid);
}
else if(PlayerInfo[playerid][pAdmin] >= 4)
{
SetTimerEx("ReleaseFromHospital", 10000, 0, "i", playerid);
}
else
{
SetTimerEx("ReleaseFromHospital", 25000, 0, "i", playerid);
}
PlayerPlaySound(playerid, 1062, 0.0, 0.0, 0.0);
return 1;
}
}
if(JustDied[playerid] == 1)
{
if(GetPlayerVirtualWorld(playerid) != 0 || PlayerInfo[playerid][pVirWorld] != 0)
{
SetPlayerVirtualWorld(playerid, 0);
PlayerInfo[playerid][pVirWorld] = 0;
}
SafeSetPlayerPos(playerid, 1182.5638,-1323.5256,13.5790);
SetPlayerFacingAngle(playerid, 270.0);
SafeSetPlayerInterior(playerid,0);
TogglePlayerControllable(playerid, 1);
return 1;
}
La verdad prefiero pedir ayuda para esto, ya que es algo dificil para mi porque no entiendo mucho sobre estas funciones (Callbacks de coordenadas mediante script a script, etc) Gracias de ante mano