Außerdem muss das DisablePlayerCheckpoint nach oben geholt werden.
Schreibe es so:
public OnPlayerEnterCheckpoint(playerid)
{
DisablePlayerCheckpoint(playerid);
if(GetPVarInt(playerid, "fege_job"))
{
//Wenn trash job ausgeführt
new cID = GetPVarInt(playerid,"fege_cp");
cID++;
if(cID >= sizeof(fCPs))
{
new trinkgeld = random(10);
GivePlayerMoney(playerid, 10+trinkgeld);
SetPVarInt(playerid,"fege_cp",0);
ShowPlayerDialog(playerid,DIALOG_FFEGEN,DIALOG_STYLE_MSGBOX,"Fege-Job","Du hast also das Gefängnis durchfegt, ja?\nGut! Hier hast du ein bisschen Geld.\nSeh es als eine Belohnung!","Okay","Abbrechen");
SetPlayerCheckpoint(playerid, fCPs[0][f_x],fCPs[0][f_y],fCPs[0][f_z], 5);
}
else
{
SetPVarInt(playerid,"fege_cp",cID);
SetPlayerCheckpoint(playerid, fCPs[cID][f_x],fCPs[cID][f_y],fCPs[cID][f_z], 5);
}
return 1;
}
if(GetPVarInt(playerid, "muell_job"))
{
//Wenn trash job ausgeführt
new cID = GetPVarInt(playerid,"muell_cp");
cID++;
if(cID >= sizeof(fCPs))
{
new muellgeld = random(10);
GivePlayerMoney(playerid, 200+muellgeld);
SetPVarInt(playerid,"muell_cp",0);
ShowPlayerDialog(playerid,DIALOG_FFEGEN,DIALOG_STYLE_MSGBOX,"Muell-Job","Du hast den Müll der Stadt erfolgreich beseitigt.\nDein Geld solltest du erhalten haben.","Okay","Abbrechen");
SetPlayerCheckpoint(playerid, fCPs[0][f_x],fCPs[0][f_y],fCPs[0][f_z], 5);
}
else
{
SetPVarInt(playerid,"muell_cp",cID);
SetPlayerCheckpoint(playerid, mCPs[cID][m_x],mCPs[cID][m_y],mCPs[cID][m_z], 5);
}
return 1;
}
return 1;
}
Beiträge von Jeffry
-
-
Da du auch einen Thread aufgemacht hast antworte ich dir nun hier, lösche bitte den letzten Post im Sammelthread, das muss ja nicht doppelt diskutiert werden.
Zum Problem:
Alles anzeigenSpoiler anzeigen Hat geklappt, Danke
if(engine==1)
{
engine = 0;
GameTextForPlayer(playerid,"Motor ~r~ausgeschaltet",600,5);
}
else
{
GetVehicleHealth(vID, health);
if(health<=250)return SendClientMessage(playerid,ROT,"Motorschaden");
if(motorschaden[vID]==1)return SendClientMessage(playerid,ROT,"Abgesoffen");
engine = 1;
GameTextForPlayer(playerid,"Motor ~g~eingeschaltet",600,5);
Habe jedoch an der selben Stelle jetzt noch ein Problem mit dem "Motorschaden"
Funktioniert nicht, verstehe aber nicht wieso..
new Float:health;
Ist auch vorhanden, nur etwas weiter oben in der Funktion.Siehst du den Fehler?
Jeffry:
Was genau geht denn nicht, wenn du den Code so hast? -
Du hast den Code aber nicht aktualisiert, sonst würde der Log der kommt anders aussehen.
Ändere den Code bitte zu dem was ich dir gegegeben habe und teste es nochmal.EDIT:
@xCurry: Alles klar, super!
-
Du kannst die pVars nur für Spieler nutzen, die im Server online sind, das geht nicht für Fahrzeuge (vID).
Nutze ein Array:
new test[MAX_VEHICLES];Und setze das auf 1, wenn erforderlich:
test[vID] = 1; -
Okey, teste es mal so:
for(new i=0; i<sizeof(Intenum); i++)
{
printf("i: %d", i);
if(IsPlayerInRangeOfPoint(playerid,2,Intenum[i][enterX],Intenum[i][enterY],Intenum[i][enterZ]))
{
printf("In Range. Fraktion: %d / F_ID: %d / F_ID2: %d / pWorld: %d / iWorld: %d", sInfo[playerid][fraktion], Intenum[i][F_ID], Intenum[i][F_ID2], GetPlayerVirtualWorld(playerid), Intenum[i][Worldid]);
if(sInfo[playerid][fraktion] == Intenum[i][F_ID] || Intenum[i][F_ID] == -1)
{
printf("1pWorld: %d / iWorld: %d", GetPlayerVirtualWorld(playerid), Intenum[i][Worldid]);
if(GetPlayerVirtualWorld(playerid) == Intenum[i][Worldid])
{
printf("Setze Position");
SetPlayerPos(playerid,Intenum[i][exitX],Intenum[i][exitY],Intenum[i][exitZ]);
SetPlayerFacingAngle(playerid,Intenum[i][exitR]);
SetPlayerInterior(playerid,Intenum[i][InteriorID]);
SetPlayerVirtualWorld(playerid,Intenum[i][InteriorVirtualWorld]);
SetCameraBehindPlayer(playerid);
return 1;
}
}
else if(sInfo[playerid][fraktion] == Intenum[i][F_ID2] || Intenum[i][F_ID2] == -1)
{
printf("2pWorld: %d / iWorld: %d", GetPlayerVirtualWorld(playerid), Intenum[i][Worldid]);
if(GetPlayerVirtualWorld(playerid) == Intenum[i][Worldid])
{
printf("Setze Position");
SetPlayerPos(playerid,Intenum[i][exitX],Intenum[i][exitY],Intenum[i][exitZ]);
SetPlayerFacingAngle(playerid,Intenum[i][exitR]);
SetPlayerInterior(playerid,Intenum[i][InteriorID]);
SetPlayerVirtualWorld(playerid,Intenum[i][InteriorVirtualWorld]);
SetCameraBehindPlayer(playerid);
return 1;
}
}
else if(GetPlayerVirtualWorld(playerid) == Intenum[i][Worldid])
{
printf("Kein Eintritt.");
SendClientMessage(playerid,ROT,"Du hast hier Kein eintritt!");
return 1;
}
}
}
Wenn es nicht geht, poste was im Log steht. -
Dann debugge es bitte so und poste dann was im Server Log steht, wenn du dort versuchst rein zu gehen.
for(new i=0; i<sizeof(Intenum); i++)
{
printf("i: %d", i);
if(IsPlayerInRangeOfPoint(playerid,2,Intenum[i][enterX],Intenum[i][enterY],Intenum[i][enterZ]))
{
printf("In Range. Fraktion: %d / F_ID: %d", sInfo[playerid][fraktion], Intenum[i][F_ID]);
if(sInfo[playerid][fraktion] == Intenum[i][F_ID] || Intenum[i][F_ID] == -1)
{
printf("pWorld: %d / iWorld: %d", GetPlayerVirtualWorld(playerid), Intenum[i][Worldid]);
if(GetPlayerVirtualWorld(playerid) == Intenum[i][Worldid])
{
printf("Setze Position");
SetPlayerPos(playerid,Intenum[i][exitX],Intenum[i][exitY],Intenum[i][exitZ]);
SetPlayerFacingAngle(playerid,Intenum[i][exitR]);
SetPlayerInterior(playerid,Intenum[i][InteriorID]);
SetPlayerVirtualWorld(playerid,Intenum[i][InteriorVirtualWorld]);
SetCameraBehindPlayer(playerid);
return 1;
}
}
else if(sInfo[playerid][fraktion] == Intenum[i][F_ID2] || Intenum[i][F_ID2] == -1)
{
printf("pWorld: %d / iWorld: %d", GetPlayerVirtualWorld(playerid), Intenum[i][Worldid]);
if(GetPlayerVirtualWorld(playerid) == Intenum[i][Worldid])
{
printf("Setze Position");
SetPlayerPos(playerid,Intenum[i][exitX],Intenum[i][exitY],Intenum[i][exitZ]);
SetPlayerFacingAngle(playerid,Intenum[i][exitR]);
SetPlayerInterior(playerid,Intenum[i][InteriorID]);
SetPlayerVirtualWorld(playerid,Intenum[i][InteriorVirtualWorld]);
SetCameraBehindPlayer(playerid);
return 1;
}
}
else
{
printf("Kein Eintritt.");
SendClientMessage(playerid,ROT,"Du hast hier Kein eintritt!");
return 1;
}
}
} -
Der Code an sich ist soweit korrekt.
-
In Ordnung, dann würde ich dir am Samstag (morgen) Abend nochmal genau Bescheid sagen, wie es von der Zeit her klappt. Ich gehe aber davon aus, dass ich nachmittags Zeit habe, mir das anzuschauen.
Außer es findet sich noch jemand anderes, der dir das machen will, dann sagst halt Bescheid. Aber nicht vergessen ein Backup zu machen, falls es nicht klappt
-
-
Eigentlich solltest du da eine Warnung erhalten, denn bei deinem ersten MoveDynamicObject fehlt hinten der Speed, den musst du noch hinzuzufügen.
Beim zweiten MoveDynamicObject ist der Speed auf 3, das kannst du gegebenenfalls kleiner machen. -
SetObjectMaterialText Tutorial: http://forum.sa-mp.com/showthread.php?t=361737
Zum Attachen: Dieser Editor (http://forum.sa-mp.com/showthread.php?t=282883) gibt dir die Koordinaten für: http://wiki.sa-mp.com/wiki/AttachObjectToVehicle -
Was heißt denn, es geht nicht?
Kommt die Nachricht, dass du keinen Zutritt hast, oder was passiert? Siehst du das Pickup? -
Den Teil von OnPlayerEnterVehicle zu:
for(new i=0; i<MAX_FAUTOS; i++)
{
if(vehicleid == FAutos[i][Fahrzeugfraku])
{
if(FAutos[i][fraktionsnummer] == PlayerInfo[playerid][pLeader] || FAutos[i][fraktionsnummer] == PlayerInfo[playerid][pMember])
{
autoidfrakauto[playerid] = FAutos[i][Fahrzeugfraku];
}
else
{
SendClientMessage(playerid,COLOR_RED,"Das Auto darfst du nicht verwenden");
TogglePlayerControllable(playerid,false);
TogglePlayerControllable(playerid,true);
return 1;
}
}
}
Problem war, dort stand zum Teil vehicleid im Index, was nach den Änderungen nicht mehr gepasst hat. Mit ziemlicher Wahrscheinlichkeit dürfte jetzt alles klappen.PS: Ich hab den falschen BB Code in einem der Posts von mir oben behoben, da war ja alles Fett geschrieben, hab ich am Handy gar nicht bemerkt.
PS2: In den letzten beiden Posts hast du das Problem sehr gut beschrieben, das war genau was nötig war. Nächstes mal machen wir das gleich so
EDIT: (Post unten)
M_McGarrett: Auch wenns etwas gedauert hat, man darf nur nicht aufgeben. Gerne
-
-
Nein, dazu musst du
stock IsNumeric(str[]) //©Jeffry
{
if(!strlen(str)) return 0;
for (new i = 0, j = strlen(str); i < j; i++) if(str[i] > '9' || str[i] < '0') return 0;
return 1;
}
verwenden.if(!IsNumeric(inputtext)) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nur Zahlen.");
-
Ok, da kommen wir der Sache schon näher.
Zwischen Punkt 7 und 8 bist du nicht in den Streifenwagen eingestiegen, oder?
Poste bitte jetzt folgende Codes:
- /v Befehl
- OnPlayerEnterVehicle (& OnPlayerStateChange, falls da was drin ist)
- /fauto
- den Dialog dazu
- /fpark -
inputtext[10]
und
inputtext[0]
zu:
strval(inputtext)Und
if(IsPlayerInRangeOfPoint(playerid,5,-348.20001, 2771.3999, 91.4) | IsPlayerInRangeOfPoint(playerid,5,-1316.1, 2319.5, 128.60001))
zu:
if(IsPlayerInRangeOfPoint(playerid,5,-348.20001, 2771.3999, 91.4) || IsPlayerInRangeOfPoint(playerid,5,-1316.1, 2319.5, 128.60001)) -
Geht bei mir nicht, da bin ich noch nicht zu Hause. Ich kann dir frühestens Sonntag anbieten, dass ich es mir da mal anschaue, wenn es bis dahin noch nicht erledigt ist. Ansonsten, und das wäre der bessere Weg, mache das was ich dir gesagt habe mal und poste dann den Log der kommt, wenn du versuchst dich einzuloggen.
Rückgängig kannst du das ja immer noch machen, wenn du ein Backup zuvor machst (nicht vergessen!).
-
Für mich ist der Stand immer noch: "Irgendwo ist ein Fehler der irgendwann auftritt."
Darum habe ich dir gesagt, du sollst herausfinden wie du den Fehler reproduzieren kannst. Das heißt, du bekommst es mindestens zwei mal hintereinander (Server aus, Tabelle leeren) hin, den Fehler auf identische Weise zu produzieren.
Diese Schrittfolge führt dann IMMER zum Fehler. Und diese sollst du dann posten.Jetzt ganz einfach:
Finde den Weg mit dem du den Fehler jedes mal (nicht nur einmal! mindestens zwei mal, besser drei mal) 1:1 erzeugen kannst, nachdem du die Tabelle geleert hast und den Server neu gestartet hast. Dann poste die Schritte, die du gemacht hast, in folgendem Format (Beispiel):0.) Tabelle geleert
1.) Server gestartet
2.) Fahrzeug mit /v gespawnt
3.) Eingestiegen
4.) Ausgestiegen
5.) Fahrzeug mit /wasweißich erstellt
6.) Über den Dialog der dann kommt gekauft (Fahrzeug Model so und so)
7.) ...Wenn du die Liste hast, gehst du sie nochmal 1:1 so durch und schaust ob der Fehler wieder auftritt. Wenn ja, postest du sie so.
Bitte mach das so, dann kann ich dir den nächsten Schritt sagen. Wir müssen das jetzt halt Schritt für Schritt machen, bis wir wissen wo der Fehler liegt. Dazu müssen wir halt wissen wie er zustande kommt.

-
Warum denn das? Jedem Server reicht eigentlich eine MySQL Verbindung zur Datenbank. Du musst keine 4-fache Verbindung zur gleichen Datenbank aufbauen. Das bringt nur was, wenn du Daten in verschiedenen Datenbanken hast, was du aber nicht hat, da du vier mal die gleichen Daten zum Login angibst.
Was funktioniert denn dann nicht mehr, wenn du das änderst?Du kannst ja mal ein Backup von deinem Code machen und es dann testen, dann hast du keinen Aufwand falls es nicht klappt.