new bool:vehVehicles[MAX_VEHICLES];
Beim Befehl:
vehVehicles[vID] = true;
Bei OnVehicleDeath:
if(vehVehicles[vehicleid]) DestroyVehicle(vehicleid), vehVehicles[vehicleid] = false;
new bool:vehVehicles[MAX_VEHICLES];
Beim Befehl:
vehVehicles[vID] = true;
Bei OnVehicleDeath:
if(vehVehicles[vehicleid]) DestroyVehicle(vehicleid), vehVehicles[vehicleid] = false;
Dann musts du es so machen:
mysql_tquery(mysql, "SELECT girogebuehr, girozins, spargebuehr, sparzins FROM banken", "OnBanksLoaded", "");
forward OnBanksLoaded();
public OnBanksLoaded()
{
new rows = cache_get_row_count();
for(new i=0; i<rows; i++)
{
BankGirGebuehr[i] = cache_get_row_int(i, 0);
bGirZins[i] = cache_get_row_int(i, 1);
BankSGebuehr[i] = cache_get_row_int(i, 2);
bSZins[i] = cache_get_row_int(i, 3);
}
return 1;
}
Edit:
DJ Deagle: Das gehört da nicht hin, danke für den Hinweis.
1.)
Hast du es schon mal mit SetPlayerSkin versucht? Wenn nicht, dann mach das mal. Wenn das auch nicht geht, dann füge bei OnPlayerSpawn das SetPlayerSkin ein.
2.)
Da musst du das Passwort in einer Variable zwischen speichern und den Teil der das Callback aufruft an die gewünschte Stelle setzen. Dann das Passwort wieder übergeben.
Ich kann dir nicht zeigen wo oder wie, weil der Code der das Callback aufruft nicht dabei ist.
Was funktioniert denn nicht? Bekommst du Errors, oder klappt es ingame nicht?
Wenn letzteres, wie erstellst du die Fahrzeuge für den wheelman?
Poste bitte mal die GivePlayerMoneyEx Funktion.
So wie du das da nämlich vor hast scheint das nicht wirklich zu funktionieren.
strval von einer Kommazahl klappt nicht.
Und wie sieht deine GeldAnzeige Funktion aus?
Mit meinem eigenen.
Aber versuch mal den, der ähnelt meinem: http://forum.sa-mp.com/showthread.php?t=290640
Wenn du es nicht hinbekommst, dann poste das Textdraw so wie es jetzt ist, dann mache ich dir das morgen kurz richtig.
Edit:
Equ: Ok, ich mache es dir heute Abend wenn ich Feierabend habe.
Mach es so:
if(ispassenger)
{
for(new i=0;i<sizeof(wheelmencar);i++)
{
if(vehicleid == wheelmencar[i])
{
if(Spieler[playerid][Wanteds] > 0)
{
new driverid = -1;
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerInVehicle(i, vehicleid) && GetPlayerState(i) == PLAYER_STATE_DRIVER)
{
driverid = i;
break;
}
}
if(driverid != -1)
{
//ID des Fahrers = driverid
SendClientMessage(playerid,COLOR_GRAD2,"Du bezahlst dem Wheelman schonmal $9000.");
}
else
{
//Kein Fahrer
}
}
}
}
}
Damit kannst du direkt weiterarbeiten, mit der ID des Fahrers.
Ich würde es dir so raten, die Box für das Textdraw einzuschalten, und dann das Textdraw mit Box zu erstellen (dann siehst du den auswählbaren Bereich = die Box).
Wenn du es dann in den Code packst, machst du die Box einfach aus, sprich auf 0.
Diesen Editor habe ich selbst nie benutzt, daher kann ich dir nicht genau sagen wie und ob es damit geht, aber normalerweise sollte es gehen.
PlayerTextDrawTextSize muss am X Wert größer werden.
Du musst es so lange größer machen, bis der automatische Zeilenumbruch nicht mehr passiert.
Nimm dir am besten einen Textdraw Editor.
Wie sieht es aus, wenn du es so schreibst?
new Peds[37] = {
101,
3,
4,
5,
6,
7,
14,
15,
18,
19,
26,
27,
29,
59,
72,
80,
81,
104,
106,
108,
120,
121,
122,
123,
147,
153,
156,
167,
162,
185,
186,
188,
189,
203,
204,
206,
264
};
//OnGameModeInit
for(new i = 0; i <= sizeof(Peds)-1; i++)
{
AddPlayerClass(Peds[i],1958.3783,1343.1572,1100.3746,269.1425,-1,-1,-1,-1,-1,-1);
}
//OnPlayerRequestClass
public OnPlayerRequestClass(playerid, classid)
{
PlayerInfo[playerid][pChar] = Peds[classid];
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid, playerid);
SetPlayerPos(playerid,-690.0348,939.1138,13.6328);
SetPlayerFacingAngle(playerid,272.3604);
SetPlayerCameraPos(playerid, -683.4200, 939.6200, 13.9800);
SetPlayerCameraLookAt(playerid, -684.4200, 939.5600, 13.9400);
DarfNichtNehmen[playerid] = 0;
if(classid >= 0 && classid <= 36)
{
GameTextForPlayer(playerid, "~y~> ~g~Zivilist ~y~<", 10000, 6);
PlayerInfo[playerid][pTeam] = 1;
}
return 1;
}
sscanf über eine Liste? Warum willst du das machen?
Kannst du mal ein Beispiel zeigen, was du vor hast? Was möchtest du bei der Liste denn splitten?
So sollte es klappen:
if(strcmp(cmd, "/breakcuff", true) == 0)
{
if(Spieler[playerid][Team] == 1 || Spieler[playerid][Team] == 2 || Spieler[playerid][Team] == 14)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Benutze: /cuff [ID/Name]");
return 1;
}
new pID = ReturnUser(tmp), string[145];
if(IsPlayerConnected(pID))
{
if(pID != INVALID_PLAYER_ID)
{
if(Cuffed[pID] != 1)
{
return SendClientMessage(playerid, COLOR_GRAD2, "Der Spieler ist NICHT gecufft.");
}
new Float:x, Float:y, Float:z;
GetPlayerPos(pID, x,y,z);
if(IsPlayerInRangeOfPoint(playerid, 8, x,y,z))
{
if(pID == playerid)
{
return SendClientMessage(playerid, COLOR_GRAD2, "Du kannst dich selber nicht entfesseln.");
}
format(string, sizeof(string), "* Beamter %s hat dir Handschellen entfernt.", SpielerName(playerid));
SendClientMessage(pID, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "* Du hast %s Handschellen entfernt.", SpielerName(pID));
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "** Beamter %s hat %s Handschellen entfernt.", SpielerName(playerid), SpielerName(pID));
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
GameTextForPlayer(pID, "~r~Frei", 2500, 3);
SetTimerEx("cufftimer",1000*20,0,"i",pID);
}
else
{
SendClientMessage(playerid, COLOR_GRAD2, "Der Spieler ist nicht in deiner Nähe.");
return 1;
}
}
}
}
else
{
return SendClientMessage(playerid, COLOR_GRAD2, "Du bist kein Beamter.");
}
return 1;
}
Jeffry:
Hast du temaviver? um mal drüber zu gucken ?
Geht nicht, jetzt kommt DFB Pokal.
Aber ich habe in dem ganzen Durcheinander den Fehler gefunden.
Schreib es so:
savePlayer(playerid)
{
sInfo[playerid][eingeloggt] = 1;
new query[256];
format(query,sizeof(query),"UPDATE user SET level='%i',skin='%i',geschlecht='%i',money='%i',alevel='%i',slevel='%i',fraktion='%i',rang='%i',leader='%i',coleader='%i',spawnchange='%i' WHERE id='%i'",
GetPlayerScore(playerid),GetPlayerSkin(playerid),GetPlayerMoney(playerid),sInfo[playerid][geschlecht],sInfo[playerid][alevel],sInfo[playerid][slevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][leader],sInfo[playerid][coleader],sInfo,sInfo[playerid][spawnchange],sInfo[playerid][db_id]);
mysql_function_query(dbhandle,query,false,"",""); //Hast du weg gemacht.
return 1;
}
Dann hast du zweimal dieselben Dialog IDs vergeben. Prüfe alle deine Dialog IDs und/oder vergebe sie komplett neu.
Kein Problem, aber was ist denn das? Das ist doch kein Befehl. ![]()
Hast du denn einen Befehl mit dem du einem Spieler die Handschellen hin machst? Sowas wie /cuff?
Wenn ja, poste den doch.
Nicht diesen Befehl, sondern den Befehl mit dem du dem Spieler die Handschellen gibst (hin machst).
Und poste es bitte nicht alles in einer Zeile.
Nutze http://www.pastebin.com wenn du es nicht hin bekommst.
In deinem Log steht wieder nichts von UPDATE, sprich nichts von savePlayer.
Das hier ist das letzte:
[18:29:21] [DEBUG] Calling callback "OnPlayerRegister"..
=> Du hast direkt nach der Registration aufgehört (=kein Geschlecht ausgewählt), oder nicht den ganzen Log gepostet.
Poste bitte deinen Befehl wie du dem Spieler die Handschellen hinmachst, dann mache ich dir den Befehl kurz.
Nein, nicht wirklich
Nimm den Sound mit Fraps oder ähnlichem auf, extrahiere den Ton und speichere es als mp3. Dann lade die MP3-Datei auf deinen Webhost (oder Dropbox) und spiele den Sound mit http://wiki.sa-mp.com/wiki/PlayAudioStreamForPlayer ab.
Nimm den "root" Benutzer ohne Passwort.
#define SQL_HOST "127.0.0.1"
#define SQL_USER "root"
#define SQL_PASS ""
#define SQL_DB "samp"
Das ist in 99% aller Fälle standardmäßig so eingestellt.
Dein user "samp" wird nicht die richtigen Berechtigungen haben, das ist auf localhost (dein Rechner) so eingestellt, standardmäßig zumindest.
Deshalb benutze, wie ich oben geschrieben habe, den root - User ohne Passwort, der hat ALLE Berechtigungen. Dem kannst du später auch, je nach Client, ein Passwort geben.