Hab ne MAX_PLAYERS schleife und möchte abfragen ob die spieler in der nähe von XYZ sind, außer playerid, wie frage ich dann ab ob playerid "i" ist...
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
if(IsPlayerInRangeOfPoint...................................)
{
if(i == playerid)continue; // i steht für deine schleife
//was passieren soll......
}// edit : bin am saufen und ist ungetestet

-
Ich empfehle dennoch mit PlayerTextDraw zu arbeiten, damit ist es letztendlich einfacher Spieler bezogene txd's zu machen damit zum Schluss nicht bei allen die Zeit von ID 0 angezeigt wird.
Jeder wie er will.

Kann mir einer sagen wie ich das dann schreiben muss?
Danke
-
Macht es eigentlich ressourcentechnisch einen Unterschied ob man
if(blabla>1){
blabla
}macht oder
if(blabla>1)
{
blabla
}
? -
Macht es eigentlich ressourcentechnisch einen Unterschied ob man
Nein. Nur einen Zeilen Unterschied in der .pwn
mfg.

-
Nein. Nur einen Zeilen Unterschied in der .pwn
mfg.

Aber bei mehreren Anweisungen wenn man diese in einer reihe schreibt nur sind da die codes ein ganz ganz wenig schneller.
Beispielreturn SendClientMessage(playerid,-1,"Hallo"),SendClientMessage(playerid,-1,"wie"),SendClientMessage(playerid,-1,"gehts");
ist schneller als
SendClientMessage(playerid,-1,"Hallo");
SendClientMessage(playerid,-1,"wie");
SendClientMessage(playerid,-1,"gehts");
return 1; -
Aber bei mehreren Anweisungen wenn man diese in einer reihe schreibt nur sind da die codes ein ganz ganz wenig schneller.
Beispiel
Wir reden hier aber von Klammern und keinen Anweisungen
-
Wir reden hier aber von Klammern und keinen Anweisungen
Ich weiß ich wollte es nur mal gesagt haben (Klugscheißer und so) -
EDIT:
So, hab das mal aus dem /engine befehl genommen und versucht einzeln zu verpacken..
Also nun habe ich ein simples problem. Weis aber nicht was ich tun muss..

