Hallo Brotfische & Hallo Jeffry:
Ich habe mal wieder ein Problem, sehr drigend.
Erst hatte ich ja Spawn Probleme und nun habe ich allgemein Probleme mit meinem Tot System.
Das Problem ist: Bin ich ganz alleine auf meinem Server geht alles perfekt. Ich sterbe, komme 120 Sekunden auf Friedhof. Logge ich mich währenddessen aus und wieder ein beginnt das Spiel von vorne(so soll es auch sein).
Jedoch kommt ein 2ter Spieler hinzu, geht die Zeit mega schnell um(in 1 Sekunde steigert sich mein Wert um 6 -8 obwohl er nur 1 höher dürfte).
Ja und irgendwie killt er den Timer nicht wenn man wieder lebt
Bin ich dann wieder am Leben bekomme ich eine Nachricht "Die Ärzte haben zulange gebraucht......" und der jenige der mit auf dem Server ist(und nicht mal tot war) bekommt diese Nachricht auch o,O
Hier mal mein Code:
OnPlayerDeath
{
SpielerInfo[playerid][pTot] = 1;
Tottime[playerid] = 0;
GetPlayerPos(playerid,tx[playerid],ty[playerid],tz[playerid]);
toticon[playerid] = CreatePickup(1254,1,tx[playerid],ty[playerid],tz[playerid],-1);
format(string, sizeof(string), "%s", SpielerName(playerid));
totlabel = Create3DTextLabel(string,0xFF0000FF, tx[playerid], ty[playerid], tz[playerid], 32.0, 0);
format(string,sizeof(string),"%s ist gestorben! Er braucht dringend einen Arzt.",SpielerName(playerid));
SendFraktionMessage(2, medic, string);
SpielerInfo[playerid][pTotskin] = 162;
}
Mein Timer bei OnPlayerSpawn:
{
SetPlayerPos(playerid,-2719.6924,-318.3633,7.8438);
SetPlayerVirtualWorld(playerid, 1);
SetPlayerHealth(playerid,10000000000);
SetPlayerSkin(playerid, SpielerInfo[playerid][pTotskin]);
SetPlayerWeather(playerid, 8);
Tottime[playerid] = 0;
SendClientMessage(playerid,info,"Du bist gestorben. Du musst nun 2 Minuten auf dem Friedhof verbringen.");
timer[playerid] = SetTimerEx("TotSekunde",1000,true,"i",playerid);
SetPlayerWantedLevel(playerid, SpielerInfo[playerid][pSterne]);
}
Hier der TotSekunde/reanimation/tottimer Public:
public TotSekunde()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
Tottime[i] ++;
if(Tottime[i] == 120)
{
Tottime[i] = 0;
tottimer(i);
}
}
}
return 1;
}
public tottimer(playerid)
{
// tzeit[playerid] --;
// if(tzeit[playerid] == 0)
// {
SetPlayerPos(playerid,-2655.4741,636.9430,14.4531);
SetPlayerVirtualWorld(playerid,0);
KillTimer(timer[playerid]);
SetPlayerHealth(playerid, 100);
DestroyPickup(toticon[playerid]);
Delete3DTextLabel(totlabel);
TogglePlayerControllable(playerid,1);
SpielerInfo[playerid][pTot] = 0;
SetPlayerWeather(playerid, 0);
Tottime[playerid] = 0;
SetPlayerSkin(playerid,SpielerInfo[playerid][pSkin]);
SetPlayerWorldBounds(playerid, 999999.9, -999999.9, 999999.9, -999999.9);
SendClientMessage(playerid, erfolg, "Die Ärzte haben zulange gebraucht. Du wurdest nun im Krankenhaus wiederbelebt.");
//}
return 1;
}
{
new Float:x,Float:y,Float:z,string[144];
GetPlayerPos(playerid,x,y,z);
for(new i = 0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i))continue;
if(SpielerInfo[i][pTot] == 0)continue;
if(!IsPlayerInRangeOfPoint(playerid,5,tx[i],ty[i],tz[i]))continue;
format(string,144,"Du hast den Spieler '%s' erfolgreich reanimiert.",SpielerName(i));
SendClientMessage(playerid,erfolg,string);
format(string,144,"'%s' hat dich erfolgreich reanimiert.",SpielerName(playerid));
SendClientMessage(i,erfolg,string);
SetPlayerWorldBounds(playerid, 999999.9, -999999.9, 999999.9, -999999.9);
SetPlayerHealth(i, 100);
SetPlayerPos(i,x,y,z);
KillTimer(timer[i]);
DestroyPickup(toticon[i]);
Delete3DTextLabel(totlabel);
SetPlayerWeather(i, 0);
Tottime[i] = 0;
SpielerInfo[i][pTot] = 0;
SetPlayerVirtualWorld(i,0);
TogglePlayerControllable(i,1);
TogglePlayerControllable(playerid,1);
SetPlayerSkin(i,SpielerInfo[i][pSkin]);
}
return 1;
}
Irgendwie ist bestimmt vieles falsch
Wie gesagt oben ist alles beschrieben.
Noch ne kleine Frage, da ich die Zeit ja hochzähle und nicht runter, kommt bei meinem Friedhof befehl ja statt "Du musst noch 120 Sekunden auf dem Friedhof bleiben"
"Du musst noch 3 Sekunden ....." und das geht hoch auf 120.
Kann ich das irgendwie machen das es runter geht statt hoch(am public nichts ändern sondern irgendwie im Befehl machen?)
ocmd:friedhof(playerid, params[])
{
new string[144];
format(string,144,"Friedhof: Du musst noch '%d' Sekunden auf dem Friedhof sein.",Tottime[playerid]);
SendClientMessage(playerid,info,string);
return 1;
}
Mit freundlichen Grüßen