Hallo
Bitte lacht jetzt nicht, ich versuche mich möglichst nicht zu dumm anzustellen. Ich teste immer gerne etwas rum und versuche etwas, auch wenn es halt nicht (immer) geht. Aber so lerne ich am besten. Ich habe getsern mal das BFX-Dyn Haussystem studiert und versucht so etwas als Haussystem nachzubauen und dann meinen Wünschen anzupassen. Ich habe nochnie wirklich mit strcmp programmiert, sondern immer mit DCMD.
Probleme:
1.)Bei jedem Command den ich eingebe (register, /essen, /o [Text] ) kommt immer /createcar ..........
2.)Die Cars werden nach dem Createbefehl nicht erstellt
3.)Die Cars werden beim Serverstart nicht geladen
4.)Es herrscht eine Art Zahlenmix in der Fahrzeuge.cfg
Der Code:
#include <a_samp>
#include <JunkBusterFS>
#define MAX_CAR 200 // Maximale Anzahl an Fahrzeugen
#define CAR_DATEI "Vehiclesystem/Fahrzeuge.cfg" // Speicherort
#define MAX_SPIELER_CAR 2 // Maximale Anzahl an Fahrzeugen pro Spieler
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_WHITE 0xFFFFFFAA
forward SaveCache();
forward initSlot();
new _cache_fahrzeug;
enum fahrzeug
{
fBesitzer[MAX_PLAYER_NAME],
fPreis,
fModelID,
Float:fX,
Float:fY,
Float:fZ,
Float:fA,
fFarbe1,
fFarbe2,
fCarID
}
new FDaten[MAX_CAR][fahrzeug];
enum spieler_cardaten
{
car_zahl
}
new Player[MAX_PLAYERS][spieler_cardaten];
public OnFilterScriptInit()
{
new line[255],File:carx = fopen(CAR_DATEI,io_read),
car_index;
if(carx)
{
while(fread(carx,line))
{
if(line[strlen(line)-2] == '\r')line[strlen(line)-2] = '\0';
if(line[strlen(line)-1] == '\n')line[strlen(line)-1] = '\0';
strmid(FDaten[_cache_fahrzeug][fBesitzer],strtok(line,car_index,','),0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
FDaten[_cache_fahrzeug][fPreis] = strval(strtok(line,car_index,','));
FDaten[_cache_fahrzeug][fModelID] = strval(strtok(line,car_index,','));
FDaten[_cache_fahrzeug][fX] = floatstr(strtok(line,car_index,','));
FDaten[_cache_fahrzeug][fY] = floatstr(strtok(line,car_index,','));
FDaten[_cache_fahrzeug][fZ] = floatstr(strtok(line,car_index,','));
FDaten[_cache_fahrzeug][fA] = floatstr(strtok(line,car_index,','));
FDaten[_cache_fahrzeug][fFarbe1] = strval(strtok(line,car_index,','));
FDaten[_cache_fahrzeug][fFarbe2] = strval(strtok(line,car_index,','));
CreateVehicle(FDaten[_cache_fahrzeug][fModelID],FDaten[_cache_fahrzeug][fX],FDaten[_cache_fahrzeug][fY],FDaten[_cache_fahrzeug][fZ],FDaten[_cache_fahrzeug][fA],FDaten[_cache_fahrzeug][fFarbe1],FDaten[_cache_fahrzeug][fFarbe2], -1);
car_index = 0;
_cache_fahrzeug++;
}
fclose(carx);
}
return 1;
}
public OnFilterScriptExit()
{
SaveCache();
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
Player[playerid][car_zahl] = 0;
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new idx,cmd[128];
if(!strcmp(cmd,"/createcar",true))
{
if(!IsPlayerAdmin(playerid))return 1;
cmd = strtok(cmdtext,idx);
if(!cmd[0])return SendClientMessage(playerid,COLOR_WHITE,"Verwendung: /createcar [ModelID] [Farbe1] [Farbe2] [Preis]");
new cmodelid = strval(cmd);
cmd = strtok(cmdtext,idx);
if(!cmd[0])return SendClientMessage(playerid,COLOR_WHITE,"Verwendung: /createcar [ModelID] [Farbe1] [Farbe2] [Preis]");
new cfarbe1 = strval(cmd);
cmd = strtok(cmdtext,idx);
if(!cmd[0])return SendClientMessage(playerid,COLOR_WHITE,"Verwendung: /createcar [ModelID] [Farbe1] [Farbe2] [Preis]");
new cfarbe2 = strval(cmd);
cmd = strtok(cmdtext,idx);
if(!cmd[0])return SendClientMessage(playerid,COLOR_WHITE,"Verwendung: /createcar [ModelID] [Farbe1] [Farbe2] [Preis]");
new cpreis = strval(cmd);
new Float:JPos[3];
new slotid = initSlot();
new fullid = (slotid==-1) ? (_cache_fahrzeug) : (slotid);
GetPlayerPos(playerid,JPos[0],JPos[1],JPos[2]);
strmid(FDaten[fullid][fBesitzer],"Keiner",0,MAX_PLAYER_NAME,MAX_PLAYER_NAME);
FDaten[fullid][fPreis] = cpreis;
FDaten[fullid][fModelID] = cmodelid;
FDaten[fullid][fX] = JPos[0];
FDaten[fullid][fY] = JPos[1];
FDaten[fullid][fZ] = JPos[2];
FDaten[fullid][fFarbe1] = cfarbe1;
FDaten[fullid][fFarbe2] = cfarbe2;
CreateVehicle(cmodelid,JPos[0],JPos[1],JPos[2],0,cfarbe1,cfarbe2, -1);
if(slotid==-1)_cache_fahrzeug++;
SaveCache();
return 1;
}
return 0;
}
strtok(const string[], &index, trenner = ' ')
{
new length = strlen(string);
while ((index < length) && (string[index] <= trenner))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > trenner) && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
public SaveCache()
{
new fm[255],File:carx = fopen(CAR_DATEI,io_write);
for(new i = 0;i<_cache_fahrzeug;i++)
{
format(fm,sizeof fm,"%s,%d,%d,%f,%f,%f,%f,%d,%d\n",
FDaten[i][fBesitzer],
FDaten[i][fPreis],
FDaten[i][fModelID],
FDaten[i][fX],
FDaten[i][fY],
FDaten[i][fZ],
FDaten[i][fA],
FDaten[i][fFarbe1],
FDaten[i][fFarbe2]);
fwrite(carx,fm);
}
fclose(carx);
return 1;
}
public initSlot()
{
new foundx = -1;
for(new i = 0;i<_cache_fahrzeug;i++)
{
if(FDaten[i][fBesitzer] == '\0'){foundx = i;break;}
}
return foundx;
}
So sollte die Fahrzeug.cfg aussehen:
Besitzer,Preis,ModelID,X,Y,Z,A,Farbe1,Farbe2
So sieht sie aus:
Keiner,12,0,1136.906250,-2038.063476,69.007812,0.000000,400,11
Besitzer, Farbe2,Preis,X,Y,Z,A,ModelID,Farbe1
Ich wäre um Hilfe sehr dankbar, da ich mich auch in Zukunft an was ran wagen möchte, mit dem ich lernen kann und es auch tue.
MfG dUDALUS