Beiträge von Crank93

    das ganze würde so nur funktionieren, wenn man NUR diese taste beim betreten drückt.
    wenn der spieler eine andere taste gleichzeitig drückt, gehts nicht mehr.
    das liegt daran, dass der aktuelle zustand der tastenbelegung eines spielers in einer einzigen variable (newkeys) gespeichert wird (nicht eine variable pro taste).
    die tastenbelegung wird also durch einzelne bits dargestellt, da kannst du nicht mit dem "=="-operator arbeiten, sondern mit bit-operatoren.


    mach aus



    newkeys == KEY_SECONDARY_ATTACK



    newkeys & KEY_SECONDARY_ATTACK // &: bit.operator, prüft, ob das bit KEY_SECONDARY_ATTACK gesetzt ist

    tja, dann weist du pID gar keinen wert zu also ist die ID immer 0 (variablen werden bei der deklaration immer auf 0 gesetzt wenn kein wert zugewiesen wird).
    logscherweise wird dann immer der name angezeigt, der zur id 0 gehört.




    if(!strcmp(strget(cmdtext,0),"/scheine"))
    {
    if(!strlen(strget(cmdtext,1))) { SendClientMessage(playerid,COLOR_WHITE,"Benutzung: /scheine [ID]"); return 1; }
    pID=strval(strget(cmdtext, 1));
    GetPlayerName(playerid,aname,sizeof aname);
    GetPlayerName(pID,oname,sizeof oname);
    format(string,sizeof string,"Du hast %s deine Scheine gezeigt.",oname);
    SendClientMessage(playerid,COLOR_WHITE,string);
    format(string,sizeof string,"%s hat dir seine Scheine gezeigt.",aname);
    SendClientMessage(pID,COLOR_WHITE,string);
    if(Spielerinfo[pID][Autoschein] == 0){SendClientMessage(pID,COLOR_WHITE,"Der Autoschein ist nicht vorhanden!");}else{SendClientMessage(pID,COLOR_WHITE,"Der Autoschein ist vorhanden!");}
    if(Spielerinfo[pID][Waffenschein] == 0){SendClientMessage(pID,COLOR_WHITE,"Der Waffenschein ist nicht vorhanden!");}else{SendClientMessage(pID,COLOR_WHITE,"Der Waffenschein ist vorhanden!");}
    }

    es wird enorm helfen, vorher hast du mehrmals pro sekunde (OnPlayerUpdate) für jeden spieler den account aktualisiert. (völlig unnötig)
    jetzt wird das ganze nur noch einmal (beim disconnect) gemacht.

    in solchen fällen würde ich von timern abraten, geht ressourcenschonender ;)




    //oben
    #define KILL_JAIL_SECONDS (15)
    new KillTime[MAX_PLAYERS];



    //OnPlayerDeath
    KillTime[killerid]=GetTickCount();



    //bei deinem "jail" command
    if(GetTickCount() - KillTime[targetid] < (KILL_JAIL_SECONDS*1000))
    return SendClientMessage(playerid, COLOR, "Kein Mord in den letzten 15 Sekunden!");


    stock Register(playerid, key[])
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt", name);
    dini_Create(Spielerdatei);
    dini_Set(Spielerdatei,"Passwort",key);
    SendClientMessage(playerid, COLOR_GREEN, "Du hast dich Erfolgreich Registriert");
    return 1;


    }


    dcmd_wanted(playerid, params[])
    {
    #pragma unused params
    new wantedstring[1024];
    new p_wanted[50];
    new p_name[MAX_PLAYER_NAME];
    new wlevel;
    if(gTeam[playerid] == 1)
    {
    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    wlevel = GetPlayerWantedLevel(i);
    if(wlevel != 0)
    {
    GetPlayerName(i,p_name,sizeof(p_name));
    format(p_wanted, sizeof(p_wanted), "%s - %d Wanteds\n", p_name, wlevel);
    strcat(wantedsring, p_wanted, sizeof(wanedstring));
    }
    }
    ShowPlayerDialog(playerid, DIALOG_WANTEDS, DIALOG_STYLE_LIST, "Aktuelle Gesuchte", wantedstring, "Ok", "Abbrechen");
    }
    else
    {
    SendClientMessage(playerid, COLOR_RED, "Du bist kein Polizist!");
    }
    return 1;
    }

    #define PHOE_DIAL_WEL 2


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {

    if(dialogid == PHOE_DIAL_WELL)
    {
    if(!strcmp(inputtext, php, false))
    {
    ShowPlayerDialog(playerid,PHOE_DIAL_WEL2,DIALOG_STYLE_MSGBOX,"Bla Bla Bla","der PIN war korrekt!\r\n Bitte klicken sie auf 'Weiter'","Weiter"," ");
    }
    }


    return 0;
    }

    1.

    //OnPlayerDeath
    SendDeathMessage(killerid, playerid, reason);


    2.



    //OnPlayerStateChange
    if(newstate==PLAYER_STATE_DRIVER)
    {
    if(IsAdminCar(GetPlayerVehicleID(playerid)) && !IsPlayerAdmin(playerid)) //IsAdminCar evtl. durch deine abfrage ersetzen
    {
    RemovePlayerFromVehicle(playerid);
    }
    return 1;
    }

    mit dividieren hat der "/" sicherlich nichts zu tun, das DIALOG_EINWEISUNG/INFO ist höchstwahrscheilich ein #define das vor dem compilen sowieso durch eine zahl ersetzt wird. daran liegts nicht.


    mach mal aus


    if(listitem==DIALOG_EINWEISUNG/INFO)


    das:


    if(dialogid==DIALOG_EINWEISUNG/INFO)