Community, super lustig.
Beiträge von Mogly1
-
-
Dann muss ich für denen Player einen Timer setzen oder?
Wie ressourcenhungrig ist eigentlich so ein Timer? ich brüchte ja 100Stk bei 100 Spielern. Bei SetWorldTime brauche ich nur einen (da geht die minute ja nicht?)
Nicht ganz du machst einen Globalen Timer und gehst dann mit einer for schleife durch alle Spieler die gerade auf den Server sind, somit sparst du andere Timer.
und wenn du jetzt den Timer einmal alle Minute updatest sollte das doch gehen oder? Sowie den Spielern beim Connect die Uhrzeit einmal setzen, die du einfach in einer globalen Variable speicherst und beim Timer Aufruf setzt.
Alles anzeigenHallo,
ich habe ein Problem, dass zerstörte deklarierte Vehicles ersetzt werden durch neu erstellte. Dies ist dann ein Problem, wenn man irgendwo Vehicleid abfragen hat...
Uns ist das die Tage aufgefallen und da von uns keiner Erfahrungen damit gemacht hat frage ich mal hier

Die Ursache ist mir nicht ganz klar, ich hoffe man kann mich aufklären warum das so ist und was ich dagegen machen kann.
Mache ich das so, dann tritt dieser "Bug" auf, vertausche ich aber die 2 Zeilen, sodass ich erst das Fahrzeug erstelle und anschließend es lösche klappt es (wahrscheinlich würde es dann wieder Bugs geben mit neu erstellen Fahrzeugen danach).
CodeDestroyVehicle(Biz6Vehicle[i]); ErsetztesVehicle[playerid] = CreateVehicle(FVVehTypes1[i][FVT1Model], //...Steige ich mit dieser Variante in das neue Fahrzeug, kommt er trotzdem durch diesen Code.
Sry wegen dem langen Zitieren aber Foren und ich ka. wie man das kürzt

Also, nach dem DestroyVehicle(BizVehicle[i]);
fügst du noch das hinzu:
CodeDestroyVehicle(Biz6Vehicle[i]); Biz6Vehicle[i] = INVALID_VEHICLE_ID; ErsetztesVehicle[playerid] = CreateVehicle(FVVehTypes1[i][FVT1Model],//Grund, du hast ja bestimmt Biz6Vehicle[I] = CreateVeh... erstellt somit behält er die Vehicle id auch wenn du sie Destroyst, denn DestroyVehicle cleart nicht dein Biz6Vehicle[i], somit musst du danach der Variable eine Invalid id geben oder -1 setzen ist eig. egal

Somit sollte es dann gehen eig.

-
Mit,
https://wiki.sa-mp.com/wiki/SetPlayerTime
,kannst du auch die Minuten angeben. Wenn du jede Minute die zeit setzt, sollte es Smoother aussehen.
-
Schau mal in deinem Code Zeile 22 bis 25
müsste playerid nicht zu i? wie du davor auch für die if abfragen genutzt hast?
CodePlayerCar[i][slot][vehAbgeschleppt] = 1; format(PlayerCar[i][slot][vehAbgeschlepptVon], MAX_PLAYER_NAME, "%s", GetName(playerid)); PlayerCar[i][slot][vehKaution] = Geld; SavePlayerVehicle(i);Sonst speicherst du die Daten ja nur für die playerid... könnte evt. der Fehler sein.
mfg. Mogly1
-
Also du könntest über deiner AddAuftrag Funktion, die Seite hinzufügen aber das
Problem hierbei ist, mann sieht dennoch dann 12 Items bzw. das 13 sogar als überschrift.
siehe https://wiki.sa-mp.com/wiki/AddMenuItem
Deswegen würde ich das so nicht ganz machen, du machst gerade jedes Item(Auftrag) gleich als AddMenuItem aber das wird dir bald Probleme geben.
Ich würde dir empfehlen wenn du es über so ein Menu weiter machen willst, erstelle dir gleich ein Menu mit genau 10 Items und der "Nächsten Seite".
Also so hier, das wäre ein Lösungsansatz/vorschlag von mir (mit diesem kannst du dann auch ganz einfach Items/Aufträge wieder löschen)
InGame dann so:
Code
Alles anzeigen//oben anpassen :) new Menu:teleportmenu[MAX_PLAYERS]; //----------------------- stock AddAuftrag(titel[],autor[],auftragtext[],position,Float:AuftragX,Float:AuftragY,Float:AuftragZ) // && listauftrage { new i = FindFreeAuftragID(); if(i == -1) return 0; format(Auftrag[i][a_autor],MAX_PLAYER_NAME+1,autor); format(Auftrag[i][a_description],30,titel); format(Auftrag[i][a_auftragtext],256,auftragtext); Auftrag[i][auftragid] = i; Auftrag[i][a_position] = position; new subString[148]; format(subString, sizeof(subString), "Auftrag erstellt, ID: %d, Länge: %d, Text: %s ",Auftrag[i][auftragid],strlen(Auftrag[i][a_description]),Auftrag[i][a_description]); SendClientMessageToAll(-1,subString); if(position) { Auftrag[i][a_PosX] = AuftragX; Auftrag[i][a_PosY] = AuftragY; Auftrag[i][a_PosZ] = AuftragZ; } return 1; //ListAuftrage(); }//mitgettime ocmd:auftragadden(playerid,params[]) { new titel[30],text[100],koordinaten; if(sscanf(params, "ssd", titel,text,koordinaten)) return SendClientMessage(playerid, -1, "/auftragadden [titel] [Beschreibung::MAX__100] [Koordinaten? 0 / 1]"); // AddAuftrag("Farmer","DrWho","Ich suche einen Farmer.",0,0,0,0); // Legendär AddAuftrag(titel,"Mogly",text,koordinaten,0,0,0); return 1; } ocmd:auftrage(playerid,params[]) { new subString[128],count; DialogTempIndex[playerid] = 0; DestroyMenu(teleportmenu[playerid]); teleportmenu[playerid] = CreateMenu("Auftraege", 1, 50.0, 180.0, 200.0, 200.0); for(new i=0; i<sizeof(Auftrag); i++) { if(Auftrag[i][auftragid] != -1) { if(count==10) { AddMenuItem(teleportmenu[playerid], 0,"Naeste Seite"); DialogTemp[playerid][DialogTempIndex[playerid]++] = -1; SetPVarInt(playerid,"Auftrag_Seite",1); break; } else { //SCM(playerid,-1,"Auftrag ausgeführt!"); /* format(subString, sizeof(subString), "ID: %d, Länge: %d, Text: %s ",Auftrag[i][auftragid],strlen(Auftrag[i][a_description]),Auftrag[i][a_description]); SCM(playerid,-1,subString);*/ count++; AddMenuItem(teleportmenu[playerid], 0,Auftrag[i][a_description]); DialogTemp[playerid][DialogTempIndex[playerid]++] = i; } } } if(count == 0) return SendClientMessage(playerid,-1,"Es konnte kein Auftrag gefunden werden!"); ShowMenuForPlayer(teleportmenu[playerid],playerid); return 1; } //remove auftrag? or not1 stock FindFreeAuftragID() { for(new i=0; i<sizeof(Auftrag); i++) { if(Auftrag[i][auftragid]==-1) return i; } return -1; } public OnPlayerSelectedMenuRow(playerid, row) { TogglePlayerControllable(playerid,true); new Menu:CurrentMenu = GetPlayerMenu(playerid); if(CurrentMenu == teleportmenu[playerid]) { new i = DialogTemp[playerid][row]; if(i==-1) { DialogTempIndex[playerid]=0; DestroyMenu(teleportmenu[playerid]); teleportmenu[playerid] = CreateMenu("Auftraege", 1, 50.0, 180.0, 200.0, 200.0); new count,next_count; for(new a=0; a<sizeof(Auftrag); a++) { if(Auftrag[a][auftragid]!=-1) { count++; if(count > GetPVarInt(playerid,"Auftrag_Seite")*10) { if(next_count==10) { AddMenuItem(teleportmenu[playerid], 0,"Naechste Seite"); DialogTemp[playerid][DialogTempIndex[playerid]++] = -1; SetPVarInt(playerid,"Auftrag_Seite", GetPVarInt(playerid,"Auftrag_Seite")+1); break; } next_count++; DialogTemp[playerid][DialogTempIndex[playerid]++] = a; AddMenuItem(teleportmenu[playerid], 0,Auftrag[a][a_description]); } } } ShowMenuForPlayer(teleportmenu[playerid],playerid); } else { new string[84],string2[312]; // "Aufrag von " + string wie in C format(string,sizeof(string),"Auftrag von{B40404} %s",Auftrag[i][a_autor]); format(string2,sizeof(string2),"%s %d",Auftrag[i][a_auftragtext],Auftrag[i][auftragid]); ShowPlayerDialog(playerid, DIALOG_MENU_ROW, DIALOG_STYLE_MSGBOX, string, string2, "Contact", "Go Back"); } } return 1; }Was genau, habe ich da jetzt gemacht?
Also ich habe bei AddAuftrag dei AddMenuItems raus genommen, und bei ocmd:auftrage die abfrage das er bei count 10 den "Nächste Seite" Button hinzufügt, dieser hat die id -1 um ihn unter OnPlayerSelectedMenuRow wieder nutzen zu können. Unter OnPlayerSelectedMenuRow habe Ich somit die if abfrage == -1 hinzugefügt und Resete das Menu dort um die näcshte Seite zu laden in dem ich mit dem ersten count zähle wie viele wir überspringen (also die erste Seite und mit next_count zählen wir wieder 9 Items ab bis zum "Näcshten Seite".
Und Mit Set und GetPvarInt(playerid,"Auftrag_Seite") speichern und setzen wir usnere Seite /für die Mathematische Berechnung
).Und wir haben das teleportmenu[playerid] nun playerid basierend um Bugs zu vermeiden.
hoffe, es war etwas verständlich als Erklärung.
Beachte bitte: "128 menus in total" und da das Menu dann Player abhängig sein müsste, wegen Nächste Seite, kann es bei zu vielen Spielern zu Probleme führen.
(Bei anderen Ansätzen, bin ich gerne offen, falls dieser unnötig oder co. ist)
MfG Mogly1.
-
Hey, schau mal Jeffry hatte dazu ein Tut gemacht.
evt. hilft dir das ja, wenn du das noch dann für dich anpasst.
MfG. Mogly1
-
Ist schon so drinne (sieht man nur nicht im Video
),du gehst nur noch raus wenn du im Dialog bist wo alle Items sind, werde ich gleich anpassen das dort zurück steht und nicht mehr abbrechen
. -
Stimmt FindClosestVeh hatte nicht das nächste ausgegeben ^^, habe es jetzt gleich angepasst damit man nun den 'ClosestTrunk' bekommt
. (Hatte ich gar nicht mehr auf den schirm)GangstaSunny habe deine Vorschläge, best möglich versucht mit einzubauen, habe es editiert und ein neues Video hinzugefügt.
Kaliber Ich werde mir das mit dem Include mal ansehen, habe noch nie eins geschrieben (glaube ich) und das mit for(new i=1;i<MAX_SLOTS;i++) wurde auch angepasst danke für den Hinweis.
MfG. Mogly1
-
Danke für das Feedback und die ganzen ansetz stellen.
Ich werde das mal noch alles anpassen
.Auf jeden Fall danke, das du dir den Code mal angesehen hast


Nur eine Anmerkung bei
- Bei new id = strval(inputtext); kann theoretisch sonst was bei rumkommen. Du solltest also vorher validieren ob der User auch eine Zahl eingeben hat.
laut https://wiki.sa-mp.com/wiki/Strval
' The integer value of the string. '0 if the string is not numeric.'Somit sollte da nix falsches bei raus kommen da wenn es keine zahl ist eine 0 ist, falls dir eine Eingabe auffällt die dennoch geht würde mich das mal interessieren mfg. Mogly1.
-
Guten Tag, auf nachfrage bei mir habe ich ein Kofferraum mit einem kleinem Item system gebastelt.
Da ich lange nix mehr mit Pawn zutun hatte ist der Code wohl nicht so der Optimalste.
Aber evt. können andere dieses System ja noch gebrauchen oder verbessern.
Hier ein Video dazu:
Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.und hier der Code:
Mit MAX_SLOTS gebt ihr die Allgemeine menge an Items an die man Pro Slot im vehicle hat und mit MAX_MASS wie viel man im Auto lagern kann Bsp. 300 Schuss mit der Deagle oder 300 Drogen...
Derzeitige Items, Drogen(allgemein) id=100 und Materialien(Allgemein) id=101 weiters leicht einzufügen,wenn man sich kurz rein liest.
Wenn jemand gerade am Kofferraum ist, kann kein weiterer ihn benutzen um Bugs zu vermeiden.
Anmerkung: fügt ClearKofferraum(vehicleid); hinzu bei den Fahrzeugen die Spawnen oder geht es einmal am start mit einer for schleife durch alle Autos durch, je nach dem wie ihr es dann braucht.
Ich hoffe das Denglisch verwirrt nicht.
Code
Alles anzeigen#define MAX_MASS 300 #define MAX_SLOTS 10 #define DRUG_ID 100 #define MATS_ID 101 #define MAX_ITEM_NAME_LENGTH 50 native IsValidVehicle(vehicleid); //oder per #define enum { DIALOG_TRUNK, DIALOG_TRUNK_OUTPUT_MATS, DIALOG_TRUNK_OUTPUT_DRUGS, DIALOG_TRUNK_INPUT_MATS, DIALOG_TRUNK_INPUT_DRUGS, DIALOG_TRUNK_INPUT } //KofferraumSys enum KofferraumEnum { mass, name[MAX_ITEM_NAME_LENGTH], item_id //Waffenids, 100 für Drogen(allgemein gehalten), 101 für Mats(allgemein gehalten) } new Kofferraum[MAX_VEHICLES][MAX_SLOTS][KofferraumEnum]; enum VInf { max_mass, bool:used_kofferraum, actual_mass } new VehInfo[MAX_VEHICLES][VInf]; //der Befehl public OnPlayerCommandText(playerid, cmdtext[]) { if(strcmp("/kofferraum", cmdtext, true) == 0) { new veh = FindClosestTrunk(playerid); if(veh!=-1) { if(VehInfo[veh][used_kofferraum])return SendClientMessage(playerid,-1,"Der Kofferraum wird gerade genutzt..."); SetPVarInt(playerid,"VID",veh); VehInfo[veh][used_kofferraum]=true; ShowTrunk(playerid,veh); new engine, lights, alarm, doors, bonnet, boot, objective; GetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, boot, objective); SetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, VEHICLE_PARAMS_ON, objective); } else { SendClientMessage(playerid,-1,"Du befindest dich nicht an einem Kofferraum."); } return 1; } return 0; } //die Functions /*Position hinter kofferraum kopiert von https://forum.sa-mp.com/showthread.php?t=453546 */ stock GetXYBehindVehicle(vehicleid, &Float:x2, &Float:y2, Float:distance) { new Float:a; GetVehiclePos(vehicleid, x2, y2, a); GetVehicleZAngle(vehicleid, a); x2 += (distance * floatsin(-a+180, degrees)); y2 += (distance * floatcos(-a+180, degrees)); return 1; } stock GetTrunkPos(vehicleid, &Float: x3, &Float:y3, &Float:z3) { new Float: x, Float: y; new Float: sizeX, Float: sizeY, Float:sizeZ[2]; GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_SIZE, sizeX, sizeY, sizeZ[0]); GetXYBehindVehicle(vehicleid, x, y, sizeY/2); x3 = x; y3 = y; GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_REAR_BUMPER_Z , sizeX, sizeY, sizeZ[1]); z3 = (sizeZ[1] + sizeZ[0]/2); return 1; } stock ShowTrunk(playerid,veh) { CheckSlots(veh); new string[250]; for(new i=0;i<MAX_SLOTS;i++) { if(Kofferraum[veh][i][item_id]==0)continue; format(string,sizeof(string),"%s\n%d\t%s\t%d",string,Kofferraum[veh][i][item_id],Kofferraum[veh][i][name],Kofferraum[veh][i][mass]); } format(string,sizeof(string),"Item id\tName\tAnzahl\n%s\n0\tItem einlagern\t0",string); new header[50]; format(header,sizeof(header),"Kofferraum (%d/%d)",VehInfo[veh][actual_mass],VehInfo[veh][max_mass]); ShowPlayerDialog(playerid,DIALOG_TRUNK,DIALOG_STYLE_TABLIST_HEADERS,header,string,"Auswählen","Abbrechen"); return 1; } stock CloseTrunk(playerid,veh) { new engine, lights, alarm, doors, bonnet, boot, objective; GetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, boot, objective); SetVehicleParamsEx(veh, engine, lights, alarm, doors, bonnet, VEHICLE_PARAMS_OFF, objective); VehInfo[veh][used_kofferraum]=false; SendClientMessage(playerid,-1,"Du hast den Kofferraum geschlossen."); DeletePVar(playerid,"VID"); return 1; } stock StoreItem(playerid,vehid,id,menge,itemName[]) { new freeslot = GetFreeSlot(vehid); if(menge < 1)return SendClientMessage(playerid,-1,"Du musst schon etwas im Fahrzeug ablegen."); if(freeslot == -1)return SendClientMessage(playerid,-1,"Keinen Platz mehr im Fahrzeug."); if(VehInfo[vehid][max_mass]<VehInfo[vehid][actual_mass]+menge)return SendClientMessage(playerid,-1,"Im Fahrzeug passt nix mehr rein."); new string[125]; format(string,sizeof(string),"Du legst %d %s in den Kofferraum.",menge,itemName); if(id<=46) { GivePlayerWeapon(playerid,id,-menge); format(string,sizeof(string),"Du legst %s mit %d Munition in den Kofferraum.",itemName,menge); } VehInfo[vehid][actual_mass]+=menge; Kofferraum[vehid][freeslot][item_id]=id; Kofferraum[vehid][freeslot][mass]=menge; strmid(Kofferraum[vehid][freeslot][name],itemName,0,MAX_ITEM_NAME_LENGTH,MAX_ITEM_NAME_LENGTH); SendClientMessage(playerid,-1,string); return 1; } stock TakeItem(playerid,veh,menge) { new listid = GetPVarInt(playerid,"ListId"); DeletePVar(playerid,"ListId"); if(Kofferraum[veh][listid][mass]<menge || menge < 0)return SendClientMessage(playerid,-1,"So viel ist nicht im Wagen."); new string[125]; format(string,sizeof(string),"Du hast %d von %s entnommen.",menge,Kofferraum[veh][listid][name]); SendClientMessage(playerid,-1,string); GivePlayerItem(playerid,Kofferraum[veh][listid][item_id],Kofferraum[veh][listid][mass]); VehInfo[veh][actual_mass]-=menge; Kofferraum[veh][listid][mass]-=menge; if(Kofferraum[veh][listid][mass]==0) { Kofferraum[veh][listid][item_id]=0; } return 1; } stock GivePlayerItem(playerid,id,amount) { if(id==DRUG_ID)//Drogen { //pInfo[playerid][drugs]+=amount; Bsp. } else if(id==MATS_ID)//Mats { //pInfo[playerid][mats]+=amount; Bsp. } else//Waffen { GivePlayerWeapon(playerid,id,amount); } } stock CheckSlots(veh) { for(new i=0;i<MAX_SLOTS-1;i++) { if(Kofferraum[veh][i][item_id]==0) { Kofferraum[veh][i][item_id]=Kofferraum[veh][i+1][item_id]; Kofferraum[veh][i][mass]=Kofferraum[veh][i+1][mass]; strmid(Kofferraum[veh][i][name],Kofferraum[veh][i+1][name],0,MAX_ITEM_NAME_LENGTH,MAX_ITEM_NAME_LENGTH); Kofferraum[veh][i+1][item_id]=0; Kofferraum[veh][i+1][mass]=0; } } return 1; } stock GetFreeSlot(veh) { for(new i=0;i<MAX_SLOTS;i++) { if(Kofferraum[veh][i][item_id]==0)return i; } return -1; } stock ClearKofferraum(veh) { VehInfo[veh][actual_mass]=0; VehInfo[veh][max_mass]=MAX_MASS; for(new i=0;i<MAX_SLOTS;i++) { Kofferraum[veh][i][item_id]=0; Kofferraum[veh][i][mass]=0; strmid(Kofferraum[veh][i][name],"",0,MAX_ITEM_NAME_LENGTH,MAX_ITEM_NAME_LENGTH); } return 1; } stock FindClosestTrunk(playerid) { new Float:closestDistance=3.0; new veh=-1; for(new i=0;i<MAX_VEHICLES;i++) { if(!IsValidVehicle(i))continue; new Float:x, Float:y, Float:z; GetTrunkPos(i, x, y, z); new Float:distance = GetPlayerDistanceFromPoint(playerid, x,y,z); if(closestDistance>distance) { closestDistance=distance; veh = i; } } return veh; } // Dialoge public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case DIALOG_TRUNK: { if(response) { new id = strval(inputtext); if (!sscanf(inputtext, "d", id)) { SetPVarInt(playerid,"ListId",listitem); if(id == 0) { ShowPlayerDialog(playerid,DIALOG_TRUNK_INPUT,DIALOG_STYLE_LIST,"Items","Drogen\nMats\nWaffe","Auswählen","Abbrechen"); } else if (id == DRUG_ID) { ShowPlayerDialog(playerid,DIALOG_TRUNK_OUTPUT_DRUGS,DIALOG_STYLE_INPUT,"Drogen","Wie viele Drogen willst du entnehmen?","Auswählen","Zurück"); } else if (id == MATS_ID) { ShowPlayerDialog(playerid,DIALOG_TRUNK_OUTPUT_MATS,DIALOG_STYLE_INPUT,"Materialien","Wie viele Materialien willst du entnehmen?","Auswählen","Zurück"); } else { new veh = GetPVarInt(playerid,"VID"); new string[125]; format(string,sizeof(string),"Du hast %s entnommen",Kofferraum[veh][listitem][name]); SendClientMessage(playerid,-1,string); GivePlayerItem(playerid,Kofferraum[veh][listitem][item_id],Kofferraum[veh][listitem][mass]); VehInfo[veh][actual_mass]-=Kofferraum[veh][listitem][mass]; Kofferraum[veh][listitem][item_id]=0; Kofferraum[veh][listitem][mass]=0; ShowTrunk(playerid,veh); return 1; } } } else { new veh = GetPVarInt(playerid,"VID"); CloseTrunk(playerid,veh); return 1; } } case DIALOG_TRUNK_OUTPUT_DRUGS: { new veh = GetPVarInt(playerid,"VID"); if(response) { TakeItem(playerid,veh,strval(inputtext)); ShowTrunk(playerid,veh); } else { ShowTrunk(playerid,veh); } } case DIALOG_TRUNK_OUTPUT_MATS: { new veh = GetPVarInt(playerid,"VID"); if(response) { TakeItem(playerid,veh,strval(inputtext)); ShowTrunk(playerid,veh); } else { ShowTrunk(playerid,veh); } } case DIALOG_TRUNK_INPUT: { if(response) { if(listitem==0) { ShowPlayerDialog(playerid,DIALOG_TRUNK_INPUT_DRUGS,DIALOG_STYLE_INPUT,"Drogen","Wie viele Drogen willst du einpacken?","Auswählen","Zurück"); } if(listitem==1) { ShowPlayerDialog(playerid,DIALOG_TRUNK_INPUT_MATS,DIALOG_STYLE_INPUT,"Materialien","Wie viele Materialien willst du einpacken?","Auswählen","Zurück"); } if(listitem==2) { new vehicle = GetPVarInt(playerid,"VID"); new weapons[13][2]; for (new i = 0; i <= 12; i++) { GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]); if(GetPlayerWeapon(playerid)==weapons[i][0] && GetPlayerWeapon(playerid)!=0) { new weapname[32]; GetWeaponName(weapons[i][0],weapname,sizeof(weapname)); StoreItem(playerid,vehicle,weapons[i][0],weapons[i][1],weapname); ShowTrunk(playerid,vehicle); return 1; } } ShowTrunk(playerid,vehicle); return SendClientMessage(playerid,-1,"Du hast keine Waffe ausgerüstet."); } } else { new vehicle2 = GetPVarInt(playerid,"VID"); CloseTrunk(playerid,vehicle2); return 1; } } case DIALOG_TRUNK_INPUT_DRUGS: { new veh = GetPVarInt(playerid,"VID"); if(response) { StoreItem(playerid,veh,DRUG_ID,strval(inputtext),"Marihuana"); ShowTrunk(playerid,veh); return 1; } else { ShowTrunk(playerid,veh); } } case DIALOG_TRUNK_INPUT_MATS: { new vehid = GetPVarInt(playerid,"VID"); if(response) { StoreItem(playerid,vehid,MATS_ID,strval(inputtext),"Material"); ShowTrunk(playerid,vehid); return 1; } else { ShowTrunk(playerid,vehid); } } } return 1; }Items hinzufügen simple erklärt:
1) Zu erst Definiert ihr ein neues Item oben in define, Ich verwende hier nun immer NEW_ITEM, passt dies bitte an
2020-03-11 17_42_24-showroom.pwn - Pawno.png
2) Danach fügt ihr 2 neue Dialoge ein zumindest, wenn ihr es so wie bei Drugs und Mats machen wollt.
2020-03-11 17_44_27-showroom.pwn - Pawno.png
3) Dann geht ihr unter OnDialogResponse sucht ihr dann den DIALOG_TRUNK und geht dort zu if(id == 0) und fügt euer neues Item in die Liste ein
2020-03-11 17_45_58-showroom.pwn - Pawno.png
4.1) Danach bleibt ihr in DIALOG_TRUNK und fügt unter else if (id == MATS_ID) eine weiter else if mit eurem neuen Item ein und derstell gleich den Dialog
2020-03-11 17_43_19-showroom.pwn - Pawno.png
4.2) nun geht ihr unter DIALOG_TRUNK_INPUT und fügt ein neues listitem hinzu für euer item
2020-03-11 17_46_51-showroom.pwn - Pawno.png
5) Dann könnt ihr euch den DIALOG_TRUNK_OUTPUT_DRUGS kopieren und euer neues Item damit ersetzen
2020-03-11 17_45_26-showroom.pwn - Pawno.png
6) Das selbe mit DIALOG_TRUNK_INPUT_DRUGS
2020-03-11 17_47_31-showroom.pwn - Pawno.png
7) So fast geschafft, nun geht ihr unter StoreItem
und fügt, wenn nötig eine abfrage hinzu wenn ihr etwas bestimmtes tun wollt, wenn das Item von euch in den Kofferraum gelegt wird, Bsp bei der Waffe, müssen wir ihn sie entziehen. Wie gesagt nur wenn es nötig ist ansonsten keine if hinzufügen.
2020-03-11 17_48_42-showroom.pwn - Pawno.png
Und am ende fügt ihr es bei GivePlayerItemhinzu über der letzten else also so
2020-03-11 17_50_30-showroom.pwn - Pawno.png
9) Nun sollte es in game dann so aussehen bzw. Fnktioneiren.
Mfg. Mogly1
-
Ich bin mir nicht ganz sicher aber schau mal wenn du das Komma vor dem WHERE weg nimmst ob es dann geht?
Also das,
UPDATE user SET level = '%d', money = '%d',kills = '%d', deaths ='%d', arang = '%d', WHERE id = '%d
zu dem
UPDATE user SET level = '%d', money = '%d',kills = '%d', deaths ='%d', arang = '%d' WHERE id = '%d -
So habe ich versucht es anzuwenden:
Cif((newstate == PLAYER_STATE_DRIVER) || (newstate == PLAYER_STATE_PASSENGER)) { new string[32], idx = GetVehicleModel(GetPlayerVehicleID(playerid)) - 400; vehData[idx][e_km] += GetKilometers(idx); format(string, sizeof(string), "%0.2f", vehData[idx][e_km]); PlayerTextDrawSetString(playerid, textdraw[11][playerid], string); }Allerdings passiert nichts, was mache ich falsch, oder habe ich was übersehen?
Ja, schau mal du nutzt idx nicht als vehicleid sonder als Model!?
Das bedeutet jedes Modell hat den selben Kilometer!?Ich meine laut dem Include brauchst du auch die vehicleid siehe:
GetKilometers(vehicleid);...............Checks the distance traveled in kilometers
und das mit vehData wird wahrscheinlich auch über vehicleid laufen, bzw. sollte?
falls nicht bitte ich mal um erklärung damit ich das nachvollziehen kann.
Mfg. Mogly1Also sollte es doch eifnach nur so sein
idx = GetPlayerVehicleID(playerid);
und dann sollte das gehen oder nicht
? -
Du nimmst Glas und dann setzt du da Fische rein bzw pflanzen fertig

