Füge vor (!) diese Zeile:
if(CurrentMenu == FSAuto0)
das hier ein:
printf("CurrentMenu: %d / FSAuto0: %d / FSAuto1: %d / row: %d", _:CurrentMenu, _:FSAuto0, _:FSAuto1, row);
Was wird geprintet?
Füge vor (!) diese Zeile:
if(CurrentMenu == FSAuto0)
das hier ein:
printf("CurrentMenu: %d / FSAuto0: %d / FSAuto1: %d / row: %d", _:CurrentMenu, _:FSAuto0, _:FSAuto1, row);
Was wird geprintet?
PStar:
public OnPlayerDisconnect(playerid, reason)
{
new string[128];
new Spielerdatei[64];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
new interior = GetPlayerInterior(interior);
new vworld = GetPlayerVirtualWorld(vworld);
dini_IntSet(Spielerdatei,"Interior", interior);
dini_IntSet(Spielerdatei,"VWorld", vworld);
return 1;
}
Schon versucht, das "if(CurrentMenu..." ganz oben in's callback zu schreiben?
Hast du den Code versucht zu debuggen, vielleicht springt er durch irgendein "return" raus.
Wie die Nachricht im Chat ausgegeben, wenn du im ersten Menü etwas andrückst?
Hast du das zweite Menü auch richtig erstellt?
Setzt du beim Registrieren das hier auch auf 1?
AccountInfo[playerid][eingeloggt]
So wie du das beschrieben hast, klingt es ganz danach als machst du das nicht. Das würde genau zur Fehlerbeschreibung passen.
PS: Du bist einer der Wenigen der sein Problem wirklich gut beschreibt. Top!
new query[128];
Das ist eindeutig zu kurz. Erklärt auch warum es ganz selten klappt.
Setze es zu 256, dann solltest du keine Probleme mehr haben.
Ich nehme an, du aktualisiert die Uhr über das public mit einem sich wiederholenden Timer. Daher musst du beim Erstellen nichts angeben, da es ja mit dem Timer gesetzt wird.
TextdrawUhr = TextDrawCreate(577.000000, 27.000000, "_");
So passt es.
TextDrawSetString(TextdrawUhrzeit,string);
Zu
TextDrawSetString(TextdrawUhr,string);
Woran könnte es liegen, dass die Textdraws bei einem Restart langsam laden oder sich das Spiel aufhängt?
Kann es auch am Server liegen?
Da gibt es mehrere Möglichkeiten.
Extrem schlechter Code der laggt.
MySQL Verbindung zu einer externen Datenbank die keine Rückmeldung gibt.
Schlechte CPU am Server (relativ unwahrscheinlich)
Kann an allem möglichen liegen. Falls du Backups hast (wenn nicht rate ich es dir dringend von nun an mindestens ein mal am Tag zu machen!) prüfe, ob es dort auch ist. Wenn nicht, füge Stück für Stück deine Neuerungen wieder hinzu.
Passiert das wenn DU es machst, oder einfach zufällig irgendwann?
Wenn es passiert wenn du es machst, dann nimm die Log Funktion aus der Schleife und setze es unter das format.
Meinst du das Leben unbegrenzt Allgemein setzen oder dann wenn er nur unter Wasser ist?
Nur wenn er im Wasser ist, bzw taucht. Du kannst das über den Animations Index herausfinden.
Hier ein Beispiel:
http://forum.sa-mp.com/showthread.php?t=400049
Und wenn er nicht mehr im Wasser ist, die Health wieder zurück setzen, wie es zuvor war (natürlich zuvor gespeichert haben).
Ist es möglich, einen Code zu schreiben in dem man angeben kann wie lange man im Wasser tauchen kann oder eventuell unbegrenzt?
Nein, die Luft kannst du nicht verändern (warum weiß keiner...).
Das Einzige was du machen kannst ist dem Spieler unbegrenzt Leben zu geben.
public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
{
if(issuerid != INVALID_PLAYER_ID && weaponid == 25)
{
new Float:extra = 20.0;
new Float:a, Float:h;
GetPlayerArmour(playerid, a);
GetPlayerHealth(playerid, h);
a -= (amount + extra);
if(a < 0) h += a;
SetPlayerArmour(playerid, a);
SetPlayerHealth(playerid, h);
}
return 1;
}
Sollte klappen. (Außer die Health/Armour wird schon vor dem callback abgezogen, dann muss man das "amount" aus der Rechnung nehmen.)
extra = Menge der zusätzlich abgezogenen Menge.
Hiermit:
http://wiki.sa-mp.com/wiki/OnPlayerTakeDamage
Du musst eben abfragen, ob die Weste (GetPlayerArmour) größer als 0 ist, und wenn ja, dann ziehe es von der Armour/Weste ab, ansonsten (bzw den Restbetrag) ziehst du von den Leben ab.
@NicoWiss: Er will den Schaden ja erhöhen, und das geht nur mit Scripts.
@NicoWiss: (Post unten): "Schotgun mehr Schaden?"
,Text:Introdraw[5]
,Text:InfoSign
,Text:Spawnkilldraw; //hier ist der Fehler.
,Text:TutorialText1
,Text:TutorialText2
An der markierten Stelle das Semikolon am Ende weg machen.
Kannst du von dem Teil hier:
,Text:TutorialText1 <------ Zeile 4555
,Text:TutorialText2
,Text:LoadScreen[15]
die Zeilen die davor und danach noch dazugehören auch posten?
Weil so macht das wenig Sinn, das Komma gehört eigentlich ans Ende.
Du setzt einen Timer mit SetTimer der alle X Minuten aufgerufen wird. In das public schreibst du dann das Zeug rein, das der Befehl macht, mit einer Schleife für alle Spieler, falls es so sein soll.
http://wiki.sa-mp.com/wiki/SetTimer
Syno: Dann würde es ja immer die Nachricht ausgeben es seinen zu wenig Spieler vorhanden, außer wenn kein Spieler da ist.
Wie viele Spieler sollen denn in dem anderen Team überhaupt sein. Ich mach dir mal ein paar Vorschläge.
Zwei Spieler benötigt.
if(Mindestens1SpielerAT<=1) return SendClientMessage(playerid,fRS,"Es sind zu wenig Gegner vorhanden.");
Ein Spieler benötigt.
if(Mindestens1SpielerAT<1) return SendClientMessage(playerid,fRS,"Es sind zu wenig Gegner vorhanden.");
Falls du es mit zwei Spielern haben willst, also so wie du es hast, dann solltest du wie ich bereits sagte, etwas mehr Code posten. Falls du einen Spieler im Team haben willst (ein Spieler Team?) dann so wie beschrieben.
Wie ich bereits im ersten Post sagte:
ocmd@2:hausverkaufen,sellhaus(playerid,p[])
{
new str[128];
new h_id = NearestHaus(playerid);
if(h_id == -1)return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe eines Hauses!");
if(strcmp(Haus[h_id][haus_besitzer],Name(playerid),false))return SendClientMessage(playerid,-1,"Dieses Haus gehört dir nicht!");
GivePlayerMoney(playerid,Haus[h_id][haus_preis]);
format(Haus[h_id][haus_besitzer],MAX_PLAYER_NAME,"Niemand");
Haus[h_id][haus_lock] = 1;
format(str,128,"Hausnummer: %i\nBesitzer: Niemand\nLevel: %d\nPreis: $%d\n\nStatus: '%s'",Haus[h_id][haus_id],Haus[h_id][haus_level],Haus[h_id][haus_preis],(Haus[h_id][haus_lock] == 1) ? ("geschlossen") : ("geöffnet"));
DestroyDynamic3DTextLabel(Haus[h_id][haus_label]),DestroyDynamicMapIcon(Haus[h_id][haus_icon]);
Haus[h_id][haus_icon] = CreateDynamicMapIcon(Haus[h_id][haus_x],Haus[h_id][haus_y],Haus[h_id][haus_z],31,-1,-1,-1,-1,H_DIS);
Haus[h_id][haus_label] = CreateDynamic3DTextLabel(str,-1,Haus[h_id][haus_x],Haus[h_id][haus_y],Haus[h_id][haus_z],20,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,0,-1,-1,-1,100);
Haus[h_id][haus_vkt] = 0;
SaveHauser();
SetPVarInt(playerid,"Haus",0);
return SendClientMessage(playerid,-1,"Du hast das Haus erfolgreich verkauft.");
}
Du weißt, dass es auch "UpdateDynamic3DTextLabelText" gibt, oder? Du musst es nicht löschen und wieder erstellen, außer das ist so beabsichtigt.
Sowas?
http://forum.sa-mp.com/showthread.php?t=404367
Oder sowas?
http://forum.sa-mp.com/showthread.php?t=189171
http://forum.sa-mp.com/showthread.php?t=420595
Die Systeme können ja leicht abgeändert werden, falls es nicht ganz passt.