#define STELLEN 7 //Hier definierst du wieviele Stellen angezeigt werden sollen
format(string,sizeof(string),"%0"#STELLEN"d",pInfo[playerid][Geld]);
TextDrawSetString(BankGeld[playerid], string);
Beiträge von Haxler
-
-
Jetzt habt ihrs ja bald ;D
if (strcmp("/bsn", cmdtext, true))
{
if (GetPlayerVirtualWorld(playerid) == 0) //GetPlayerVirtualWorld hat nur 1 Parameter!
{
SetPlayerPos(playerid,1045.3831,1013.0660,55.3047);
new msg[50], name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
format(msg,50,"%s ist zu /bsn Gegangen!",name);
SendClientMessageToAll(HellGruen,msg);
}
else
{
SendClientMessage(playerid,HellGruen,"Diesen Befehl kannst du hier nicht nutzen");
}
return 1;
}
e: schreibfehler -
Zitat
was hab ich falschgemacht?
Tja, das passiert bei Copy&Paste.ZitatX,Y,Z Position wo es abgespielt werden soll...
es ist doch selbstverständlich, dass du da Koordinaten eintragen musst... -
stock GetNearestCarAtPlayer(playerid,Float:radius)
{
new Float:vx,Float:vy,Float:vz;
for(new v = 0; v <= MAX_VEHICLES; v++)
{
GetVehiclePos(v,vx,vy,vz);
if(IsPlayerInRangeOfPoint(playerid,radius,vx,vy,vz)) return v;
}
return -1;
}
die Funktion gibt dir aber das erst beste Fahrzeug aus, das im gewünschten Radius steht.
Wenn du jetzt z.b. 3 Fahrzeuge hast (id 1, 2 und 3), die nebeneinander stehen und der Radius 5.0 ist,
dann wird das erste Fahrzeug, das neben dir steht (in diesem Fall: id 1) erkannt, auch wenn Fahrzeug 2 und 3 einen geringeren Abstand zu dir haben.stock GetNearestCar(playerid,Float:max = 3.0)
{
new Float:pos[3], id = -1, Float:temp;
for(new v = 0; v <= MAX_VEHICLES; v++)
{
GetVehiclePos(v,pos[0],pos[1],pos[2]);
temp = GetPlayerDistanceFromPoint(playerid,pos[0],pos[1],pos[2]);
if(temp < max)
{
max = temp;
id = v;
}
}
return id;
}
diese Funktion macht fast das gleiche, nur dass du die ID vom nächsten Fahrzeug bekommst. -
Spätestens wenn 2 Spieler /afk eintippen funktioniert das ganze nichtmehr:
Spieler 1 tippt /afk ein:
TextDraw wird erstellt, ID wird in txtSprite1 gespeichert.
Spieler 2 tippt /afk ein:
TextDraw wird erstellt, alte ID in textSprite1 wird überschrieben.
-> Wenn Spieler 1 /back eintippt bleibt das Textdraw da.Am Besten du machst es so, wie benutzername es gesagt hat
-
"restliche_zeit" abspeichern und beim Login wieder laden. Dann einen Timer starten:
SetTimerEx("KnastTimer",restliche_zeit, false,"d",playerid); //restliche_zeit davor aus der Datei laden -
KnastZeit ist nur die komplette Zeit, die er absitzen muss. Wenn KnastZeit 10 Minuten sind, und der Spieler nach 5 Minuten offline geht, dann musst du ja irgendwie rausfinden wie lange der Spieler im Knast war. Das findest du raus, indem du über gettime() dir den Zeitstempel speicherst, und ihn beim offline gehen mit dem aktuellen vergleichst. Dadurch findest du raus, wie viele Sekunden der Spieler im Knast war. Diese ziehst du dann von der KnastZeit (10 Minuten) ab, und weißt, wie lange der Spieler noch im Knast bleiben musst.
-
Wie schon gesagt musst du zuerst rausfinden, wie lange der Spieler im Knast sein muss.
// Bei /einsperren
SetPVarInt(pID,"KnastZeit",Time*1000*60);
SetPVarInt(pID,"KnastStart",gettime()); //Damit speicherst du den aktuellen Unix-Zeitstempel ab.
Die PVars kannst du beim Entlassen wieder löschen.
Beim disconnecten findest du nun raus, wie lange der Spieler im Knast war:
new dauer = gettime() - GetPVarInt(pID,"KnastStart"); //Damit findest du raus, wie lange der Spieler im Knast war
new restliche_zeit = GetPVarInt(pID,"KnastZeit") - dauer; //Die Zeit, die er im Knast war, wird jetzt von der gesamt-Zeit abgezogen - du weißt nun wie lange er noch im Knast bleiben muss
Den Wert musst du dann nurnoch abspeichern. Beim Spawn startest du dann einen Timer. -
Du kannst natürlich auch direkt
OnPlayerCommandText(playerid,"/teleport");
verwenden. -
Das "d" steht für einen Integer (playerid) und "s" für einen String (der Befehl, den du übergeben möchtest.).
Mit CallLocalFunction rufst du einfach ein bestimmtes Callback (in deinem Fall "OnPlayerCommandText") auf, und übergibst die benötigten Parameter.
public OnPlayerCommandText(playerid /* integer */, cmdtext[] /*string*/) -
Geht auch ohne OCMD. Einfach per CallLocalFunction "OnPlayerCommandText" aufrufen:
CallLocalFunction("OnPlayerCommandText","ds",playerid,"/Teleport"); -
Wäre gut zu wissen wie der Dialog aufgebaut ist.
Du musst ja noch irgendwie abfragen welches Auto gewählt wurde -
Es wird doch garkein Mysql verwendet?
ZitatDas Script verwendet SQLite, was in SA:MP bereits integriert ist.
-
for(new ah = 0; ah <sizeof(Kaufliste); ah++)
{
car = Kaufliste[ah][CarModel];
preis = Kaufliste[ah][CarPreis];
}
was willst du mit der Schleife bezwecken? Es werden immer nur die Werte (Model und Preis) vom letzten Auto verwendet... -
ocmd:f(playerid,params[])
{
return ocmd_family(playerid,params);
}wenn du jetzt /f [text] eintippst wird /family [text] ausgeführt.
-
Nein, Pawno sucht den Include Ordner immer da, wo auch die pawno.exe ist. Wenn das Script aber mit der falschen pawno.exe verknüpft ist, wird demnach auch der falsche Include ordner gewählt ;D
-
Es geht darum, dass die Zeile im Script zu lang ist! Nicht der Text im Dialog. Einfach auf 2 Zeilen verteilen:
Bsp:
ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Test","Zeile 1\
\nZeile2\
\nZeile3","Ok",""); -
Klar geht das
new name[MAX_PLAYER_NAME];
new str[MAX_PLAYER_NAME*MAX_PLAYERS];for(new i;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i))continue;
GetPlayerName(i,name,MAX_PLAYER_NAME);
strcat(str,name);
strcat(str,"\n");
}
printf("verbundene Spieler: \n%s",str); -
strcat(BanReason,dini_Get("lalala.txt","Grund"));
-
Ging ja nur ums Prinzip. Du kannst dir auch einfach in der Dini-Include die Set-Funktionen angucken. Müsste ähnlich aufgebaut sein