im Notfall das glas evt. eine bläuliche Textur geben.
Mfg. Mogly1 -
Yut habe mir jetzt mal alles angeschaut und änder mal bitte dein OnUserCheck zu dem hier
forward OnUserCheck(playerid);
public OnUserCheck(playerid)
{
printf("rows %d",cache_num_rows());
if(cache_num_rows() == 0)
{
print("11");
PlayerIsNotRegistered(playerid);
ShowLoginTextDraws(playerid);
}
else
{
print("12");
PlayerIsRegistered(playerid);
ShowLoginTextDraws(playerid);
}
return 1;
}
Anscheinend hatte er hier gemeckert
new rows;
cache_get_row_count(rows);aber da dir diese Funktion hier genau das gibt was du haben willst
habe ich sie einfach mal ersetzt und es ging dann.
die Funktion
cache_num_rows()Mfg. Mogly1
Edit: eingerückt -
setzt du die varaible auch irgendwo?
pRegistered[playerid]Edit: schuldige ist im include drinne Mein Fehler
Edit2:
evt. Spalte anders genannt? also hier kein Fehler ja?
mysql_format(handle, query, sizeof(query), "SELECT uID FROM account_list WHERE Name = '%e'", SpielerInfo[playerid][pName]); -
2. Rocky - Lebende Forenlegende und aktives Schreiberlein - Wette: Wann erreicht er 5000 Beiträge ? - Deadline: 31.12.2019
3. Seegras - Teammitglied und aktiver Kommentator - Wette: Wann erreicht er 4500 Likes ? - Deadline 31.12.2019Ich bin nicht ganz in der Materie drinne bei diesen 2 Personen aber mein Gefühl sagt mir....
Rocky 08.10.2019 Seegras 21.06.2019 -
Damit hat @SynonymousZ wohl gewonnen.
Macht wenig Sinn wenn 2 Leute das gleiche Datum wählen, wenn es nur einen Gewinn gibt

- Es gewinnt derjenige der am nächsten zum tatsächlichen Eintrittsdatum liegt, fällt kein Ban und/oder es liegen mehrere Leute richtig findet eine Auslosung durch einen Mittelsmann statt.
Also doch c(:
-
3 Gold angemalte Steine werden auf einen Bann gegen innerhalb der Deadline gesetzt
-
Ab einer gewissen Geschwindigkeit fliegt das Auto raus... liegt an Gta Samp,
Soweit meine Erfahrung sind...Aber du könntest abfragen, falls es raus bugt, ob es in der Reichweite vom Fahrzeug ist und wenn nicht, setzt du es wieder rein, es sieht dann aber etwas komisch aus

-
Du kansnt das Thema als erledigt markieren fertig
