Beiträge von Beavis

    Morgen zusammen


    Ich bekomme einen Serverchash durch mein OnDialogResponse hook, und bin am rätseln wiso
    Laut Chrashdetekt liegt es an der CallLocalFunction hier mal der code:
    #include <a_samp>
    #include <DT_Dialog>


    new HilfeText[][128]=
    {
    {"BlubBlubBlub"}
    };


    forward H_OnPlayerCommandText(playerid, cmdtext[]);
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp("/hilfe", cmdtext, true)||!strcmp("/help", cmdtext, true))
    {
    ShowPlayerDialog(playerid,diaHilfe,DIALOG_STYLE_LIST,"Hilfe","Allgemeine Hilfe\nAuto Hilfe\nJob Hilfe\nFraktions Hilfe\nAdmin Hilfe","Wählen","Abbruch");
    return CallLocalFunction("H_OnPlayerCommandText","ds",playerid, cmdtext);
    }
    return CallLocalFunction("H_OnPlayerCommandText","ds",playerid, cmdtext);
    }


    forward H_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == diaHilfe && response)
    {
    switch(listitem)
    {
    case 0:
    ShowPlayerDialog(playerid,diaAllgHilfe,DIALOG_STYLE_MSGBOX,"Allgemeine Hilfe",HilfeText[0],"Ok","Zurück");
    }
    }
    if(dialogid == diaAllgHilfe && !response)
    ShowPlayerDialog(playerid,diaHilfe,DIALOG_STYLE_LIST,"Hilfe","Allgemeine Hilfe\nAuto Hilfe\nJob Hilfe\nFraktions Hilfe\nAdmin Hilfe","Wählen","Abbruch");
    return CallLocalFunction("H_OnDialogResponse","dddds",playerid, dialogid, response, listitem, inputtext);
    }


    #if defined _ALS_OnPlayerCommandText
    #undef OnPlayerCommandText
    #else
    #define _ALS_OnPlayerCommandText
    #endif
    #define OnPlayerCommandText H_OnPlayerCommandText


    #if defined _ALS_OnDialogResponse
    #undef OnDialogResponse
    #else
    #define _ALS_OnDialogResponse
    #endif
    #define OnDialogResponse H_OnDialogResponse
    die dialoginclude schaut so aus:

    Spoiler anzeigen
    enum
    {
    diaRegister,
    diaLogin,
    diaHelp,
    diaInfo,
    diaAFK,
    diaJobs,
    diaJobTruck,
    diaJobOkay,
    diaJobQuitSure,
    diaJobInfo,
    diaJobMecha,
    diaJobVertrag,
    diaShop,
    diaShopIGVIP,
    diaShopJV,
    diaCarBuyInfo,
    diaOamtCalls,
    diaMedicCalls,
    diaAutoverkauf,
    diaAutoverkaufplayer,
    diaShopDonate,
    diaJobMuell,
    diaAmtsgericht,
    diaAmtsgerichtcars,
    diaFirmaChange,
    diaFirmaInfo,
    diaFirmaCreate,
    diaStats,
    diaFirmaTrucker,
    diaBank,
    diaBankEin,
    diaBankAus,
    diaBankKontoMann,
    diaBiz,
    diaBizProd,
    diaBizKasse,
    diaBizEin,
    diaBizAus,
    diaMarkt,
    diaHandy,
    diaPilot,
    diaJobPilot,
    diaNavi,
    diaHilfe,
    diaAllgHilfe
    };


    Ich weiß nicht wiso der server dadurch chrasht und hoffe das einer von euch eine idee dazu hat

    So sollte es klappen, es kann sein das in meiner include nen fehler ist da schau ich mal eben nach
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
    {
    new vehid = GetPlayerVehicleID(playerid) , str[128];
    SetVehicleNumberPlate(vehid, "MeineMom");
    format(str,sizeof(str),"Kennzeichen: %s",GetVehicleNumberPlate(vehid));
    TextDrawSetString(TextdrawKennzeichen,str);
    TextDrawShowForPlayer(playerid, TextdrawKennzeichen);
    SendClientMessage(playerid,Weiss,"Um den Motor zu starten gibst du bitte {00EBFF} /motor {FFFFFF} ein");
    }
    else if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER)
    {
    TextDrawHideForPlayer(playerid, TextdrawKennzeichen);
    }
    return 1;
    }

    Bei OnDialogResponse sowas machen:


    if(dialogid == DIALOG_HARVEST)
    {
    if(!response)return RemovePlayerFromVehicle(playerid),SendClientMessage(playerid,-1,"Gut dann halt nicht");
    //hier dann der rest rein
    }

    Beim auslesen der daten des spielers macht es ja auch kein sinn eine for , while , do-while oder sonst eine schleifenform zu verwenden.


    genau das meine ich doch


    Guck dir mal den ersten Post an das Muster da wo er einen Spieler Selectet, nutzt er die while schleife
    Klar ich hab das auch ne lange zeit so gemacht nur kommen mehrere spieler gleichzeitig drauf dann hängt sich der mysql_fetch_row auf

    Du hast einfach den Namen zu früh geholt


    Ich hab den command etwas angepasst, da ein string vollkommen ausreicht
    dcmd_makeleader(playerid,params[]) //Adminbefehl
    {
    new pID, fID, string[128], aname[MAX_PLAYER_NAME], name[MAX_PLAYER_NAME],frakname[50];
    if(SpielerInfo[playerid][pPerso] != 1) return 1;
    if(SpielerInfo[playerid][pAdmin] < 4) return 1;
    if(sscanf(params,"ud",pID,fID)) return SendClientMessage(playerid,GRAU,"Verwendung: /makeleader [ID] [Fraktions-ID] | Gebe '/frakids' für die Fraktions-ID's ein!");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,ROT,"Dieser Spieler wurde nicht gefunden!");
    if(SpielerInfo[pID][pFraktion] == fID && SpielerInfo[pID][pLeader] == 1) return SendClientMessage(playerid,ROT,"Der Spieler ist bereits Leader dieser Fraktion!");
    if(fID < 1 || fID > 11) return SendClientMessage(playerid,ROT,"Ungültige Angabe!");
    GetPlayerName(playerid,aname,sizeof(aname));
    GetPlayerName(pID,name,sizeof(name));
    switch(fID)
    {
    case 1:{frakname=frakname1;}
    case 2:{frakname=frakname2;}
    case 3:{frakname=frakname3;}
    case 4:{frakname=frakname4;}
    case 5:{frakname=frakname5;}
    case 6:{frakname=frakname6;}
    case 7:{frakname=frakname7;}
    case 8:{frakname=frakname8;}
    case 9:{frakname=frakname9;}
    case 10:{frakname=frakname10;}
    case 11:{frakname=frakname11;}
    }
    SpielerInfo[pID][pFraktion] = fID;
    SpielerInfo[pID][pLeader] = 1;
    SpielerInfo[pID][pFrakRang] = 1;
    format(string,sizeof(string),"Du hast %s zum Leader der Fraktion '%s' gemacht!",name,frakname);
    SendClientMessage(playerid,GELB,string);
    format(string,sizeof(string),"%s hat %s zum Leader der Fraktion '%s' gemacht!",aname,name,frakname);
    SendAdminMessage(PINK,string);
    format(string,sizeof(string),"%s hat dich zum Leader der Fraktion '%s' gemacht!",aname,frakname);
    SendClientMessage(pID,GELB,string);
    return SavePlayer(pID);
    }

    lösch den gesammten sock dann geht es auch nicht nur die Zeile...


    //nachtrag


    den gesammten stock meine ich

    Spoiler anzeigen
    stock sscanf(string[], format[], {Float,_}:...)
    {
    #if defined isnull
    if (isnull(string))
    #else
    if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
    #endif
    {
    return format[0];
    }
    #pragma tabsize 4
    new
    formatPos = 0,
    stringPos = 0,
    paramPos = 2,
    paramCount = numargs(),
    delim = ' ';
    while (string[stringPos] && string[stringPos] <= ' ')
    {
    stringPos++;
    }
    while (paramPos < paramCount && string[stringPos])
    {
    switch (format[formatPos++])
    {
    case '\0':
    {
    return 0;
    }
    case 'i', 'd':
    {
    new
    neg = 1,
    num = 0,
    ch = string[stringPos];
    if (ch == '-')
    {
    neg = -1;
    ch = string[++stringPos];
    }
    do
    {
    stringPos++;
    if ('0' <= ch <= '9')
    {
    num = (num * 10) + (ch - '0');
    }
    else
    {
    return -1;
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num * neg);
    }
    case 'h', 'x':
    {
    new
    num = 0,
    ch = string[stringPos];
    do
    {
    stringPos++;
    switch (ch)
    {
    case 'x', 'X':
    {
    num = 0;
    continue;
    }
    case '0' .. '9':
    {
    num = (num << 4) | (ch - '0');
    }
    case 'a' .. 'f':
    {
    num = (num << 4) | (ch - ('a' - 10));
    }
    case 'A' .. 'F':
    {
    num = (num << 4) | (ch - ('A' - 10));
    }
    default:
    {
    return -1;
    }
    }
    }
    while ((ch = string[stringPos]) > ' ' && ch != delim);
    setarg(paramPos, 0, num);
    }
    case 'c':
    {
    setarg(paramPos, 0, string[stringPos++]);
    }
    case 'f':
    {
    setarg(paramPos, 0, _:floatstr(string[stringPos]));
    }
    case 'p':
    {
    delim = format[formatPos++];
    continue;
    }
    case '\'':
    {
    new
    end = formatPos - 1,
    ch;
    while ((ch = format[++end]) && ch != '\'') {}
    if (!ch)
    {
    return -1;
    }
    format[end] = '\0';
    if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
    {
    if (format[end + 1])
    {
    return -1;
    }
    return 0;
    }
    format[end] = '\'';
    stringPos = ch + (end - formatPos);
    formatPos = end + 1;
    }
    case 'u':
    {
    new
    end = stringPos - 1,
    id = 0,
    bool:num = true,
    ch;
    while ((ch = string[++end]) && ch != delim)
    {
    if (num)
    {
    if ('0' <= ch <= '9')
    {
    id = (id * 10) + (ch - '0');
    }
    else
    {
    num = false;
    }
    }
    }
    if (num && IsPlayerConnected(id))
    {
    setarg(paramPos, 0, id);
    }
    else
    {
    #if !defined foreach
    #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
    #define __SSCANF_FOREACH__
    #endif
    string[end] = '\0';
    num = false;
    new
    name[MAX_PLAYER_NAME];
    id = end - stringPos;
    foreach (Player, playerid)
    {
    GetPlayerName(playerid, name, sizeof (name));
    if (!strcmp(name, string[stringPos], true, id))
    {
    setarg(paramPos, 0, playerid);
    num = true;
    break;
    }
    }
    if (!num)
    {
    setarg(paramPos, 0, INVALID_PLAYER_ID);
    }
    string[end] = ch;
    #if defined __SSCANF_FOREACH__
    #undef foreach
    #undef __SSCANF_FOREACH__
    #endif
    }
    stringPos = end;
    }
    case 's', 'z':
    {
    new
    i = 0,
    ch;
    if (format[formatPos])
    {
    while ((ch = string[stringPos++]) && ch != delim)
    {
    setarg(paramPos, i++, ch);
    }
    if (!i)
    {
    return -1;
    }
    }
    else
    {
    while ((ch = string[stringPos++]))
    {
    setarg(paramPos, i++, ch);
    }
    }
    stringPos--;
    setarg(paramPos, i, '\0');
    }
    default:
    {
    continue;
    }
    }
    while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
    {
    stringPos++;
    }
    while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
    {
    stringPos++;
    }
    paramPos++;
    }
    do
    {
    if ((delim = format[formatPos++]) > ' ')
    {
    if (delim == '\'')
    {
    while ((delim = format[formatPos++]) && delim != '\'') {}
    }
    else if (delim != 'z')
    {
    return delim;
    }
    }
    }
    while (delim > ' ');
    return 0;
    }