Genau so. Bein abgeben musst du es dann eben so machen:
if(radbmx[playerid] != 0)
{
KillTimer(leihbmxtimer[playerid]);
leihbmxtimer[playerid]=-1;
RadbmxTimer(playerid);
}
Dann klappt es.
Genau so. Bein abgeben musst du es dann eben so machen:
if(radbmx[playerid] != 0)
{
KillTimer(leihbmxtimer[playerid]);
leihbmxtimer[playerid]=-1;
RadbmxTimer(playerid);
}
Dann klappt es.
Ja, genau.
Wie startest du denn die Timer die du zu beenden versuchst? Der Aufruf ist falsch, aber ich kann dir erst sagen wie es richtig ist, wenn ich weiß wie du sie startest.
Für die richtige Formatierung das hier lesen: Der Pawn BB Code - Die richtige Anwendung
Für die richtige Problembeschreibung das hier lesen: Tipps: Scripting-Probleme richtig erklären
Dann nochmal versuchen.
EDIT:
Wezpe: Les dir doch den Thread zur PWN Code Funktion durch, dann geht das schon.
Zum Problem: Bist du überhaupt in dem Clan 10?
SetPlayerScore(playerid,sInfo[playerid][level] +1);
zu:
sInfo[playerid][level]++;
SetPlayerScore(playerid,sInfo[playerid][level]);
Das liegt an dem return in der Schleife.
So:
ocmd:getmycar(playerid,params[])
{
if(!isAdmin(playerid,1))return SendClientMessage(playerid,C_Error,"DU hast keine Berechtigung für diesen Befehl!");
new string[300];
for(new i=0; i<sizeof(cInfo); i++)
{
if(cInfo[i][besitzer]!=sInfo[playerid][db_id]) continue;
format(string, sizeof(string), "%s\n%s",string,VehicleName[cInfo[i][model]-400]);
}
ShowPlayerDialog(playerid,GetMyCar,DIALOG_STYLE_LIST,"Meine Fahrzeuge",string,"Wählen","Abbrechen");
return 1;
}
Weder noch. So würde immer continue aufgerufen werden.
So:
if(vModel != 509 && vModel != 510 && vModel != 481)continue;
Wenn du nur diese erlauben willst.
Muss ich dann das Textdraw bei OnPlayerStateChange auch noch formatieren ?
Und was wird bei OnPlayerUpdate gemacht? wird da automatisch jede Sekunde oder sowas das Callback neu ausgeführt?
1) Wenn es direkt angezeigt werden soll, ja.
2) Ich würde dir raten es in einen Timer (der jede 100ms aufgerufen wird, oder 200ms) zu packen, denn OnPlayerUpdate wird ca. 30-50 mal pro Sekunde aufgerufen, das ist nicht wirklich sinnvoll.
EDIT: Es werden ebenfalls die Virtual World und das Interior verändert, liegts vllt daran?
Nein, es liegt an der Fallschirm-Zu-Animation. Wenn du daraus ein SetPlayerPos machst, dann stirbt der Spieler.
Lösung:
Fallschirm entfernen (mit der Funktion von mir).
Ggf. kurzen Timer setzen (soviel ich weiß braucht es einen kurzen Timer (100ms dürften reichen, das merkt keiner), SetTimerEx)
SetPlayerPos
Dann ändere es zu:
printf("playerid: %d | id: %d", playerid, id);
printf("ah_id: %d | max: %d", ahCars[id][ah_id], sizeof(ahInfo));
printf("fcarcreate");
fcarcreate(sInfo[playerid][fraktion],ahCars[id][model],ahInfo[ahCars[id][ah_id]][s_x],ahInfo[ahCars[id][ah_id]][s_y],ahInfo[ahCars[id][ah_id]][s_z],ahInfo[ahCars[id][ah_id]][s_r],-1,-1);
Und:
fcarcreate(fraktionid,modelid,Float:x,Float:y,Float:z,Float:a,color1,color2)
{
printf("aufgerufen");
for(new i=0; i<MAX_FRAC_VEHICLES; i++)
{
printf("i: %d | vid: %d", i, fracVehicle[i][e_vID]);
if(fracVehicle[i][e_vID] == 0)
{
fracVehicle[i][e_modelID] = modelid;
fracVehicle[i][e_x] = x;
fracVehicle[i][e_y] = y;
fracVehicle[i][e_z] = z;
fracVehicle[i][e_a] = a;
fracVehicle[i][e_color1] = color1;
fracVehicle[i][e_color2] = color2;
fracVehicle[i][e_fracID] = fraktionid;
new query[256];
format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, PosX, PosY, PosZ, PosA, Color1, Color2, FracID) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
i, fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], fracVehicle[i][e_fracID]);
mysql_query(dbhandle, query);
fracVehicle[i][e_vID] = CreateVehicle(fracVehicle[i][e_modelID], fracVehicle[i][e_x], fracVehicle[i][e_y], fracVehicle[i][e_z], fracVehicle[i][e_a], fracVehicle[i][e_color1], fracVehicle[i][e_color2], -1);
return 1;
}
}
return 1;
}
Und poste dann was im Log steht, wenn du ein Fahrzeug kaufst.
Wenn du es bei OnPlayerStateChange mit newstate und oldstate prüfst, dann wird es ja nur dann gemacht wenn es auch benötigt wird.
Selbst wenn nicht, das führt zu keinen Lags, auch nicht wenn du 1000 Spieler drauf hast. Voraussetzung ist natürlich, dass du es richtig machst.
Weil du das so wolltest, ich hatte dich zu Anfang mal danach gefragt. ![]()
Schreibe das Speichern so, dann geht es wie du es jetzt willst:
format(query, sizeof(query), "%sWanteds = '%d', Knast = '%d', Knastzeit = '%d', KnastzeitBis = '%d', Knastskin = '%d', Sterne = '%d', Verbrechen = '%d', wTot = '%d', Inhaftiert = '%d' WHERE Name = '%s'", query,
SpielerInfo[playerid][pWanteds], SpielerInfo[playerid][pKnast], SpielerInfo[playerid][pKnastzeitBis]-gettime(),SpielerInfo[playerid][pKnastzeitBis], SpielerInfo[playerid][kSkin], SpielerInfo[playerid][pSterne],SpielerInfo[playerid][pVerbrechen],SpielerInfo[playerid][wTot],SpielerInfo[playerid][pInhaftiert], SpielerInfo[playerid][pName]);//1807
Wir ziehen einfach von der "ZeitBis" die momentane Zeit (also die vom Speicher-Zeitpunkt) ab, dann wissen wir, wie lange er noch im Knast sein muss.
Falsch war daran gar nichts, ich habe nur die Reihenfolge etwas geändert und einige Variablen, die unnötig waren, entfernt, manchmal hilft das. Diesmal scheint es so gewesen sein.
Dann ist ja gut. ![]()
Oder du leerst die Variable vor Verwendung. Dafür einfach vor dem switch in der dritten Zeile von OnPlayerRequestFriendNames das einfügen:
szFriendList="";
Da können wir nur probieren.
Versuch es mal so:
Wenn das nicht geht, so:
Wird dir dann irgendwas angezeigt?
Dann ändere zu den zwei gelöschten Zeilen noch
if(NoobCar[playerid] != 999)
Zu
if(NoobCar[playerid] != 0)
Und
NoobCar[playerid] = 999;
Zu
NoobCar[playerid] = 0;
Falls es dann noch immer nicht geht, poste den Befehl nochmal wie du ihn dann hast.
EDIT: (Post unten)
JohnyDream: Siehe PN. ![]()
Hier lädt er das R31 runter.
http://m.youtube.com/watch?v=KwCjgwNvi20
Das kann ich mir nicht erklären. ![]()
Hast du zufällig eine mehrzeilige Meldung im Compiler, mit vielen Zahlen?
Schalte bitte den MySQL Debug Modus an und poste dann was im MySQL Log steht, wenn du ein Haus kaufst.
Wie du das machst siehst du hier: Tipps: Scripting-Probleme richtig erklären (Kapitel 1.4)
Ok, dann mach das mit den Prints und poste dann wieder hier. Nur so (oder mit dem crashdetect Plugin) kannst du genau erkennen an welcher Zeile der Fehler ist. ![]()