und wieder was neues gelernt
Danke
Nützliche Codeschnipsel
- breadfish
- Geschlossen
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
-
-
Beavis!
Doch nicht goto verwenden
Das ist schlecht!
Schreibt es doch so:
new list [MAX_PLAYERS], x;
for(new i; i<MAX_PLAYERS; i++) {
if (IsPlayerConnected (i)) list[x]=i,x++;
}printf("Der random Spieler ist ID: %d",list[random (strlen(list))]);
und wenn x = 0 ist, ist niemand auf dem Server
mfg.
//Edit: Verschrieben, war mit m Handy on.
-
Das ist schlecht!
Grund?Für mich immernoch besser als jedesmal ne Schleife zu verwenden
-
Google doch mal nach Spaghetti Code
mfg.
-
Zitat von »Pille«
Oder:GetRandomPlayerID()
{
new id=random(MAX_PLAYERS);
while(IsPlayerConnected(id)) id=random(MAX_PLAYERS);
return id;
}Absoluter Müll...
Da wird auch was genommen das garnicht Online ist...
Sprich 2 user sind drauf, ich will nen random haben (0 & 1 gibt es) und ich bekomme als ausgabe 252 wieder
Das macht also kein Sinn wenn der User nicht vorhanden ist.
Hatte ein ! vergessen.GetRandomPlayerID()
{
new id=random(MAX_PLAYERS);
while(!IsPlayerConnected(id)) id=random(MAX_PLAYERS);
return id;
}Das ist dann übrigens exakt derselbe Gedankengang wie du ihn hattest,
und du hast meinen Code als Müll bezeichnetBitte - etwas mehr mitdenken, nicht gleich irgendwelche Sprüche raushaun.
-
Leute beruhigt euch doch, falls der Code von Pille funktioniert, ist es doch auch gut
jedoch ist das hier keine Spawn Thread. -
Leute beruhigt euch doch, falls der Code von Pille funktioniert, ist es doch auch gut
Der Code von Pille funktioniert schon...nur es kann evtl sein, dass der Code ziemlich LANGE brauch, bis er diesen einen random Spieler gefunden hat.Sagen wir ein Spieler mit der ID 13 ist online...bis dieser Spieler allgemein gefunden ist, liegt die Wahrscheinlichkeit bei 1/500 stel..nun das ist nicht sehr hoch
Und solange der Spieler nicht gefunden ist, läuft die CPU auf 100% somit leggt extrem der Server
Aus diesem Grund, sollte man meinen Code verwenden, da es zu 100% gegeben ist, dass der Spieler sofort gefunden wird und es kommt zu keinen Leggs o.ä.
Spawn Thread
Kenne ich nicht, ich denke mal du meinst Spam Threadmfg.
-
ja bin heute etwas Verwirrt
-
Der Code von Pille funktioniert schon...nur es kann evtl sein, dass der Code ziemlich LANGE brauch, bis er diesen einen random Spieler gefunden hat.
Da hast du allerdings recht..Ich würde um dem vorzubeugen eine globale Variable erstellen, die immer den Wert der höchsten SpielerID auf den Server hat.
Dann ist die Chance sehr gering, dass es länger als ein Fingerschnipsen braucht -
Beavis!
Doch nicht goto verwenden
Das ist schlecht!
Schreibt es doch so:
new list [MAX_PLAYERS], x;
for(new i; i<MAX_PLAYERS; i++) {
if (IsPlayerConnected (i)) list[x]=i,x++;
}printf("Der random Spieler ist ID: %d", random (strlen(list)));
und wenn x = 0 ist, ist niemand auf dem Server
mfg.
//Edit: Verschrieben, war mit m Handy on.
Kaliber eine kleine Verbesserung an deinem geposteten code:
printf("Der random Spieler ist ID: %d", list[random (strlen(list))]);
so würde random nur eine wert zwischen 0 und der string länge zurück geben jedoch nicht die entsprechenden spielerids
-
so würde random nur eine wert zwischen 0 und der string länge zurück geben jedoch nicht die entsprechenden spielerids
Oh stimmt, ganz vergessen -
new Badword[][] = {
"Penner",
"Hurensohn",
"Hure",
"Arschloch",
"Arsch"
};
public OnPlayerText(playerid, text[])
{
for(new i=0;i<sizeof(Badword);i++)if(strfind(text,Badword[i]) != -1)return Kick(playerid);
return 1;
}
Ich hoffe das klappt -
-
Selbst das wird nicht funktionieren, denn wenn da steht "Du Nutte" ist es nach dem System gültig
-
Selbst das wird nicht funktionieren, denn wenn da steht "Du Nutte" ist es nach dem System gültig
Stimmt...Gott was heute nur los mit mirNutze dafür strfind:
for(new i=0;i<sizeof(Badword);i++)if(strfind(text,Badword[i]) != -1)return Kick(playerid);
mfg.
-
Nichts weltbewegendes, aber sicher spart es dem Ein oder Anderen etwas Zeit.
stock GetPickupModelFromWeapon(weaponid) //©Jeffry
{
switch(weaponid)
{
case 1: return 331;
case 2: return 333;
case 3: return 334;
case 4: return 335;
case 5: return 336;
case 6: return 337;
case 7: return 338;
case 8: return 339;
case 9: return 341;
case 10: return 321;
case 11: return 322;
case 12: return 323;
case 13: return 324;
case 14: return 325;
case 15: return 326;
case 16: return 342;
case 17: return 343;
case 18: return 344;
case 22: return 346;
case 23: return 347;
case 24: return 348;
case 25: return 349;
case 26: return 350;
case 27: return 351;
case 28: return 352;
case 29: return 353;
case 30: return 355;
case 31: return 356;
case 32: return 372;
case 33: return 357;
case 34: return 358;
case 35: return 359;
case 36: return 360;
case 37: return 361;
case 38: return 362;
case 39: return 363;
case 40: return 364;
case 41: return 365;
case 42: return 366;
case 43: return 367;
case 44: return 368;
case 45: return 369;
case 46: return 371;
default: return -1;
}
return -1;
}stock GetWeaponModelFromPickup(pickup) //©Jeffry
{
switch(pickup)
{
case 331: return 1;
case 333: return 2;
case 334: return 3;
case 335: return 4;
case 336: return 5;
case 337: return 6;
case 338: return 7;
case 339: return 8;
case 341: return 9;
case 321: return 10;
case 322: return 11;
case 323: return 12;
case 324: return 13;
case 325: return 14;
case 326: return 15;
case 342: return 16;
case 343: return 17;
case 344: return 18;
case 346: return 22;
case 347: return 23;
case 348: return 24;
case 349: return 25;
case 350: return 26;
case 351: return 27;
case 352: return 28;
case 353: return 29;
case 355: return 30;
case 356: return 31;
case 372: return 32;
case 357: return 33;
case 358: return 34;
case 359: return 35;
case 360: return 36;
case 361: return 37;
case 362: return 38;
case 363: return 39;
case 364: return 40;
case 365: return 41;
case 366: return 42;
case 367: return 43;
case 368: return 44;
case 369: return 45;
case 371: return 46;
default: return -1;
}
return -1;
}Keywords: PickupModel, WeaponModel, Waffe, Modell, PickupZuWaffe, WaffeZuPickup
-
Und noch ein Neuer Codeschnipsel von mir.
Vorgeschichte: Wer kennt es nicht, man macht ein Befehl, will ihm Test und nichts geht(server unknown command)
Code
Alles anzeigenstock SetCommand(playerid,command[]) { new string[50]; format(string,50,"%s",command); SetPVarString(playerid,"Command",string); SetPVarInt(playerid, "UseCommand", 1); return 1; } stock DelCommand(playerid) { DeletePVar(playerid, "UseCommand"); DeletePVar(playerid, "Command"); return 1; } stock CheckCommand(playerid) { return GetPVarInt(playerid, "UseCommand"); } stock GetCommand(playerid) { new command[50]; GetPVarString(playerid,"Command",command,50); return command; }
Verwendung:
Ich hab noch zum Verständnis zum Setzten(grün) und Beenden(rot) gemachtPHP
Alles anzeigenocmd:delveh(playerid,params[]) { [color=#009900]SetCommand(playerid,"delveh");[/color] if(!Admin(playerid,2))return SendClientE(playerid,"Dein Adminrang ist zu niedrig."),[color=#ff0000]DelCommand(playerid)[/color]; if(ADuty[playerid] == 0) return SendClientE(playerid, "Du musst für diesen befehl ADuty sein"),[color=#ff0000]DelCommand(playerid)[/color]; if(vehCar[playerid] == -1) return SendClientE(playerid,"Du hast schon ein Fahrzeug, lösche es mit /delveh"),[color=#ff0000]DelCommand(playerid)[/color]; DestroyVehicle(vehCar[playerid]); vehCar[playerid] = -1; [color=#ff0000]DelCommand(playerid);[/color] return 1; }
FAQ:
Warum steht im Testbefehl so oft DelCommand?Zu guter Letzt noch das einfügen
PHP
Alles anzeigenpublic OnPlayerCommandText(playerid, cmdtext[]) { if(CheckCommand(playerid) == 1) { printf("[FEHLER]COMMAND: '%s' geht nicht !",GetCommand(playerid)); new string[128]; format(string,128,"In dem Command '%s' ist ein fehler, bitte informiere den Scripter!",GetCommand(playerid)); SendClientE(playerid,string); DelCommand(playerid); return 1; } SendClientE(playerid,"Command nicht verfügbar"); return 1; }
Das liegt daran das an denn Stellen der Command Abgebrochen würd.
P.s. Das System hab ich nur mit ocmd getestet, müsste aber auch mit denn Anderen Commandprozessoren gehen. -
Guten Morgen,
#define ClearPlayerChat(%0,%1) for(new i=0;i<%1;i++)SendClientMessage(%0,-1," ");
#define ClearAllChat(%0) for(new i=0;i<%0;i++)SendClientMessageToAll(-1," ");ClearPlayerChat - Erklärung + Verwendung:
Mit ClearPlayerChat kann man einem Spieler eine gewisse Anzahl an leeren Zeilen schicken (Farbe: Weiß).
ClearPlayerChat(playerid,20)
Die 20 kann man auch mit einer anderen Zahl austauschen, bei 20 würden 20 leere Zeilen verschickt.ClearAllChat - Erklärung + Verwendung:
Mit ClearAllChat kann man allen Spielern eine gewisse Anzahl an leeren Zeilen schicken (Farbe: Weiß).
ClearAllChat(20)
Die 20 kann man auch mit einer anderen Zahl austauschen, bei 20 würden 20 leere Zeilen verschickt.mfg
Enum -
#define weis 0xFFFFFFFF
Ein define für den Farbcode zu verwenden ist jedoch überflüssig daher kannst du bei deinem code gleich eine Zahl eintragen -1(weiß) 0(schwarz) oder was auch immer.
SendClientMessage(%0,-1," ");
SendClientMessage(%0,0," "); -
Da ich die Frage danach schon einige Male gesehen habe:
stock GetPosVorSpieler(playerid, Float:dist, &Float:x, &Float:y, &Float:z) //©Jeffry
{
if(IsPlayerConnected(playerid))
{
new Float:a;
if(IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
else GetPlayerFacingAngle(playerid, a);
GetPlayerPos(playerid, x, y, z);
x += (dist * floatsin(-a, degrees));
y += (dist * floatcos(-a, degrees));
return true;
}
return false;
}Benutzung:
Spoiler anzeigen
//Setzt den Spieler 5 Meter vor den anderen Spieler.
new Float:x, Float:y, Float:z;
GetPosVorSpieler(pID, 5.0, x, y, z); //pID = Spieler, dessen Position abgefragt wird.
SetPlayerPos(playerid, x, y, z); //playerid = Spieler, dessen Position gesetzt wird.
Keywords: GetPosVorSpieler, GetPosInfrontOfPlayer, GetXYZVorSpieler, GetXYZInfrontOfPlayer, GetXYVorSpieler, GetXYInfrontOfPlayer, SpielerPosVorSpieler, SetSpielerVorSpieler.
-