Fraktions system problem

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
  • Guten Morgen aller Seits.


    Ich habe bei mein Fraktionssystem ein problem.


    Kommen wir nun erst mal zu den Enums:
    Frakenum:
    enum frakteEnum{

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


    fInfo:
    new fInfo[][frakteEnum] ={
    {"zivi",0.0,0.0,0.0,0.0,0,0,weiß}, //zivi
    {"LVPD",2286.9927,2431.6108,10.8203,176.4932,0,0,dunkelblau}, //LVPD
    {"SWAT",-2719.8411,-318.3455,7.8438,46.7307,0,0,helblau}, //SWAT
    {"FBI",-1606.3145,712.2166,13.8672,14.9407,0,0,duneklhelblau}, //FBI
    {"ARMY",245.4032,1859.6956,14.0840,86.8001,0,0,hellgrün}, //ARMY
    {"Medic/Feuerwehr",-319.8502,1049.1862,20.3403,351.6078,0,0,rot}, //MEDIC/FEUERWEHR
    {"FAHRSCHULE",662.8862,1716.9479,7.1875,37.0085,0,0,orange}, //FAHRSCHULE
    {"Aztecas",1531.2836,751.6505,11.0234,265.7675,0,0,türkis}, //Aztecas
    {"VAGOS",-2280.8035,2288.0842,4.9590,285.9662,0,0,gelb}, //VAGOS
    {"BALLAS",1457.6174,2772.6257,10.8203,263.1655,0,0,pink}, //BALLAS
    {"YAKUZA",1956.0493,729.8642,10.8203,106.5192,0,0,grau}// YAKUZA
    }; mit den positionen der Basen.


    Spieler abspeichern:
    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    //speichern level,money
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i', money='%i', alevel='%i', fraktion='%i', rang='%i' , spawnchange='%i' WHERE id='%i'",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    eigene Funktion:
    sPlayerInFrakt(playerid,f_id){
    if(sInfo[playerid][fraktion]==f_id)return 1;
    return 0;
    }


    Spielerspawn:
    public OnPlayerSpawn(playerid)
    {
    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]);
    }
    }
    return 1;
    }


    Funktion für Leadererstellen und spawnchange-Befehl erstellt:
    getPlayerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }


    //ocmd Befehle:
    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;
    }
    if(sInfo[playerid][spawnchange] ==1)
    {
    sInfo[playerid][spawnchange]=0;
    }
    SendClientMessage(playerid,grün,"Spawn geändert");
    return 1;
    }
    ocmd:Leadererstellen(playerid,params[])
    {
    if(!isAdmin(playerid,5))return SendClientMessage(playerid,grün,"Du hast keine Berechtigung dazu!");
    new pID, fID;
    if(sscanf(params,"ui",pID,fID))return SendClientMessage(playerid,rot,"INFO: /Leadererstellen[playerid][fraktid]");
    if(fID>= sizeof(fInfo))return SendClientMessage(playerid,rot,"Fraktion existiert nicht.");
    sInfo[pID][fraktion] = fID;
    sInfo[pID][rang] = 6;
    new string[128];
    format(string,sizeof(string),"%s hat dich zum Leader der Fraktion %s gemacht",getPlayerName(playerid),fInfo[fID][f_name]);
    SendClientMessage(pID,gelb,string);
    SendClientMessage(playerid,grün,"Du hast einen Spieler zum Leader gemacht.");

    return 1;
    }



    Unter PasswordResponse:
    public OnPasswordResponse(playerid)
    {
    new num_rows,num_fields;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //passwort Richtig
    sInfo[playerid][eingeloggt] = 1;
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"money",dbhandle));
    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    sInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle);
    sInfo[playerid][rang] = cache_get_field_content_int(0,"rang",dbhandle);
    sInfo[playerid][spawnchange]= cache_get_field_content_int(0,"spawnchange",dbhandle);
    loadPlayerCars(playerid);


    }
    else
    {
    //Passwort Falsch
    SendClientMessage(playerid,grün,"Du hast dein Passwort falsch eingetippt. Versuche es nochmal!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gibt bitte dein Passwort ein:","Anmelden","Abbrechen");
    }
    return 1;
    }.


    So nun wenn ich Ingame gehe und mich Selbst mit /Leadererstellen [playerid][fraktid] eintippe und auch da steht das ich Leader gemacht wurde von SWAT und nach dem Tod nicht bei der SWAT-Base Spawne.


    Ich frage mich nun wo mein Fehler sein könnte.


    Ich hoffe man kann mir hierbei helfen.


  • ocmd:Leadererstellen(playerid,params[])
    {
    if(!isAdmin(playerid,5))return SendClientMessage(playerid,grün,"Du hast keine Berechtigung dazu!");
    new pID, fID;
    if(sscanf(params,"ui",pID,fID))return SendClientMessage(playerid,rot,"INFO: /Leadererstellen[playerid][fraktid]");
    if(fID>= sizeof(fInfo))return SendClientMessage(playerid,rot,"Fraktion existiert nicht.");
    sInfo[pID][fraktion] = fID;
    sInfo[pID][rang] = 6;
    new string[128];
    format(string,sizeof(string),"%s hat dich zum Leader der Fraktion %s gemacht",getPlayerName(playerid),fInfo[fID][f_name]);
    SendClientMessage(pID,gelb,string);
    SendClientMessage(playerid,grün,"Du hast einen Spieler zum Leader gemacht.");
    savePlayer(playerid)
    return 1;
    }


    und bei OnPlayerDeath noch das rein:

    loadPlayer(playerid) //Oder eben das, was deinen Spieler laden lässt.


    MFG

  • 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;
    }

  • Nein, das war nicht das Problem. Das Problem war, dass du es bei 0 zu 1 gesetzt hast, und direkt drunter abgefragt hast ob es 1 ist, wenn ja zu 0 gesetzt hast. Somit ist es immer 0 geblieben.


    if(sInfo[playerid][spawnchange] ==0) //Ja
    {
    sInfo[playerid][spawnchange]=1; //Setze zu 1
    }
    if(sInfo[playerid][spawnchange] ==1) //Wieder ja (es ist ja zu 1 gesetzt worden)
    {
    sInfo[playerid][spawnchange]=0; //Setze zu 0
    }
    //-> Es konnte immer nur 0 raus kommen. Daher "else" verwenden.