Dyn. Gang System buggt :S

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
  • Hallo, nach langer Zeit mal wieder ein Scripting Thread von mir, da ich nun wieder anfange zu scripten und derzeit an meinem Freeroam Gamemode weiter mach wollt ich mir vornehmen mein unfertiges Gang System fertig zu schreiben, ich hatte es schon angefangen und habe nun in den letzten 3Tagen auch daran weiter gemacht nur das Gangzonen einnehmen buggt.


    Folgendes passiert, ich gebe ein /gang angreifen in einer Gangzone, dann kommt ganz gewöhnt das man die Zone einnimt und es blinkt, nun erster Fehler: wenn ich die Zone verlasse sollte er das Gangwar abbrechen, doch der Timer läuft einfach weiter xD Zweiter fehler, wenn die Zeit abgelaufen ist dann kommt nur noch 0 Sekunden bla, einmal und normal müsste dann kommen ob man gewonnen/verloren hat dies geschieht aber nicht. Ok gut, nun steht zwar bei ZonenName mein Gang Name aber in jede Zone in die ich laufe, wird eingenommen, die Farbe der GangZone wird nur für eine Sekunde oder mehr geändert, dannach hat die Zone keine Farbe.


    Ich hab keine ahnung wo der Fehler liegt, ich hab schon sämtliches ausprobiert...
    Hier mein Code:
    Der "attack" teil des Gang Systems
    if(!strcmp("attack",tmp,true) || !strcmp("angreifen",tmp,true))
    {
    if(PlayerGang[playerid]==INVALID_GANG_ID)
    return SendLanguageMessage(playerid,COLOR_RED,"Du bist in keiner Gang!","You aren´t in a gang!");


    if(Gangs[PlayerGang[playerid]][ONLINE_COUNT] < 1)return SendLanguageMessage(playerid,COLOR_RED,"Es müssen mindestens zwei Leute deiner Gang Online sein!","It must be last then 2 people from your gang be online!");
    if(Gangs[PlayerGang[playerid]][at_war]>0)return SendLanguageMessage(playerid,COLOR_RED,"Deine Gang ist schon in einem Gang war!","Your gang is already doing a gangwar!");
    if(GetPlayersGangInGangZone(GetPlayerGangZone(playerid),PlayerGang[playerid]) < 2)return SendLanguageMessage(playerid,COLOR_RED,"Es müssen mindestens zwei Leute deiner Gang in dieser Gang Zone stehen!","There must be at least two players from your gang in this gangzone!");
    Gangs[PlayerGang[playerid]][at_war] = 60;
    Gangs[PlayerGang[playerid]][at_war_gangzone] = 0;
    Gangs[PlayerGang[playerid]][gang_timer] = SetTimerEx("GangZoneAngreifen",1000,1,"i",PlayerGang[playerid]);
    SendGangMessageEx(PlayerGang[playerid],COLOR_GREEN,"{FFFF00}[GANG]{FFFFFF} %s (%d) hat einen Gang War gestartet! Helf ihm!","{FFFF00}[GANG]{FFFFFF} %s (%d) has started a Gangwar! Help him!",INVALID_PLAYER_ID,PlayerName[playerid],playerid);
    GangZoneFlashForAll(GetPlayerGangZone(playerid),Gangs[PlayerGang[playerid]][GANG_COLOR]);
    SendFormattedMessage(playerid,COLOR_GREEN,"[Debug | Gang] %d",GetPlayerGangZone(playerid));
    Gangs[PlayerGang[playerid]][at_war_gangzone] = GetPlayerGangZone(playerid);
    return 1;
    }


    Der Timer:
    forward GangZoneAngreifen(ggangid);
    public GangZoneAngreifen(ggangid)
    {
    if(Gangs[ggangid][at_war] > 0)
    {
    Gangs[ggangid][at_war]--;
    //SendGangMessageEx(Gangs[ggangid],COLOR_GREEN,"{FFFF00}[GANG]{FFFFFF} Noch %d Sekunden im Gebiet bleiben!","{FFFF00}[GANG]{FFFFFF} Be %d seconds in the gangzone!",Gangs[ggangid][at_war]);
    new gstr[256],estr[256];
    format(gstr,sizeof(gstr),"{FFFF00}[GANG]{FFFFFF} Ihr müsst noch {FF0000}%d Sekunden{FFFFFF} im Gebiet überleben.",Gangs[ggangid][at_war]);
    format(estr,sizeof(estr),"{FFFF00}[GANG]{FFFFFF} You must survive {FF0000}%d Seconds{FFFFFF} in this area.!",Gangs[ggangid][at_war]);
    GangChat(ggangid,COLOR_GREEN,gstr,estr);
    print("[Gang - Debug] Noch ... sekunden");
    if(GetPlayersGangInGangZone(Gangs[ggangid][at_war_gangzone],ggangid) < 2)
    {
    format(gstr,sizeof(gstr),"{FFFF00}[GANG]{FFFFFF} Ihr müsst mindestens 2 Leute aus eurer Gang in der Gangzone stehen haben! Gangwar verloren...");
    format(estr,sizeof(estr),"{FFFF00}[GANG]{FFFFFF} You must have at least 2 players of your gang in the gangzone! You lose the gangwar...");
    GangChat(ggangid,COLOR_GREEN,gstr,estr);
    GangZoneStopFlashForAll(Gangs[ggangid][at_war_gangzone]);
    KillTimer(Gangs[ggangid][gang_timer]);
    Gangs[ggangid][at_war_gangzone] = 0;
    Gangs[ggangid][at_war] = 0;
    return 1;
    }
    return 1;
    }
    else if(Gangs[ggangid][at_war] < 1)
    {
    /* if(Gangs[ggangid][gang_gebiet]==-1)
    {
    KillTimer(Gangs[ggangid][gang_timer]);
    Gangs[ggangid][at_war_gangzone] = 0;
    // SendGangMessageEx(Gangs[ggangid],COLOR_RED,"[GANG] Ihr habt das Gangwar verloren...","[GANG] You loosed the gangwar...");
    new gstr[256],estr[256];
    format(gstr,sizeof(gstr),"{FFFF00}[GANG]{FFFFFF} Ihr habt das Gangwar {FF0000}verloren{FFFFFF}...");
    format(estr,sizeof(estr),"{FFFF00}[GANG]{FFFFFF} You loosed the {FF0000}gangwar{FFFFFF}...");
    GangChat(ggangid,COLOR_GREEN,gstr,estr);
    print("[Gang - Debug] Gangwar Verloren");
    return 1;
    }
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(PlayerGang[i]==INVALID_GANG_ID)
    return 1;
    if(Gangs[PlayerGang[i]][at_war_gangzone] == 0)
    return 1;
    if(Gangs[PlayerGang[i]][at_war] > 0)
    {
    if(GetPlayersGangInGangZone(Gangs[PlayerGang[i]][at_war_gangzone],PlayerGang[i]) < 2)
    {
    new gstr[126],estr[126];
    format(gstr,sizeof(gstr),"{FFFF00}[GANG]{FFFFFF} Ihr müsst mindestens 2 Leute aus eurer Gang in der Gangzone stehen haben! Gangwar verloren...");
    format(estr,sizeof(estr),"{FFFF00}[GANG]{FFFFFF} You must have at least 2 players of your gang in the gangzone! You lose the gangwar...");
    GangChat(PlayerGang[i],COLOR_GREEN,gstr,estr);
    GangZoneStopFlashForAll(Gangs[PlayerGang[i]][at_war_gangzone]);
    KillTimer(Gangs[PlayerGang[i]][gang_timer]);
    Gangs[PlayerGang[i]][at_war_gangzone] = 0;
    return 1;
    }
    }
    }*/
    strmid(GangZones[Gangs[ggangid][gang_gebiet]][g_zone_name],Gangs[ggangid][GANG_NAME],0,32,32);
    GangZoneDestroy(GangZones[Gangs[ggangid][gang_gebiet]][g_zone_id]);
    GangZones[Gangs[ggangid][gang_gebiet]][g_zone_id] = GangZoneCreate(GangZones[Gangs[ggangid][gang_gebiet]][g_minx],GangZones[Gangs[ggangid][gang_gebiet]][g_miny],GangZones[Gangs[ggangid][gang_gebiet]][g_maxx],GangZones[Gangs[ggangid][gang_gebiet]][g_maxy]);
    GangZoneShowForAll(GangZones[Gangs[ggangid][gang_gebiet]][g_zone_id],ColorToHex(colorlist[Gangs[ggangid][GANG_COLOR]][0],colorlist[Gangs[ggangid][GANG_COLOR]][1],colorlist[Gangs[ggangid][GANG_COLOR]][2],colorlist[Gangs[ggangid][GANG_COLOR]][3]));
    //GangZoneShowForAll(GangZones[Gangs[ggangid][gang_gebiet]][g_zone_id],Gangs[ggangid][GANG_COLOR]);
    GangZones[Gangs[ggangid][gang_gebiet]][g_zone_color] = Gangs[ggangid][GANG_COLOR];
    new gstr[256],estr[256];
    format(gstr,sizeof(gstr),"{FFFF00}[GANG]{FFFFFF} Ihr habt das Gangwar {0B610B}gewonnen{FFFFFF}!");
    format(estr,sizeof(estr),"{FFFF00}[GANG]{FFFFFF} You {0B610B}won{FFFFFF} the Gang War!");
    GangChat(ggangid,COLOR_GREEN,gstr,estr);
    //SendGangMessageEx(Gangs[ggangid],COLOR_GREEN,"[GANG] Ihr habt das Gangwar gewonnen!","[GANG] You won the Gang War!");
    KillTimer(Gangs[ggangid][gang_timer]);
    Gangs[ggangid][at_war_gangzone] = 0;
    Gangs[ggangid][at_war] = 0;
    print("[Gang - Debug] Gangwar gewonnen");
    }
    return 1;
    }
    Und GetPlayersInGangZone
    stock GetPlayersGangInGangZone(zoneid,gangid)
    {
    new gangplayers=0;
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(IsPlayerInGangZone(i,zoneid) && PlayerGang[i] == gangid)
    {
    gangplayers++;
    }
    }
    return gangplayers;
    }


    //Edit hier nochmal ein ausführlicher Bericht:
    Das sollte normal so gehen, wenn eine Gangwar gestartet wird (/gang angreifen) soll er die derzeitige Zone angreifen, diese blinkt dann für 60 Sekunden (Das passiert ja auch) in der Zeit sollte er immer checken ob mindestens 2 Spieler in der Gangzone sind, wenn nein abbruch,wenn ja weiter, am ende sollte das "else if" ausgeführt werden dieses setzt dann die Gangzone daten und färbt die Gangzone um, nur leider kommt es nicht dazu, erstens es wird nicht abgebrochen wenn weniger als 2 in der Zone sind, zweitens der Timer wird nicht gekillt (daran liegts glaub ich), also er läuft weiter und ich kann rum rennen, durch jede Gangzone durch die ich lauf wird zu meiner Gang ihrem Gebiet, nur die Farben werden nicht gesetzt, sondern die Zone verschwindet aber wenn man sie betritt erscheint links in der ecke trodzdem der Gang Name, er macht nach dem abzählen von 60 bis 0 nix mehr, es kommt nur noch " Ihr müsst noch 0 Sekunden im Gebiet überleben.", dann passiert nix mehr, es kommt nix im Chat, obwohl da kommen sollte das man die Zone eingenommen hat, oder eben nicht wenn man sie verlässt und alles abgebrochen wird.


    Hoffe das mir einer helfen kann :S

    DIK2gXr.png

    Einmal editiert, zuletzt von DurtyFree ()