Das kannst du mit einem Editor wie diesem machen:
http://forum.sa-mp.com/showthread.php?t=416138
Beiträge von Jeffry
-
-
schreibe es mal so
Der Code wird so nicht funktionieren. Da fehlt das Array für die Spieler, und man kann das auch nicht unter OnGameModeInit erstellen, da gibt es ja keine playerid.Mache es so:
Unter den Includes:
new PlayerBar:barid[MAX_PLAYERS];Dann unter OnPlayerConnect:
barid[playerid] = CreatePlayerProgressBar(playerid, 700.0, 500.0, 55.5, 3.2, 0xFF4800FF);Bei OnPlayerStateChange:
if(newstate == PLAYER_STATE_DRIVER)
{
new veh = GetPlayerVehicleID(playerid);
SetPlayerProgressBarMaxValue(playerid, barid[playerid], /*Hier der MAX-TANK von veh*/);
ShowPlayerProgressBar(playerid, barid[playerid]);
}
else
{
HidePlayerProgressBar(playerid, barid[playerid]);
}Und bei OnPlayerDisconnect:
DestroyPlayerProgressBar(playerid, barid[playerid]); -
Ob ein Spieler gespawnt ist und ob er das erste mal spawnt ist ein Unterschied

Deshalb, wenn du zum Beispiel in einem Befehl abfragen willst, ob der Spieler gespawnt ist, oder momentan tot ist, dann kannst du GetPlayerState nutzen. Aber ist ja kein Problem, deshalb kann man ja nachfragen. -
Setze bei OnPlayerConnect eine Spielervariable auf 0, frage bei OnPlayerSpawn ab, ob sie 0 ist, wenn ja schickst du dem Spieler die SendClientMessage und setzt die Spielervariable auf 1.
-
Wenn du spawnst wird OnPlayerConnect nicht aufgerufen, daher zeigt es die Nachricht nicht an.
GetPlayerState macht bei so einer Abfrage eher in einem Befehl oder ähnlichem Sinn. -
Wenn du nur Leute sperren willst, die kein LSPD sind, dann setze vor das IstSpielerInFraktion ein Ausrufezeichen (= nicht LSPD).
-
Ändere
GetPlayerVehicleID(playerid)
Zu
vehicleidDa der Spieler bei OnPlayerEnterVehicle noch nicht im Fahrzeug ist, somit gibt GetPlayerVehicleID 0 zurück.
-
Vielen Dank!
Gerne!

