ocmd:createfraktion(Kein Plan wie weiter)

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
  • Ich will ein Dynamic Faction System machen,ich bin nun soweit(Am Anfang :D )
    #define MAX_FRAKTIONEN 15
    enum FrakDaten
    {
    fID,
    fName[128],
    fRang1[30],
    fRang2[30],
    fRang3[30],
    fRang4[30],
    fRang5[30],
    fRang6[30],
    fSpawnX,
    fSpawnY,
    fSpawnZ,
    fSpawnI
    };
    new FDaten[MAX_FRAKTIONEN][FrakDaten];
    ocmd:createfraktion(playerid,params[])
    {
    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"M�glich ab: "COLO" Adminrank 6");
    if(sscanf(params,"s"))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/createfraktion [Fraktionsname]");

    return 1;
    }
    Ich wollte /createfraktion Fraktionsname
    und das er das dann in meiner Tabelle automatisch einspeichert mit fID usw. und beim fSpawn soll er das nehmen wo der Admin gerade steht.
    Aber wie?

  • MYSQL R5


    Ich habe dir hier mal angefangen, für das was du beschrieben hast.


    #define MAX_FRAKTIONEN 15
    enum FrakDaten
    {
    fName[128],
    fRang1[30],
    fRang2[30],
    fRang3[30],
    fRang4[30],
    fRang5[30],
    fRang6[30],
    Float:fSpawnX,
    Float:fSpawnY,
    Float:fSpawnZ,
    fSpawnI
    };
    new FDaten[MAX_FRAKTIONEN][FrakDaten];


    ocmd:createfraktion(playerid,params[])
    {
    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
    new input[128];
    if(sscanf(params,"s",input))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/createfraktion [Fraktionsname]");
    new i = GetFreeFrakID();
    if(i == -1) return SendClientMessage(playerid,Rot,"Es kann keine neue Fraktion erstellt werden. Maximum erreicht.");
    format(FDaten[i][fName], 128, input);
    GetPlayerPos(playerid, FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ]);
    FDaten[i][fSpawnI] = GetPlayerInterior(playerid);
    new query[256];
    format(query, sizeof(query), "INSERT INTO fraktionen (id, fname, fx, fy, fz, fi) VALUES ('%d', '%s', '%f', '%f', '%f', %d)",
    i, FDaten[i][fName], FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ], FDaten[i][fSpawnI]);
    mysql_query(query);
    return 1;
    }
    Hier darf AUTO_INCREMENT für die Spalte id nicht (!) verwendet werden, allerdings muss id den UNIQUE Key haben.


    Außerdem brauchst du natürlich:
    stock GetFreeFrakID()
    {
    for(new i=0; i<MAX_FRAKTIONEN; i++)
    {
    if(!strlen(FDaten[i][fName])) return i;
    }
    return -1;
    }


    Edit [PeL]Smiley: Habe die Tags hinzugefügt. Die SpielerInfo Variable musst du natürlich zu dem ändern wie es bei dir ist.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Danke erstmal für deine Hilfe:
    GetPlayerPos(playerid,FDaten[i][fSpawnX],FDaten[i][fSpawnY],FDaten[i][fSpawnZ]);


    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(112) : error 017: undefined symbol "SpielerInfo"
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(118) : warning 213: tag mismatch
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(118) : warning 213: tag mismatch
    C:\Users\kevin\Desktop\server\gamemodes\selfneu.pwn(118) : warning 213: tag mismatch
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");




  • Hier


    #define MAX_FRAKTIONEN 15
    enum FrakDaten
    {
    fName[128],
    fRang1[30],
    fRang2[30],
    fRang3[30],
    fRang4[30],
    fRang5[30],
    fRang6[30],
    Float:fSpawnX,
    Float:fSpawnY,
    Float:fSpawnZ,
    fSpawnI,
    };
    new FDaten[MAX_FRAKTIONEN][FrakDaten];

    RFT



  • Probier es mal so :


    ocmd:createfraktion(playerid,params[])
    {
    if(FDaten[playerid][pAdminlevel] < 6){
    new input[128];
    if(sscanf(params,"s",input))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/createfraktion [Fraktionsname]");
    new i = GetFreeFrakID();
    if(i == -1) return SendClientMessage(playerid,Rot,"Es kann keine neue Fraktion erstellt werden. Maximum erreicht.");
    format(FDaten[i][fName], 128, input);
    GetPlayerPos(playerid, FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ]);
    FDaten[i][fSpawnI] = GetPlayerInterior(playerid);
    new query[256];
    format(query, sizeof(query), "INSERT INTO fraktionen (id, fname, fx, fy, fz, fi) VALUES ('%d', '%s', '%f', '%f', '%f', %d)",
    i, FDaten[i][fName], FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ], FDaten[i][fSpawnI]);
    mysql_query(query);
    else return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
    return 1;
    }


    Achso und Hier :


    enum FrakDaten
    {
    fName[128],
    fRang1[30],
    fRang2[30],
    fRang3[30],
    fRang4[30],
    fRang5[30],
    fRang6[30],
    Float:fSpawnX,
    Float:fSpawnY,
    Float:fSpawnZ,
    fSpawnI,
    [color=#ff0000]pAdminlevel[/color]//Hier pAdminlevel auch noch definieren
    };
    new FDaten[MAX_FRAKTIONEN][FrakDaten];



    //Edit Fehler behoben im Code & Noch etwas hinzugefügt ++

  • Büttii<3:
    Das ist falsch. FDaten haben nichts mit dem Spieler oder dem Admin Level zu tun.


    [PeL]Smiley:
    Ich habe die Tags im enum hinzugefügt.
    Die SpielerInfo Variable musst du mit dem ersetzen, wie das Admin Level bei dir ist. Ich weiß ja nicht, wie das bei dir heißt, ich habe es einfach nur von deinem Post übernommen.


    Sry mein Fehler :wacko:


    [PeL]Smiley dann musst du dein Adminlevel halt Definieren


    /*Spielerdateien*/
    enum sInfo
    {
    pAdminlevel,
    };
    new SpielerInfo[MAX_PLAYERS][sInfo];


    mfg Bütti

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • [16:47:17] >> mysql_query( Connection handle: 1 )


    [16:47:17] CMySQLHandler::Query(INSERT INTO fraktionen (id, fname, fx, fy, fz, fi) VALUES ('0', 'test', '2488.543457', '-1460.062622', '24.018003', 0)) - An error has occured. (Error ID: 1054, Unknown column 'id' in 'field list')


    [16:47:17] OnQueryError() - Called.

  • Und wie mache ich jetzt das hier?:
    ocmd:delfraktion(playerid,params[])
    {
    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
    new input[128];
    if(sscanf(params,"s",input))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/createfraktion [Fraktionsname]");
    new i = GetFreeFrakID();
    format(FDaten[i][fName], 128, input);
    new query[256];
    format(query,sizeof(query),"DELETE FROM 'fraktionen (id,fname,fx,fy,fz,fi) VALUES )'%d', '%s', '%f', '%f', '%f', %d)",
    i,FDaten[i][fName], FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ], FDaten[i][fSpawnI]);
    mysql_query(query);
    return 1;
    }

  • format(query,sizeof(query),"DELETE FROM 'fraktionen (id,fname,fx,fy,fz,fi) VALUES ('%d', '%s', '%f', '%f', '%f', %d)",
    i,FDaten[i][fName], FDaten[i][fSpawnX], FDaten[i][fSpawnY], FDaten[i][fSpawnZ], FDaten[i][fSpawnI]);


    VALUES ) ??? :DDD


    VALUES (


    'fraktionen ist auch falsch
    `fraktionen` muss es heißen


    davon abgesehen funktioniert das anders


    fomat(query, sizeof(query), "DELETE FROM `fraktionen` WHERE `id` = '%d'", i);

  • Habe jetzt soangefangen:
    ocmd:makeleader(playerid,params[])
    {
    new pID,string[128];
    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
    if(sscanf(params,"us",pID))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/makeleader [playerid][Fraktionsname]");
    format(string,sizeof(string),""servertag" %s hat %s zum Leader gemacht!",GetName(playerid),GetName(pID));
    new query[256];
    format(query,sizeof(query),"INSERT INTO fraktionen (Leader) VALUES ('%s')",GetName(pID));
    return 1;
    }
    Kommen keine Errors,aber es funktioniert auch nicht

  • Hast du denn schon einen Befehl bzw. eine Möglichkeit mit dem man einer Fraktion beitreten kann?
    Wenn nein, dann solltest du erst das machen, da du dies als Grundlage brauchst, du kannst ja erst zum Leader einer Fraktion werden, wenn du in einer Fraktion bist.


    Außerdem:
    INSERT INTO erstellt eine neue Zeile in der Datenbank, das machst du NUR beim erstellen der Fraktion.
    Du musst hier UPDATE nutzen.