Habe ich getan, funktioniert perfekt
Beiträge von Dachdecker
-
-
Ja da ah_id durch die schleife bei ongamemode init gesetzt wird oder nicht
Habe es nun auf ahc_id geändert und es funktioniert einwandfrei
Vielen herzlichen dank
-
ich dachte, dass durch das erstellen des Autos bei OnGameModeInit mit einer schleife, die ID gesetzt wird:
-
ahInfo und ahCars
Code
Alles anzeigenenum Autohausenum { Float:ahi_x, Float:ahi_y, Float:ahi_z, Float:ahi_r } new ahInfo[][Autohausenum] = { {119.2717,-184.0654,1.2543,269.8809}, //ID=0 == Autohaus1 {187.9992,-246.2124,1.2286,358.5348} //ID=1 == Autohaus2 }; enum AutohausCarsEnum { ahc_model, Float:ahc_x, Float:ahc_y, Float:ahc_z, Float:ahc_r, ahc_preis, ahc_id, ah_id } new ahCars[][AutohausCarsEnum]= { {411,103.6482,-150.6034,2.0219,220.8391, 40000, 0}, {560,110.9450,-150.6058,1.3968,225.7832, 30000, 0}, {400,204.1585,-251.1129,1.3129,181.3764, 20000, 1} };
/* Infernus
[22:43:52] Buycarid: 1
[22:43:52] Model: 411, X: 187.999206, Y: -246.212402, Z: 1.228600, R: 358.534790
*/
/*Sultan
[22:44:01] Buycarid: 2
[22:44:01] [debug] Run time error 4: "Array index out of bounds"
[22:44:01] [debug] Attempted to read/write array element at index 2 in array of size 2
[22:44:01] [debug] AMX backtrace:
[22:44:01] [debug] #0 0000aeac in public OnDialogResponse (0, 4, 1, -1, 82208) in MySQLScript.amx
*/
/* ModelID 400
[22:44:49] Buycarid: 3
[22:44:49] [debug] Run time error 4: "Array index out of bounds"
[22:44:49] [debug] Attempted to read/write array element at index 3 in array of size 2
[22:44:49] [debug] AMX backtrace:
[22:44:49] [debug] #0 0000aeac in public OnDialogResponse (0, 4, 1, -1, 82208) in MySQLScript.amx
*/Was meinst du? Die Ids werde vom Script zugewiesen laut dem Tut von MrMonat ist alles 1zu1 wie im Tutorial von ihm
-
Also hier uberprüfe ich, ob die vID mit einem der Autos von den Autohäusern übereinstimmt und dann setzte ich dieses "i" in die Pvar
Code
Alles anzeigenif(newstate == PLAYER_STATE_DRIVER) { new vID=GetPlayerVehicleID(playerid); for(new i=0; i<sizeof(ahCars); i++) { if(ahCars[i][ah_id] != vID) continue; //Kaufprozess SetPVarInt(playerid, "buycarid", i); new string[200]; format(string, sizeof(string), "Möchtest du das Fahrzeug für %i$ kaufen?", ahCars[i][ahc_preis]); ShowPlayerDialog(playerid, Fahrzeugkaufen, DIALOG_STYLE_MSGBOX, "Autokauf",string, "Kaufen", "Abbrechen"); break; } return 1; }
-
Hier:
Code
Alles anzeigenenum AutohausCarsEnum { ahc_model, Float:ahc_x, Float:ahc_y, Float:ahc_z, Float:ahc_r, ahc_preis, ahc_id, ah_id } new ahCars[][AutohausCarsEnum]= { {411,103.6482,-150.6034,2.0219,220.8391, 40000, 0}, {560,110.9450,-150.6058,1.3968,225.7832, 30000, 0}, {400,204.1585,-251.1129,1.3129,181.3764, 20000, 1} };
-
Also ich bin jetzt gerade Mal in ein anderes Auto vom Autohaus gestiegen und da ging es, aber es spawnte am falschen Autohaus
Ich habe zwei Autohäuser (provisorisch) und im 1. Autohaus 2 autos (Sultan und Infi) und im 2. Autohaus ein Auto (ModelID 400).Nur wenn ich in den Infi steige funktioniert alles.
Der Crashdetect gibt das wieder :
[22:31:59] [debug] Run time error 4: "Array index out of bounds"
[22:31:59] [debug] Attempted to read/write array element at index 2 in array of size 2
[22:31:59] [debug] AMX backtrace:
[22:31:59] [debug] #0 0000ae80 in public OnDialogResponse (0, 4, 1, -1, 82208) in MySQLScript.amx -
Hey,
Die funktion sieht so aus:
Code
Alles anzeigenSpielerAutoErstellen(playerid, FahrzeugModel, Float:x, Float:y, Float:z, Float:r, Farbe1, Farbe2) { for(new i=0; i<sizeof(cInfo); i++) { if(cInfo[i][id_c] != 0) continue; cInfo[i][c_Besitzer] = sInfo[playerid][id]; cInfo[i][c_x] =x; cInfo[i][c_y] =y; cInfo[i][c_z] =z; cInfo[i][c_r] =r; cInfo[i][c_Farbe1]=Farbe1; cInfo[i][c_Farbe2]=Farbe2; cInfo[i][c_model] = FahrzeugModel; cInfo[i][id_c] = CreateVehicle(FahrzeugModel, x, y, z, r, Farbe1, Farbe2, -1, -1); SpielerAutoSpeichernDB(playerid,i); return 1; } return 1; }
Das funktioniert zu 100%, denn es klappt alles mit dem befehl /veh [Playerid][Modelid][Farbe1][Farbe2] das ist ein test befehl von mir der dann auf diese Funktion zugreift
-
Schönen guten Tag ich hab mit einem Tutorial von MrMonat das Autohaus System gescriptet und wenn ich im autohaus bin und im auto bin, dann auf kaufen drücke wird das Geld abgezogen aber das auto nicht erstellt. Also hier nochmal mit PWN code.
Code
Alles anzeigenif(dialogid == Fahrzeugkaufen) { if(response) { new idbuy=GetPVarInt(playerid, "buycarid"); if(!GetPlayerMoney(playerid)>ahCars[idbuy][ahc_preis]) { RemovePlayerFromVehicle(playerid); SendClientMessage(playerid, Rot, "Du hast zuwenig Geld"); return 1; } // Das wird ausgeführt GivePlayerMoney(playerid, -ahCars[idbuy][ahc_preis]); SendClientMessage(playerid, Gruen, "Du hast das Auto erfolgreich gekauft"); //Das aber nicht --- SpielerAutoErstellen(playerid, ahCars[idbuy][ahc_model], ahInfo[ahCars[idbuy][ah_id]][ahi_x],ahInfo[ahCars[idbuy][ah_id]][ahi_y],ahInfo[ahCars[idbuy][ah_id]][ahi_z],ahInfo[ahCars[idbuy][ah_id]][ahi_r],1,1); printf("Model: %i, X: %f, Y: %f, Z: %f, R: %f",ahCars[idbuy][ahc_model], ahInfo[ahCars[idbuy][ah_id]][ahi_x],ahInfo[ahCars[idbuy][ah_id]][ahi_y],ahInfo[ahCars[idbuy][ah_id]][ahi_z],ahInfo[ahCars[idbuy][ah_id]][ahi_r]); RemovePlayerFromVehicle(playerid); } else { RemovePlayerFromVehicle(playerid); SendClientMessage(playerid, Rot, "Der Vorgang wurde abgebrochen"); } return 1; }
-
ich habe den fehler schon gefunden.
Ich hab dem Spieler zweimal den Skin gesetzt und dadurch hat sich das immer geändert. Jetzt geht es danke trotzdem
-
Hey,
ich hab ein MySQL Script angefangen und hab ein Problem mit dem Skin..
Das ist der MySQL.Log
Ich hab einen Extra public gemacht damit der Spieler an der ausgelogten Posi spawnt und laut den Prints wird bei dem SpielerSpawnen public der Skin auf 0 gesetzt aber beim Login Public auf 59 wie er richtig ist.
Code
Alles anzeigenpublic SpielerSpawnen(playerid) { new num_rows, num_fields; cache_get_data(num_rows, num_fields, dbhandle); if(num_rows == 1) { sInfo[playerid][Spawn_x] = cache_get_field_content_float(0, "Spawn_x", dbhandle); sInfo[playerid][Spawn_y] = cache_get_field_content_float(0, "Spawn_y", dbhandle); sInfo[playerid][Spawn_z] = cache_get_field_content_float(0, "Spawn_z", dbhandle); sInfo[playerid][Spawn_r] = cache_get_field_content_float(0, "Spawn_r", dbhandle); sInfo[playerid][Spawn_Int] = cache_get_field_content_int(0, "Spawn_Int", dbhandle); sInfo[playerid][Spawn_World] = cache_get_field_content_int(0, "Spawn_World", dbhandle); SetPlayerPos(playerid,sInfo[playerid][Spawn_x],sInfo[playerid][Spawn_y],sInfo[playerid][Spawn_z]); SetPlayerFacingAngle(playerid, sInfo[playerid][Spawn_r]); SetPlayerInterior(playerid, sInfo[playerid][Spawn_Int]); SetPlayerVirtualWorld(playerid, sInfo[playerid][Spawn_World]); sInfo[playerid][Skin] = cache_get_field_content_int(0, "SkinID", dbhandle); SetPlayerSkin(playerid, sInfo[playerid][Skin]); printf("SpielerSpawnen: Spieler: %s hat den Skin: %i",SpielernameAusgeben(playerid), sInfo[playerid][Skin]); SetSpawnInfo(playerid, 0, sInfo[playerid][Skin],sInfo[playerid][Spawn_x],sInfo[playerid][Spawn_y],sInfo[playerid][Spawn_z], sInfo[playerid][Spawn_r],0,0,0,0,0,0); SpawnPlayer(playerid); } return 1; }
-
Versuch es mal so:
format(Biz [Besitzer], MAX_PLAYER_NAME, dini_Get(biz, "Besitzer"));
-
Du solltest einen Array noch an die Checkpoint Variable machn also new TutorialCheckpoint[MAX_PLAYERS ][Anzahl der Checkpoints];
Du fragst dann, bei OnPlayerEnterCheckpoint ab oder er TutorialCheckpoint[playerid][1] betreten hat, und dann machst du nen Timer wo er dann wieder die Switch Funktion aufruft. Vorher stellst du aber die Variable Tutorial[playerid] ein höher.
-
Du stellst direkt Tutorial[playerid] auf 1. und in Case 0 also Tutorial[playerid] = 0; . versuch mal den Checkpoint bei Case 1 reinzumachen oder stell Tutorial[playerid] auf 0
-
du machst beispielsweise bei Schritt eins einen Checkpoint zur Stadthalle. TutorialCheckpoint[playerid][1] == SetPlayerCheckpoint();
Du nimmst dann die 15 sekunden Timer raus und lässt ihn dann zum Checkpoint fahren. Wenn er den Checkpoint erreicht (OnPlayerEnterCheckpoint) dann zeigst du ihm Schritt 2 und dann geht es immer so weiter.P.S bei OnPlayerEnterCheckpoint musst du dann auch abfragen, ob er im Fahrzeug ist.. könnte sonst eventuell zu Buggs kommen
-
was meinst du jetzt genau
-
nimm die abfrage vor dem Switch mal raus und versuch es dann
-
naja beim Timer die ja dann "OnPlayerTutorial" aufrufst fragst du ja zuerst ab ob es Tutorial[playerid] = 1 ist. aber du stellst es ja bei case 1 auf Tutorial[playerid] = 2. dann ist ja theoretisch klar, das er dann die Switch Funktion nicht mehr aufruft.. oder?
-
Mal versucht ihn zu freezen und dann die Animation zugeben? Theoretisch kann er dann nichts mehr machen (was bewegen angeht)
-
oh shit, stimmt. danke dir . war wohl betriebsblind