Ja, der clue ist, vID hier ist nicht die vehicleID, sondern die modelid.
Das kommt wohl dabei raus, wenn man Code schreibt und nach 6 Monaten weitermachen will^^
Danke dir , klappt soweit
Ja, der clue ist, vID hier ist nicht die vehicleID, sondern die modelid.
Das kommt wohl dabei raus, wenn man Code schreibt und nach 6 Monaten weitermachen will^^
Danke dir , klappt soweit
Kennt vlt einer die doppelte Glocke Sound ID??
HI. Wie stell ich das denn am elegantesten an..
Also ich Frage /vinfo Autos im Besitz ab, natürlich mehr als 1. Jetzt möchte ich nicht für 5 Slots 5x alles in meinen Script kopieren.
Irgendwie müsste man doch was schreiben können dass für jedes der 5 Autos "pVehicle1ID" zu "pVehicle2ID" und so weiter macht. Wie geht das?
Hier meine Abfrage für das erste Auto
ocmd:vinfo(playerid)
{
new vehmodelname[32];
switch(cInfo[pInfo[playerid][pVehicle1ID]][carmodel])
{
case 411: vehmodelname = "Infernus";
case 414: vehmodelname = "Mule";
}
new vehtype[32];
switch(cInfo[pInfo[playerid][pVehicle1ID]][carmodel])
{
case 411: vehtype = "Supersport";
case 414: vehtype = "Boxed Van";
}
new vehcondition[32];
switch(cInfo[pInfo[playerid][pVehicle1ID]][carcondition])
{
case 0: vehcondition = "Brand New";
case 1: vehcondition = "New";
case 2: vehcondition = "Healthy";
case 3: vehcondition = "Good";
case 4: vehcondition = "Regular";
case 5: vehcondition = "Moderate";
case 6: vehcondition = "Used";
case 7: vehcondition = "Worn";
case 8: vehcondition = "Bad";
case 9: vehcondition = "Horrible";
case 10: vehcondition = "Critical";
case 11: vehcondition = "Scrapworthy";
case 12: vehcondition = "Driving-Dead";
}
new vehinsured[128];
switch(cInfo[pInfo[playerid][pVehicle1ID]][insured])
{
case 0: vehinsured = "No";
case 1: vehinsured = "Yes";
case 2: vehinsured = "2x";
case 3: vehinsured = "3x";
}
new vehregistered[128];
switch(cInfo[pInfo[playerid][pVehicle1ID]][registered])
{
case 0: vehregistered = "No";
case 1: vehregistered = "Yes";
}
new string[512];
SendClientMessage(playerid, COLOR_WHITE, "------------------------------------------------------------------------");
format(string, sizeof(string), "[FIRST VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",vehmodelname,vehtype,cInfo[pInfo[playerid][pVehicle1ID]][milage],vehcondition,vehinsured,vehregistered);
SendClientMessage(playerid, COLOR_SYSTEM, string);
format(string, sizeof(string), "[SECOND VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",vehmodelname,vehtype,cInfo[pInfo[playerid][pVehicle2ID]][milage],vehcondition,vehinsured,vehregistered);
SendClientMessage(playerid, COLOR_SYSTEM, string);
/* format(string, sizeof(string), "[THIRD VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",vehmodelname,vehtype,cInfo[pInfo[playerid][pVehicle3ID]][milage],vehcondition,vehinsured,vehregistered);
SendClientMessage(playerid, COLOR_SYSTEM, string);
format(string, sizeof(string), "[FOURTH VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",vehmodelname,vehtype,cInfo[pInfo[playerid][pVehicle4ID]][milage],vehcondition,vehinsured,vehregistered);
SendClientMessage(playerid, COLOR_SYSTEM, string);
format(string, sizeof(string), "[FIFHT VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",vehmodelname,vehtype,cInfo[pInfo[playerid][pVehicle5ID]][milage],vehcondition,vehinsured,vehregistered);
SendClientMessage(playerid, COLOR_SYSTEM, string);
SendClientMessage(playerid, COLOR_WHITE, "------------------------------------------------------------------------");
*/ return 1;
}
Alles anzeigen
Danke Kaliber
Ah okay. Ich hab gerade versucht es in meinen Script einzubauen, damit hab ich mich etwas übernommen weil ich unsicher bin wie ich es an jeder Stelle umschreiben muss.
zB wird ja beides also pVehicle1ID und pVehicle2ID in 2 Felder der Datenbank gespeichert. in meinem enum habe ich die beiden jetzt rausgeschmissen und durch das mit i ersetzt. Sollte oder kann ich überhaupt beides nutzen, je nach Bedarf anders an verschiedenen Stellen? oder ist das dann doppelt definiert mit dem enum.
Ich vermute an der stelle des vinfo cmds funktioniert es, jetzt gibts nur sehr viele "i is undefined symbol" errors^^
Oder hätte ich es einfach wenn spezifisch auf erstes Vehicle zugegriffen wird so schreiben sollen: pVehicleID[1] und pVehicleID[2] nachdem ich es enum [MAXVEHICLE_SLOTS] gesetzt habe?
Beispiel in Datenbank speichern: (Wie bau ich es hier ein oder geht pVehicleID[1] ?)
savePlayer(playerid)
{
if(pInfo[playerid][pLogged]==0)return 1;
//Speichern level,money
new query[1024];
new query2[1024];
new query3[1024];
//new query4[1024];
format(query,sizeof(query),"UPDATE players SET level='%i',Money='%i',SpawnPlace='%i',Job='%i',houseID='%i',BusinessID='%i' WHERE id='%i'",pInfo[playerid][pLevel],GetPlayerMoney(playerid),pInfo[playerid][pSpawn],pInfo[playerid][pJob],pInfo[playerid][pHouseID],pInfo[playerid][pBusinessID],pInfo[playerid][pSQLid]);
format(query2,sizeof(query2),"UPDATE players SET CarLicense='%i',BikeLicense='%i',TruckLicense='%i',SkinID='%i',OwnedVehicle1='%i',OwnedVehicle2='%i' WHERE id='%i'",pInfo[playerid][pCarlic],pInfo[playerid][pBikelic],pInfo[playerid][pTrucklic],pInfo[playerid][pSkin]/*GetPlayerSkin(playerid)*/,pInfo[playerid][pVehicleID][i],pInfo[playerid][pVehicleID][i],pInfo[playerid][pSQLid]);
format(query3,sizeof(query3),"UPDATE players SET Gender='%i',BankMoney='%i',BankCard='%i', Origin='%i', Religion='%i', PlayedTime='i' WHERE id='%i'",pInfo[playerid][pGender],pInfo[playerid][pBank],pInfo[playerid][pBankCard],pInfo[playerid][pOrigin], pInfo[playerid][pReligion],pInfo[playerid][pPlayedTime], pInfo[playerid][pSQLid]);
//format(query4,sizeof(query3),"UPDATE players SET OwnedVehicle1='%i', OwnedVehicle2='%i' WHERE id='%i'",pInfo[playerid][pVehicleID][i],pInfo[playerid][pVehicleID][i], pInfo[playerid][pSQLid]);
// // format(query,sizeof(query),"UPDATE players SET level='%i',Money='%i',SpawnPlace='%i',Job='%i',houseID='%i' WHERE id='%i'",pInfo[playerid][pLevel],GetPlayerMoney(playerid),pInfo[playerid][pSpawn],pInfo[playerid][pJob],pInfo[playerid][pHouseID],pInfo[playerid][pSQLid]);
//format(query,sizeof(query),"UPDATE players SET SkinID='%i',SpawnPlace='%i' WHERE id='%i'",pInfo[playerid][pSkin],pInfo[playerid][pSpawn],pInfo[playerid][pSQLid]);//
mysql_function_query(dbhandle,query,false,"","");
mysql_function_query(dbhandle,query2,false,"","");
mysql_function_query(dbhandle,query3,false,"","");
// mysql_function_query(dbhandle,query4,false,"","");
print("player save");
return 1;
}
Alles anzeigen
EDIT:
Habe es jetzt mal mit pVehicle[1] etc probiert, dann sagt der compiler
error 028: invalid subscript (not an array or too many subscripts): "pVehicleID"
betreffende Stelle (vermutlich dann alle folgenden :c )
malzeit,ich habe mal wieder nen alte script von mir wieder gefunden aber habe folgegenes warnnings und kann nicht starten
es läuft auf die sachen.
//========================================
//Includes
#include <crashdetect> //crashdetect Version -> 1.8.1
#include <a_samp> //a_samp Version -> 0.3.7
#include <a_mysql> //MySQL Version -> R33 läuft aber über Linux auf R34 static.so
#include <streamer>//Streamer Version -> 2.8
#include <sscanf2>//Sscanf Version -> 2.8.2
#include <md5>//MD5 Version -> Unbekannt
#include <zcmd>//ZCMD Version -> Unbekannt
#pragma tabsize 0
ich auch noch die sachen so drinne
C:\Users\Kevin\Desktop\SAMP server 2019\gamemodes\GLR.pwn(4626) : warning 213: tag mismatch
C:\Users\Kevin\Desktop\SAMP server 2019\gamemodes\GLR.pwn(44101) : warning 213: tag mismatch
C:\Users\Kevin\Desktop\SAMP server 2019\gamemodes\GLR.pwn(44101) : warning 213: tag mismatch
C:\Users\Kevin\Desktop\SAMP server 2019\gamemodes\GLR.pwn(44145) : warning 213: tag mismatch
C:\Users\Kevin\Desktop\SAMP server 2019\gamemodes\GLR.pwn(44145) : warning 213: tag mismatch
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
----------
Loaded log file: "server_log.txt".
----------
SA-MP Dedicated Server
----------------------
v0.3.7, (C)2005-2015 SA-MP Team
[13:15:17] password = "" (string)
[13:15:17] filterscripts = "" (string)
[13:15:17]
[13:15:17] Server Plugins
[13:15:17] --------------
[13:15:17] Loading plugin: crashdetect
[13:15:17] CrashDetect v4.18.1 is OK.
[13:15:17] Loaded.
[13:15:17] Loading plugin: mysql
[13:15:17] Failed.
[13:15:17] Loading plugin: sscanf
[13:15:17]
[13:15:17] ===============================
[13:15:17] sscanf plugin loaded.
[13:15:17] Version: 2.8.2
[13:15:17] (c) 2012 Alex "Y_Less" Cole
[13:15:17] ===============================
[13:15:17] Loaded.
[13:15:17] Loading plugin: streamer
[13:15:17]
*** Streamer Plugin v2.8 by Incognito loaded ***
[13:15:17] Loaded.
[13:15:17] Loading plugin: FileManager
[13:15:17] ******************
[13:15:17] ** FILE MANAGER **
[13:15:17] ** Loaded **
[13:15:17] ** Version 1.1 **
[13:15:17] ******************
[13:15:17] Loaded.
[13:15:17] Loading plugin: MapAndreas
[13:15:17] Loaded.
[13:15:17] Loaded 5 plugins.
[13:15:17]
[13:15:17] Filterscripts
[13:15:17] ---------------
[13:15:17] Loaded 0 filterscripts.
[13:15:17] [debug] Run time error 19: "File or function is not found"
[13:15:17] [debug] mysql_connect
[13:15:17] [debug] mysql_errno
[13:15:17] [debug] mysql_log
[13:15:17] [debug] mysql_tquery
[13:15:17] [debug] cache_get_data
[13:15:17] [debug] cache_get_field_content
[13:15:17] [debug] mysql_escape_string
[13:15:17] [debug] Run time error 19: "File or function is not found"
[13:15:17] [debug] mysql_connect
[13:15:17] [debug] mysql_errno
[13:15:17] [debug] mysql_log
[13:15:17] [debug] mysql_tquery
[13:15:17] [debug] cache_get_data
[13:15:17] [debug] cache_get_field_content
[13:15:17] [debug] mysql_escape_string
[13:15:17] Script[gamemodes/GLR.amx]: Run time error 19: "File or function is not found"
[13:15:17] Number of vehicle models: 0
Alles anzeigen
Falsche MySQL Version, entweder das Include ist falsch oder das Plugin
Falsche MySQL Version, entweder das Include ist falsch oder das Plugin
ich habe der r33 plugins zuwie include
https://github.com/pBlueG/SA-MP-MySQL/releases/tag/R33
edit und compiliet
Sollte oder kann ich überhaupt beides nutzen, je nach Bedarf anders an verschiedenen Stellen? oder ist das dann doppelt definiert mit dem enum.
Im enum schreibst du nur pVehicleID[MAX_VEHICLE_SLOTS], alles Andere für die Vehicles haus du raus.
Um es zu speichern:
pInfo[playerid][pVehicleID][0], pInfo[playerid][pVehicleID][1], pInfo[playerid][pVehicleID][2], pInfo[playerid][pVehicleID][3], pInfo[playerid][pVehicleID][4]
So kannst du jeweils auf die 5 Indizes zugreifen
Und in deinem ocmd test Command hast du:
pInfo[playerid][pVehicleID[1]], wenn dann müsste es: pInfo[playerid][pVehicleID][0] sein. (Das fängt bei 0 an, nicht bei 1.)
Zumal war halt der Array Index an der falschen Stelle.
Aber du müsstest halt noch prüfen, ob das Fahrzeug nicht 0 ist, ergo:
ocmd:test2(playerid)
{
new string[MAX_VEHICLE_SLOTS*18];
for(new i,v; i<MAX_VEHICLE_SLOTS; i++)
{
v = pInfo[playerid][pVehicleID][i];
if(!v) continue; //Hier besitzt er noch kein Fahrzeug
format(string,sizeof(string),"%s%s\n",string,GetVehicleName(GetVehicleModel(v)));
}
if(!string[0]) return SendClientMessage(playerid,-1,"* You don't own a vehicle yet!");
ShowPlayerDialog(playerid,999,DIALOG_STYLE_LIST,"Private Vehicles",string,"Okay","");
return 1;
}
Alles anzeigen
GetVehicleName, kannste z.B. hier her bekommen: https://forum.sa-mp.com/showthread.php?t=566775
Oder du hast natürlich schon so eine Funktion.
Falls er btw ein neues Auto kaufen mag, musst du einen leeren index finden:
stock FindFreeCarIndex(playerid)
{
for(new i; i<MAX_VEHICLE_SLOTS; i++)
{
if(!pInfo[playerid][pVehicleID][i]) return i;
}
return -1;
}
//Nutzung ist dann:
new i = FindFreeCarIndex(playerid);
if(i == -1) return SendClientMessage(playerid,-1,"* You own already "#MAX_VEHICLE_SLOTS#" vehicles!");
pInfo[playerid][pVehicleID][i] = CreateVehicle(...);
Alles anzeigen
Nochmal vielen Dank
Also ich hab es jetzt schonmal soweit hinbekommen dass der script wie zuvor funktioniert. Beim Autos kaufen und speichern hab ich es erstmal ohne array belassen, da es nur ein paar zeilen doppelt (bei 2 slots) sind. Das werde ich dann aber noch später mal dort einfügen was mich aber zu der Frage führt, was ist ressourcen schonender? ein array oder einfach doppelte Zeilen (in dem Fall 2x50)
Mit meinem /vinfo cmd hab ich allerdings irgendwas falsch gemacht. Bei eingabe bekomme ich 2x den text angezeigt, allerdings funktioniert es auch wiedderum nicht, sprich es werden keine infos vom Auto angezeigt. (alles null und kein name). Ich vermute mal ich hab das return verkackt
ocmd:vinfo(playerid)
{
for(new i; i<MAX_VEHICLE_SLOTS; i++)
{
// pInfo[pVehicleID][i] << so kannst darauf zugreifen :)
new vehmodelname[32];
switch(cInfo[pInfo[playerid][pVehicleID][i]][carmodel])
{
case 411: vehmodelname = "Infernus";
case 414: vehmodelname = "Mule";
}
new vehtype[32];
switch(cInfo[pInfo[playerid][pVehicleID][i]][carmodel])
{
case 411: vehtype = "Supersport";
case 414: vehtype = "Boxed Van";
}
new vehcondition[32];
switch(cInfo[pInfo[playerid][pVehicleID][i]][carcondition])
{
case 0: vehcondition = "Brand New";
case 1: vehcondition = "New";
case 2: vehcondition = "Healthy";
case 3: vehcondition = "Good";
case 4: vehcondition = "Regular";
case 5: vehcondition = "Moderate";
case 6: vehcondition = "Used";
case 7: vehcondition = "Worn";
case 8: vehcondition = "Bad";
case 9: vehcondition = "Horrible";
case 10: vehcondition = "Critical";
case 11: vehcondition = "Scrapworthy";
case 12: vehcondition = "Driving-Dead";
}
new vehinsured[128];
switch(cInfo[pInfo[playerid][pVehicleID][i]][insured])
{
case 0: vehinsured = "No";
case 1: vehinsured = "Yes";
case 2: vehinsured = "2x";
case 3: vehinsured = "3x";
}
new vehregistered[128];
switch(cInfo[pInfo[playerid][pVehicleID][i]][registered])
{
case 0: vehregistered = "No";
case 1: vehregistered = "Yes";
}
new string[512];
SendClientMessage(playerid, COLOR_WHITE, "------------------------------------------------------------------------");
format(string, sizeof(string), "[FIRST VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",vehmodelname,vehtype,cInfo[pInfo[playerid][pVehicleID][i]][milage],vehcondition,vehinsured,vehregistered);
SendClientMessage(playerid, COLOR_SYSTEM, string);
format(string, sizeof(string), "[SECOND VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",vehmodelname,vehtype,cInfo[pInfo[playerid][pVehicleID][i]][milage],vehcondition,vehinsured,vehregistered);
SendClientMessage(playerid, COLOR_SYSTEM, string);
/* format(string, sizeof(string), "[THIRD VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",vehmodelname,vehtype,cInfo[pInfo[playerid][pVehicleID][i]][milage],vehcondition,vehinsured,vehregistered);
SendClientMessage(playerid, COLOR_SYSTEM, string);
format(string, sizeof(string), "[FOURTH VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",vehmodelname,vehtype,cInfo[pInfo[playerid][pVehicleID][i]][milage],vehcondition,vehinsured,vehregistered);
SendClientMessage(playerid, COLOR_SYSTEM, string);
format(string, sizeof(string), "[FIFTH VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",vehmodelname,vehtype,cInfo[pInfo[playerid][pVehicleID][i]][milage],vehcondition,vehinsured,vehregistered);
SendClientMessage(playerid, COLOR_SYSTEM, string);
SendClientMessage(playerid, COLOR_WHITE, "------------------------------------------------------------------------");
*/ //return 1;
}
return 1;
}
Alles anzeigen
was ist ressourcen schonender? ein array oder einfach doppelte Zeilen (in dem Fall 2x50)
...das spielt hier keine Rolle.
Der Übersicht wegen, solltest du ein Array und eine Schleife verwenden.
Das mit der vehicle-Info kannst du verkürzen und zwar so:
ocmd:vinfo(playerid)
{
static const veh_condition[][] = {
"Brand New","New","Healthy","Good","Regular","Moderate","Used","Worn","Bad","Horrible","Critical","Scrapworthy","Driving-Dead"
}, veh_insured[][] = {
"No","Yes","2x","3x"
}, veh_counter[][] = {
"FIRST","SECOND","THIRD","FOURTH","FIFTH"
};
SendClientMessage(playerid, COLOR_WHITE, !"------------------------------------------------------------------------");
for(new i,vehtype[32],string[145],v; i<MAX_VEHICLE_SLOTS; i++)
{
v = pInfo[playerid][pVehicleID][i];
if(!v) continue;
switch(cInfo[v][carmodel])
{
case 411: vehtype = "Supersport";
case 414: vehtype = "Boxed Van";
}
format(string, sizeof(string), "[%s VEHICLE]:{FF4500} %s | Type: %s | Milage: %i | Condition: %s | Insured: %s | Registered: %s",
veh_counter[i],GetVehicleName(GetVehicleModel(v)),vehtype,cInfo[v][milage],veh_condition[cInfo[v][carcondition]],veh_insured[cInfo[v][insured]],veh_insured[cInfo[v][registered]]);
SendClientMessage(playerid, COLOR_SYSTEM, string);
}
SendClientMessage(playerid, COLOR_WHITE, !"------------------------------------------------------------------------");
return 1;
}
Alles anzeigen
ich habe der r33 plugins zuwie include
https://github.com/pBlueG/SA-MP-MySQL/releases/tag/R33
edit und compiliet
kann mir hier einer helfen?
kann mir hier einer helfen?
Dein Plugin wird nicht geladen, schaust du hier: MySQL Plugin buggt
Dein Plugin wird nicht geladen, schaust du hier: MySQL Plugin buggt
hatte ich gemacht und alle von die runtime ginge nicht zum instaleren.
atte ich gemacht und alle von die runtime ginge nicht zum instaleren.
Deinstalliere die x64 Dinger, du brauchst nur die x86...
Weiß jemand noch welche MYSQL Version das war, wo es die Funktionen wie z.b. cache_get_field_content,cache_get_data gab? bzw kann mir jemand einen Downloadlink dazu schicken?
Dürfte eine Version ab R33 und niedriger von BlueG sein, findest du auf Github.
Die Funktionen gab es bis Version R39-6. Ab Version R40 wurde das Prinzip geändert.
Hier die R39-6 (wobei die Empfehlung natürlich ist, die aktuellste Version zu nutzen):
Hat zwar nichts mit Scripting zu tun, aber kann mir jemand bei meinen Linux Server helfen? Auf dem Screen sieht man ja, dass die Dateien, die sich im Serververzeichnis befinden aufgelistet werden, allerdings kann ich den Startbefehl nicht ausführen.