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
  • Geh so vor wie du es denkst, du weißt schon mal wie der Befehl funktioniert, jetzt schau dir die Hilfe von Jeffry genau an dann weißt du auch wie die Befehle gehen.
    Wenn wir dir alles vorschreiben lernst du daraus überhaupt nichts und frägst das dann immer und immer wieder. Schau dir am besten mal die PAWN Grundlagen an,
    die SQL Grundlagen u.v.m. es scheint mir so als ob du nicht verstehst wie das ganze funktioniert.


    SELECT * FROM `Tabelle`
    zum auslesen


    UPDATE `Tabelle` SET `Spalte` = 'Neue Value'
    um ein eintrag neu zu setzen


    INSERT INTO `Tabelle` (`Spalte`, `Spalte`...) VALUES ('Eintrag', 'Eintrag' ..)
    um eine neue Zeile in der DB zu machen


    DELETE FROM `Tabelle` WHERE `Spalte` = 'Value'
    Löscht eine Zeile


    Lg

  • Ich habe mein invite Befehl bis jetzt so: aber wie ich weiter vorankomme keine ahnung
    ocmd:invite(playerid,params[])
    {
    if(SpielerInfo[playerid][pLeader] == 0)return SendClientMessage(playerid,Rot,"Du bist kein Leader!");
    new pID,string[128];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/invite [playerid]");
    if(pID == playerid)return SendClientMessage(playerid,Rot,"Du kannst dich nicht selbst inviten!");
    if(pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,Rot,"Keiner mit dieser ID Online!");
    if(SpielerInfo[pID][pFraktion] !=0)return SendClientMessage(playerid,Rot,"Spieler ist bereits in einer Fraktion!");

    return 1;
    }

  • Das ist nichts vom Invite befehl das sind einfach nur kleine Abfragen.
    Denk nach, ich glaube das kannst du.


    Schau dir am besten mal ein GF an oder die allgemeinen Grundlagen.
    Es bringt nichts wenn du nicht verstehst was man dir schreibt.


    Schau dir den Befehl im GF an und arbeite dich vorran.

  • Ist das richtig so?
    ocmd:makeleader(playerid,params[])
    {
    new pID,string[128];
    new i = GetFreeFrakID();
    new fname = FDaten[i][fName];
    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
    if(sscanf(params,"us",pID,fname))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));
    SendClientMessageToAll(Rot,string);
    new query[256];
    format(query,sizeof(query),"UPDATE `spieler` SET `Fraktion``Leader` VALUES ('%s')",fname,fname);
    mysql_query(query);
    return 1;
    }
    ocmd:invite(playerid,params[])
    {
    if(SpielerInfo[playerid][pLeader] == 0)return SendClientMessage(playerid,Rot,"Du bist kein Leader!");
    new pID,string[128];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/invite [playerid]");
    if(pID == playerid)return SendClientMessage(playerid,Rot,"Du kannst dich nicht selbst inviten!");
    if(pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,Rot,"Keiner mit dieser ID Online!");
    if(SpielerInfo[pID][pFraktion] !=0)return SendClientMessage(playerid,Rot,"Spieler ist bereits in einer Fraktion!");
    new i = GetFreeFrakID();
    new fID = FDaten[i][fName];
    format(string,sizeof(string),"Du wurdest zur Fraktion %s invited!\n Bestätige oder brech es ab!",fID);
    ShowPlayerDialog(pID,DIALOG_INVITE,DIALOG_STYLE_MSGBOX,"Fraktions Invite",string,"Annehmen","Abbrechen");
    SetPVarInt(pID,"inv_fraktid",FDaten[i][fName]);
    SetPVarInt(playerid,"inv_inviter",playerid);
    return 1;
    }


    Makeleader befehl funktioniert nicht. wird nicht in der Tabelle Spieler gespeichert bzw. geändert.
    if(dialogid == DIALOG_INVITE)
    {
    if(response)
    {

    new query[256];
    new i = GetFreeFrakID();
    format(query, sizeof(query), "UPDATE spieler (Fraktion) VALUES ('%s')",FDaten[i][fName]);
    mysql_query(query);
    SendClientMessage(playerid,Rot,"Du hast die Einladung angenommen!");
    SetPlayerPos(playerid,FDaten[i][fSpawnX],FDaten[i][fSpawnY],FDaten[i][fSpawnZ]);
    SetPlayerInterior(playerid,FDaten[i][fSpawnI]);
    SetPVarInt(playerid,"inv_fraktid",0);
    }
    else
    {
    SendClientMessage(playerid,Rot,"Einladung abgebrochen!");
    SetPVarInt(playerid,"inv_fraktid",0);
    }
    }

  • Im Prinzip so:
    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,fname))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));
    SendClientMessageToAll(Rot,string);
    //Hier musst du dann noch das Level des Spielers setzen etc...
    new query[256];
    format(query,sizeof(query),"UPDATE fraktionen SET `Leader` = '%s' WHERE fname = '%s'",GetName(pID),fname);
    mysql_query(query);
    return 1;
    }
    ocmd:invite(playerid,params[])
    {
    if(SpielerInfo[playerid][pLeader] == 0)return SendClientMessage(playerid,Rot,"Du bist kein Leader!");
    new pID,string[128];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,Rot,""COLO"Verwendung: "COLR"/invite [playerid]");
    if(pID == playerid)return SendClientMessage(playerid,Rot,"Du kannst dich nicht selbst inviten!");
    if(pID == INVALID_PLAYER_ID)return SendClientMessage(playerid,Rot,"Keiner mit dieser ID Online!");
    if(SpielerInfo[pID][pFraktion] !=0)return SendClientMessage(playerid,Rot,"Spieler ist bereits in einer Fraktion!");
    new fID = SpielerInfo[playerid][pFraktion];
    format(string,sizeof(string),"Du wurdest zur Fraktion %s invited!\n Bestätige oder brech es ab!",FDaten[fID][fName]);
    ShowPlayerDialog(pID,DIALOG_INVITE,DIALOG_STYLE_MSGBOX,"Fraktions Invite",string,"Annehmen","Abbrechen");
    SetPVarInt(pID,"inv_fraktid",fID);
    SetPVarInt(pID,"inv_inviter",playerid);
    return 1;
    }


    if(dialogid == DIALOG_INVITE)
    {
    if(response)
    {
    new query[256];
    new i = GetPVarInt(playerid, "inv_fraktid");
    format(query, sizeof(query), "UPDATE spieler SET fraktion = '%d' WHERE name = '%s'",i, GetName(playerid));
    mysql_query(query);
    SendClientMessage(playerid,Rot,"Du hast die Einladung angenommen!");
    SetPlayerPos(playerid,FDaten[i][fSpawnX],FDaten[i][fSpawnY],FDaten[i][fSpawnZ]);
    SetPlayerInterior(playerid,FDaten[i][fSpawnI]);
    SetPVarInt(playerid,"inv_fraktid",0);
    }
    else
    {
    SendClientMessage(playerid,Rot,"Einladung abgebrochen!");
    SetPVarInt(playerid,"inv_fraktid",0);
    }
    }
    Die Variablen bzw die SQL Daten musst du ggf anpassen.


    Übrigens, wenn du schon mit MySQL arbeitest, dann solltest du dich über die Syntax informieren und nicht einfach nur etwas hinschreiben was keinen Sinn gibt.
    Da kann ich dir w3schools empfehlen: http://www.w3schools.com/sql/default.asp
    Arbeite das mal durch.

  • Da hattest sehr viele Variablen durcheinander gebracht, das war einer der beiden Fehler, allerdings hat der sich über so ziemlich den ganzen Code gezogen.
    Schau dir am besten meine und deine Version nebeneinander an und vergleiche sie, dann siehst du die genauen Unterschiede.


    Außerdem waren die SQL Queries falsch. Dazu habe ich dir ja denk Link gegeben, damit du die richtige Syntax dir mal anschaust und damit üben kannst.

  • Code:
    ocmd:makeleader(playerid,params[])
    {
    new pID,fname,string[128];
    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
    if(sscanf(params,"us",pID,fname))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));
    SendClientMessageToAll(Rot,string);
    SpielerInfo[pID][pLeader] = fname;
    SpielerInfo[pID][pFraktion] = fname;
    SpielerInfo[pID][pRank] = 6;
    new query[256];
    format(query,sizeof(query),"UPDATE spieler SET `Leader` = '%s' WHERE fname = '%s'",GetName(pID),fname);
    mysql_query(query);
    return 1;
    }


    [18:40:19] >> mysql_query( Connection handle: 1 )


    [18:40:19] CMySQLHandler::Query(UPDATE spieler SET `Leader` = '' WHERE fname = 'LSPD') - An error has occured. (Error ID: 1054, Unknown column 'fname' in 'where clause')


    [18:40:19] OnQueryError() - Called.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Dann musst du natürlich Das query anpassen, auf WHERE Name =... Und dann mit dem Spielername oder der ID in der Datenbank. Ich weiß ja nicht wie deine Datenbank aufgebaut ist, das musst du schon selbst wissen.


    Dann kannst du mit Leader und Rang auch als Integer arbeiten.

  • In deiner Spieler Tabelle eine Spalte Leader anlegen, mit dem Datentyp INT.
    Im query nutzt du dann %d anstatt %s.


    Probiere es doch einfach mal aus, dein Rechner wird schon nicht explodieren. Wenn es nicht klappt, dann poste den Code und den Log.

  • Irgendwie verstehe ich den ganzen makeleader befehl nicht wie ich den zusammenbauen soll....
    kannst du mir nicht irgendwie helfen?
    ocmd:makeleader(playerid,params[])
    {
    new pID,string[128];
    new fname = GetFreeFrakID();
    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
    if(sscanf(params,"us",pID,fname))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));
    SendClientMessageToAll(Rot,string);
    SpielerInfo[pID][pFraktion] = fname;
    SpielerInfo[pID][pRank] = 6;
    new query[256];
    format(query,sizeof(query),"UPDATE spieler SET `Leader` = '%s'",fname);
    mysql_query(query);
    return 1;
    }

  • Verstehst du überhaupt nichts vom Scripten?
    Du frägst in fast jedem Post "Kannst du mir helfen?" das ist nicht mehr Helfen das ist die Arbeit für dich machen.



    SpielerInfo[pID][pFraktion] = fname; // Setzt die Fraktion
    SpielerInfo[pID][pRank] = 6; // Setzt den "maximalen" Rank was der Leader hat


    Scripten ist kein Kindergeburtstag, Scripten ist und bleibt Arbeit und Scripten zulernen ist wie eine fremdsprache zu lernen.


    Lg


    PS: Nimm es mir nicht übel, aber so wirkt es langsam auf mich.

  • Ich will die Codes nicht vorgesetzt bekommen,ich will es selber schaffen,allerdings weiß ich nicht,wie ich
    den makeleader befehl mache,dass ich /makeleader 1 LSPD eingebe das dem Player dann die Fraktion LSPD zugeteilt wird zum Leader.
    LSPD ist gespeichert in der Datenbank aber danach weiß ich auch nicht,wie ich abfragen kann ob jemand in der Fraktion ist.

  • ocmd:makeleader(playerid,params[])
    {
    new pID,string[128],query[128];
    new fname = GetFreeFrakID();
    if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"Möglich ab: "COLO" Adminrank 6");
    if(sscanf(params,"us",pID,fname))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));
    SendClientMessageToAll(Rot,string);

    if(strcmp(fname, "LSPD",true) == 0) {
    SpielerInfo[pID][pFraktion] = 1; // Würde ich mit ID's machen?
    SpielerInfo[pID][pRank] = 6;
    } else if(strcmp(fname, "FBI",true) == 0) {
    SpielerInfo[pID][pFraktion] = 2; // Würde ich mit ID's machen?
    SpielerInfo[pID][pRank] = 6;
    }


    format(query,sizeof(query),"UPDATE spieler SET `Leader` = '%s'", fname);
    mysql_query(query);
    return 1;
    }



    mit strcmp kannst du prüfen ob das eingegebene das in den "" ist.

  • Und was genau soll dir erklärt werden? Du hast ja nicht mal eine Frage.
    Die Frage ist, wie mache ich einen /makeleader Befehl, aber das kann dir niemand erklären, weil du das noch weniger verstehen wirst, wie wenn man dir den Code gibt.


    Ich fasse mal zusammen was du brauchst:

    • Schleife durch alle Fraktionen um die ID über den Name herauszufinden
    • Spielervariable Leader wird auf die ID der Fraktion gesetzt
    • In der Datenbank wird das Feld Leader als Integer angelegt und beschrieben.


    Schau mal ob du damit was hinbekommst.