Beiträge von Hagi

    Hallo Breadfisher,


    Ich habe hier einen Command mit dcmd /sscanf geschrieben :


    dcmd_kick(playerid,params[])
    {
    new zielid;
    new grund[256];


    if(sscanf(params, "ds",zielid,grund))
    {
    return SendClientMessage(playerid,weiß,"Benutzung: /kick [ID] [Grund]");
    }

    if(IsInAdmin[playerid] == 1)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerConnected(zielid))
    {
    SendClientMessage(playerid,rot,"Es existiert kein Spieler mit dieser ID");
    return 1;
    }
    else
    {
    if(zielid == playerid)
    {
    SendClientMessage(playerid,rot,"Du solltest dich besser nicht selber kicken");
    return 1;
    }
    else
    {
    new admin[MAX_PLAYER_NAME];
    new string[256];
    GetPlayerName(playerid,admin,sizeof(admin));
    format(string,sizeof(string),"Du wurdest von Admin %s gekickt. Grund: %s",admin,grund);
    SendClientMessage(zielid,braun,string);


    new string2[256];
    new gekickt[MAX_PLAYER_NAME];
    GetPlayerName(zielid,gekickt,sizeof(gekickt));
    format(string2,sizeof(string),"Admin-Command: Admin %s hat %s gekickt. Grund: %s",admin,gekickt,grund);


    Kick(zielid);

    SendClientMessageToAll(braun,string2);


    print("-----");
    print(string2);

    return 1;
    }
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"Du besitzt nicht die nötige Einstufung zur Ausführung dieses Befehls");
    return 1;
    }
    }


    Mein Problem ist nun, dass man zwar mit der ID auch die gewünschte ID kicken kann.
    Aber wenn man einen Namen benutzt geht es immer auf ID 0.


    Nun möchte ich wissen, wie man sagen kann, dass nur ID's benutzt werden können. Oder noch besser man auch den Namen benutzen und damit auch den richtigen kicken kann.


    Ich hoffe das ist verständlich ausgedrückt.


    MFG


    Hagi


    Ich hoffe auf eine, oder mehrere, gute Antwort(en)

    Ich geb dir volle 10/10 da ich das Programm echt coll und nüztlich finde.


    Technobase.fm und die anderen sender gehören zu meinen Favoriten. Demnach ist dieses Tool super um schnell zwischen ihnen zu switchen.


    Mach weiter so


    MGF


    Hagi

    Hallö,


    Ich hab hier ein enum


    enum pInfo
    {
    pKey[128],
    pCash,
    pAdmin,
    pKills,
    pTode,
    pWarn,
    }
    new PlayerInfo[MAX_PLAYERS][pInfo];


    und hier der Teil wo eigentlich was in die User dini gespeichert werden soll.


    public OnPlayerDisconnect(playerid, reason)
    {
    new string[100], name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));


    switch(reason)
    {
    case 0: format(string, sizeof(string), "%s hat den Server verlassen. [Timeout]", name);
    case 1: format(string, sizeof(string), "%s hat den Server verlassen. [Leaving].", name);
    case 2: format(string, sizeof(string), "%s hat den Server verlassen. [Kick/Ban]", name);
    }


    PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid);


    new string2[256];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    GetPlayerName(i,name,sizeof(name));
    format(string2,sizeof(string2),"%s.dini",name);
    dini_IntSet(string2,"Admin",PlayerInfo[i][pAdmin]);
    dini_IntSet(string2,"Geld",PlayerInfo[i][pCash]);
    dini_IntSet(string2,"Kills",PlayerInfo[i][pKills]);
    dini_IntSet(string2,"Tode",PlayerInfo[i][pTode]);
    }
    SendClientMessageToAll(grau,string);


    print(string);


    TextDrawHideForPlayer(playerid,Version);


    togpm[playerid] = 0;

    tk[playerid] = 0;

    isprison[playerid] = 0;

    IstEingeloggt[playerid] = 0;
    return 1;
    }


    Das Problem ist, das nach dem Logout des Spielers der Cash Wert in der User.dini nicht geändert wird.


    Weiß jemand woran das liegn kann ?

    Ich denke erlich gesagt nicht, dass es an der Erstellungsart des Autos liegt.
    Das ist einfach unsnychro. 20 Meter verrutschen meine Autos auch öfter mal.
    Ein weg das zu beheben ist


    Das ist jetzt aus meine Script


    forward respawn5();
    forward respawn4();
    forward respawn3();
    forward respawn2();
    forward respawn1();


    if(strcmp("/carrespawn",cmdtext, true) == 0)
    {
    if(IsAnAdmin(playerid) )
    {
    GameTextForAll("Die Autos werden in 5 Sekunde(n) auf Respawn gesetzt",1000,5);


    SetTimer("respawn5",1000,0);
    }
    else
    {
    SendClientMessage(playerid, rot, "Du bist nicht autorisiert um diesen Befehl ausführen zu können");
    return 1;
    }
    }


    public respawn5()
    {
    GameTextForAll("Die Autos werden in 4 Sekunde(n) auf Respawn gesetzt",1000,5);
    SetTimer("respawn4",1000,0);
    }


    public respawn4()
    {
    GameTextForAll("Die Autos werden in 3 Sekunde(n) auf Respawn gesetzt",1000,5);
    SetTimer("respawn3",1000,0);
    }


    public respawn3()
    {
    GameTextForAll("Die Autos werden in 2 Sekunde(n) auf Respawn gesetzt",1000,5);
    SetTimer("respawn2",1000,0);
    }


    public respawn2()
    {
    GameTextForAll("Die Autos werden in 1 Sekunde(n) auf Respawn gesetzt",1000,5);
    SetTimer("respawn1",1000,0);
    }


    public respawn1()
    {
    for(new car=0; car<CAR_AMOUNT; car++)
    {
    SetVehicleToRespawn(car);
    }
    return 1;
    }

    Ist mir auch grad aufgefallen.


    Habs so und funktioniert. Hätte wirklich selber ein bisschen mehr denken können XD


    if(IsPlayerConnected(playerid) && !IsPlayerConnected(zielid))
    {
    SendClientMessage(playerid,rot,"Es existiert kein Spieler mit dieser ID");
    return 1;
    }
    else
    {


    Mal ne andere Frage:
    Wie mache ich es dass nur Autos wo niemand drinsitzt respawnt werden ?
    Hier mein respawncmd


    public respawn1()
    {
    for(new car=0; car<CAR_AMOUNT; car++)
    {
    SetVehicleToRespawn(car);
    }
    return 1;
    }

    ICh habs dann jetzt so.


    Ich probiers gleich mal aus.


    Also es funktioniert nicht da steht immer noch "Admin Hagi hat gekickt"


    dcmd_kick(playerid,params[])
    {
    if(!strlen(params))
    {
    return SendClientMessage(playerid,weiß,"Benutzung: /kick [ID]");
    }
    new zielid = strval(params);

    if(IsInAdmin[playerid] == 1)
    {
    if(!IsPlayerConnected(playerid))
    {
    SendClientMessage(playerid,rot,"Es existiert kein Spieler mit dieser ID");
    return 1;
    }
    else
    {
    if(zielid == playerid)
    {
    SendClientMessage(playerid,rot,"Du solltest dich besser nicht selber kicken");
    return 1;
    }
    else
    {
    new admin[MAX_PLAYER_NAME];
    new string[256];
    GetPlayerName(playerid,admin,sizeof(admin));
    format(string,sizeof(string),"Du wurdest von Admin %s gekickt",admin);
    SendClientMessage(zielid,braun,string);


    new string2[256];
    new gekickt[MAX_PLAYER_NAME];
    GetPlayerName(zielid,gekickt,sizeof(gekickt));
    format(string2,sizeof(string),"Admin-Command: Admin %s hat %s gekickt",admin,gekickt);


    Kick(zielid);

    SendClientMessageToAll(braun,string2);
    return 1;
    }
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"Du bist nicht autorisiert um diesen Befehl ausführen zu können");
    return 1;
    }
    }

    Ich brauche hilfe.
    Und zwar habe ich ein paar cmd mit DCMD gemacht.
    Diese funktionieren auch so weit perfekt.
    Nur kann man jede id wählen, obwohl sie nicht online ist.


    Wie kann ich das auf die Momentan online id einschränken ?


    Ich hab schon selber was probiert es funkitoniert aber nicht. Der String-Text kommt trotzdem


    dcmd_kick(playerid,params[])
    {
    if(!strlen(params))
    {
    return SendClientMessage(playerid,weiß,"Benutzung: /kick [ID]");
    }
    new zielid = strval(params);

    if(IsInAdmin[playerid] == 1)
    {
    if(zielid == INVALID_PLAYER_ID)
    {
    SendClientMessage(playerid,rot,"Es existiert kein Spieler mit dieser ID");
    return 1;
    }
    else
    {
    if(zielid == playerid)
    {
    SendClientMessage(playerid,rot,"Du solltest dich besser nicht selber kicken");
    return 1;
    }
    else
    {
    new admin[MAX_PLAYER_NAME];
    new string[256];
    GetPlayerName(playerid,admin,sizeof(admin));
    format(string,sizeof(string),"Du wurdest von Admin %s gekickt",admin);
    SendClientMessage(zielid,braun,string);


    new string2[256];
    new gekickt[MAX_PLAYER_NAME];
    GetPlayerName(zielid,gekickt,sizeof(gekickt));
    format(string2,sizeof(string),"Admin-Command: Admin %s hat %s gekickt",admin,gekickt);


    Kick(zielid);

    SendClientMessageToAll(braun,string2);
    return 1;
    }
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"Du bist nicht autorisiert um diesen Befehl ausführen zu können");
    return 1;
    }
    }

    Besteht die Möglichkeit, dass man in das Enum auch Text einfügt ?
    Ich benutze das System für Busfahrer und möchte die Haltestellen-Namen einfügen.


    enum e_Muell {
    Float:M_fX,
    Float:M_fY,
    Float:M_fZ,
    Float:M_fRad;
    Text:M_tHaltestelle // Irgentwie so was. Soll aber für den ClientMessage sein
    }


    new
    Muellabfuhr_Stationen[][e_Muell] = {
    {-74.2252,-1128.7936,1.6359,5.0 // Hier irgentwo de Namen},
    {-89.2432,-1189.7782,2.3241,5.0},
    {-63.3734,-1588.5732,3.1782,5.0},
    {220.8943,-1393.5308,52.1264,5.0},
    {169.0361,-1356.8065,69.8208, 5.0},
    {263.5524,-1341.0842,53.7643, 5.0},
    {871.9646,-864.5255,77.2742, 5.0},
    {935.7687,-835.7352,94.4455, 5.0},
    {1496.5879,-698.0237,94.5207, 5.0},
    {1001.1724,-935.0218,41.9509, 5.0},
    {-546.9002,-488.6077,25.2961, 5.0}
    };

    ist zwar etwas länger aber probier mal


    if(PlayerToPoint(10, playerid,-23.2388,-55.4084,1003.5469) )
    {
    ShowMenu(...
    }
    elseif(PlayerToPoint(10, playerid,-23.1297,-55.2229,1003.5469) )
    {
    ShowMenu(...
    }
    elseif(PlayerToPoint(10, playerid,-23.3618,-55.6308,1003.5469))
    {
    ShowMenu(...
    }

    Also es soll sich an 3 Stellen öffnen ?


    Ich würd mal den Radius auf 5 setzten, da er sich sonst mit den anderen PlayerToPoint überschneidet.


    Wenn es sich nur an einer Stelle öffnen soll, probier mal


    if(PlayerToPoint(5,playerid,362.4857,173.6745,1008.3828))