Beiträge von Simon2202
-
-
Hast du die include richtig abgelegt pawno -> includes ?
Hast du die Include oben includiert ? #include <ocmd> ?Hast du darauf geachtet die ocmd befehle außerhalb eines callbacks zu schreiben?
-
Ich bekomme den Mysql Fehler:
Code[11:57:31] [DEBUG] mysql_pquery - connection: 1, query: "SELECT * WHERE numplate = 'Simon'", callback: "OnNumplateCheck", format: "ds" [11:57:31] [DEBUG] CMySQLQuery::Execute[OnNumplateCheck] - starting query execution [11:57:31] [ERROR] CMySQLQuery::Execute[OnNumplateCheck] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE numplate = 'Simon'' at line 1 [11:57:31] [DEBUG] CMySQLQuery::Execute[OnNumplateCheck] - error will be triggered in OnQueryError
Bei dem Code:
Code
Alles anzeigenmysql_format(db_handle,query,sizeof(query),"SELECT * WHERE numplate = '%s'",inputtext); mysql_pquery(db_handle,query,"OnNumplateCheck","ds",playerid,inputtext); forward OnNumplateCheck(playerid,inputtext[]); public OnNumplateCheck(playerid,inputtext[]) { new num_rows,num_fields; cache_get_data(num_rows,num_fields,db_handle); if(num_rows == 0) { new query[250], t = autoanmeldung[playerid]; mysql_format(db_handle, query, sizeof(query),"UPDATE usercars SET numplate = '%s' anmeldung = 1 WHERE besitzer = '%s'",inputtext,GPlayerName(playerid)); mysql_pquery(db_handle, query); format(pCar[playerid][t][numplate],30,"%s",inputtext); SCM(playerid,iblau,"[INFO]:{FFFFFF} Du hast dein Auto nun mit dem Kennzeichen %s angemeldet",inputtext); pCar[playerid][t][anmeldung] = 1; } if(num_rows == 1) { ShowPlayerDialog(playerid,D_AUTOANMELDUNG2,DIALOG_STYLE_INPUT,"Kennzeichen","Das Kennzeichen gibt es bereits!","Annehmen","Abbrechen"); return 1; } return 1; }
Aber die Synthax des Befehles sollte doch passen?
-
Wo ist eigentlich der Unterschied zwischen mysql_pquery und mysql_tquery ?
-
Oh Okey, ich hab geschaut ob das ging und hatte mir gefreut als keine Fehlermeldung kam^^, Danke!
-
Hallo Community!
Ich habe mir einen SetPlayerPos Befehl gescriptet, um erstmal mich in die Interiors teleportieren zu können (Liste von dieser Seite: http://weedarr.wikidot.com/interior)
Das ist mein Befehl:
Code
Alles anzeigenocmd:setplayerpos(playerid,params[]) { if(PI[playerid][pAdmin] >= 2) { new pID,Float:x,y,z; if(sscanf(params,"dfff",pID,x,y,z))return SCM(playerid,frot,"[FEHLER]:{FFFFFF} /setplayerpos [ID] [x][y][z]"); SetPlayerPos(pID,x,y,z); SCM(playerid,agelb,"[ADMIN]:{FFFFFF} Du hast den Spieler %s zur Position x: %f y: %f z: %f teleportiert!",GPlayerName(pID),x,y,z); SCM(playerid,agelb,"[ADMIN]:{FFFFFF} Du wurdest vom Admin %s zur Position x: %f y: %f z: %f teleportiert!",GPlayerName(playerid),x,y,z); return 1; } SCM(playerid,frot,"[FEHLER]:{FFFFFF} Du hast nicht den nötigen Admin Rang"); return 1; }
Nun passiert aber wenn ich mich zu den Koordinaten der Bike School teleportiere (Letze in der Liste), ein Fehler der mein Spiel komplett zerstört, bzw muss ich dann den Server neu starten oder mich zu dem Punkt 0,0,0 teleportieren (bei z.B 0,0,5 passiert der gleiche Fehler)
Habe euch einen Screenshot angehängt! Was mache ich falsch?
-
Würde das so stimmen ?
Code
Alles anzeigen//Mapping Autos mappedveh[0] = CreateVehicle(462, 1090.6941, -1770.0234, 14.3565, 0.0000, -1, -1, 100); mappedveh[1] = CreateVehicle(462, 1147.4299, -1422.5265, 15.2127, -143.4600, -1, -1, 100); mappedveh[2] = CreateVehicle(462, 1153.6306, -1421.7272, 15.2127, -222.8401, -1, -1, 100); mappedveh[3] = CreateVehicle(462, 1151.9725, -1421.7941, 15.2127, -214.7401, -1, -1, 100); mappedveh[4] = CreateVehicle(462, 1149.4769, -1421.9351, 15.2127, -157.0800, -1, -1, 100); mappedveh[5] = CreateVehicle(467, 1283.9518, -1328.2206, 13.2532, -224.6400, -1, -1, 100); mappedveh[6] = CreateVehicle(467, 1284.0055, -1347.3550, 13.2532, -322.1396, -1, -1, 100); mappedveh[7] = CreateVehicle(419, 1277.0110, -1327.9097, 13.3567, -226.1400, -1, -1, 100); mappedveh[8] = CreateVehicle(419, 1277.1421, -1347.6913, 13.3567, -319.3199, -1, -1, 100); mappedveh[9] = CreateVehicle(575, 1270.9724, -1328.1798, 13.5402, 130.4399, -1, -1, 100); mappedveh[10] = CreateVehicle(575, 1270.9307, -1347.3547, 13.5402, 44.6999, -1, -1, 100); mappedveh[11] = CreateVehicle(567, 2136.3223, -1141.5262, 25.3669, 45.4200, -1, -1, 100); mappedveh[12] = CreateVehicle(567, 2120.6995, -1141.4346, 25.3669, -46.4400, -1, -1, 100); mappedveh[13] = CreateVehicle(542, 2135.6533, -1135.6560, 25.4329, 43.5000, -1, -1, 100); mappedveh[14] = CreateVehicle(542, 2120.8455, -1135.6439, 25.4329, -46.2600, -1, -1, 100); mappedveh[15] = CreateVehicle(533, 2120.6018, -1131.0588, 25.6744, -47.4000, -1, -1, 100); mappedveh[16] = CreateVehicle(533, 2136.1152, -1131.0679, 25.6744, 41.7000, -1, -1, 100); mappedveh[17] = CreateVehicle(558, 2120.0947, -1126.8286, 25.9268, -48.2400, -1, -1, 100); mappedveh[18] = CreateVehicle(558, 2136.3936, -1126.7816, 25.9268, 44.2800, -1, -1, 100); mappedveh[19] = CreateVehicle(411, -1661.6278, 1214.2506, 7.0415, -95.1000, -1, -1, 100); mappedveh[20] = CreateVehicle(541, -1658.5035, 1219.1040, 13.2104, -169.0200, -1, -1, 100); mappedveh[21] = CreateVehicle(451, -1651.5786, 1211.5494, 13.3709, -283.1400, -1, -1, 100); mappedveh[22] = CreateVehicle(429, -1667.5233, 1206.2064, 13.4886, -56.3400, -1, -1, 100); for(new i = 0;i<sizeof(mappedveh[]);i++) { SetVehicleParamsEx(mappedveh[i],0,0,0,1,0,0,0); }
-
Warum genau willst du denn die ID 0 verhinden? (Nur Interesse)
-
Hallo, wenn ich beim Mappen Autos einfüge bekomme ich die als "CreateVehicle(...)" Code, nur kann man jetzt einsteigen. Die Autos sollen beim Autohaus nur als Dekoration stehen, muss ich jetzt für jedes "SetVehicleParamsEx(...)" nutzen um sie zu zu sperren?
-
Hallo, ich habe ein Problem mit meinem /car lock Befehl:
Ich habe das ganze so geschrieben:
Code
Alles anzeigenocmd:car(playerid,params[]) { new var[30]; if(sscanf(params,"s",var)) return SCM(playerid,frot,"[FEHLER]:{FFFFFF} /car (lock/park)"); if(!strcmp(var,"park",true)) { if(!IsPlayerInAnyVehicle(playerid))return SCM(playerid,frot,"[FEHLER]:{FFFFFF} Du sitzt in keinem Auto"); new vID = GetPlayerVehicleID(playerid); if(!IsPlayerOwnerOfCar(playerid,vID))return SCM(plyerid,frot,"[FEHLER]:{FFFFFF} Das Auto gehört nicht dir!"); for(new i=0; i<sizeof(pCar[]); i++) { if(pCar[playerid][i][pc_vID] == vID) { new Float:pos_x,Float:pos_y,Float:pos_z,Float:pos_r; GetVehiclePos(vID,pos_x,pos_y,pos_z); GetVehicleZAngle(vID,pos_r); pCar[playerid][i][s_x] = pos_x; pCar[playerid][i][s_y] = pos_y; pCar[playerid][i][s_z] = pos_z; pCar[playerid][i][s_r] = pos_r; return 1; } } return 1; } if(!strcmp(var,"lock",true)) { new for(new i = 0; i<sizeof(pCar[]); i++) { new Float:distance = GetPlayerDistanceFromPoint(playerid,pCar[playerid][i][s_x],pCar[playerid][i][s_y],pCar[playerid][i][s_z]); if(distance <= 5) { if(lockstat[pCar[playerid][i][pc_vID] == 0) { lockstat[pCar[playerid][i][pc_vID]] = 1; return 1; } else { lockstat[pCar[playerid][i][pc_vID]] = 0; return 1; } } else { continue; } } return 1; } return 1: }
Ein Spieler kann 2 Autos haben, ich frage halt ab wie weit der Spieler von dem Auto entfernt ist, wenn er unter 5 Meter entfernt ist (Muss noch ausprobieren ob 5 Meter passt) dann kann er das auto auf/zusperren, ist er es nicht, wird das nächste auto abgefragt usw.
Nur wie beende ich die Schleife wenn alle autos durch sind? Also, dass dann ausgegeben wird, dass er sich nicht in der Nähe eines seiner Autos befindet?
Offtopic frage: Welchen Mapping Editor würdet ihr mir empfehlen?
-
Mit einem INSERT INTO Query.
Das ist mein Dialog für den Auto Kauf:
Code
Alles anzeigenif(dialogid == D_AH_OLDTIMER) { if(response) { new t = listitem, vID,ahid; new i = getFreeCarID(playerid); if(i == -1) return SCM(playerid,frot,"[FEHLER]:{FFFFFF} Du kannst maximal 2 Fahrzeuge besitzen!"); if(GetPlayerMoney(playerid) < ahCars[t][c_preis])return SCM(playerid,frot,"[FEHLER]:{FFFFFF} Du hast nicht genügend Geld"); GivePlayerMoney(playerid,-ahCars[t][c_preis]); ahid = ahCars[t][ah_id]; vID = CreateVehicle(ahCars[t][c_model],ahInfo[0][s_x],ahInfo[0][s_y],ahInfo[0][s_z],ahInfo[0][s_r],-1,-1,-1,0); pCar[playerid][i][pc_vID] = vID; pCar[playerid][i][modelid] = ahCars[t][c_model]; pCar[playerid][i][s_x] = ahInfo[ahid][s_x]; pCar[playerid][i][s_y] = ahInfo[ahid][s_y]; pCar[playerid][i][s_z] = ahInfo[ahid][s_z]; pCar[playerid][i][s_r] = ahInfo[ahid][s_r]; format(pCar[playerid][i][besitzer], MAX_PLAYER_NAME, GPlayerName(playerid));//Spielernamen einfügen SetVehicleParamsToNull(vID); SCM(playerid,mgrün,"[MSG]:{FFFFFF} Du hast das Auto %s um $%d gekauft, bitte parke es nun neu (/car park) und melde es an! (Checkpoint)",ahCars[t][c_name],ahCars[t][c_preis]); return 1; } SCM(playerid,mgrün,"[MSG]:{FFFFFF} Auf Wiedersehen"); return 1; }
Selbst wenn ich das ganze jetzt mit einem INSERT INTO query schreibe, habe ich im Script ja noch immer nicht die eindeutige id des fahrzeuges, im Enum von dir mit db_id bezeichnet, da diese ja erst angelegt wird, wenn das Fahrzeug mit INSERT INTO eingetragen wurde.
Nur gerade eine Idee:
Muss ich bei dem Dialog das Auto mit INSERT INTO einfügen und direkt danach neu laden um die ID zu bekommen ?
-
Danke für den fast perfekten Code, 2 kleine Dinge nur:
Bei dem:Codecache_get_field_content_int(i, "besitzer", pCar[playerid][i][besitzer], db_handle, MAX_PLAYER_NAME);
gehört das MAX_PLAYER_NAME weg (zumindest bei meiner Mysql Version und das ist die neueste von BlueG
Und hier:
CodeGetVehiclePos(pCar[playerid][i][pc_vID], pCar[playerid][i][s_x], pCar[playerid][i][s_y], pCar[playerid][i][s_z], pCar[playerid][i][s_r]);
hast du, wahrscheinlich unabsichtlich, hinten noch die Rotation abgefragt, wodurch ein Error kommt.Ich habe den Deletecar Befehl jetzt so geschrieben, geht das besser oder passt das so?
Codestock DeletePlayerCars(playerid) { DestroyVehicle(pCar[playerid][0][vID]); DestroyVehicle(pCar[playerid][1][vID]); return 1; }
Edit: 2 Fragen noch:
1. wenn sich ein Spieler das Auto neu kauft, wie speichere ich das dann wenn er sich ausloggt ab, da wurde ja noch keine ID für das Auto aus der Datenbank geladen?
2. Wie finde ich heraus ob es das erste, oder das zweite Auto des spielers ist, für meinen /car park Befehl? -
ich lasse jeden User 2 Autos haben, wie baue ich das am besten ein? Laden/Speichern/zuweisen?
-
-
Hallo Community!
Ich mache hierfür ein extra Thema auf, weil das Thema höchst wahrscheinlich etwas ausführlicher wird.
Ich habe eine Mysql Tabelle die so aufgebaut ist: (Bild im Anhang)
Darin werden wenn ein User ein Auto bei einem Autohaus kauft sein Name und die Daten gespeichert.
Jetzt habe ich ein Enum, welches alle Daten der Spielerautos speichern soll:
Code
Alles anzeigenenum playercarEnum { pc_vID, besitzer[MAX_PLAYER_NAME], Float:s_x, Float:s_y, Float:s_z, Float:s_r } new pCar[MAX_PLAYERS][playercarEnum];
Außerdem habe ich dort wo der Spieler geladen wird das hier eingefügt:
Codemysql_format(db_handle,query,sizeof(query),"SELECT * FROM usercars WHERE besitzer = '%s'",GPlayerName(playerid)); mysql_tquery(db_handle,query,"LoadPlayerCars","i",playerid);
Ich habe nur keine Ahnung wie das public LoadPlayerCars aussehen muss um die Autos richtig, an deren Spawnposition, zu laden.
Bzw, vielleicht könntet ihr mir auch helfen, oder mir einen Tipp geben kann wie ich eine funktion schreiben kann die Überprüft ob dem Spieler ein Auto gehört, dessen Vehicle ID übergeben wird.
z.B;
Hänge teilweise recht stark an mysql leider, und hoffe ihr könnt mir auch ein bisschen erklären was ihr macht, weil ich es gerne verstehen würde.edit: ich bekomme in dieser Zeile einen Fehlercode:
-
Ich lasse das ganze ja in meinen Dialog ausgeben.
Muss ich den dialog jetzt normal schreiben, das erste Auto wird als listitem 0, das zweite als listitem 1 usw. ausgegeben und es danach normal coden oder gibt es eine möglichkeit das dynamisch daran anzupassen wie viele listitems generiert werden.
z.B wenn ich oben in mein enum ein 4 auto eintrage, dann kommen auch 4 Listitems raus, normal müsste ich dann den Dialog umschreiben.
Es ist nicht sonderlich wichtig, es interessiert mich nur ob es theoretisch möglich wäre. -
Danke, Danke, Danke.
Muss ich den Dialog jetzt Hardcoden, oder geht es, dass ich das nur mit den enum daten machen kann ? (Hoffe man versteht was ich meine..)
-
Hab zu dem code oben noch das enum hinzugefügt.
Ich möchte im Dialog den Namen und den Preis ausgeben, ich bin mir eben überhaupt nicht sicher wie ich das genau angehen soll.
Ich habe bisher ein Autohaus, das in einem Enum und meine Autos für die Autohäuser habe ich in einem anderen Enum, welches auch die Autohaus ID enthält.
Jetzt gehe ich mit der schleife mein Enum für die Autos durch und suche jedes, dass zu diesem Autohaus (in diesem Falle mit der ID 0) gehört.Nun will ich diese, derzeit, 3 Autos in einem Dialog ausgeben in welchem der Spieler dann das Auto kaufen kann..
Ich bin mir nicht sicher ob das ganze so überhaupt funktioniert mit dem enum, oder muss ich, aufgrund der dialoge, das ganze Hardcoden ?
-
Eine Frage habe ich noch:
Ich habe jetzt mein enum oben fertig und möchte jetzt, einen Befehl erstellen (/autokauf) habe den auch soweit nur weiß ich nicht wie ich die strings so formatieren kann, dass mir alle Autos die in diesem Autohaus verfügbar sind im Dialog anzeigen lassen kann.
Der Code vom Befehl:
Code
Alles anzeigenocmd:autokauf(playerid,params[]) { if(IsPlayerInRangeOfPoint(playerid,5,1283.2334,-1336.0128,13.3811)) { new str[250]; for(new i=0;i<sizeof(ahCars);i++) { if(ahCars[i][ah_id] !=0)continue; } ShowPlayerDialog(playerid,D_AH_OLDTIMER,DIALOG_STYLE_LIST,"Oldtimer Autohaus",str,"Annehmen","Abbrechen"); return 1; } SCM(playerid,frot,"[FEHLER]:{FFFFFF} Du befindest dich an keinem Autohaus"); return 1; }
Das ist der Code von meinem enum:Code
Alles anzeigenenum autohauscarEnum { Name[35], c_model, c_preis, ah_id } new ahCars[2][autohauscarEnum] = { {"Esperanto",419,5,0}, //Oldtimer - Esperanto {"Broadway",575,5,0}, //Oldtimer - Broadway {"Oceanic",467,5,0} //Oldtimer - Oceanic };
Hoffe ihr könnt mir helfen.
-
Das war bloß ein Fail von mir, das Komma ist weg, und der Fehler bleibt der gleiche.
Ich glaube einfach die Zeile ist zu lange, nehme ich die ersten 3 Koordinaten (+natürlich den zugehörigen Feldern im Enum) weg, geht es. Weiß jemand wie ich das machen kann ?