Was ist eigentlich schneller und besser, ein globaler Timer, der alle Spieler durchgeht und abfragt ob Var X = 4 ist oder aber Timer für jeden Spieler (new Timer[MAX_PLAYERS];)? (Knastsystem)
LG
Was ist eigentlich schneller und besser, ein globaler Timer, der alle Spieler durchgeht und abfragt ob Var X = 4 ist oder aber Timer für jeden Spieler (new Timer[MAX_PLAYERS];)? (Knastsystem)
LG
Mach besser einen globalen Timer oder nimm einen den du schon hast und schreib direkt in der Schleife die alle Spieler durchgeht am Anfang:
if(!IsPlayerConnected(i))continue;
Hey gerade am Handy , würde gerne wissen ob der Befehl gehen würde.
ocmd:auftrag(playerid,params[])
{
new auftragN;
if(sscanf(params,"z",auftragN))return SendClientMessage(playerid,0xff0000ff,"Nutze /auftrag [zahl]");
if(IsPlayerInFrakt(i,GetPVarInt(playerid,"Trucker")))return SendClientMessage(playerid,0xff0000ff,"Du bist kein Trucker!");
for(new i=0; i<GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInFrakt(i,GetPVarInt(playerid,"Trucker")))
{
printf("Spieler %z hat den Auftrag %z angenommen",playerid,auftragN);
SendClientMessage(playerid,0xff0000ff,"Du hast dir den Auftrag %z angenommen!");
}
}
}
return 1;
}
Oder wie würdet ihr das machen?
Will das Jemand der IsPlayerInFrakt ein Auftrag annehmen kann.
Oder so?
ocmd:auftrag1(playerid,params[])
{
SendClientMessage(playerid,0xff0000ff,"Benutze /auftrag [Auftrag], um einen Auftrag anzunehmen");
new auftragN;
if(IsPlayerInFrakt(i,GetPVarInt(playerid,"Trucker")))return SendClientMessage(playerid,0xff0000ff,"Du bist kein Trucker!");
if(sscanf(params,"z",auftragN))return SendClientMessage(playerid,0xff0000ff,"Nutze /auftrag [zahl]");
printf("Spieler %z hat den Auftrag %z angenommen",playerid,auftragN);
SendClientMessage(playerid,0xff0000ff,"Du hast dir den Auftrag %z angenommen!");
return 1;
}
Weder der eine noch der andere wird gescheit funktionieren. Was genau soll der Befehl den eigentlich machen? Und soll die Nachricht an alle in der Fraktion gehen?
Ja habe jetzt wieder 2-4monate nix mehr gemacht und muss wohl mich erstmal einarbeiten.
Werde mich bis heute abend nochmal dransitzen.
Habe total falsch angefangen.
Ich will ein job system mit bestimmten Aufträgen erstellen. Die man dann annimmt. Sollte ich dann Fragen , frag ich wieder :DD
Ja habe jetzt wieder 2-4monate nix mehr gemacht und muss wohl mich erstmal einarbeiten.
Werde mich bis heute abend nochmal dransitzen.
Habe total falsch angefangen.
Ich will ein job system mit bestimmten Aufträgen erstellen. Die man dann annimmt. Sollte ich dann Fragen , frag ich wieder :DD
1. z steht für packed strings, für integer musst du i oder d nutzen
2. Für statische Aufträge kannst du ja ein 2dimensionales Array erstellen mit folgender Struktur, dort kannst du deine Aufträge reinhauen, cTimestamp kann danachgenutzt werden
um zum einen abtufragen ob dieser auftrag schon gemacht wurde und um den Auftrag erst nach einer gewissen Zeit wieder frei zu geben
enum cContract {
cName[40],
Float:cX,
Float:cY,
Float:cZ,
cWage,
cTimestamp,
};
3. via einer for-schleife kannst du dir alles auflisten lassen entweder im Dialog (ShowPlayerDialog) oder im Chat (SendClientMessage).
4. Wenn du einen string als platzhalter verwenden möchtest benötigst du %s, nicht %z
ZitatWas ist eigentlich schneller und besser, ein globaler Timer, der alle Spieler durchgeht und abfragt ob Var X = 4 ist oder aber Timer für jeden Spieler (new Timer[MAX_PLAYERS];)? (Knastsystem)
LG
@Jeffy: was meinst du dazu?
Was ist eigentlich schneller und besser, ein globaler Timer, der alle Spieler durchgeht und abfragt ob Var X = 4 ist oder aber Timer für jeden Spieler (new Timer[MAX_PLAYERS];)? (Knastsystem)
@Jeffy: was meinst du dazu?
Ich würde sagen ein Timer mit einem Loop ist besser, wenn nicht sogar wesentlich besser. Ich kann dir auch sagen warum.
=> Ein Timer mit Loop ist ressourcentechnisch gesehen besser.
Eine Frage und zwar, wie ist das mit dem attachen hab sowas nie gemacht und naja will bevor erstmal nachfragen ...
Sprich ich will an einem Spieler ObjektID: 1550 attachen lassen das diese Money Bag am rücken von dem Spieler hängt .. wie kann ich sowas raus finden ...
Eine Frage und zwar, wie ist das mit dem attachen hab sowas nie gemacht und naja will bevor erstmal nachfragen ...
Sprich ich will an einem Spieler ObjektID: 1550 attachen lassen das diese Money Bag am rücken von dem Spieler hängt .. wie kann ich sowas raus finden ...
Mit einem Editor:
http://forum.sa-mp.com/showthread.php?p=2385649
http://forum.sa-mp.com/showthread.php?t=209234
http://forum.sa-mp.com/showthread.php?t=196342
Jeffry: Heißt also, dass ein Timer, der ein Loop hat (foreach :)), wesentlich besser ist als ein Timer mit MAX_PLAYERS, danke dir werde ich mir merken
Korrekt, wenn du mit "Timer mit MAX_PLAYERS" sagen willst, dass es für jeden Spieler einen extra Timer gibt.
Andere Frage, ist es Möglich, einen Spieler an ein Fahrzeug zu attachen?
Nein.
Du könntest es nur so machen: http://forum.sa-mp.com/showpost.php?p=1290737&postcount=2232
Aber ob das so schön aussieht bezweifle ich.
Ich will einen eine Zahl (als Float) random ... als normale Zahl geht das .. aber geht das nicht mit 0.10 z.B ?
new Float:varatm = 0.10,ra = random(varatm);ATMHP[i] -= ra;
stock randfloat(Float:kleinerfloat, Float:grosserfloat) //by Templer
{
new kleinezahl = floatround(kleinerfloat, floatround_round), grossezahl = floatround(grosserfloat, floatround_round);
return floatadd(float(random(grossezahl - kleinezahl)), kleinerfloat)
}
Habe ich gerade in einem alten Beitrag gefunden, wie man sieht hat die Funktion Templer: geschrieben ![]()
einfach
new Float:randomfloat = (random(10)/100);
new Float:randomfloat = (random(10)/100);
Das gibt einfach nur 0 aus, in jedem Fall, da Integers immer auf das drunter liegende Integer abgerundet werden. Da du maximal 9/100 haben kannst => 0,09 => folgt 0.
So ist es richtig:
new Float:randomfloat = (float(random(10))/100.0);
Beachte aber, dass Floats nicht sooo toll sind, meistens kommt da z.B. "0.05999" raus, für 6.0/100.0 .
Davon abgesehen, wären hier folgende Werte möglich:
0.00
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
Ist das, was du willst?
new Float:RandomFloat = float(random(20000)/10000); //0.0000-2.0000
Falls du nicht so viele Möglichkeiten hinterm Komma willst:
new Float:RandomFloat = float(random(2000)/1000); //0.000-2.000
L.G. ![]()
Nabend,
Momentan hindert mich ein kleiner aber mieser Error am weiterscirpten. Und ich weiß nicht woran es liegt.
Hoffe ihr wisst weiter..
Errormeldung:
error 001: expected token: ")", but found "{"
Die Script zeilen:
stock Login(playerid,key[])
{
new Spielerdatei[64];
new name [MAX_PLAYER_NAME];
SetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
if(!strcmp(key,dini_Get(Spielerdatei,"Passwort",true))
{
LoadAccount(playerid);
SendClientMessage(playerid,ROT,"Du hast dich Erfolgreich Eingeloggt!");
return 1;
}
else
{
SendClientMessage(playerid,ROT,"Falsches Passwort eingegeben!");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Willkommen auf dem Script Server\nDein Account wurde in der Datenbank Gefunden!\nBitte logge dich mit deinem Passwort ein.","Login","Abbrechen");
return 1;
}
In meinen Augen ist das alles richtig oder täusche ich mich da?
Bitte um Hilfe..
stock Login(playerid,key[])
{
new Spielerdatei[64];
new name [MAX_PLAYER_NAME];
SetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),true))
{
LoadAccount(playerid);
SendClientMessage(playerid,ROT,"Du hast dich Erfolgreich Eingeloggt!");
return 1;
}
else
{
SendClientMessage(playerid,ROT,"Falsches Passwort eingegeben!");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Willkommen auf dem Script Server\nDein Account wurde in der Datenbank Gefunden!\nBitte logge dich mit deinem Passwort ein.","Login","Abbrechen");
return 1;
}
return 1;
}
Bei der strcmp-Abfrage fehlte eine Klammer.