Hey liebe Community,
ich habe seit einer weile das Problem das man entweder lange braucht zum respawnen, oder garnicht mehr respawnt.
Genaue Erklärung:
Wenn zum Beispiel mich jemand tötet, dauert es ein paar Sekunden bis Minuten bis ich überhaupt respawne, falls ich respawne...
Sobald ich respawnt bin, bin ich dann im Krankenhaus (wie mein Skript das auch machen soll..) läuft die Zeit nun ab, lande ich vor dem Krankenhaus und sterbe und respawne dort wo meine SetSpawnInfos gesetzt sind...
Währenddessen sieht man auch meine Leiche
Im Spoiler sind ein Paar Beispielbilder:
Als jemand starb sieht man die Leiche weiterhin:
Wenn man im Krankenhaus ist, blinkt der Lebensbalken... (außerdem zu sehen das man nach 4 Minuten immer noch nicht respawnt):
Sollte man nun respawnen geschieht folgendes und man respawnt da wo die SetPlayerInfo zuletzt gesetzt wurde:
Mein Scriptcode bei OnPlayerDeath:
public OnPlayerDeath(playerid, killerid, reason) {
if ( playerid >= 0 && playerid <= MAX_PLAYERS ) {
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
pInfo[playerid][pIsDead] = DEADTIME;
pInfo[playerid][pDeathX] = x;
pInfo[playerid][pDeathY] = y;
pInfo[playerid][pDeathZ] = z;
pInfo[playerid][pOnDuty] = false;
PlayerDead[playerid] = 1;
pInfo[playerid][pDeads] += 1;
if(IsPlayerInGebiet(playerid) > -1) {
new zone = IsPlayerInGebiet(playerid);
if(Gebiete[zone][gOn] == 1) {
if(GetPlayerTeam(playerid) - gangs == Gebiete[zone][gOwner]) { Gebiete[zone][gStand2] ++; }
if(GetPlayerTeam(playerid) - gangs == Gebiete[zone][gAngreifer]) { Gebiete[zone][gStand1] ++; }
}
}
DropWeapon(playerid); // Daran liegts nicht schon probiert...
for(new i; i<sizeof(Gebiete); i++) { GangZoneHideForPlayer(playerid,Gebiet[i]); }
}
if ( killerid >= 0 && killerid <= MAX_PLAYERS ) { pInfo[killerid][pKills] += 1; }
return 1;
}
Mein Scriptcode bei OnPlayerSpawn:
public OnPlayerSpawn(playerid) {
TextDrawHideForPlayer(playerid, LoginTextdraw);
TogglePlayerSpectating(playerid, 0);
UpdateZones();
new string[255];
TogglePlayerSpectating(playerid,0);
TextDrawShowForPlayer(playerid,txtTimeDisp);
TextDrawShowForPlayer(playerid,Copyright);
gettime(hour, minute);
SetPlayerTime(playerid,hour,minute);
SetPlayerScore(playerid, pInfo[playerid][pLevel]);
TextDrawShowForPlayer(playerid, BankTextdraw[playerid]);
setBankTextdraw(playerid);
TextDrawShowForPlayer(playerid, WantedsTextdraw[playerid]);
format(string, sizeof string, "] %d", pInfo[playerid][pWanteds]);
TextDrawSetString(WantedsTextdraw[playerid], string);
UpdateTime();
new time = pInfo[playerid][pJailed];
if ( PlayerDead[playerid] == 1 ) {
TogglePlayerControllable(playerid, 0);
SetPlayerPos(playerid,1152.7338,-1315.9927,14.8653);
SetPlayerCameraPos(playerid,1151.9376,-1356.7738,19.7350);
SetPlayerCameraLookAt(playerid, 1153.2936,-1324.0106,14.9649);
SetPlayerInterior(playerid, 0);
pInfo[playerid][pDeathPickup] = CreatePickup(1254,0,pInfo[playerid][pDeathX],pInfo[playerid][pDeathY],pInfo[playerid][pDeathZ],0);
format(string,sizeof string, " %s", PlayerName(playerid));
pInfo[playerid][pDeathText] = Create3DTextLabel(string, error, pInfo[playerid][pDeathX],pInfo[playerid][pDeathY],pInfo[playerid][pDeathZ] + 0.3, 20.0, 0, 0);
acceptWiederbeleben[playerid] = -1;
for (new i=0;i<MAX_PLAYERS;i++) {
if ( IsPlayerConnected(i) && GetPVarInt(i, "Eingeloggt") == 1 ) {
if ( pInfo[i][pFraktion] == 4 ) {
if ( pInfo[i][pOnDuty] == true ) {
format(string,sizeof string, "[%s] %s ist gestorben. Nimm den Auftrag mit /accept wiederleben %d an.",getTime(),PlayerName(playerid), playerid);
SendClientMessage(i,auftrag, string);
}
}
}
}
return 1;
}
return 1;
}
Woran kann der Fehler liegen?
Mfg pierre65