Wenn man im Fahrschulauto ist, soll nach start des Motors die Checkpoints kommen.
Steigtman in das Auto, fragt der script ab ob motor an oder aus. Ist natürlich aus und der script soll weitermachen wenn motor an
ABER
er fragt nur einmal ab! Nur beim einsteigen, danach passiert nix mehr. Wie muss ich das mit den return uws machen? Oder wie mache ich es, dass ständig abgefragt wird ob motor an oder aus?
Code
Alles anzeigenif((vehicleid >= 30) && (vehicleid <= 33)) //driving school cars { GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);//will check that what is the state of the e if(engine == 0)//will check that if the wngine in on or not. { if(LStep[playerid] == 7) { if(engine == 1) { //format(string, sizeof(string), "%s takes his keys and starts the engine of the driving test Vehicle.", GetPlayerNameEx(playerid)); //ProxDetector(20.0, playerid, string,COLOR_GREEN,COLOR_GREEN,COLOR_GREEN,COLOR_GREEN,COLOR_GREEN); //GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective); //SetVehicleParamsEx(vehicleid,1,lights,alarm,doors,bonnet,boot,objective);//engine[GetPlayerVehicleID(playerid)] = 1; TogglePlayerControllable(playerid, 1); ClearChat(playerid); SendClientMessage(playerid, COLOR_WHITE, "Great, good luck with the driving test!"); //new car = GetPlayerVehicleID(playerid); ClearChat(playerid); SendClientMessage(playerid, COLOR_SYSTEM, "Ok,Seems like you got it going on, You're going to go around the checkpoints, GO!"); SendClientMessage(playerid, COLOR_SYSTEM, "Note - If you leave the vehicle, your test will be automaticly over!"); //SendClientMessage(playerid, COLOR_LIGHTBLUE, "IMPORTANT - If you notice your driving is bad, This is because your driving skill is low. Increase it by passing the test!"); ltimer[playerid] = SetTimerEx("Ttimesup", 180000, 0, "d", playerid); LStep[playerid] = 9; //PutPlayerInVehicle(playerid, car, 0); SetPlayerCheckpoint(playerid, 644.0063,-493.4893,15.9688, 5.0); TogglePlayerControllable(playerid, 1); TakingDrivingTest[playerid] = 1; SetTimerEx("DrivingTestTimer", 1000, 0, "d", playerid); //return 1; } else { SendClientMessage(playerid, COLOR_SYSTEM, "engine still not started"); } } else { SendClientMessage(playerid, COLOR_SYSTEM, "not step 7yet"); //return 1; } } -
wie kann ich diese AudioStream Narichten ausblenden?
-
-
Wie kann ich ein Create3DTextLabel mit 2 Farben "gestalten" ?
Create3DTextLabel(".::Hall of Fame::.\n Serverleitung, Scripter, Mapper\n shanoby",0xFFE600FF,1330.6300,-1156.4296,23.8281, 30.0, 0, 0); -
-
Was ist besser?
1 Timer und alle 10 minuten alle Spieler Updaten.
Für jeden Spieler 1 Timer und den Spieler Updaten.
?
-
1 Timer reicht
Edit: Musst dir ja vorstellen zB. das für Jeden Spieler ein Timer gestartet wird (50 Spieler = 50 Timer)
-
Ja aber soll er dann nacheinander 50 publics durcharbeiten wo der server solange hängt oder soll er lieber hier und da nen public abarbeiten.
weiß ja nicht wie sehr es belastet wenn 50 timer laufen. -
würde es nicht so machen wie XeroX es sagt.... (alles auf einmal ist immer die SCHLECHTESTE Wahl)
Du denkst schon richtig, nicht zu viel auf einmal. Desto mehr du den Code verteilst (also nicht für alle Spieler zur selben Zeit), desto weniger wird es zu Lag kommen!!!
Stell dir aber noch die Frage: Ist wirklich für jeden Spieler ein Timer notwendig ? Reicht es vll auch einfach nach jedem Tod (OnPlayerSpawn) den Spieler zu Updaten(ohne Timer dann) ? (oder so in der Art)
-
Das wäre auch eine Option über die man nachdenken könnte.
Spezieller wird es aber nun da 100% Lags bei meiner Speicherung der Fraktionen entstehen was gut nachzuvollziehen ist.
Es werden nicht nur insgesamt (bisher) 18 Fraktionen mit sämtlichen Daten gespeichert (mysql) sondern pro 18 Fraktionen nochmal 11 Namen der Ränge (Rang 0 - 10) und anschließend nochmal Fraktionsfahrzeuge (über 400).Das es da kurz hängt kann ich gut verstehen...
public FrakUpdate()
{
new Query[500];
for(new i = 0; i < sizeof Fraktionen; i++)
{
mysql_real_escape_string(Fraktionen[i][Frakname], Fraktionen[i][Frakname]);
format(Query,sizeof(Query),"UPDATE `Fraktionen` SET `Kasse` = '%f', `Mats` = '%d', `Drogen` = '%d', `MaxMember` = '%d', `Respekt` = '%d', `Muebersicht` = '%d', `Buendnis` = '%d', `BMinuten` = '%d', `BStunden` = '%d', `BTage` = '%d', `Grundgehalt` = '%d', `Rangbonus` = '%d', `MaxRangs` = '%d', `Bizzes` = '%d', `kAbgehoben` = '%d' WHERE `Frakname` = '%s'",
Fraktionen[i][Kasse], Fraktionen[i][Mats], Fraktionen[i][Drogen], Fraktionen[i][MaxMember], Fraktionen[i][Respekt], (Fraktionen[i][Muebersicht]) ? 1:0, Fraktionen[i][Buendnis], Fraktionen[i][BMinuten], Fraktionen[i][BStunden], Fraktionen[i][BTage], Fraktionen[i][Grundgehalt], Fraktionen[i][Rangbonus], Fraktionen[i][MaxRangs], Fraktionen[i][Bizzes], Fraktionen[i][kAbgehoben], Fraktionen[i][Frakname]);
mysql_query(Query);for(new j = 0; j < 11; j++)
{
new rstr[10];
format(rstr,sizeof(rstr),"Rang %d", j);
mysql_real_escape_string(rstr, rstr);
mysql_real_escape_string(Rangnamen[i][j], Rangnamen[i][j]);
format(Query,sizeof(Query),"UPDATE `Fraktion_Raenge` SET `%s` = '%s' WHERE `Frakname` = '%s'", rstr, Rangnamen[i][j], Fraktionen[i][Frakname]);
mysql_query(Query);
}
}
for(new i = 0; i < sizeof Frakcars; i++)
{
format(Query,sizeof(Query),"UPDATE `Fraktion_Fahrzeuge` SET");
if(Frakcars[i][created])
{
new Float:vhp;
GetVehicleHealth(Frakauto[i],vhp);
format(Frakcars[i][Nummernschild],30,"%s",vInfo[Frakauto[i]][Nummernschild]);
format(Query,sizeof(Query),"%s `vHP` = '%f', `vTank` = '%d',",Query, vhp, vInfo[Frakauto[i]][vTank]);
}
mysql_real_escape_string(Frakcars[i][CName],Frakcars[i][CName]);
mysql_real_escape_string(Frakcars[i][Nummernschild],Frakcars[i][Nummernschild]);
format(Query,sizeof(Query),"%s `Zerstoert` = '%d', `Rang` = '%d', `Tempomat` = '%d', `created` = '%d', `Nummernschild` = '%s', `posx` = '%f', `posy` = '%f', `posz` = '%f', `posa` = '%f' WHERE `CName` = '%s' AND `fID` = '%d' AND `cID` = '%d'",
Query, Frakcars[i][Zerstoert], Frakcars[i][Rang], (Frakcars[i][Tempomat]) ? 1:0, (Frakcars[i][created]) ? 1:0, Frakcars[i][Nummernschild], Frakcars[i][posx], Frakcars[i][posy], Frakcars[i][posz], Frakcars[i][posa], Frakcars[i][CName], Frakcars[i][Frakid], Frakcars[i][Frakcarid]);
mysql_query(Query);
}
return 1;
} -
Und was ist jetzt deine Frage ?
Logisch, dass es hängt, erst führst du immer nen Query in der Schleife aus (dazu UPDATE Querys die am lahmsten von allen sind) und dann
sind deine Querys nicht threaded. Würdest du die auf threaded Querys umschreiben, wären deine Laggs sicherlich behoben.LG
-
Dann ist meine Frage: Wie geht das mit Threaded Querys?
Weil ich brauche ja Update komme um die SQL Befehle ja nicht umzu und genauso muss ich auch in der schleife diesen Query ausführen.
//edit: oder reicht es etwa wenn ich einfach irgenteine id als resultid eintrage das Public hinzufüge und einfach leer lasse?
-