Noch einen Hinweis an dich:
Bitte vermeide es, ganze Posts mitsamt den ganzen Codes dazu zu zitieren. Es reicht - und dann macht die Zitatfunktion auch Sinn - wenn du eine assagekräftige Zeile zitierst, ohne Codes darin. Wäre super, wenn du darauf in Zukunft achtest. Danke! -
Dann musst du es so machen:
Unter den Includes:
new fName[5][16];Bei OnGameModeInit:
fName[0] = "LSPD";
fName[1] = "Zivilist";
//...Und dann so:
format(string, sizeof(string),"Du hast %s zum Leader der Fraktion %s gemacht!", sName, fName[frakid]);
SendClientMessage(playerid, 0xFFFFFFFF, string); -
#define sFraktion "LSPD"
#define sFraktion2 "Zivilist"
Sonst geht es nicht, dann bekommst du immer einen Fehler.Auslesen kannst du es dann so:
printf("Frak1: %d / Frak2: %s", sFraktion, sFraktion2); -
if(wantedlabel[playerid][i] == -1)
zu:
if(wantedlabel[playerid][i] == PlayerText3D:-1)Beachte aber, dass du bei OnGameModeInit alle Werte auf -1 setzen musst:
for(new i = 0; i < MAX_PLAYERS; i++) for(new j = 0; j < MAX_PLAYERS; j++) wantedlabel[i][j] = PlayerText3D:-1; -
Scheint mir als willst du vierdimensionale Arrays anlegen, das geht nicht.
Nutze im enum anstatt
pcKeys_giver[MAX_PLAYER_NAME],
Das
pcKeys_giver1[MAX_PLAYER_NAME],
//...(Bei deinem enum fehlt die vierte Dimension, deshalb speichert er nur den ersten Buchstaben, eine vierte Dimension könnte es aber auch nicht geben, daher einzelne Arrays. )
Edit:
Oder lagere die Namen im ein separates zweidimensionales Array aus, wenn du per Index auf den Namen zugreifen willst. -
Dann kannst du diese Funktion nutzen:
stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
{
new l_name[MAX_PLAYER_NAME];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
{
if(!strcmp(l_name,l_PlayerName, true)) return i;
}
}
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
{
if(strfind(l_name,l_PlayerName,true)!=-1) return i;
}
}
return INVALID_PLAYER_ID;
}Dazu dann:
aList[playerid][i] = mid;
zu:
aList[playerid][i] = ReturnPlayerID(sautor);
Ich nutze dieses, da ich keinen Sinn in "mid" erkennen kann (strval vom Query?).Und dann kannst du beim Dialog dann die ID so auslesen:
new pID = aList[playerid][listitem];
if(IsPlayerConnected(pID))
{
//...
} -
mysql_function_query(MySqlConnection,"SELECT * FROM accounts WHERE",true,"OnQueryFinish","siii","SELECT * FROM accounts WHERE",_SQL_HAUSTIME_CHECK,haus+1,MySqlConnection);
zu:
mysql_function_query(MySqlConnection,"SELECT * FROM accounts",true,"OnQueryFinish","siii","SELECT * FROM accounts",_SQL_HAUSTIME_CHECK,haus+1,MySqlConnection);Insofern dort alle Häuser selektiert werden sollen.
-
Unendlich groß geht nicht, da der Compiler den Speicher reservieren muss, und du hast ja keine unendlichen Ressourcen zur Verfügung.
Wenn du diese Nachricht bekommen solltest, dann schaue wo du Speicher einsparen kannst, und/oder setze das hier unter den Includes hin:
#pragma dynamic 10000Die Zahl kannst du auch größer machen, aber unendlich geht da auch nicht, auch dort ist irgendwann Schluss, also nicht übertreiben und für einen String der maximal 10 Zeichen lang wird 500 Zeichen reservieren.
-
Kannst du bitte den Code dazu posten?
-
Versuche es so:
ShowStats(playerid,targetid)
{
new sex[30],spawn[30],nextlevelcost,nextlevel;
if(sInfo[playerid][gender] == 1) sex = "männlich";
else if(sInfo[playerid][gender] == 2) sex = "weiblich";
if(sInfo[playerid][spawnpoint] == SPAWN_LS) spawn="LS";
else if(sInfo[playerid][spawnpoint] == SPAWN_SF) spawn="SF";
nextlevel = sInfo[playerid][level]*4+8;
nextlevelcost = sInfo[playerid][level]*25000;
new ddays=0,dhours=0,dminutes=0,idays=0,ihours=0,iminutes=0;
if(sInfo[playerid][donatortime] > 0)
{
new timenow=gettime();
new dresttime=sInfo[playerid][donatortime]-timenow;
ddays = dresttime/86400;
dhours = (dresttime-ddays*86400)/3600;
dminutes = (dresttime-(ddays*86400+dhours*3600))/60;
}
if(sInfo[playerid][invitesperre] > 0)
{
new timenow=gettime();
new iresttime=sInfo[playerid][invitesperre]-timenow;
idays = iresttime/86400;
ihours = (iresttime-idays*86400)/3600;
iminutes = (iresttime-(idays*86400+ihours*3600))/60;
}
new orgname[64];
format(orgname,sizeof(orgname),"Keine Organisation");
for(new i=0;i<sizeof(orgInfo);i++)
{
if(sInfo[playerid][orgid] != orgInfo[i][org_id]) continue;
orgname = orgInfo[i][org_name];
}
new caption[50],string[1024],fID=sInfo[playerid][fraktion];
format(caption,sizeof(caption),"Statistiken von %s",getPlayerName(playerid));
format(string,sizeof(string),"[Account]\nLevel:[%i] Geschlecht:[%s] Alter:[%i] Spawnenergie:[%i] Geld:[$%s($+%s)] Tel.:[%i]",sInfo[playerid][level],sex,sInfo[playerid][older],sInfo[playerid][spawnhealth],GetPoint(sInfo[playerid][money]),GetPoint(sInfo[playerid][bank]),sInfo[playerid][number]);
format(string,sizeof(string),"%s\nAccounttyp:[%s] Ehe:[%s] Spielzeit:[%s] Spawn:[%s] Respekt:[%i/%i] NextLevel:[%s$] Eventitems:[%i]",string,GetAccountTypeName(playerid),sInfo[playerid][ehe],GetPoint(sInfo[playerid][spielstunden]),spawn,sInfo[playerid][respekt],nextlevel,GetPoint(nextlevelcost),sInfo[playerid][eventitems]);
if(sInfo[playerid][donator] == 1 && sInfo[playerid][invitesperre] > 0) format(string,sizeof(string),"%s\nVerwarnungen:[%i/3] Donator-Restzeit:[%i Tage, %i Stunden %i Minuten] Invitesperre:[%i Tage, %i Stunden %i Minuten] Minuten seit Payday:[%i]",string,sInfo[playerid][warns],ddays,dhours,dminutes,idays,ihours,iminutes,sInfo[playerid][paydaytime]);
else if(sInfo[playerid][donator] == 0 && sInfo[playerid][invitesperre] == 0) format(string,sizeof(string),"%s\nVerwarnungen:[%i/3] Invitesperre:[Keine Invitesperre] Minuten seit Payday:[%d]",string,sInfo[playerid][warns],sInfo[playerid][paydaytime]);
else if(sInfo[playerid][donator] == 1 && sInfo[playerid][invitesperre] == 0) format(string,sizeof(string),"%s\nVerwarnungen:[%i/3] Donator-Restzeit:[%i Tage, %i Stunden %i Minuten] Invitesperre:[Keine Invitesperre] Minuten seit Payday:[%i]",string,sInfo[playerid][warns],ddays,dhours,dminutes,sInfo[playerid][paydaytime]);
else if(sInfo[playerid][donator] == 0 && sInfo[playerid][invitesperre] > 0) format(string,sizeof(string),"%s\nVerwarnungen:[%i/3] Invitesperre:[%i Tage, %i Stunden %i Minuten] Minuten seit Payday:[%i]",string,sInfo[playerid][warns],idays,ihours,iminutes,sInfo[playerid][paydaytime]);
format(string,sizeof(string),"%s\n\n[Beruf]Team:[%s] Organisation:[%s] Rank:[%s] Job:[%s]",string,fInfo[fID][f_name],orgname,GetPlayerRankName(playerid),GetPlayerJobName(playerid));
format(string, sizeof(string),"%s\n\n[Besitz]Materialien:[%i(+%i)] Drogen:[%ig(+%ig)] HackingCodes:[%i(+%i)/100] illegale Fische:[%i(+%i)]",string,sInfo[playerid][mats],sInfo[playerid][savemats],sInfo[playerid][drogen],sInfo[playerid][savedrogen],sInfo[playerid][codes],sInfo[playerid][savecodes],sInfo[playerid][fische],sInfo[playerid][savefische]);
ShowPlayerDialog(targetid,DIALOG_STATS,DIALOG_STYLE_MSGBOX,caption,string,"Schließen","");
return 1;
}Nutze diese Art von String-Verkettung auch in Zukunft, anstatt mehrere kleine Strings zu einem großen String zusammenzufügen.
-
Sind die Spieler immer online, oder kann er auch offline sein - wenn offline, dann keine Nachricht?
Der Spielername ist der Autor? -
Die Datei wird in der while Schleife geschlossen, sprich es kann nur ein Fahrzeug gelesen werden.
Versuche es so:
stock LoadPlayerVehicle(playerid)
{
new readline[256];
GetPlayerName(playerid,readline,MAX_PLAYER_NAME);
format(readline,sizeof(readline),"gFahrzeuge/%s.car",readline);
if(fexist(readline))
{
new File:csfile=fopen(readline,io_read);
while(fread(csfile,readline))
{
new lpvid = -1;
if(!strcmp(readline,"[0]",false,3)) lpvid=0;
else if(!strcmp(readline,"[1]",false,3)) lpvid=1;
else if(!strcmp(readline,"[2]",false,3)) lpvid=2;
else if(!strcmp(readline,"[3]",false,3)) lpvid=3;
else if(!strcmp(readline,"[4]",false,3)) lpvid=4;
if(lpvid == -1) continue;
PlayerVehicle[playerid][lpvid][pvModel]=strval(strpart(readline,1));
PlayerVehicle[playerid][lpvid][pvX]=floatstr(strpart(readline,2));
PlayerVehicle[playerid][lpvid][pvY]=floatstr(strpart(readline,3));
PlayerVehicle[playerid][lpvid][pvZ]=floatstr(strpart(readline,4));
PlayerVehicle[playerid][lpvid][pvA]=floatstr(strpart(readline,5));
PlayerVehicle[playerid][lpvid][pvColor1]=strval(strpart(readline,6));
PlayerVehicle[playerid][lpvid][pvColor2]=strval(strpart(readline,7));
PlayerVehicle[playerid][lpvid][pvPaintjob]=strval(strpart(readline,8));
PlayerVehicle[playerid][lpvid][pvID]=CreateVehicle(PlayerVehicle[playerid][lpvid][pvModel],PlayerVehicle[playerid][lpvid][pvX],PlayerVehicle[playerid][lpvid][pvY],PlayerVehicle[playerid][lpvid][pvZ],PlayerVehicle[playerid][lpvid][pvA],PlayerVehicle[playerid][lpvid][pvColor1],PlayerVehicle[playerid][lpvid][pvColor2],30);
ChangeVehiclePaintjob(PlayerVehicle[playerid][lpvid][pvID],PlayerVehicle[playerid][lpvid][pvPaintjob]);
for(new i=0;i<13;i++)
{
PlayerVehicle[playerid][lpvid][pvModSlot][i]=strval(strpart(readline,i+9));
if(PlayerVehicle[playerid][lpvid][pvModSlot][i]!=-1) AddVehicleComponent(PlayerVehicle[playerid][lpvid][pvID],PlayerVehicle[playerid][lpvid][pvModSlot][i]);
}
}
fclose(csfile);
}
return 1;
} -
Ok, kannst du dann bitte mal den Code posten, der die Fahrzeuge aus der Datei lädt?