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;
}
ocmd: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;
}
Alles anzeigen
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 ![]()
ocmd@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;
}
Alles anzeigen
Hey,
Habe mal eine frage,
Wen ich:
Spieler[playerid][pFraktion] == 17
Hinzufü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:
ocmd@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;
}
Alles anzeigen
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 line
Ich 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
[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 1
Da, 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 0
Du 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:
public 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);
}
Alles anzeigen
kann ich es auch so machen?
Nein.
Entweder das Gegenteil:
new Fraktion[MAX_FRAKTIONEN+1][FraktionDaten];
oder wirklich so, wie ich es geschrieben habe mit dem -1 ![]()
//EDIT: Hat sich erledigt, habe eine effiziente Loesung gefunden
Ich nutze nun fuer jede Teamvariable, egal ob Bett, Farbe etc. ein eigenes Array, damit geht das deutlich simpler.
Die Array Variante klappt prima.
So, habe folgende Frage.
Habe aktuell ein Kommando mit welchem ich ein Bett eines gegnerischen Teams vernichten kann, d.h. dass die BettID != gPlayerTeamSelection[playerid] ist.
Dabei checke ich, dass das Bett nicht das Bett des eigenen Teams ist, und das Bett nicht bereits zuvor vernichtet wurde.
Dabei habe ich aktuell diesen fetten klumpen, und den wuerde ich gerne reduzieren.
if(strcmp(cmdtext, "/blowup", true) == 0 && GameHasStarted == 1)
{
for(new i = 0; i < sizeof(beds); i++)
{
new Float:health;
GetPlayerHealth(playerid,health);
if(running !=1 && IsPlayerInRangeOfPoint(playerid,3.0,beds[i][0],beds[i][1],beds[i][2]) && health > 0 && !IsPlayerInAnyVehicle(playerid)) // In this script we deal with players only
{
if((i == 0 && gPlayerTeamSelection[playerid] == FIRST_TEAM) || (i == 1 && gPlayerTeamSelection[playerid] == SECOND_TEAM) || (i == 2 && gPlayerTeamSelection[playerid] == THIRD_TEAM) || (i == 3 && gPlayerTeamSelection[playerid] == FOURTH_TEAM) || (i == 4 && gPlayerTeamSelection[playerid] == FIFTH_TEAM) || (i == 5 && gPlayerTeamSelection[playerid] == SIXTH_TEAM))
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: You cannot blow up the bed of your own team!");
running = 1;
PlayerInfo[playerid][pBeds]=GetPlayerScore(playerid);
SetTimer("BlowUpThisBed", bombtimer, false);
if(i == 0 && BED_STATE_TEAM_ONE !=-1 && BED_STATE_TEAM_ONE !=-2 )
{
BED_STATE_TEAM_ONE=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#FIRST_TEAM_COLOR_TAG);
}
if(i == 1 && BED_STATE_TEAM_TWO !=-1 && BED_STATE_TEAM_TWO !=-2 )
{
BED_STATE_TEAM_TWO=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#SECOND_TEAM_COLOR_TAG);
}
#if defined TEAMSIZE
#if TEAMSIZE >=3
if(i == 2 && BED_STATE_TEAM_THREE !=-1 && BED_STATE_TEAM_THREE !=-2 )
{
BED_STATE_TEAM_THREE=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#THIRD_TEAM_COLOR_TAG);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=4
if(i == 3 && BED_STATE_TEAM_FOUR !=-1 && BED_STATE_TEAM_FOUR !=-2 )
{
BED_STATE_TEAM_FOUR=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#FOURTH_TEAM_COLOR_TAG);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=5
if(i == 4 && BED_STATE_TEAM_FIVE !=-1 && BED_STATE_TEAM_FIVE !=-2 )
{
BED_STATE_TEAM_FIVE=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#FIFTH_TEAM_COLOR_TAG);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >=6
if(i == 5 && BED_STATE_TEAM_SIX !=-1 && BED_STATE_TEAM_SIX !=-2 )
{
BED_STATE_TEAM_SIX=-1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team "#SIXTH_TEAM_COLOR_TAG);
}
#endif
#endif
PlayerInfo[playerid][pBeds]+=1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Planted Bomb Successfully. Lets Blow This Bed Up!");
SetPlayerScore(playerid, GetPlayerScore(playerid) + 1);
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Keep Running! Bed Will Blow Up In 5 seconds!");
GetPlayerPos(playerid, x1, y1, z1);
ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 1);
for(new k = 0; k < MAX_PLAYERS; k++)
{
PlayerPlaySound(k,7416,x1,y1,z1);
}
CountDownTimer = SetTimer("CountDown", 1000, true);
new Float:dist = GetDistance(beds[i][0],beds[i][1],beds[i][2],x1,y1,z1);
printf("Distance to closest bed: %f, Index: %d", dist, i);
return 1;
}
}
return 0;
}
return 1;
}
Alles anzeigen
public BlowUpThisBed()
{
CreateExplosion(x1, y1, z1, 7, 10.0);//'heavy' explosion close to bed
CreateExplosion(x1, y1, z1, 9, 10.0);
running=0;
printf("Blow Up This Bed called");
if(BED_STATE_TEAM_ONE == -1)
{
BED_STATE_TEAM_ONE = -2;
SendTeamMessage(FIRST_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",FIRST_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_ONE);
}
if(BED_STATE_TEAM_TWO == -1)
{
BED_STATE_TEAM_TWO = -2;
SendTeamMessage(SECOND_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",SECOND_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_TWO);
}
#if defined TEAMSIZE
#if TEAMSIZE >= 3
if(BED_STATE_TEAM_THREE == -1)
{
BED_STATE_TEAM_THREE = -2;
SendTeamMessage(THIRD_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",THIRD_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_THREE);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 4
if(BED_STATE_TEAM_FOUR == -1)
{
BED_STATE_TEAM_FOUR = -2;
SendTeamMessage(FOURTH_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",FOURTH_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_FOUR);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE >= 5
if(BED_STATE_TEAM_FIVE == -1)
{
BED_STATE_TEAM_FIVE = -2;
SendTeamMessage(FIFTH_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",FIFTH_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_FIVE);
}
#endif
#endif
#if defined TEAMSIZE
#if TEAMSIZE == 6
if(BED_STATE_TEAM_SIX == -1)
{
BED_STATE_TEAM_SIX = -2;
SendTeamMessage(SIXTH_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",SIXTH_TEAM_COLOR_TAG);
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_SIX);
}
#endif
#endif
}
Alles anzeigen
Da habe ich versucht das ganze nun zu reduzieren, indem ich fuer die Bedobjekte ein Array erstelle, und da habe ich mir dann eine Funktion gebaut IsPlayerInRangeOfBed.
BedArray[FIRST_TEAM]= CreateObject(1794,268.1000100,1881.5000000,-31.4000000,0.0000000,0.0000000,0.0000000); //object(low_bed_3) (1) // Team Grey
BedArray[SECOND_TEAM]= CreateObject(1798,434.5000000,2546.8999000,15.2000000,0.0000000,0.0000000,268.0000000); //object(swank_bed_1) (1) // Team Blue
BedArray[THIRD_TEAM]= CreateObject(1801,-773.5999800,2421.3000000,156.1000100,0.0000000,0.0000000,0.0000000); //object(swank_bed_4) (1) // Team Red
IsPlayerInRangeOfBed(playerid,range)
{
new k = sizeof(BedArray);
while (k --> 0)
{
new Float:px, Float:py, Float:pz, Float:ox, Float:oy, Float:oz;
GetObjectPos(BedArray[k],ox,oy,oz);
GetPlayerPos(playerid,px,py,pz);
new Float:dist = floatabs(px,py,pz,ox,oy,oz);
if(dist == range || dist < range)
{
return k;
}
return -1;
}
}
Alles anzeigen
Aber geht das effizienter? Sollte ich die BED_STATEs eventuell auch in ein Array packen? Wie sollte das dann aufgebaut sein das Array? Eventuell ein Monodimensionales Array, bspw. BedStates[TEAMSIZE]?
Das ist mein jetziger Ansatz, gefaellt mir aber noch nicht ganz, und ist noch nicht komplett fertig, weil ich da wieder tausende BED_STATE Abfragen haben werde.
if(strcmp(cmdtext, "/blowup", true) == 0 && GameHasStarted == 1)
{
new Float:health;
GetPlayerHealth(playerid,health);
new bedteamid=IsPlayerInRangeOfBed(playerid,3.0);
if(running !=1 && bedteamid != -1 && health > 0 && !IsPlayerInAnyVehicle(playerid)) // In this script we deal with players only
{
if(bedteamid == gPlayerTeamSelection[playerid])
return SendClientMessage(playerid, COLOR_WHITE, "SERVER: You cannot blow up the bed of your own team!");
running = 1;
PlayerInfo[playerid][pBeds]=GetPlayerScore(playerid);
SetTimer("BlowUpThisBed", bombtimer, false);
if(BedStates[bedteamid] != 0)
{
SendClientMessageEx(playerid, COLOR_WHITE, "SERVER: You are blowing up the bed of Team %s ",GetTeamColorTag(bedteamid));
BedStates[bedteamid] = 0;
}
PlayerInfo[playerid][pBeds]+=1;
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Planted Bomb Successfully. Lets Blow This Bed Up!");
SetPlayerScore(playerid, GetPlayerScore(playerid) + 1);
SendClientMessage(playerid, COLOR_WHITE, "SERVER: Keep Running! Bed Will Blow Up In 5 seconds!");
GetPlayerPos(playerid, x1, y1, z1);
ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 4.0, 1, 0, 0, 1, 1);
for(new k = 0; k < MAX_PLAYERS; k++)
{
PlayerPlaySound(k,7416,x1,y1,z1);
}
CountDownTimer = SetTimer("CountDown", 1000, true);
return 1;
}
return 0;
}
return 1;
}
Alles anzeigen
Jedoch muesste ich dann ueber CountDown die bedteamid die Teamid an CountDown, und von CountDown an BlowUpThisBed schicken.
Bei BlowUpThisBed wuerde ich die teamid des Bettes uebergeben, und so ca. 90 Zeilen sparen.
public BlowUpThisBed(teamid)
{
CreateExplosion(x1, y1, z1, 7, 10.0);//'heavy' explosion close to bed
CreateExplosion(x1, y1, z1, 9, 10.0);
running=0;
printf("Blow Up This Bed called");
if(BedStates[teamid] == 0)
{
SendTeamMessage(FIRST_TEAM,COLOR_WHITE,"SERVER: Sudden death! Keep running, your bed has been blown up! There is no respawn after death!");
new adstring[64];
format(adstring,sizeof(adstring),"SERVER: The bed of team %s {FFFFFF}blew up!",GetTeamColorTag(teamid));
SendClientMessageToAll(-1,adstring);
GangZoneHideForAll(TEAM_ZONE_ONE);
}
}
Alles anzeigen
if(!(Spieler[playerid][pFraktion] == 17))return SendClientMessage(playerid, COLOR_WHITE, ERROR_FRAKTION);
if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du befindest dich in keinem Tanker oder Roadtrain.");
if(!IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid))) return SendClientMessage(playerid, COLOR_WHITE, "Du hast dein Produkt Anhänger nicht angeschlossen!");
if(GetVehicleTrailer(GetPlayerVehicleID(playerid)) != 435) return SendClientMessage(playerid, COLOR_WHITE, "Du hast den falschen Anhänger. Du brauchst den Produkt Anhänger!");
if(sscanf(params, "i", int))return SendClientMessage(playerid, COLOR_WHITE, "{247BA6}* Benutze {33AA33}/load [Menge]");
new money = int*15;
if(GetMoney(playerid) < money)return SendClientMessage(playerid, COLOR_WHITE, ERROR_MONEY);
if(int < 1 || int > 200)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du kannst nur maximal 200 Produkte aufladen.");
if((int+Vehicle[GetVehicleTrailer(vehicleid)][vehProds]) > 200)return SendClientMessage(playerid, COLOR_WHITE, "{AFAFAF}Du kannst nur maximal 200 Produkte aufladen.");
FreezePlayer(playerid);
SendClientMessage(playerid, COLOR_WHITE, "{33CCFF}Das Fahrzeug wird nun mit Produkten beladen.");
SendClientMessage(playerid, COLOR_WHITE, "{33CCFF}Die dauer ist von der Menge abhängig..");
SendClientMessage(playerid, COLOR_WHITE, "{33CCFF}Bitte warten...");
SetTimerEx("TransportProdukten", int*1, 0, "d", playerid);
Vehicle[GetVehicleTrailer(vehicleid)][vehProds] += int;
GiveMoney(playerid, -money);
Alles anzeigen
Hey,
Kurze frage habe den Trailer mit der ID 435 angehängt troz allem kommt der fehler?
if(GetVehicleTrailer(GetPlayerVehicleID(playerid)) != 435) return SendClientMessage(playerid, COLOR_WHITE, "Du hast den falschen Anhänger. Du brauchst den Produkt Anhänger!");