Beiträge von Edgar
-
-
-
-
seid
seidt bitte.. Damit auch @ShadowKev1999 mitreden kann
-
Ich würde das folgendermaßen aufbauen:
Füge deinem Vehicle-Enum noch einen Wert hinzu, bspw: fvehInUse (als Boolean-Wert)
Damit kannst du prüfen, ob der Index/Slot bereits in Verwendung ist.
Diesen Wert musst du immer auf true setzen, wenn du ein Fahrzeug erstellst und somit diesen Slot verwendest und auf false, wenn du diesen wieder freigibst.
Mit dieser Funktion kannst du den nächsten freien slot erhalten.
Code: getNextFreeVehicleSlot.stock.incstock getNextFreeVehicleSlot() { for(new i; i < MAX_FRAK_VEHICLE; i++) { if (!fVehInfo[i][fvehInUse]) return i; } return -1; }
Dann kannst du das folgendermaßen in deinen Befehl einbauen:
Code: fcreateveh.ocmd.inc
Alles anzeigenocmd:fcreateveh(playerid, params[]) { new frak, model, Float:pos[4], color[2], sirene, msg[128], query[1024]; if(!pInfo[playerid][pLoggedIn]) return SendClientMessage(playerid, COLOR_ROT, "* Fehler"HTML_WEISS": Du bist nicht eingeloggt."); if(pInfo[playerid][pTeam] == 0) return SendClientMessage(playerid, COLOR_ROT, "* Fehler"HTML_WEISS": Du bist kein Teammitglied."); if(pInfo[playerid][pTeam] < 5) return SendClientMessage(playerid, COLOR_ROT, "* Fehler"HTML_WEISS": Dein Teammitglied Rang ist zu niedrig."); if(sscanf(params, "iiiii", frak, model, color[0], color[1], sirene))return SendClientMessage(playerid,COLOR_GELB, "* Benutze"HTML_WEISS": /fcreateveh [FraktionID] [ModelID] [Color1] [Color2] [Sirene(0/1)]"); if(frak < 1 || frak > 16) return SendClientMessage(playerid, COLOR_ROT, "* Fehler"HTML_WEISS": Die Fraktion existiert nicht. Benutze /fraktionen"); if(model < 400 || model > 611) return SendClientMessage(playerid, COLOR_ROT, "* Fehler"HTML_WEISS": Diese ModelID existiert nicht!"); if(GetPlayerVirtualWorld(playerid) != 0) return SendClientMessage(playerid, COLOR_ROT, "* Fehler"HTML_WEISS": Du musst in der Spielwelt sein!"); if(GetPlayerInterior(playerid) != 0) return SendClientMessage(playerid, COLOR_ROT, "* Fehler"HTML_WEISS": Du darfst in keinem Interior sein!"); GetPlayerPos(playerid, pos[0], pos[1], pos[2]); GetPlayerFacingAngle(playerid, pos[3]); new freeSlot = getNextFreeVehicleSlot(); if (freeSlot == -1) return SendClientMessage(playerid, COLOR_ROT, "* Fehler"HTML_WEISS": Es exisitieren keine weiteren freien Slots mehr."); fVehInfo[freeSlot][fvehInUse] = true; fVehInfo[freeSlot][fvehModel] = model; fVehInfo[freeSlot][fvehColor1] = color[0]; fVehInfo[freeSlot][fvehColor2] = color[1]; fVehInfo[freeSlot][fvehFraktion] = frak; fVehInfo[freeSlot][fvehX] = pos[0]; fVehInfo[freeSlot][fvehY] = pos[1]; fVehInfo[freeSlot][fvehZ] = pos[2]; fVehInfo[freeSlot][fvehR] = pos[3]; fVehInfo[freeSlot][fvehSirene] = sirene; mysql_format(Handle, query, sizeof(query), "INSERT INTO `fraktion_vehicle` (`VehID`, `VehModel`, `VehColor1`, `VehColor2`, `VehFraktion`, `VehX`, `VehY`, `VehZ`, `VehR`, VehSirene`) VALUES ('%d', '%d', '%d', '%d', '%d', '%f', '%f', '%f', '%f', '%d')", i, fVehInfo[freeSlot][fvehModel], fVehInfo[freeSlot][fvehColor1], fVehInfo[freeSlot][fvehColor2], fVehInfo[freeSlot][fvehFraktion], fVehInfo[freeSlot][fvehX], fVehInfo[freeSlot][fvehY], fVehInfo[freeSlot][fvehZ], fVehInfo[freeSlot][fvehR], fVehInfo[freeSlot][fvehSirene]); mysql_tquery(Handle, query); fVehInfo[freeSlot][fvehID] = CreateVehicle(fVehInfo[freeSlot][fvehModel], fVehInfo[freeSlot][fvehX], fVehInfo[freeSlot][fvehY], fVehInfo[freeSlot][fvehZ], fVehInfo[freeSlot][fvehR], fVehInfo[freeSlot][fvehColor1], fVehInfo[freeSlot][fvehColor2], fVehInfo[freeSlot][fvehSirene]); PutPlayerInVehicle(playerid, fVehInfo[freeSlot][fvehID], 0); format(msg, sizeof(msg), "* AdminInfo"HTML_WEISS": Du hast ein Fraktionsvehicle für die Fraktion %s erstellt.", fInfo[frak-1][fName]); SendClientMessage(playerid, COLOR_GELB, msg); return 1; }
Vergiss nicht, an den Stellen in deinem Script, an der du Fahrzeuge erstellst auch fVehInfo[freeSlot][fvehInUse] = true; zu verwenden und
da, wo du welche wieder löscht dann auf false.
Und dein Enum um fvehInUse erweitern.
Anmerkung zur deiner Methode mit IsValidVehicle:
Sollte das Fahrzeug irgendwann mal irgendwie verschwinden (Explodiert, nicht geladen, Troller und so weiter) dann wird das Fahrzeug durch dein Befehl überschrieben, da es nunmal nicht valide ist.
Mit meiner Empfehlung auf fvehInUse zu prüfen, hast du die alleinige Kontrolle über den "Datensatz", ob dieser verwenden wird oder nicht. Mit IsValidVehicle hingegen kann dir auch mal das Spielgeschähen dazwischen funken, das ist aber in diesem Fall nie gewollt.
Habe das schnell frei aus dem Kopf erledigt, könnte sein, dass da auch Denkfehler mitbei sind, einfach mal testen.
-
Das liegt vielleicht daran, dass der Thread vom 3. April 2011 ist und seitdem eine gewisse Zeit vergangen ist.
Vielleicht sollte man sich etwas neueres widmen.?
-
Ich gehe mal davon aus, dass der Fehler von fInfo[frak][fName] erzeugt wird. frak scheint größer zu sein, als der mögliche Index von fInfo zulässt.
Dabei noch eine Frage: Fragst du innerhalb der Schleife ab, ob das Fahrzeug valide ist und wenn nicht, dann soll er das Fahrzeug erstellen?
Das sieht alles nämlich etwas zu unkonventionell aus. Magst du mal sonst dein Befehl hier reinschreiben, dann kann man mal schauen, was man da verbessern kann.
-
Du gibst ja auch printf("%d", fVehInfo[i][fvehID]); in deiner Schleife an. Ich gehe mal davon aus, dass in der fvehID die Datensatz-ID des Fahrzeuges gespeichert ist.
Damit der Schleifendurchgang geprinted wird, brauchst du nur die lokale Variable i in deinem print angeben.
-
-
-
Meine bloße Existenz ist Geschenk genug
In meinem Fall trifft das zu. Für das Wochenende noch mal run'na in den Süden
-
-
-
-
-
-
lets gooo Edgar BEEF!!!!!!!11111111!!
Ich habe gleich eine sieben Stunden Fahrt vor mir. Kann mich mit der Vorschulgruppe leider nicht auseinandersetzen. Dafür sind aber die Erzieher da - die scheinbar nichts im Griff haben bada-bamm
-
Man kann sich auch an einem Thema festklammern.
ok
-
-