Durch den Code den ich dir gegeben habe ?
Beim Connecten erstmal Leben auf 100 Setzen ?
Durch den Code den ich dir gegeben habe ?
Beim Connecten erstmal Leben auf 100 Setzen ?
Durch den Code den ich dir gegeben habe ?
Beim Connecten erstmal Leben auf 100 Setzen ?
Mein Timer-Code ist doch schon angepasst?
Das mit dem beim Connecten HP auf 100 werde ich mal testen. Danke
Ob es so ging wie ich es geschrieben hatte ?
Ja probier mal
Ob es so ging wie ich es geschrieben hatte ?
Ja probier mal
Wie gesagt der Timer ist schon gefixt, das mit den HP teste ich später nochmal
Alles anzeigenHey, ich habe in einem Timer eine menge spielerbezogene Funktionen, da es ein Timer ist, habe ich eine Schleife eingebunden.
Jetzt habe ich das Problem: Die Schleife arbeitet unabhängig vom Timer.
Beispiel:
Die Schleife (obwohl nur 1 Spieler aufm Server ist) wird ca. 20x die Sekunde abgerufen, obwohl der Timer auf 1 Sekunde liegt.
Wie ändere ich das?
Timer:
ongamemodeinit
SetTimer("SecTimer", 1000, 1);
CodeAlles anzeigenforward SecTimer(); public SecTimer() { new uhour, umin, usecs; gettime(uhour, umin, usecs); for (new i=0; i < MAX_PLAYERS; i++) { printf("%02d %d02 %02d Test 2", uhour, umin, usecs); if(PlayerInfo[i][pLoggedIn] == false) continue; new vw = GetPlayerVirtualWorld(i); new Float:HP; new Float:X, Float:Y, Float:Z; GetPlayerPos(i, X, Y, Z); GetPlayerHealth(i, HP); if(HP <= 14.000) { if(IsPlayerConnected(i)) { if(PlayerInfo[i][pLoggedIn] == true) { if(IsInjured[i] == false) { IsInjured[i] = true; InjuredTimer[i] = 240; Invulnerable[i] = true; InvulCounter[i] = 3; new dstr[528]; format(dstr, sizeof (dstr), "%s ist schwer verletzt und braucht einen Sanitäter! /Medic %d", PlayerInfo[i][pName], i); MedicMessage("|__________________________Achtung_________________________|"); MedicMessage(dstr); MedicMessage("|__________________________________________________________|"); new string[128]; format(string, sizeof(string), "(( %s ist verletzt und liegt am Boden.\nEr braucht einen Krankenwagen! ))", PlayerInfo[i][pName]); InjuredLabel[i] = Create3DTextLabel(string, 0xFF6666FF, X, Y, Z, 25.00, vw, 1); Attach3DTextLabelToPlayer(InjuredLabel[i], i, 0.00, 0.00, 0.500); ApplyAnimation(i, "PED", "KO_shot_stom", 4.1, 1, 0, 0, 1, 0, 1); notruf[i] = 1; } } } } if(InvulCounter[i] > 0) { InvulCounter[i] -= 1; if(InvulCounter[i] == 0) { Invulnerable[i] = false; } } if(InjuredTimer[i] > 0) { if(IsDead[i] == false) { ApplyAnimation(i, "CRACK", "crckdeth2", 4.1, 1, 0, 0, 1, 0, 1); InjuredTimer[i] -= 1; if(InjuredTimer[i] == 0) { ClearAnimations(i); if(IsHealed[i] == false) { SendAction(i, "ist soeben verstorben."); SetPlayerHealth(i, 0); Delete3DTextLabel(InjuredLabel[i]); IsDead[i] = true; IsInjured[i] = false; } } } } if(PlayerInfo[i][pKicked] == 1) { Kick(i); } ResetPlayerMoney(i); GivePlayerMoney(i, PlayerInfo[i][pMoney]); if(PlayerInfo[i][pPrison] <= 0) { PlayerInfo[i][pPaydaySecs] += 1; if(PlayerInfo[i][pPaydaySecs] == 60) { PlayerInfo[i][pPaydayMins] += 1; PlayerInfo[i][pPaydaySecs] = 0; if(PlayerInfo[i][pPaydayMins] == 60) { Payday(i); PlayerInfo[i][pPaydayMins] = 0; } } } SetPlayerTime(i, uhour, umin); if(PlayerInfo[i][pDigCD] > 0) { PlayerInfo[i][pDigCD] -= 1; if(PlayerInfo[i][pDigCD] == 0) { SendClientMessage(i, COLOR_INFO, "** Du kannst wieder Müll durchwühlen!"); } } if(PlayerInfo[i][pKH] > 0) { PlayerInfo[i][pKH] -= 1; if(PlayerInfo[i][pKH] == 0) { SpawnPlayer(i); UnfreezePlayer(i); PlayerInfo[i][pMoney] -= 500; GivePlayerMoney(i, -500); SendClientMessage(i, COLOR_LIGHT_RED, "Du konntest noch von den Ärtzten gerettet werden... Behandlungskosten: $500"); } } if(PlayerInfo[i][pJail] > 0) { if(PlayerInfo[i][pPrison] == 0 && PlayerInfo[i][pKH] == 0) { PlayerInfo[i][pJail] -= 1; if(PlayerInfo[i][pJail] == 0) { SpawnPlayer(i); } } } if(PlayerInfo[i][pPrison] > 0 && PlayerInfo[i][pKH] == 0) { PlayerInfo[i][pPrison] -= 1; if(PlayerInfo[i][pPrison] == 0) { SpawnPlayer(i); } } RepairVehicle(admincar[i]); SetVehicleHealth(admincar[i], 6000.000); break; } return 1; }
Edit: Es ist nur übertrieben schnell wenn 0 Spieler on sind, wenn 1 Spieler on ist, funktioniert es doch mit1 Sekunde
Hai,
ich empfehlen "SetTimerEx" für Spieler zu benutzen.
Einfach bei "OnPlayerConnect" einfügen.
Anschließend noch
ersetzen.
Da brauchst du die Schleife um alle Spieler auf dem Server auf zu nennen auch nicht mehr.
Beispiel:
forward SecTimer(playerid);
public SecTimer(playerid)
{
SendClientMessage(playerid, FARBE, "Eine weitere Sekunde ist vorbei!");
}
public OnPlayerConnect(playerid)
{
SetTimerEx("SecTimer", 1000, true, "i", playerid);
}
Alles anzeigen
Weiß nicht ob dies dein Problem löst aber ein Versuch ist es wert ![]()
Ich denke mal für jeden einzelnen Spieler parallel Timer laufen zu lassen ist nicht gerade die bessere Lösung, naja aber egal es geht ja jetzt schon ![]()
Bleib bei einem Timer und fang so an:
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++)
{
if(!IsPlayerConnected(i)) continue;
// Dein Code hier
}
Versuch MAX_PLAYERS in Verbindung mit for() zu vermeiden, [wiki]GetPlayerPoolSize[/wiki] ist da deutlich besser geeignet, selbe gilt für MAX_VEHICLES & [wiki]GetVehiclePoolSize[/wiki]
Das break; am Ende bricht es übrigens komplett ab, es würde also nur für den Spieler mit der niedrigsten ID funktionieren, also solltest du das auch rausnehmen.
ZitatThe use of many timers will result in increased memory/cpu usage.
Jetzt stell dir mal vor es befinden sich 128 Spieler auf dem Server, und für jeden Spieler wird ein Timer gestartet. Glaubst du dass das eine geringe auswirkung auf die Leistung hat?
Du musst außerdem bedenken dass das Script nur in einem Thread läuft.
Bleib bei einem Timer und fang so an:
for(new i = 0, j = GetPlayerPoolSize(); i <= j; i++){if(!IsPlayerConnected(i)) continue;// Dein Code hier}
Das break; am Ende bricht es übrigens komplett ab, es würde also nur für den Spieler mit der niedrigsten ID funktionieren, also solltest du das auch rausnehmen.
Was genau sit das für ein Code bzw was ist GetPlayerPoolSize?
GetPlayerPoolSize gibt die höchste Spieler ID die sich gerade auf dem Server befindet zurück.
Hey, wie ändert man die Transparenz von nem Gangzonegebiet? Muss man das schon gleich in einem Farbcode machen?
Und wenn ja, wie.
Das kannst du mit dem Farbcode von
https://wiki.sa-mp.com/wiki/GangZoneShowForPlayer
und
https://wiki.sa-mp.com/wiki/GangZoneShowForAll
machen.
Wie kann man Objecte die zerstörbar sind unzerstörbar machen ?
z.b die Bushaltestelle
Das ist nicht möglich.
Ich habe das erst leztens in einem Video hier aus dem Forum gesehen.
Da hat jemand draufgeschossen und die ist stehen geblieben
Ich habe noch eine Frage unswa habe ich mein Script auf ein Server doch dort Funktioniert das Script nicht richtig.
1 Fehler
Wenn ich mein Passwort eingebe wird es mir als Falsch angezeigt ?
2 Fehler
Wenn ich mich Registriere kann ich nichtmehr auf Weiter Klicken
Wenn ich das Script auf mein Pc abspiele geht es ?
Vielleicht waren vor dem Objekt unsichtbare Wände vorgemappt.
Ich habe noch eine Frage unswa habe ich mein Script auf ein Server doch dort Funktioniert das Script nicht richtig.
1 Fehler
Wenn ich mein Passwort eingebe wird es mir als Falsch angezeigt ?
2 Fehler
Wenn ich mich Registriere kann ich nichtmehr auf Weiter Klicken
Wenn ich das Script auf mein Pc abspiele geht es ?
Hat es vielleicht was mit der Datenbank zutun?
Wrum sollte es was mit den Datenbank zu Tun haben ?
Ich habe die Datenbank nur exportiert und wieder importiert.
Der 2 Feher geht ja nicht von der Datenbank aus
Zeig mal bitte was bei ondialogresponse also bei dem "weiter" ausgefür wird.
Wrum sollte es was mit den Datenbank zu Tun haben ?
Ich habe die Datenbank nur exportiert und wieder importiert.
Der 2 Feher geht ja nicht von der Datenbank aus
Dann solltest du noch ggf. einen Benutzer anlegen und Rechte festlegen, sowie das Script an die neue Datenbank anpassen