ich hatte das auch mal ich habe:
new ShowPlayerDialog;
gemacht und dann hats geklappt.
Versuche es mal.
okay
danke stimmt
Hast du das wirklich gemacht ?
ShowPlayerDialog ist eine Funktion aus 0.3, also lad dir die neuen Serverfiles..
ich hatte das auch mal ich habe:
new ShowPlayerDialog;
gemacht und dann hats geklappt.
Versuche es mal.
okay
danke stimmt
Hast du das wirklich gemacht ?
ShowPlayerDialog ist eine Funktion aus 0.3, also lad dir die neuen Serverfiles..
Du hast eine Zahl in zwei "case", sprich:
case 54, 57, 60:// 60
case 60:// 60
Schau dir mein Script an, da ist nirgens eine Zahl doppelt
Mal ne Frage bezäglich Speichern in Dateien:
Geht es schneller..
..für jedes z.B. Haus eine Datei zu erstellen mit ein paar Variablen darin?
..oder eine Datei mit allen Variablen (sprich von jedem Haus alle 5 in einer Datei) zu erstellen?
Also was von den beiden Möglichkeiten ist schneller bzw. resourcenschonender für den Server?
Alles anzeigenhi
Ich hab ein Votemenu, da kann man sich eins
aussuchen und dafür seine Stimme abgeben.
vote[0] ++;
vote[1] ++;
vote[2] ++;
wie kann ich jetzt am besten herausfinden welche variable die höchste ist
stock GetHighestVote()
{
new maxvote, highestvote;
for(new i=0; i<ANZAHL_DER_VOTES; i++) // in deinem Fall i < 3
{
if(vote[i] > maxvote)
{
maxvote = vote[i];
highestvote = i;
}
}
return maxvote;
}
Nunja, wenn du damit keine Lags verhindern willst, was bringt's dann?
Das bringt, dass ich nicht 198321 verschiede Timer einzeln starte, die der Server einzeln tickt.
Wenn man ihn mit SetTimer startet kann man +- 100 ms machen... dann am besten Primzahlen verwenden, schon ist dazwischen immer genug Zeit. Das ist halt das problem - hier muss die veränderung mindestens 1000 ms sein, das ist meistens zu viel für sowas...
Tja aber ich hab noch nicht viele gesehen, die Timer aus diesem Grund mit 1007 ms der 894 ms oder sonst was starten ;D
Du musst es nicht benutzen, wenns dein Server nicht schafft.
Und wenn ich die Include auf ms umschreiben hab ich leider einen Timer der evtl. unnötig im 1 ms Takt läuft.. viel Spass damit ;D
Aber genau nacheinander, zwischendurch werden keine anderen Sachen verarbeitet - nennt man Lagg
So und jetzt erklär mit was passiert wenn ich 3 verschiedene Timer mit SetTimer starte.. genau das gleiche ?
Die Include ist nicht dazu da um das zu verhindern, sondern um mehrere Timer in einen zu packen.
Wenn A ausgeführt wird, wird auch B + C ausgeführt... besser ist:
Und weiter?
Pawn ist stack, also werden sie nicht gleichzeitig ausgeführt ;D
Nice, nur ne frage. Woher weiß man welcher MultiTimer welche ID hat`?
Sonst zu gebrauchen, 9/10
SetMultiTimer(1, 3, 5, 8);
Timer1 = 1
Timer2 = 3
Timer3 = 5
Timer4 = 8
Also immer die Stelle an der er steht. Und ohne die TimerXY defines ist die erste Stelle "0".
Was ist MultiTimer?
- MultiTimer ermöglicht es mehrere Timer innerhalb eines Timers laufen zu lassen, sodass der Server entlastet wird
Welche Probleme könnten auftreten?
- Zur Zeit kann MultiTimer nur Timer mit einem Sekundenintervall starten (z.b. 1 Sek, 2 Sek..)
- Alle Intervalle sind in Sekunden angegeben (bitte keine Millisekunden verwenden!)
- Es können keine Parameter mit eingebunden werden
- Es müssen alle Timer mit einem Mal gestartet werden, können aber danach gleich wieder gestoppt und später neu gestartet werden
Wie funktioniert MultiTimer?
Es läuft ein großer Timer mit dem Interval 1000 ms.
Sobald man einen Timer mit MultiTimer startet wird ihm der Intervall zugewiesen, der sekündlich vom "großen" Timer erhöht wird.
Erreicht der Timer seinen Intervall, so wird ein Callback aufgerufen.
Wie viele Timer unterstützt MultiTimer?
- Unendlich, zu definieren in der Include unter
#define MAX_TIMER 10
Welcher Timer welche ID?
- Der erste Timer in SetMultiTimer hat ID 0, der zweite ID 1 usw..
- In der Include sind die ersten 10 Timer mit Timer1 für 0, Timer2 für 1 usw. definiert
Funktionen von MultiTimer
SetMultiTimer({Float,_}:...);
// Beispiel:
SetMultiTimer(1, 2, 5, 10);
//Startet beliebig viele Timer (in diesem Fall 4 Timer mit 1, 2, 5 und 10 Sekunden)
StopMultiTimer();
//Stoppt den MainTimer und somit alle anderen Timer
StopSingleTimer(TimerID);
//Stoppt einen einzelnen Timer
RestartSingleTimer(TimerID, bool:startbyzero = true);
//Startet einen einzelnen Timer wieder (startbyzero = true startet den Timer bei 0, = false startet, wo man ihn gestoppt hat)
SetSingleTimerInterval(TimerID, interval);
//Setzt den Intervall eines einzelnen Timers (Interval in Sekunden)
OnMultiTimerTick(TimerID)
//Das Callback für die Timer (TimerID = welcher Timer tickt)
Bei weiteren Fragen einfach mal schreiben
Download
Klick mich
Pastebin
Bist du jeck ?
alle 200 MS wird 500 Mal eine for Schleife aufgerufen, na dann viel Spaß bis der Server explodiert ....
1. Gute Server schaffen das.. ich mein es gibt Rechner die Programme/Spiele wie Crysis von oben bis unten durchrechnen, da ist das ja wohl ma nix dagegen..
2. Man könnte anstatt MAX_PLAYERS auch was eigenes hinschreiben ? Hm..
Also ich habs nur ma eben geschrieben aber ich ich habs nicht getestet ;D
Schaus dir einfach mal an (Sind keine Errors drin):
new Float:Velocity[3];
new Float:Speed[MAX_PLAYERS];
new Float:Var;
new UnDrunk[MAX_PLAYERS];
forward CarCrash();
// GameModeInit
SetTimer("CarCrash", 200, true);
public OnPlayerConnect(playerid)
{
UnDrunk[playerid] = 0;
Speed[playerid] = 0;
return 1;
}
public CarCrash()
{
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(UnDrunk[i] > 0)
{
UnDrunk[i]--;
if(UnDrunk[i] == 1)
{
SetPlayerDrunkLevel(i, 0);
UnDrunk[i] = 0;
}
}
if(IsPlayerInAnyVehicle(i))
{
GetVehicleVelocity(GetPlayerVehicleID(i), Velocity[0], Velocity[1], Velocity[2]);
Var = floatsqroot(Velocity[0]*Velocity[0] + Velocity[1]*Velocity[1] + Velocity[2]*Velocity[2]) * 100;
if(Speed[i] > 100 && Var < 10)
{
SetPlayerDrunkLevel(i, 50000);
UnDrunk[i] = 26; // 26 Für 5 Sekunden.. ja es hat nen Sinn ;D
// Timer tickt mit 200 ms also 1 Sek = 5
// 5 * 5 Sek = 25.. +1 damit auf 0 einfach nichts passiert und auf 1 das DrunkLevel
}
Speed[i] = Var;
}
}
}
return 1;
}
Also ich hab ma eben ein bisschen gerechnet und das kommt dabei raus wenn du alle Timer in einen Timer packen willst:
Einfach deine Timer da rein wos steht (wird zwar bisschen mehr Code aber entlastet den Server ;D
new TimerCount;
forward TimerName();
SetTimer("TimerName", 1000, true);
public TimerName()
{
TimerCount++;
switch(TimerCount)
{
case 60:
{
TimerCount = 0;
// Alle 4 Timer hier rein
}
case 5, 25, 35, 55:
{
// Timer 5000 hier
}
case 3, 9, 21, 27, 33, 39, 51, 57:
{
// Timer 3000 hier
}
case 2, 4, 8, 14, 16, 22, 26, 28, 32, 34, 38, 44, 46, 52, 56, 58:
{
// Timer 2000 hier
}
case 15, 45:
{
// Timer 5000 und 3000
}
case 10, 20, 40, 50:
{
// Timer 5000 und 2000
}
case 6, 12, 18, 24, 36, 42, 48, 54:
{
// Timer 3000 und 2000
}
case 30:
{
// Timer 5000, 3000 und 2000
}
}
return 1;
}
Versuchs mal mit "GetVehicleModel(vehicleid)".
Die Funktion gibt dir die Modelid des Fahrzeugs zurück und damit kannst du dann prüfen ob es sich um beispielsweise um die ModelID 431 handelt. ;D
Einfach nur eine simple Mathematikfunktion um die Fakultät einer Zahl auszurechnen:
Wers auch immer braucht..
Wer nicht weiß was Fakultät ist:
Fakultät von 5 z.B. ist: 1*2*3*4*5 = 120
Fakultät von 7 ist dann: 1*2*3*4*5*6*7 = 5040
stock faculty(number)
{
new returnvar = 1;
for(new a=1; a<=number; a++)
{
returnvar = returnvar*a;
}
return returnvar;
}
[INC] BikeStuck
Beschreibung:
Include um das Fallen von Motorrädern bzw. Zweirädern zu verhindern
Nützlich für Stuntserver oder ähnliche Server und dynamisch um z.B. nur in bestimmten Areas den BikeStuck zu aktivieren (siehe Funktionen)
Funktionen:
b_StartSystem(); // OnGameModeInit oder OnFilterScriptInit
b_OnPlayerConnect(playerid); // OnPlayerConnect
b_OnPlayerExitVehicle(playerid); // OnPlayerExitVehicle
b_OnPlayerStateChange(playerid, oldstate, newstate); // OnPlayerStateChange
b_DestroyVehicle(vehicleid); // Alle DestroyVehicle durch b_DestroyVehicle ersetzen oder einfach #define DestroyVehicle b_DestroyVehicle einfügen
b_RemovePlayerFromVehicle(playerid); // Genau wie b_DestroyVehicle..
b_EnableStuck(playerid, bool:enable); // Enable bzw. Disable Stuck
Downloads:
- Pastebin
- Rar Datei im Datenanhang
SetPlayerWantedLevel(killerid, GetPlayerWantedLevel(killerid)+1);
Und deswegen soll es keinen Error mehr geben ?
Du bist lustig
chilly$willy: In der Zeile davor oder in einer der Zeilen davor fehlt das ";" oder eine ")".
Pickups haben so weit ich weiss auch ein Area Limit (nenn ich mal so).
Und zwar wenn man z.B. ca 200 Meter östlich von SF Pickups erstellt sieht man sie auch nicht.
Kann genau so mit der Höhe (Z-Coord) sein.
Dann post auch mal OnPlayerSpawn, OnPlayerRequestSpawnClass und OnPlayerRequestSpawn bzw. OnPlayerConnect.
Möglich ist es, aber nur indem du über die Geldanzeige ein Textdraw mit xxx € einblenden und aktualisieren lässt.
Script kann ich dir gerade nicht geben weil ich nicht viel Zeit hab.
Alles anzeigen
new sendfstring[128];
#define SendFormattedText(%1,%2,%3,%4) format(sendfstring,128,(%3),%4); SendClientMessage((%1), (%2) ,sendfstring)
#define SendFormattedTextToAll(%1,%2,%3) format(sendfstring,128,(%2),%3); SendClientMessageToAll((%1),sendfstring)
new i = 12;
SendFormattedText(playerid, 0xffffffff, "Text: integer = %d", i);
Ist zwar nicht von mir aber das ist ne dynamischere Variante
stock SendFormatedMessage(playerid, color, message[], {Float,_}:...)
{
new args = numargs();
#define MAX_NUMARGS 10
new string[MAX_NUMARGS][256];
for(new i = 3; i < args+1; i++)
{
new gchar = 0;
for(new a = 0; a < 256; a++)
{
string[i][a] = getarg(i, gchar);
gchar++;
}
}
for(new i = 3; i <= args; i++)
{
new bstring[256];
for(new a = 0; a <= 256; a++)
{
bstring[a] = string[i][a];
}
format(message, 256, message, bstring);
}
SendClientMessage(playerid, color, message);
}
// Bsp.:
SendFormatedMessage(playerid, color, "%d, %s, %f..", 1, "Eins, 1.0);