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.
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?
PlayerCar[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:
//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;
}
Alles anzeigen
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:
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.
#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;
}
Alles anzeigen
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 GivePlayerItem
hinzu ü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. Mogly1
Also 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.2019
Ich 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 ![]()
hier 1 Frage c(:
Graff3D
graffity
sind das globale variablen?
Bzw. müssen sie ja laut deinem erstell ding.... bedeutet diese variablen sind genau das Tag was du zu letzt erstellt hast...
(falls es globale Variablen sind)
Edit:
Warum nutzt du beim erstellen der tags kein
CreateObject
SetObjectMaterialText
?
Edit2:
Schuldige bitte ganz vergessen noch zu schreiben, ändere mal das so ab..
new Graff3D[MAX_GRAFFITI];
new graffity[MAX_GRAFFITI];
und nutze das dann mal bitte jeweils in den sachen wo es steht so
Graff3D[i] =..
graffity[i] =...
Also so dann ca.
graffity[i] =CreateObject(19482,dini_Float(file,"Graffiti X"),dini_Float(file,"Graffiti Y"),dini_Float(file,"Graffiti Z"),dini_Float(file,"Graffiti RotX"),dini_Float(file,"Graffiti RotY"),dini_Float(file,"Graffiti RotZ"),0.0);
Graff3D[i] =Create3DTextLabel(tagname,COLOR_ORANGE,dini_Float(file,"Graffiti X"),dini_Float(file,"Graffiti Y"),dini_Float(file,"Graffiti Z"),7,0,0);
DestroyObject(graffity[i]);
Delete3DTextLabel(Graff3D[i]);
sollte dann eig. gehen?
Nein, das wird ja nicht oft geupdatet und das sind ja auch nicht viele Objekte.
Generell sollte das keine großen Auswirkungen haben.
Mit dem Profiler Plugin: https://forum.sa-mp.com/showthread.php?t=271129
Kann man das übrigens theoretisch sehr gut erfassen
![]()
Hier hab es mal ca. 20min auf dem Server getestet mit 40 kühen und 4 Farmen also jeweils 10 kühe auf 1 farm mit futter
ist das jetzt viel oder mittel mäßiger verbauch? kann damit nicht viel anfangen also mit den %
@Kaliber
2019-05-10 20_40_11-Window.png