Wenn du das ganze OnDialogResponse auskommentierst, also ganz oben:
/*und ganz unten:*/
Kannst du es dann kompilieren?
Wenn du das ganze OnDialogResponse auskommentierst, also ganz oben:
/*und ganz unten:*/
Kannst du es dann kompilieren?
Hast du das ganze OnDialogResponse mal mit meinem Pastebin ersetzt? Geht das?
Wird das Tuning gespeicher?
Das kannst du so machen:
Beim Speichern:
new tmpstr[10];
for(new s=0; s<14; s++)
{
format(tmpstr, sizeof(tmpstr), "tSlot%d", s);
dini_IntSet(path, tmpstr, GetVehicleComponentInSlot(fracVehicle[i][e_vID], s));
}
Beim Laden (nach CreateVehicle):
new tmpstr[10], cmp;
for(new s=0; s<14; s++)
{
format(tmpstr, sizeof(tmpstr), "tSlot%d", s);
cmp = dini_Int(path, tmpstr);
if(cmp > 0) AddVehicleComponent(fracVehicle[i][e_vID], cmp);
}
Schreibe mal bei OnGameModeInit in die erste Zeile:
AdminLog("Hallo");
Geht das?
Oder, wenn du es selbst machen willst:
Nach DIALOG_ABBRECHEN das hier entfernen:
return 1;
}
fcreate gibt es nicht.
Bei mir läuft der Code (Dome) ohne Probleme, die Datei wird korrekt mit Inhalt erstellt.
io_append erstellt die Datei wenn sie nicht existiert.
Prüfe mal, ob du die Berechtigung hast, in dem Ordner etwas zu schreiben, möglicherweise liegt es daran.
Ja, wenn du keines von beidem bist, dann kommt die Meldung, sprich wenn du eines von beidem bist, dann kommt die Meldung nicht und du kannst den Befehl ausführen.
if(!IsPlayerAdmin(playerid) && pInfo[playerid][pAdmin] != 7)return SCM(playerid, COLOR_GREEN, "[Admin-FEHLER]: Du bist kein Supporter/Moderator/Administrator/Projektleiter!");
Das ,1 am Ende hab ich weg gemacht, da brauchst du nicht.
Meinst du https://wiki.sa-mp.com/wiki/SetPlayerTime ?
Du momentane Zeit kannst du mit http://wiki.sa-mp.com/wiki/Gettime herausfinden (die des Servers = Echtzeit).
Da ist ein Klammerfehler drin, so wie es aussieht nach oder bei DIALOG_ABBRECHEN.
Poste bitte dein ganzes OnDialogResponse, nutze gegebenenfalls pastebin.com.
Lass es dir mal so ausgeben. Was wird dann angezeigt?
Bist du im richtigen Interior und der richtigen virtuellen Welt?
LSbizSkinShopInfo[i][bLSbizSkinShop_Label2] = CreateDynamic3DTextLabel("Kasse", COLOR_YELLOW, LSbizSkinShopInfo[i][bLSbizSkinShop_BuyX], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyY], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyZ], 12, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, LSbizSkinShopInfo[i][bLSbizSkinShop_World], LSbizSkinShopInfo[i][bLSbizSkinShop_Interior], -1);
LSbizSkinShopInfo[i][bLSbizSkinShop_Pickup2] = CreateDynamicPickup(1274, 1, LSbizSkinShopInfo[i][bLSbizSkinShop_BuyX], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyY], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyZ], -1);
printf("BuyPickup geladen: X = %f | Y = %f | Z %f", LSbizSkinShopInfo[i][bLSbizSkinShop_BuyX], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyY], LSbizSkinShopInfo[i][bLSbizSkinShop_BuyZ]);
printf("Label: %d | Pickup: %d | World: %d | Interior: %d", _:LSbizSkinShopInfo[i][bLSbizSkinShop_Label2], LSbizSkinShopInfo[i][bLSbizSkinShop_Pickup2], LSbizSkinShopInfo[i][bLSbizSkinShop_World], LSbizSkinShopInfo[i][bLSbizSkinShop_Interior]);
Die Abfrage muss im Befehl vor der Zuweisung sein, am besten sogar vor der Schleife:
ocmd:kaufefirmengelaende(playerid,params[])
{
if(sInfo[playerid][firma] != -1)return SendClientMessage(playerid,rot,"Fehler: Du Besitzt bereits eine Firma!");
for(new i;i<sizeof(Firmengebiete);i++)
{
if(IsPlayerInRangeOfPoint(playerid, 4.0, Firmengebiete[i][F_KaufX], Firmengebiete[i][F_KaufY], Firmengebiete[i][F_KaufZ]))
{
GetPlayerName(playerid, Firmengebiete[i][F_Besitzer], MAX_PLAYER_NAME);
//Hier das Label aktualisieren.
sInfo[playerid][firma]= i;
return SendClientMessage(playerid, 0xFFFFFFFF, "Gekauft.");
}
}
return SendClientMessage(playerid, 0xFF0000FF, "Du bist nich am Kaufpunkt des Firmengeländes!");
}
Das ist mir nicht nachvollziehbar.
Ich kann dir anbieten, ausnahmsweise mal mit TeamViewer drauf zu schauen, vielleicht findet sich dann der Fehler.
Müsstest mir eben sagen, wann du Zeit hast.
EDIT:
Erledigt. Funktioniert nun wie beschrieben mit:
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort=MD5('%s')",name,passwort);
und:
format(query,sizeof(query),"INSERT INTO user (username, passwort, level) VALUES ('%s', MD5('%s'), '1')",name,passwort);
Schau dir mal diesen Editor an:
http://forum.sa-mp.com/showthread.php?t=582490
Übrigens, da du geschrieben hast, dass du neu in der Materie bist, rate ich dir, fange gleich mit dem richtigen System an, und nicht mit diesen Funktionen (mysql_GetString, etc).
Die sind sehr langsam und gehen auf die Performance des Servers.
Ich verlinke hier mal das Tutorial für die neuste und beste Version von MySQL für den Server:
[ SCRIPTING ] [jTuT] MySQL R39-3 (Installation, XAMPP, Verwendung, Bedienung & Registrations-System)
Wenn du damit deine Systeme von Anfang an aufbaust, dann lohnt sich das wirklich.
Was genau willst du da wissen? Ich habe die Abfrage auch ausgebessert, klappt es noch nicht?
Du musst in den vierten Parameter einen String schreiben, und GetString's können nicht direkt in mehrdimensionale Arrays geschrieben werden, daher muss man format/strcat verwenden.
public InitialiseBusinesses()
{
new str_x[8];
for(new x=1; x <= BusinessAmountVar; x++)
{
valstr(str_x, x);
BusinessData[x][ID] = x;
format(BusinessData[x][BizName], 64, mysql_GetString("businesses", "Name", "ID", str_x));
BusinessData[x][BizX] = mysql_GetFloat("businesses", "BizX", "ID", str_x);
BusinessData[x][BizY] = mysql_GetFloat("businesses", "BizY", "ID", str_x);
BusinessData[x][BizZ] = mysql_GetFloat("businesses", "BizZ", "ID", str_x);
BusinessData[x][Price] = mysql_GetInt("businesses", "Price", "ID", str_x);
BusinessData[x][Status] = mysql_GetInt("businesses", "Status", "ID", str_x);
format(BusinessData[x][BizOwner], 64, mysql_GetString("businesses", "Owner", "ID", str_x));
BusinessData[x][Bank] = mysql_GetInt("businesses", "Bank", "ID", str_x);
BusinessData[x][EnterPrice] = mysql_GetInt("EnterPrice", "Price", "ID", str_x);
/*if(!strcmp(BusinessData[x][BizOwner], "No-One"))
{//Zu verkaufen
BusinessData[x][BIZPickup] = CreatePickup(1272, 1, BusinessData[cbizid][BizX], BusinessData[cbizid][BizY], BusinessData[cbizid][BizZ], -1);
format(BusinessData[cbizid][BIZ3DText],256,"Business zu verkaufen!\n\nName: %s [ID:%i]\nPreis: $%i\nEingangspreis: $%i",BusinessData[cbizid][BizName],BusinessData[cbizid][ID],BusinessData[cbizid][Price],BusinessData[cbizid][EnterPrice]);
BusinessData[cbizid][BIZ3D] = Create3DTextLabel(BusinessData[cbizid][BIZ3DText], COLOR_ORANGE, BusinessData[cbizid][BizX], BusinessData[cbizid][BizY], BusinessData[cbizid][BizZ], 10.0, 0, 1);
}
else
{//In Besitz
BusinessData[x][BIZPickup] = CreatePickup(1273, 1, BusinessData[cbizid][BizX], BusinessData[cbizid][BizY], BusinessData[cbizid][BizZ], -1);
format(BusinessData[cbizid][BIZ3DText],256,"Business nicht zu verkaufen!\n\nName: %s [ID:%i]\nPreis: $%i\nEingangspreis: $%i",BusinessData[cbizid][BizName],BusinessData[cbizid][ID],BusinessData[cbizid][Price],BusinessData[cbizid][EnterPrice]);
BusinessData[cbizid][BIZ3D] = Create3DTextLabel(BusinessData[cbizid][BIZ3DText], COLOR_ORANGE, BusinessData[cbizid][BizX], BusinessData[cbizid][BizY], BusinessData[cbizid][BizZ], 10.0, 0, 1);
}*/
}
return 1;
}
if(!strcmp(item, "Schlagring"))
{
//Eingefügt:
ShowPlayerDialog(playerid,DIALOG_InventarMenu,DIALOG_STYLE_LIST,"Inventar-Menü Erweitert","Benutzen\nWegwerfen\nInformation","Wählen","Abbrechen");
SendClientMessage(playerid, 0xFF0000FF, "Schlagring");
PickedItem[playerid] = 0;
}
else if(!strcmp(item, "Golfschlaeger"))
{
//Eingefügt:
ShowPlayerDialog(playerid,DIALOG_InventarMenu,DIALOG_STYLE_LIST,"Inventar-Menü Erweitert","Benutzen\nWegwerfen\nInformation","Wählen","Abbrechen");
SendClientMessage(playerid, 0xFF0000FF, "Golfschlaeger");
PickedItem[playerid] = 1;
}
//Usw...
So weißt du dann, welches Item der Spieler ausgewählt hat.
Ich hab dir das mal gebastelt.
new bool:ItemDialogOpen[MAX_PLAYERS][3];
Dort wo der Dialog angezeigt wird:
ShowPlayerDialog(playerid,DIALOG_Inventar,DIALOG_STYLE_LIST,"Inventar","Legale Waffen\nIllegale Waffen\nEssen","Wählen","Abbrechen");
SetPVarString(playerid, "ItemD_0", "Legale Waffen");
SetPVarString(playerid, "ItemD_1", "Illegale Waffen");
SetPVarString(playerid, "ItemD_2", "Essen");
for(new i=0; i<3; i++) ItemDialogOpen[playerid][i] = false;Nur das.
Und dann:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_Inventar)
{
if(!response) return 1;
new tmp[64], item[64];
format(tmp, sizeof(tmp), "ItemD_%d", listitem);
GetPVarString(playerid, tmp, item, sizeof(item));
if(!strcmp(item, "Legale Waffen"))
{
ItemDialogOpen[playerid][0] = !ItemDialogOpen[playerid][0];
}
else if(!strcmp(item, "Illegale Waffen"))
{
ItemDialogOpen[playerid][1] = !ItemDialogOpen[playerid][1];
}
else if(!strcmp(item, "Essen"))
{
ItemDialogOpen[playerid][2] = !ItemDialogOpen[playerid][2];
}
else
{
if(!strcmp(item, "Schlagring"))
{
SendClientMessage(playerid, 0xFF0000FF, "Schlagring");
}
else if(!strcmp(item, "Golfschlaeger"))
{
SendClientMessage(playerid, 0xFF0000FF, "Golfschlaeger");
}
//Usw...
return 1;
}
new string[1024], count;
format(string, sizeof(string), "Legale Waffen\n");
SetPVarString(playerid, "ItemD_0", "Legale Waffen");
count++;
if(ItemDialogOpen[playerid][0])
{
for(new i=0; i<9; i++)
{
if(ItemInfo[playerid][ItemsEnum:i]==0) continue;
format(string,sizeof(string),"%s -%s (%i)\n",string, ItemName(i), ItemInfo[playerid][ItemsEnum:i]);
format(tmp, sizeof(tmp), "ItemD_%d", count);
SetPVarString(playerid, tmp, ItemName(i));
count++;
}
}
format(string,sizeof(string),"%sIllegale Waffen\n",string);
format(tmp, sizeof(tmp), "ItemD_%d", count);
SetPVarString(playerid, tmp, "Illegale Waffen");
count++;
if(ItemDialogOpen[playerid][1])
{
for(new i=9; i<23; i++)
{
if(ItemInfo[playerid][ItemsEnum:i]==0) continue;
format(string,sizeof(string),"%s -%s (%i)\n",string, ItemName(i), ItemInfo[playerid][ItemsEnum:i]);
format(tmp, sizeof(tmp), "ItemD_%d", count);
SetPVarString(playerid, tmp, ItemName(i));
count++;
}
}
format(string,sizeof(string),"%sEssen\n",string);
format(tmp, sizeof(tmp), "ItemD_%d", count);
SetPVarString(playerid, tmp, "Essen");
count++;
if(ItemDialogOpen[playerid][2])
{
for(new i=23; i<sizeof(ItemInfo[]); i++)
{
if(ItemInfo[playerid][ItemsEnum:i]==0) continue;
format(string,sizeof(string),"%s -%s (%i)\n",string, ItemName(i), ItemInfo[playerid][ItemsEnum:i]);
format(tmp, sizeof(tmp), "ItemD_%d", count);
SetPVarString(playerid, tmp, ItemName(i));
count++;
}
}
ShowPlayerDialog(playerid,DIALOG_Inventar,DIALOG_STYLE_LIST,"Inventar",string,"Wählen","Abbrechen");
return 1;
}
return 1;
}
Sieht dann so aus:
Sind natürlich nur Test-Daten.