[Problem] Gangfight System

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,


    derzeit bin ich dabei ein Gangfight System für mein Selfmade zu entwickeln. (MySQL)
    Das ganze funktioniert aber noch nicht so, wie ich will. Erstmal bin ich dabei, dass die Zonen geladen und auf der Map angezeigt werden.


    Die Zone wird geladen, wie man aus der Server Log entnehmen kann. Derzeit ein Gangfight, da in der Datenbank bis jetzt auch nur ein Eintrag existiert.

    Code
    [13:47:57] [LOAD] Gangfights geladen: 1/10


    Wenn der Server startet, lasse ich eine eigenständige Funktion aufrufen. Diese Funktion sollte alle Gebiete laden, was meines Wissens nach auch funktioniert.
    mysql_function_query(myCon, "SELECT * FROM `script_gangfight`", true, "LoadGangfight", "");
    public LoadGangfight()
    {
    new rows,fields,count;
    cache_get_data(rows,fields);
    for(new i=0;i<rows;i++)
    {
    new gGangfightID = cache_get_field_content_int(i, "ID");
    if(gGangfightID < MAX_GANGFIGHT)
    {
    Gangfight[gGangfightID][gID] = cache_get_field_content_int(i, "ID");
    Gangfight[gGangfightID][minX] = cache_get_field_content_float(i, "minX");
    Gangfight[gGangfightID][minY] = cache_get_field_content_float(i, "minY");
    Gangfight[gGangfightID][maxX] = cache_get_field_content_float(i, "maxX");
    Gangfight[gGangfightID][maxY] = cache_get_field_content_float(i, "maxY");
    Gangfight[gGangfightID][gAngriff] = cache_get_field_content_int(i, "Angriff");
    Gangfight[gGangfightID][gZonecolor] = cache_get_field_content_int(i, "Zonecolor");
    Gangfight[gGangfightID][gPunkteTeam1] = cache_get_field_content_int(i, "PunkteTeam1");
    Gangfight[gGangfightID][gPunkteTeam2] = cache_get_field_content_int(i, "PunkteTeam2");
    Gangfight[gGangfightID][gFlag1] = cache_get_field_content_int(i, "Flag1");
    Gangfight[gGangfightID][gFlag2] = cache_get_field_content_int(i, "Flag2");
    Gangfight[gGangfightID][gFlag3] = cache_get_field_content_int(i, "Flag3");
    Gangfight[gGangfightID][gBesitzer] = cache_get_field_content_int(i, "Besitzer");
    count++;
    GangfightZone[i] = GangZoneCreate(Gangfight[i][minX],Gangfight[i][minY],Gangfight[i][maxX],Gangfight[i][maxY]);
    }
    }
    printf("[LOAD] Gangfights geladen: %d/%d", count, MAX_GANGFIGHT);
    return 1;
    }


    Den Besitzer sowie die Farbe der Zone speichere ich als Integer, da ich gerne die normalen SAMP Color ID's verwenden möchte.
    In der Ladefunktion ist ebenso die Funktion, dass die Gebiete erstellt werden.
    Sobald sich der Spieler einloggt, lasse ich die Gangfight Gebiete auch für playerid anzeigen.
    for(new i;i<MAX_GANGFIGHT;i++)
    {
    GangZoneShowForPlayer(playerid, GangfightZone[i], Gangfight[i][gZonecolor]);
    }


    Mir wird jedoch kein Gebiet auf der Karte angezeigt.. Kennt vielleicht jemand das Problem oder sieht den Fehler?


    Gruß,
    Cheevy


    Jeffry:
    //edit: Jeffry hinzugefügt, der weiß alles

    Einmal editiert, zuletzt von Cheevy.Shakur () aus folgendem Grund: //edit: Jeffry hinzugefügt, der weiß alles

  • Gangfight[i][minX]


    Oben verwendest du aber anstatt i, gGangfightID :D


    Schreibe das also mal so:


    GangfightZone[i] = GangZoneCreate(Gangfight[gGangfightID][minX],Gangfight[gGangfightID][minY],Gangfight[gGangfightID][maxX],Gangfight[gGangfightID][maxY]);


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Beitrag von Cheevy.Shakur ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Der Code wird 10 mal durchgegangen, weil ich MAX_GANGFIGHTS für die maxmiale Anzahl an Gangfight Gebieten zu 10 definiert habe.
    for(new i;i<MAX_GANGFIGHT;i++)
    {
    GangZoneShowForPlayer(playerid, GangfightZone[i], Gangfight[i][gZonecolor]);
    printf("Zone: %d ZoneColor: %d",GangfightZone[i], Gangfight[i][gZonecolor]);
    }
    Irgendwie wird mir aber kein Gebiet angezeigt, das gibts doch nicht..


    Log:

    Code
    [14:25:39] Zone: 0 ZoneColor: 53
    [14:25:39] Zone: 0 ZoneColor: 0
    [14:25:39] Zone: 0 ZoneColor: 0
    [14:25:39] Zone: 0 ZoneColor: 0
    [14:25:39] Zone: 0 ZoneColor: 0
    [14:25:39] Zone: 0 ZoneColor: 0
    [14:25:39] Zone: 0 ZoneColor: 0
    [14:25:39] Zone: 0 ZoneColor: 0
    [14:25:39] Zone: 0 ZoneColor: 0
    [14:25:39] Zone: 0 ZoneColor: 0
  • Hast du das auch unter OnPlayerSpawn?
    Anstatt die Farbe zu speichern kannst du dir auch eine Funktion erstellen, welche die Farbe ausgibt, die Farbe in MySQL zu speichern ergibt keinen Sinn.



    public OnPlayerSpawn(playerid)
    {
    for(new i;i<MAX_GANGFIGHT;i++)
    {
    GangZoneShowForPlayer(playerid, GangfightZone[i], GetZoneColor(Gangfight[i][gBesitzer]));
    }
    }



    stock GetZoneColor(faction)
    {
    if(faction == 1) return HIERFARBEINFÜGEN; // in RGBA, die IDS musste dann halt noch anpassen
    else if(faction == 2) return HIERFARBEINFÜGEN; // in RGBA
    else return 0;
    }

    2 Mal editiert, zuletzt von alva ()

  • Hier ist die MySQL-Log.

  • Also, der Code an sich, um die Zone anzuzeigen funktioniert ohne Probleme. Das heißt, es kann eigentlich nur sein, dass die Zone nicht angezeigt wird, weil der Code nicht ausgeführt wird.
    Hier der Test-Code:

    Spoiler anzeigen
    #include <a_samp>

    Spoiler anzeigen
    public OnFilterScriptInit()
    {
    a = GangZoneCreate(-2232.45,949.109,-2139.75,1039.84);
    return 1;
    }

    Spoiler anzeigen
    public OnPlayerSpawn(playerid)
    {
    GangZoneShowForPlayer(playerid, a, GetZoneColor(1));
    return 1;
    }

    Spoiler anzeigen
    stock GetZoneColor(faction)
    {
    if(faction == 1) return 0xA349A466;
    else if(faction == 2) return 0xFF7BFFFF;
    else return 0;
    }

    Kannst ja mal testen ob das bei dir tut, falls das andere noch immer nicht tut.



    Schreibe den Teil hier mal um:
    for(new i;i<MAX_GANGFIGHT;i++)
    {
    GangZoneShowForPlayer(playerid, GangfightZone[i], GetZoneColor(Gangfight[i][gBesitzer]));
    }

    zu:
    printf("Vor der Anzeige: %d", playerid);
    for(new i;i<MAX_GANGFIGHT;i++)
    {
    printf("Zone: %d | Besitzer: %d | Farbe: %d", GangfightZone[i], Gangfight[i][gBesitzer], GetZoneColor(Gangfight[i][gBesitzer]));
    GangZoneShowForPlayer(playerid, GangfightZone[i], GetZoneColor(Gangfight[i][gBesitzer]));
    }
    printf("Alle angezeigt");


    Die Zone ist irgendwo in San Fierro. Wenn du dich zu "-2232.45, 949.109, 100.0" teleportierst, dann bist du direkt dort.
    Poste dann, wenn du dich gespawnt hast, das was im Server Log steht (die prints).

  • So, bei deinem ersten Code wird mir die Zone angezeigt.
    Habe das ganze also mal geprintet, hier mal die Log.


    Der Code wird auch 10 mal durchgegangen, weil ich MAX_GANGFIGHT für maximal 10 Zonen definiert habe.
    new GangfightZone[MAX_GANGFIGHT];
    enum g_GangfightData
    {
    gID,
    Float:minX,
    Float:minY,
    Float:maxX,
    Float:maxY,
    gAngriff,
    gPunkteTeam1,
    gPunkteTeam2,
    gFlag1,
    gFlag2,
    gFlag3,
    gBesitzer
    }
    new Gangfight[MAX_GANGFIGHT][g_GangfightData];

  • Ahhh, na klar!
    new GangfightZone[MAX_GANGFIGHT];
    zu:
    new GangfightZone[MAX_GANGFIGHT] = {-1,...};


    Und:
    printf("Vor der Anzeige: %d", playerid);
    for(new i;i<MAX_GANGFIGHT;i++)
    {
    if(GangfightZone[i] == -1) continue;
    printf("Zone: %d | Besitzer: %d | Farbe: %d", GangfightZone[i], Gangfight[i][gBesitzer], GetZoneColor(Gangfight[i][gBesitzer]));
    GangZoneShowForPlayer(playerid, GangfightZone[i], GetZoneColor(Gangfight[i][gBesitzer]));
    }
    printf("Alle angezeigt");


    Dann geht's.

  • Danke dir, werde sicherlich noch einige Fragen und Probleme für das System, hier im Thread verfassen.
    Würdest du mir zufällig erklären, was genau diese Änderung bewirkt?
    //e:
    Weißt du warum die Zone als Rosa angezeigt wird? Fraktion 7 obwohl in der Datenbank als Besitzer 2 eingetragen ist?
    stock GetZoneColor(faction)
    {
    if(faction == 2) return 0x5A5A5AFF;
    else if(faction == 4) return 0x00BC00FF;
    else if(faction == 6) return 0xDCDCDCFF;
    else if(faction == 7) return 0xFF00FFFF;
    else if(faction == 8) return 0xFFBE00FF;
    else return 0;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen