Gibt dafür bestimmt eine andere Lösung, z.B. kann man erkennen ob ein Spieler der gerade ESC gegangen ist, vor kurzem Schaden von einem anderen Spieler erlitten hat. Dadurch kann man ihn dann direkt bestrafen. Ansonsten macht es in deinem Fall Sinn. Kommt halt ansonsten immer aufs Gamemode an.
[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
-
-
@Kaliber
Es funktioniert, jedoch musst du mir mal erklaeren was es mit diesem @, und dem Funktionsaufruf da mitten drin auf sich hatHabe das nun so abgewandelt
C
Alles anzeigen@AFK_CHECK();@AFK_CHECK() { for(new i=GetPlayerPoolSize(); i!=-1; i--) { if(!IsPlayerConnected(i) || IsPlayerNPC(i) || !AFK_SYS[i] || (gettime()-AFK_SYS[i]) < 120) continue; Kick(i); //i = playerid die 2min (120 Sekunden) AFK war new name[MAX_PLAYER_NAME + 1]; GetPlayerName(i, name, sizeof(name)); new k=MAX_PLAYERS; while( (k--)> 0) { SendClientMessageEx(k,COLOR_WHITE,"SERVER: %s (%d) has been kicked due to inactivity",name,i); } AFK_SYS[i] = 0; } return 1; }
-
Schreib es lieber so, das ist effizienter:
C
Alles anzeigen@AFK_CHECK();@AFK_CHECK() { for(new i=GetPlayerPoolSize(),string[128]; i!=-1; i--) { if(!IsPlayerConnected(i) || IsPlayerNPC(i) || !AFK_SYS[i] || (gettime()-AFK_SYS[i]) < 120) continue; GetPlayerName(i, string, sizeof(string)); format(string,sizeof(string),"SERVER: %s (%d) has been kicked due to inactivity",string,i); SendClientMessageToAll(-1,string); Kick(i), AFK_SYS[i] = 0; } return 1; }
1. Dieses @ ist quasi nur forward und public.
2. Das ist nur eine Schleife, die durch alle Spieler iteriert und prüft, ob ein Spieler länger als 120 Sekunden inaktiv war
-
Beitrag von Dr. Frauenarzt ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Fehler Gefunden. (). -
Warum kommt bei /makeleader 0 1 dass der Befehl nicht existiert?
ocmd:makeleader(playerid, params[])
{
new f_ID, pID, String[512];
if(Spieler[playerid][pAdmin] < 5)return ShowFehler(playerid, NO_ADMIN);
if(sscanf(params, "ud", pID, f_ID))return ShowInfo(playerid, "Benutze: /makeleader [Spieler/ID] [FraktionID]");
if(!IsPlayerConnected(pID))return ShowFehler(playerid, "Der Spieler ist nicht auf dem Server!");
if(!Spieler[pID][pLoggedIn])return ShowFehler(playerid, "Der Spieler ist nicht eingeloggt!");
if(Spieler[pID][pFraktion] != 0)return ShowFehler(playerid, "Der Spieler ist bereits in einer Fraktion!");
if(f_ID == 0) {
format(String, sizeof(String), "Du hast den Spieler %s als Leader entlassen!", Spieler[pID][pName]);
ShowAdmin(playerid, String);
format(String, sizeof(String), "Der %s %s hat dich als Leader entlassen!", GetAdminRangName(Spieler[playerid][pAdmin]), Spieler[playerid][pName]);
ShowInfo(pID, String);
Spieler[pID][pFraktion] = 0;
Spieler[pID][pFraktionRang] = 0;
} else if(f_ID != 0){
format(String, sizeof(String), "Du hast den Spieler %s zum Leader der %s gemacht!", Spieler[pID][pName], Fraktion[f_ID][fName]);
ShowAdmin(playerid, String);
format(String, sizeof(String), "Der %s %s hat dich zum Leader der %s gemacht!", GetAdminRangName(Spieler[playerid][pAdmin]), Spieler[playerid][pName], Fraktion[f_ID][fName]);
ShowInfo(pID, String);
Spieler[pID][pFraktion] = f_ID;
Spieler[pID][pFraktionRang] = 6;
}
return 1;
} -
Code
Alles anzeigenocmd:makeleader(playerid, params[]) { new f_ID, pID, String[512]; if(Spieler[playerid][pAdmin] < 5)return ShowFehler(playerid, NO_ADMIN); if(sscanf(params, "ui", pID, f_ID))return ShowInfo(playerid, "Benutze: /makeleader [Spieler/ID] [FraktionID]"); if(!IsPlayerConnected(pID))return ShowFehler(playerid, "Der Spieler ist nicht auf dem Server!"); if(!Spieler[pID][pLoggedIn])return ShowFehler(playerid, "Der Spieler ist nicht eingeloggt!"); if(Spieler[pID][pFraktion] != 0)return ShowFehler(playerid, "Der Spieler ist bereits in einer Fraktion!"); if(f_ID == 0) { format(String, sizeof(String), "Du hast den Spieler %s als Leader entlassen!", Spieler[pID][pName]); ShowAdmin(playerid, String); format(String, sizeof(String), "Der %s %s hat dich als Leader entlassen!", GetAdminRangName(Spieler[playerid][pAdmin]), Spieler[playerid][pName]); ShowInfo(pID, String); Spieler[pID][pFraktion] = 0; Spieler[pID][pFraktionRang] = 0; } else if(f_ID != 0){ format(String, sizeof(String), "Du hast den Spieler %s zum Leader der %s gemacht!", Spieler[pID][pName], Fraktion[f_ID][fName]); ShowAdmin(playerid, String); format(String, sizeof(String), "Der %s %s hat dich zum Leader der %s gemacht!", GetAdminRangName(Spieler[playerid][pAdmin]), Spieler[playerid][pName], Fraktion[f_ID][fName]); ShowInfo(pID, String); Spieler[pID][pFraktion] = f_ID; Spieler[pID][pFraktionRang] = 6; } return 1; }
So Versucht?
-
Warum kommt bei /makeleader 0 1 dass der Befehl nicht existiert?
Das kommt vermutlich, weil ein RuneTime Error aufgetreten ist.
Um diesen angezeigt zu bekommen und mehr Infos dazu zu erhalten, nutze crashdetect.
Dann wird dir im Log genau angezeigt, wo der Fehler ist
-
C
Alles anzeigenocmd@2:f,family(playerid,params[]) { new text[96], string[128]; if(!IsLoggedIn(playerid))return 1; if(sscanf(params, "s[96]", text))return SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00CC00}(/f)amily [Nachricht]"); if(Spieler[playerid][pMuted] > 0) { SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du wurdest stummgeschaltet."); return 1; } if(!(Spieler[playerid][pFraktion] == 7 || Spieler[playerid][pFraktion] == 8 || Spieler[playerid][pFraktion] == 9 || Spieler[playerid][pFraktion] == 10 || Spieler[playerid][pFraktion] == 11 || Spieler[playerid][pFraktion] == 12 || Spieler[playerid][pFraktion] == 13 || Spieler[playerid][pFraktion] == 14 || Spieler[playerid][pFraktion] == 15 || Spieler[playerid][pFraktion] == 16 || Spieler[playerid][pFraktion] == 17))return SendClientMessage(playerid, COLOR_WHITE, ERROR_FRAKTION); format(string ,sizeof(string), "{33CCFF}** (( %s %s: %s )) **", GetRankName(Spieler[playerid][pFraktion], Spieler[playerid][pRank]), GetName(playerid), text); for(new i=0;i<GetMaxPlayers();i++) { if(IsLoggedIn(i)) { if(Spieler[i][pFraktion] == Spieler[playerid][pFraktion]) { SendClientMessage(i, COLOR_WHITE, string); } } } return 1; }
Hey,
Habe mal eine frage,
Wen ich:
Spieler[playerid][pFraktion] == 17Hinzufüge kann der Compeiler den Code nicht compeilen warum? bzw reagiert er nicht mehr
-
Die zeile ist zu lang
-
Hinzufüge kann der Compeiler den Code nicht compeilen warum? bzw reagiert er nicht mehr
Vermutlich weil die Zeile zu lang ist.
Aber lager das doch aus:
C
Alles anzeigenocmd@2:f,family(playerid,params[]) { if(!IsLoggedIn(playerid)) return 1; new string[128]; if(!params[0] || params[0] == '\1') return SCM(playerid, COLOR_WHITE, "{247BA6}* Benutze: {00CC00}(/f)amily [Nachricht]"); if(Spieler[playerid][pMuted] > 0) return SCM(playerid, COLOR_WHITE, "{AFAFAF}Du wurdest stummgeschaltet."); if(!CheckFrakForFChat(playerid)) return SCM(playerid, COLOR_WHITE, ERROR_FRAKTION); format(string ,sizeof(string), "{33CCFF}** (( %s %s: %s )) **", GetRankName(Spieler[playerid][pFraktion], Spieler[playerid][pRank]), GetName(playerid), params); for(new i=GetPlayerPoolSize(); i!=-1; i--) { if(IsLoggedIn(i) && Spieler[i][pFraktion] == Spieler[playerid][pFraktion]) SCM(i, COLOR_WHITE, string); } return 1; } //Entweder so: stock CheckFrakForFChat(playerid) { return (7 <= Spieler[playerid][pFraktion] <= 17); } //Oder so: stock CheckFrakForFChat(playerid) { switch(Spieler[playerid][pFraktion]) { case 7..17: return 1; } return 0; }
-
-
Danke Klappt super.
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 514 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 515) && GetVehicleModel(GetVehicleTrailer(vehicleid)) == 584)
Möchte nur anfragen ob er das Fahrzeug 514 oder 515 hat und den Trailer 584.
C:\Users\Patrick\Desktop\Reallife\gamemodes\Reallife.pwn(19559) : error 029: invalid expression, assumed zero
C:\Users\Patrick\Desktop\Reallife\gamemodes\ReallifeReallife.pwn(19559) : warning 215: expression has no effect
C:\Users\Patrick\Desktop\Reallife\gamemodes\Reallife.pwn(19559) : error 001: expected token: ";", but found ")"
C:\Users\Patrick\Desktop\Reallife\gamemodes\Reallife.pwn(19559) : error 029: invalid expression, assumed zero
C:\Users\Patrick\Desktop\Reallife\gamemodes\Reallife.pwn(19559) : fatal error 107: too many error messages on one lineIch komm auf den Fehler nicht ich änder das die ganze zeit und die fehler beleiben..
-
Das kommt vermutlich, weil ein RuneTime Error aufgetreten ist.
Um diesen angezeigt zu bekommen und mehr Infos dazu zu erhalten, nutze crashdetect.Dann wird dir im Log genau angezeigt, wo der Fehler ist
Code[19:32:28] | ID: 1 | Name: Los Santos Police Department | [19:33:03] [connection] 84.159.233.205:58663 requests connection cookie. [19:33:04] [connection] incoming connection: 84.159.233.205:58663 id: 0 [19:33:04] [join] Chiller has joined the server (0:84.159.233.205) [19:33:16] [debug] Run time error 4: "Array index out of bounds" [19:33:16] [debug] Attempted to read/write array element at index 1 in array of size 1 [19:33:16] [debug] AMX backtrace: [19:33:16] [debug] #0 0000c734 in public ocmd_makeleader (0, 89004) in SANL.amx [19:33:16] [debug] #1 native CallLocalFunction () in samp03svr [19:33:16] [debug] #2 00006200 in public OnPlayerCommandText (0, 88940) in SANL.amx
-
[19:33:16] [debug] Run time error 4: "Array index out of bounds"
[19:33:16] [debug] Attempted to read/write array element at index 1 in array of size 1Da, das ist dein Fehler
Wie hast du denn Fraktion deklariert?
Ich komm auf den Fehler nicht ich änder das die ganze zeit und die fehler beleiben..
Dann schreib es doch mal ordentlich
Oder lager es aus.
-
Da, das ist dein Fehler
Wie hast du denn Fraktion deklariert?Dann schreib es doch mal ordentlich
Oder lager es aus.enum FraktionDaten {
fID,
fName[64],
Float:fSpawnX,
Float:fSpawnY,
Float:fSpawnZ,
Float:fSpawnR,
fSpawnInt,
fSpawnVWorld,
fMaxMember,
fRang1[32],
fRang2[32],
fRang3[32],
fRang4[32],
fRang5[32],
fRang6[32],
fKasse,
};
new Fraktion[MAX_FRAKTIONEN][FraktionDaten]; -
MAX_FRAKTIONEN
...und wiie ist das definiert?
-
#define MAX_FRAKTIONEN 1
-
#define MAX_FRAKTIONEN 1
Okay, alles klar
Das Problem ist du hast einen index.
Also schauen wir uns das mal an:
new x[1];
x[0] = 5; //Das ist kein Problem, denn ein Array fängt bei 0 an
x[1] = 3; //Das geht nicht...weil wir nur 1nen Index zur Verfügung haben und zwar die 0Du versuchst aber, genau das untere auf x[1] zuzugreifen.
Die Lösung ist ganz einfach, du musst entweder überall Fraktion[f_ID-1] verwenden oder direkt nur 0 als Fraktion eingeben, da sich das ja auf den Index bezieht
-
Hallo, ich will ein System erstellen, welches einen Spiel verhindern das ein Spieler bunnyhoppt (also rennt und dabei gleichzeitig springt).
Das (filter)script sieht momentan so aus:
#include <a_samp>forward KillTimerSprung(playerid);
forward FunktionInSprung(playerid);#define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
new InSprung[MAX_PLAYERS] = 0;
new TimerIDSprung;public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
new Float:vx,Float:vy,Float:vz;
GetPlayerVelocity(playerid,vx,vy,vz);
if (PRESSED(KEY_JUMP) && (vy > 0.01 || vy <-0.01 || vx > 0.01 || vx <-0.01) && IsPlayerInAnyVehicle(playerid) == 0 && InSprung[playerid] == 0)
{
if(vz > 0.01 || vz < -0.01) return 1;
InSprung[playerid] = 1;
TimerIDSprung = SetTimerEx("FunktionInSprung",1,true,"i",playerid);
}
return 1;
}public KillTimerSprung(playerid)
{
InSprung[playerid] = 0;
return 1;
}public FunktionInSprung(playerid)
{
new animlib[32];
new animname[32];
new Float:vx,Float:vy,Float:vz;
GetPlayerVelocity(playerid,vx,vy,vz);
if(vz < -0.5)
{
KillTimer(TimerIDSprung);
SetTimerEx("KillTimerSprung",1000,false,"i",playerid);
return 1;
}
GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
if(!strcmp(animname,"JUMP_LAND") || !strcmp(animname,"FALL_LAND"))
{
KillTimer(TimerIDSprung);
ClearAnimations(playerid,1);
ApplyAnimation(playerid,"ped","FALL_land",4.1,0,1,1,0,0,1);
SetTimerEx("KillTimerSprung",1000,false,"i",playerid);
}
return 1;
}Nun hab ich das problem, dass das system auch den spieler in eine animation versetzt, wenn er springt und normal läuft (ohne zu sprinten) und man nach einmaligem springen (mit sprinten) in der animation ist (besser wären 3x hintereinander) hoffe jemand kann mir helfen
-
hoffe jemand kann mir helfen
Du machst es dir viel zu kompliziert, schreib es einfach nur so:
C
Alles anzeigenpublic OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if(PRESSED(KEY_JUMP) && !IsPlayerInAnyVehicle(playerid) && GetPlayerSpeed(playerid) > 20) { ClearAnimations(playerid); ApplyAnimation(playerid,"ped","FALL_land",4.1,0,0,0,0,0,1); } return 1; } stock GetPlayerSpeed(playerid) { new Float:x,Float:y,Float:z; GetPlayerVelocity(playerid,x,y,z); return floatround(VectorSize(x,y,z)*170.0); }
-