Wie verteile ich Car ID´s? Also man muss suchen welche ID da ist und dann eine neue ID geben, nur wie?
Car ID
- Weed
- Geschlossen
- Erledigt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Der Server startet bei einer Seite der Karte und vergibt nacheinander IDs den Autos
-
er verteilt die carid´s automatisch?
-
xD
der server vergibt die IDs in der reihenfolge in der sie im script gespawnt werden.
-
geil dachte man muss die selber bestimmen, naja danke
-
du kannst dir die id des fahrzeugs beim spawnen auch zurückgeben lassen
beispiel:
new carid;carid = addstaticvehicle(....);
-
Ich kann doch auch für ne dini datei auslesen oder?, d.h. new carid = GetVehicleID(playerid); oder?
-
diese funktion gibt die id des fahrzeugs zurück in dem der spieler gerade sitzt. diese id´s sind nur für die laufzeit geeignet und sollten dynamisch gespeichert werden(id verschiebung und so)
was willst du damit erreichen? -
naja ich brauche eine methode damit autos feste id´s bekommen für nen carowner system
-
-
ne will das anders machen, und zwar dass man die autos zum einen IG saven kann und das die einer bestimmten person gehören keine fraktion also mit der dini datei
-
Das spielt doch keine Rolle. Wenn du die Autos einfach alle normal einfügst und deren Struktur nicht irgendwie veränderst, kannst du die CarID immer mit GetPlayerVehicleID bestimmen
Beispiel
// Oben, kannst auch in ein enum machen
new
pCarID[MAX_PLAYERS],
bool:vOwned[MAX_VEHICLES];// OnPlayerConnect
pCarID[playerid] = 0; // = kein Fahrzeug, da 0 keine gültige ID ist// Fahrzeugkauf
if(GetPlayerState[playerid] != PLAYER_STATE_DRIVER) return 1;
new
carid = GetPlayerVehicleID(playerid);
if(vOwned[carid]) return SendClientMessage(playerid, FARBE, "Fahrzeug ist besetzt");
pCarID[playerid] = carid;
vOwned[carid] = true;// Fahrzeugverkauf
if(GetPlayerState[playerid] != PLAYER_STATE_DRIVER) return 1;
new
carid = GetPlayerVehicleID(playerid);
if(pCarID[playerid] != carid) return SendClientMessage(playerid, FARBE, "Dieses Fahrzeug gehört nicht dir");
pCarID[playerid] = 0;
vOwned[carid] = false;// Überprüfen ob Spieler das Fahreug besitzt ( für alle Möglichen Autobefehle )
if(GetPlayerState[playerid] != PLAYER_STATE_DRIVER) return 1;
if(pCarID[playerid] != GetPlayervehicleID(playerid)) return SendClientMessage(playerid, FARBE, "Dieses Fahrzeug gehört nicht dir"); -
was mit fraktionen funktioniert, funktioniert auch mit personen.
mit sql ist das einfacher weil da jeder spieler eine eindeutige id hat. -
Das erleichert zwar einige Dinge, in diesem Fall braucht man aber nur die jeweilige Autoid, die normalerweise immer gleich bleibt, besonders wenn man einfach eine neue Tabelle erstellt in der Datenbank (MySqlID = Carid)...
In deine "cars" Tabelle trägst du deine Autodaten ein (id, x, y, z, farbe1, farbe2, locked usw.) mit natürlich MySqlID = carid und in der "users" tabelle einfach einen Eintrag mit car, wobei car = Carid (= MysqlID des Autos in der Datenbank) ist... wie oben schon gemacht.
Das Ganze natürlich ungefähr so ähnlich wie oben... -
das stimmt nicht wirklich.
die id in der datenbank entspricht nicht inbedingt der ingame.
man muss die sql id für jedes fahrzeug speichern.
aber darum gehts hier ja nicht, er wills als dini speichern.
edit: es ist ziemlich blöd sich darauf zu verlassen dass die ids sich nicht ändern, wenn sie es dann doch mal tun hast du viiiiiiiiieeeeeeeeeel arbeitbau das mit den fraktionsids um und speicher die autos mit dem namen des besitzers oder gib jedem spieler eine eindeutige id.
-
Naja aber wie mache ich das, dass die ID´s nicht verrutschen? Und eigentlich würde ich eher nach dem Owner abfragen, nicht nach der ID. Nur man soll nach der ID suchen(notfalls nach dem owner) und der dini name soll die ID sein. Achso und noch was: wie frage ich ab welches bzw ob ein auto vor einem steht??????
-
Zitat
edit: es ist ziemlich blöd sich darauf zu verlassen dass die ids sich nicht ändern, wenn sie es dann doch mal tun hast du viiiiiiiiieeeeeeeeeel arbeit
Es ist nicht selbstverständlich, dass sie nicht verrutschen, aber wenn mans richtig anstellt verrutschen sie nicht und alles hat seinen Platz. Na ja wie sollen Autops auch groß verrutschen, wenn du sie in der Datenbank hast und per Schleife am Anfang lädst. Wenn du natürlich DestroyVehicle anwenden willst, wird es ein wenig mehr Aufwand, aber auch machbar, aber wer braucht bei einem Autosystem schon ein Destroyvehicle. Einfach wieder zum verkaufen stellen reicht. Und nach dieser Methode sparst du
1.) Zeit
2.) ist es übersichtlicher, wenn die MySQL ID = carid ist
3.) einfacher alles zu überprüfen und es zu pflegen
4.) man spart sich die nervige Zuweisung
Aber wie du schon sagtest ist sicherlich gewöhnungssache und beides hat seine Vorteile, aber es geht hier um was anderesNaja aber wie mache ich das, dass die ID´s nicht verrutschen? Und eigentlich würde ich eher nach dem Owner abfragen, nicht nach der ID. Nur man soll nach der ID suchen(notfalls nach dem owner) und der dini name soll die ID sein. Achso und noch was: wie frage ich ab welches bzw ob ein auto vor einem steht??????
Nach dem Owner kannst du auch gehen, das wäre natürlich auch ein Weg, strcmp ist da dein Stichwort dann. Wenn du es per Owner machen willst trägst du den Owner in die Datei ein des bfahrzeugs und lädst den Namen in eine variable beim laden des Fahrzeugs. Diese kannst dann mit dem Namen des Spielers vergleichen (strcmp) und du weisst, dass er der Besitzer ist. Wies mit IDs geht hab ich oder Nacho schon oben gezeigt.
Ein Fahrzeug in der Nähe kriegst du raus, indem du durch alle fahrzeuge schleifst und den Abstand jeweils miteinander vergleichst... -
mann im mond... man brauch kein system aber es ist viel übersichtlicher und einfacher mit.
man könnte bei vielen dingen bei den man ein flaschenzug benutzt auch ohne arbeiten aber es macht das ganze viel einfacher.
mit dem richtigen system brauch meine keine einzige id raus zu suchen xD ich hab noch nie ein befehl wie "oldcar" benutzt und in meinem script hat jeder spieler mehrere eigene autos die spawnen wenn er aufn server kommt und zerstört werden wenn er runter geht.
ausserdem hab ich firmenautos in die auch nur angestellte kommen und ich hab nie eine id raus gesucht und keine angst vor id verschiebung. -
Wie schon gesagt das ist sicherlich ansichtssache und es gibt genug Varianten den Besitzer zu überprüfen, ob jetzt über die CarID, den Namen oder nach deiner Variante...
Zitatmit dem richtigen system brauch meine keine einzige id raus zu suchen xD ich hab noch nie ein befehl wie "oldcar" benutzt und in meinem script hat jeder spieler mehrere eigene autos die spawnen wenn er aufn server kommt und zerstört werden wenn er runter geht.
Den alten Car des Spielers rauszufinden ist auch bei der ID Methode nicht notwendig. Nach deiner Methode, dass Autos erst bei Connect spawnwn und bei Disconnect verschwinden, ist natürlich die ID Möglichkeit nicht möglich, wenn die Autos allerdings die gleiche Zeit stehen bleiben sollen (ich denke für Roleplay Server am angesprachtesten, dann so auch wieder mehr Möglichkeiten entstehen (Klauen usw.)) dann brqaucht man keine Angst vor der ID Verschiebug haben und wie oben schon gesagt ist das mit DestoryVehicle und Nachdenken auch kein Problem. Mir ist es persönlich egal, was wer benutzt, ich wollte nur noch ne Möglichkeit aufzählen mit der man die Ids genauso rausfinden kann - wie ICH finde eine einfache und zeitsparende Möglichkeit. Aber jeder soll es so machen, wie er am besten denkt, dass es für sein System am Besten istZitatausserdem hab ich firmenautos in die auch nur angestellte kommen und ich hab nie eine id raus gesucht und keine angst vor id verschiebung.
Das ist mit der ID Methode auch rein gar kein Problem, einfach eine Variable setzen, die das team speichert und dann beim Einsteigen diese Überprüfen lassen...
Angst vor ID Verschiebung braucht man da auch nciht haben, wenn man das System entsprechend schreibt...
Jede Methode hat seine Vor- und Nachteile, die Diskussion ist daher irgendwie sinnlos -
Naja aber wie mache ich das, dass die ID´s nicht verrutschen? Und eigentlich würde ich eher nach dem Owner abfragen, nicht nach der ID. Nur man soll nach der ID suchen(notfalls nach dem owner) und der dini name soll die ID sein. Achso und noch was: wie frage ich ab welches bzw ob ein auto vor einem steht??????
Wenn du kein MSql hast/benutzen willst, empfiehlt sich diese Methode:
forward IsWasweißichCar(vehicleid);
new WasweißichCar[3]; //Anzahl der von dir gebrauchten Wagen, es startet bei 0, sprich: WasweißichCar[0], WasweißichCar[1], usw.OnGameModeInit:
WasweißichCar[0] = AddStaticVehicleEx(597,-1616.6116,750.0524,-5.4734,179.6568,103,8,-1); // Car1
WasweißichCar[1] = AddStaticVehicleEx(597,-1612.5254,750.0016,-5.4732,179.7786,103,8,-1); // Car2
WasweißichCar[2] = AddStaticVehicleEx(597,-1608.4707,750.0336,-5.4738,181.3003,103,8,-1); // Car3Ganz Unten ins Script:
public IsWasweißichCar(vehicleid)
{
for(new i = 0; i < sizeof(WasweißichCar); i++)
{
if( vehicleid == WasweißichCar[i])
{
return 1;
}
}
return 0;
}Aufrufen kannst du dann das ganze mit:
if(IsWasweißichCar(vehicleid))
{
//usw.
}Hoffe hat dir geholfen
-