Rangsystem

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
  • if(IsPlayerInFrac(playerid,10))//Triaden
    {
    if(pInfo[playerid][pRank] == 1){ format(string, sizeof(string), " Pucong %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 2){ format(string, sizeof(string), " Shicong %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 3){ format(string, sizeof(string), " Xinren %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 4){ format(string, sizeof(string), " Yuan %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 5){ format(string, sizeof(string), " Xioang %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 6){ format(string, sizeof(string), " Zhanshi %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 7){ format(string, sizeof(string), " Guanjun %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 8){ format(string, sizeof(string), " Nanshi %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 9){ format(string, sizeof(string), " Xiangzhu %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 10){ format(string, sizeof(string), " Fushanzuh %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 11){ format(string, sizeof(string), " Shanzhu %s: %s", sendername, result); }
    else
    {
    format(string, sizeof(string), "Teamchat: %s: %s", sendername, result);
    }
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(IsPlayerConnected(i) && (pInfo[i][pLeader] == 10 || pInfo[i][pMember] == 10))
    {
    SendClientMessage(i,HELLBLAU,string);
    }
    }
    printf("%s", string);
    return 1;
    }


    Guten Tag.


    Ich habe eine frage wie kann ich einen Spieler Co-Leader rechte geben sprich ./invite ./uninvite wen der Leader den Spieler Rang 10 Setzt sollte er genauso die rechte haben wie der Leader. (Nur er kann den Leader halt nicht uninviten^^)

  • Du erstellst einfach eine neue Variable (z.B. "CoLeader") und setzt diese dann für den gewissen Spieler auf 1. Nun kannst du abfragen, ob der Spieler CoLeader Rechte (wenn die Variable auf 1 steht) hat. ;)

  • @DerFarmer:
    if(IsPlayerInFrac(playerid,10))//Triaden
    {
    if(pInfo[playerid][pRank] == 1){ format(string, sizeof(string), " Pucong %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 2){ format(string, sizeof(string), " Shicong %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 3){ format(string, sizeof(string), " Xinren %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 4){ format(string, sizeof(string), " Yuan %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 5){ format(string, sizeof(string), " Xioang %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 6){ format(string, sizeof(string), " Zhanshi %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 7){ format(string, sizeof(string), " Guanjun %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 8){ format(string, sizeof(string), " Nanshi %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 9){ format(string, sizeof(string), " Xiangzhu %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 10){ format(string, sizeof(string), " Fushanzuh %s: %s", sendername, result); }
    else if(pInfo[playerid][pRank] == 11){ format(string, sizeof(string), " Shanzhu %s: %s", sendername, result); }
    else
    {
    format(string, sizeof(string), "Teamchat: %s: %s", sendername, result);
    }
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(IsPlayerConnected(i) && (pInfo[i][pLeader] == 10 || pInfo[i][pMember] == 10))
    {
    SendClientMessage(i,HELLBLAU,string);
    }
    }
    printf("%s", string);
    pInfo[playerid][pCoLeader] = 1;//pCoLeader zum Enum hinzufügen
    return 1;
    }
    Jetzt kannst du mit pCoLeader immer abfragen ob er CoLeader Rechte hat.

  • Du fragst einfach bei /invite und /uninvite und etlichen anderen Leaderbefehlen ab, ob der Spieler Rang 10 oder Rang 11 hat. Sollte der Spieler Rang 10 haben, kann er den Befehl mit ausführen.


    if(pInfo[playerid][pRank] < pInfo[pID][pRank])return SendClientMessage(playerid, FARBE, "Du kannst keinen Ranghöheren uninviten!");
    Ein Beispiel, somit kann der Spieler, welcher /uninvite eingegeben hat, keinen rausschmeißen der einen größeren Rang hat wie er.


    Grüße


    //edit


    @Mencent


    Er kann es auch einfach über den Rang laufen lassen, dann braucht er nicht zwingend eine neue Variable.

  • DerFamer ich zeige dir mal wie mein Fraktions-System aussieht vielleicht fällte es dir dann so etwas leicher:


    Enum:
    enum frakteEnum{


    f_name[300],
    Float:f_x,
    Float:f_y,
    Float:f_z,
    Float:f_r,
    f_inter,
    f_world,
    f_color
    }


    new fInfo[][frakteEnum] ={
    {"Zivilist",329.0244,-1513.3033,36.0391,225.8344,0,0,weiß},//Zivilist 0
    {"SAPD",213.4162,162.7460,1003.0234,274.4569,3,1,blau},//SAPD 1
    {"SWAT",2731.5903,-2450.0164,17.5937,272.4424,0,0,helblau},//SWAT2
    {"FBI",2286.9651,2431.6011,10.8203,176.4887,0,0,duneklhelblau},//FBI3
    {"ARMY",214.2768,1822.5925,6.4141,265.0869,0,0,hellgrün},//ARMY4
    {"Medic/Feuerwehr",302.9467,-1505.8025,24.6007,231.6743,0,0,rot},//MEDIC5
    {"Fahrschule",2124.3032,-2273.0491,20.6719,221.7338,0,0,orange},//Fahrschule6
    {"Aztecas",2788.4141,-1944.7075,13.5469,87.2128,0,0,türkis},//AZTECAS7
    {"Vagos",204.6566,39.7421,2.5781,260.2514,0,0,gelb},//Vagos8
    {"Ballas",1084.8976,-1226.7927,15.8203,269.7700,0,0,pink},//Ballas9
    {"Yakuza",-2188.6282,-2265.0452,30.6250,71.4091,0,0,grau}//Yakuza10
    };
    /*
    LSPD2
    SWAT3
    FBI 4
    ARMY 5
    Medic/Feuerwehr 6
    Fahrschule 7
    Aztecas 8
    Vagos 9
    Ballas 10
    Yakuza 11
    */


    isPlayerInFrakt(playerid,f_id){
    if(sInfo[playerid][fraktion]==f_id)return 1;
    return 0;
    }


    Public:
    public OnPlayerSpawn(playerid)
    {
    if(IsPlayerNPC(playerid)) return 1;
    if(!isPlayerInFrakt(playerid,0))
    {
    if(sInfo[playerid][spawnchange]==1)
    {



    new fID;
    fID= sInfo[playerid][fraktion];
    SetPlayerPos(playerid,fInfo[fID][f_x],fInfo[fID][f_y],fInfo[fID][f_z]);
    SetPlayerFacingAngle(playerid,fInfo[fID][f_r]);
    SetPlayerInterior(playerid,fInfo[fID][f_inter]);
    SetPlayerVirtualWorld(playerid,fInfo[fID][f_world]);
    SetPlayerColor(playerid,fInfo[fID][f_color]);
    }
    }
    SendClientMessage(playerid,rot,"/hilfe um die Befehle zu sehen!");
    return 1;
    }


    Befehle die nur als Fraktionsmitglied funktionieren:


    ocmd:fraktionshilfe(playerid,params[])
    {
    if(isPlayerInFrakt(playerid,0))return SendClientMessage(playerid,rot,"Du bist in keiner Fraktion");
    SendClientMessage(playerid,grün,"/fc");
    SendClientMessage(playerid,rot,"/einladen");
    SendClientMessage(playerid,grün,"/annehmen");
    SendClientMessage(playerid,rot,"/spawnchange");
    SendClientMessage(playerid,grün,"/einladen");
    return 1;
    }


    ocmd:fc(playerid,params[])
    {
    if(isPlayerInFrakt(playerid, 0))return SendClientMessage(
    playerid, rot, "Du bist in keiner Fraktion.");
    new string[128];
    if(sscanf(params, "s[128]", string))return SendClientMessage(
    playerid, rot, "INFO: /f [nachricht]");
    new fID = sInfo[playerid][fraktion];
    format(string,sizeof(string), "**(( %s: %s ))**", getPlayerName(playerid), string);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    if(!isPlayerInFrakt(i, fID))continue;
    SendClientMessage(i, helblau, string);
    }
    return 1;
    }
    ocmd:einladen(playerid,params[])
    {
    if(isPlayerInFrakt(playerid, 0))return SendClientMessage(
    playerid, helblau, "Du bist in keiner Fraktion.");
    if(sInfo[playerid][rang] < 6)return SendClientMessage(
    playerid, helblau, "Dein Rang ist zu niedrig.");
    new pID, fID;
    fID = sInfo[playerid][fraktion];
    if(sscanf(params, "u", pID))return SendClientMessage(
    playerid, gelb, "INFO: /invite [playerid]");
    if(!isPlayerInFrakt(pID, 0))return SendClientMessage(
    playerid, gelb, "Spieler ist kein Zivilist.");
    new string[128];
    format(string,sizeof(string), "%s hat dich in die Fraktion %s eingeladen.",
    getPlayerName(playerid), fInfo[fID][f_name]);
    SendClientMessage(pID, gelb, string);
    SendClientMessage(pID, gelb,
    "Zum akzeptieren /accept invite eingeben.");
    SetPVarInt(pID, "inv_fraktid", fID);
    SetPVarInt(pID, "inv_inviter", playerid);
    return 1;
    }
    ocmd:annehmen(playerid, params[])
    {
    new item[64];
    if(sscanf(params,"s[64]",item))return SendClientMessage(
    playerid, gelb, "INFO: /accept [invite]");
    if(!strcmp(item, "invite", false))
    {
    if(GetPVarInt(playerid, "inv_fraktid") == 0)return SendClientMessage(
    playerid, grün, "Du wurdest in keine Fraktion eingeladen.");
    new fID = GetPVarInt(playerid, "inv_fraktid");
    sInfo[playerid][fraktion] = fID;
    sInfo[playerid][rang] = 1;
    new string[128];
    format(string,sizeof(string), "Du bist der Fraktion %s beigetreten.",
    fInfo[fID][f_name]);
    SendClientMessage(playerid, grün, string);
    format(string,sizeof(string), "%s ist der Fraktion beigetreten.",
    getPlayerName(playerid));
    SendClientMessage(GetPVarInt(playerid, "inv_inviter"), grün,
    string);
    SetPVarInt(playerid, "inv_fraktid", 0);
    return 1;
    }
    return 1;
    }
    ocmd:spawnchange(playerid,params[])
    {
    if(isPlayerInFrakt(playerid,0)) return SendClientMessage(playerid,rot,"Du bist in keiner Fraktion.");
    if(sInfo[playerid][spawnchange] == 0)
    {
    sInfo[playerid][spawnchange] = 1;
    }
    else
    {
    sInfo[playerid][spawnchange] = 0;
    }
    savePlayer(playerid);
    SendClientMessage(playerid,grün,"Spawn geändert");
    return 1;
    }


    So sieht bis jetzt mein Fraktion-System aus.

  • ocmd:invite(playerid, params[])
    {
    if(!pInfo[playerid][pLeader]) return SendClientMessage(playerid,WEIß,"Du bist kein Leader!");
    if(pInfo[playerid][pRank] < pInfo[pID][pRank])return SendClientMessage(playerid, WEIß, "Du kannst keinen Ranghöheren uninviten!"); //Einmal Hier
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,WEIß,"{FFD200}Benutzung:{FEFEFE} /invite [spielerid]");
    new str[128], name[MAX_PLAYER_NAME], pname[MAX_PLAYER_NAME];
    GetPlayerName(pID, name, MAX_PLAYER_NAME),GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    format(str, 128,"Du wurdest von %s in die Fraktion %s invitet!",pname,fraktname);
    SendClientMessage(pID,WEIß,str);
    format(str, 128,"Du hast %s in deine Fraktion invitet er muss noch Annehmen / Ablehnen!!",name);
    SendClientMessage(playerid,WEIß,str);
    Eingeladen[pID] = pInfo[playerid][pLeader];
    SendClientMessage(pID,GRÜN,"{31FF00} Möchtest du dieser Fraktion beitreten?");
    ShowPlayerDialog(pID,DIALOG_INVITE,DIALOG_STYLE_MSGBOX,"{E1FF00}Invite{FEFEFE}","Du wurdest in einer Fraktion eingeladen?\n\nMöchtest du dieser Fraktion beitreten","Annehmen","Ablehnen");
    return 1;
    }


    ocmd:uninvite(playerid, params[])
    {
    new str[128], name[24], pname[24];
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,WEIß,"{FFD200}Benutzung:{FEFEFE} /uninvite [spielerid]");
    if(pInfo[playerid][pLeader] == 0) return SendClientMessage(playerid,WEIß,"Du bist kein Leader !");
    if(pInfo[playerid][pRank] < pInfo[pID][pRank])return SendClientMessage(playerid, WEIß, "Du kannst keinen Ranghöheren uninviten!"); //Einmal Hier
    if (pInfo[pID][pMember] > 0 && pInfo[pID][pMember] == pInfo[playerid][pLeader])
    GetPlayerName(pID, name, 24);
    GetPlayerName(playerid, pname, 24);
    format(str, 128,"Du wurdest von %s aus der Fraktion geworfen!",pname);
    SendClientMessage(pID,WEIß,str);
    format(str, 128,"Du hast %s aus der Fraktion geworfen!!",name);
    SendClientMessage(playerid,WEIß,str);
    pInfo[pID][pMember] = pInfo[playerid][pLeader];
    pInfo[pID][pRank] = 0;
    pInfo[pID][pMember] = 0;
    pInfo[pID][pFaction] = 0;
    SpawnPlayer(pID);
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Bei /invite brauchst du das nicht, wenn einer Rang höher ist, ist diese ja bereits in die Fraktion.


    if(!pInfo[playerid][pLeader] && pInfo[playerid][pRang] < 10) return SendClientMessage(playerid,WEIß,"Du bist kein Leader! oder Co.Leader");


    Schreibe dies mal so, dann kann auch der Coleader inviten


    ocmd:invite(playerid, params[])
    {
    if(!pInfo[playerid][pLeader] && pInfo[playerid][pRang] < 10) return SendClientMessage(playerid,WEIß,"Du bist kein Leader! oder Co.Leader");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,WEIß,"{FFD200}Benutzung:{FEFEFE} /invite [spielerid]");
    new str[128], name[MAX_PLAYER_NAME], pname[MAX_PLAYER_NAME];
    GetPlayerName(pID, name, MAX_PLAYER_NAME),GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
    format(str, 128,"Du wurdest von %s in die Fraktion %s invitet!",pname,fraktname);
    SendClientMessage(pID,WEIß,str);
    format(str, 128,"Du hast %s in deine Fraktion invitet er muss noch Annehmen / Ablehnen!!",name);
    SendClientMessage(playerid,WEIß,str);
    Eingeladen[pID] = pInfo[playerid][pLeader];
    SendClientMessage(pID,GRÜN,"{31FF00} Möchtest du dieser Fraktion beitreten?");
    ShowPlayerDialog(pID,DIALOG_INVITE,DIALOG_STYLE_MSGBOX,"{E1FF00}Invite{FEFEFE}","Du wurdest in einer Fraktion eingeladen?\n\nMöchtest du dieser Fraktion beitreten","Annehmen","Ablehnen");
    return 1;
    }


    Hier auch so:


    if(pInfo[playerid][pLeader] == 0 && pInfo[playerid][pRang] < 10) return SendClientMessage(playerid,WEIß,"Du bist kein Leader oder Co.Leader!");

    ocmd:uninvite(playerid, params[])
    {
    new str[128], name[24], pname[24];
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,WEIß,"{FFD200}Benutzung:{FEFEFE} /uninvite [spielerid]");
    if(pInfo[playerid][pLeader] == 0 && pInfo[playerid][pRang] <
    10) return SendClientMessage(playerid,WEIß,"Du bist kein Leader oder
    Co.Leader!");
    if(pInfo[playerid][pRank] < pInfo[pID][pRank])return SendClientMessage(playerid, WEIß, "Du kannst keinen Ranghöheren uninviten!"); //Einmal Hier
    if (pInfo[pID][pMember] > 0 && pInfo[pID][pMember] == pInfo[playerid][pLeader])
    GetPlayerName(pID, name, 24);
    GetPlayerName(playerid, pname, 24);
    format(str, 128,"Du wurdest von %s aus der Fraktion geworfen!",pname);
    SendClientMessage(pID,WEIß,str);
    format(str, 128,"Du hast %s aus der Fraktion geworfen!!",name);
    SendClientMessage(playerid,WEIß,str);
    pInfo[pID][pMember] = pInfo[playerid][pLeader];
    pInfo[pID][pRank] = 0;
    pInfo[pID][pMember] = 0;
    pInfo[pID][pFaction] = 0;
    SpawnPlayer(pID);
    return 1;
    }

  • Ja genau, so sparst du dir das Ersteller einer weiteren Spielervariablen.
    Zur Erklärung:




    if(!pInfo[playerid][pLeader] && pInfo[playerid][pRang] < 10)


    Das heißt soviel wie: Sollte der Spieler kein Leader einer Fraktion sein oder sein Fraktionsrang ist kleiner als 10, sokann dieser den Befehl nicht durchführen und bekommt die Error Meldung.


    Ich hoffe ich konnte dir helfen.

  • Lege dir mal ein Beispiel vor:


    ocmd:online(playerid, params[])
    {
    #pragma unused params

    new count = 1, string[2048];
    if(pInfo[playerid][pFraktion] > 0)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && pInfo[i][pFraktion] > 0 && !IsPlayerNPC(i) && i != INVALID_PLAYER_ID)
    {
    format(string, sizeof(string), "{FFFFFF}Name: {FF5C00}%s {FFFFFF}\n %s", SpielerName(i), string);
    count ++;
    }
    }
    if(count != 1)
    {
    ShowPlayerDialog(playerid, DIALOG_SONSTIGES, DIALOG_STYLE_MSGBOX, "Onlineliste", string, "Abbrechen", "");
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_SONSTIGES, DIALOG_STYLE_MSGBOX, "Onlineliste", "{FFFFFF}Kein Mitglied online!", "Abbrechen", "");
    return 1;
    }
    }
    return 1;
    }


    Musst es halt auf dich anpassen.

  • ocmd:online(playerid, params[])
    {
    #pragma unused params


    new count = 1, string[2048];
    if(pInfo[playerid][pFaction] > 0)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && pInfo[i][pFaction] > 0 && !IsPlayerNPC(i) && i != INVALID_PLAYER_ID)
    {
    format(string, sizeof(string), "{FFFFFF}Name: {FF5C00}%s {FFFFFF}\n %s", spielername(i), string);
    count ++;
    }
    }
    if(count != 1)
    {
    ShowPlayerDialog(playerid, DIALOG_SONSTIGES, DIALOG_STYLE_MSGBOX, "Onlineliste", string, "Abbrechen", "");
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_SONSTIGES, DIALOG_STYLE_MSGBOX, "Onlineliste", "{FFFFFF}Kein Mitglied online!", "Abbrechen", "");
    return 1;
    }
    }
    return 1;
    }


    Klappt hab alles angepasst. nun ist die frage wie ich mache Name: und daneben Rang: 11 z.b

  • Beitrag von Blackshadowscript ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • ocmd:online(playerid, params[])
    {
    #pragma unused params


    new count = 1, string[2048];
    if(pInfo[playerid][pFaction] > 0)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && pInfo[i][pFaction] > 0 && !IsPlayerNPC(i) && i != INVALID_PLAYER_ID)
    {
    format(string, sizeof(string), "{FFFFFF}Name: {FF5C00}%s {FFFFFF}\n %s", spielername(i), string);
    count ++;
    }
    }
    if(count != 1)
    {
    ShowPlayerDialog(playerid, DIALOG_SONSTIGES, DIALOG_STYLE_MSGBOX, "Onlineliste", string, "Abbrechen", "");
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_SONSTIGES, DIALOG_STYLE_MSGBOX, "Onlineliste", "{FFFFFF}Kein Mitglied online!", "Abbrechen", "");
    return 1;
    }
    }
    return 1;
    }


    Schau dir das alte an, und das neue damit du verstehst, was verändert wurde.


    ocmd:online(playerid, params[])
    {
    #pragma unused params


    new count = 1, string[2048];
    if(pInfo[playerid][pFaction] > 0)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && pInfo[i][pFaction] > 0 && !IsPlayerNPC(i) && i != INVALID_PLAYER_ID)
    {
    format(string, sizeof(string), "{FFFFFF}Name: {FF5C00}%s {FFFFFF}\n{FFFFFF}Rang: {FF5C00}%d\n %s", spielername(i), pInfo[i][pRank], string);
    count ++;
    }
    }
    if(count != 1)
    {
    ShowPlayerDialog(playerid, DIALOG_SONSTIGES, DIALOG_STYLE_MSGBOX, "Onlineliste", string, "Abbrechen", "");
    return 1;
    }
    else
    {
    ShowPlayerDialog(playerid, DIALOG_SONSTIGES, DIALOG_STYLE_MSGBOX, "Onlineliste", "{FFFFFF}Kein Mitglied online!", "Abbrechen", "");
    return 1;
    }
    }
    return 1;
    }

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