Beiträge von DasNeo


    Und wie willste bei OnGameModeInit playerid benutzen?


    Es kommt in OnPlayerConnect, da die TextDraws für jeden Spieler einzelnd erstellst werden.

    if(GetPlayerMoney(playerid)<400) return SendClientMessage(playerid,ROT,"Du hast zu wenig Geld dabei!");
    {
    GivePlayerWeapon(playerid,24,75);
    GivePlayerMoney(playerid,-400);
    }


    Der Fehler ist der, dass du einmal returnst, und das somit abbrichst, und gleichzeitig aber den Block öffnest, und dort sachen machst.


    if(GetPlayerMoney(playerid) < 400) return SendClientMessage(playerid,ROT,"Du hast zu wenig Geld dabei!");
    GivePlayerWeapon(playerid,24,75);
    GivePlayerMoney(playerid,-400);


    try this ^

    Wenn keiner in der nähe ist, wird INVALID_PLAYER_ID genommen.




    GetClosestPlayer(playerid, Float: fRadius)
    {
    new
    iClosestID = INVALID_PLAYER_ID,
    sName[MAX_PLAYER_NAME+1],
    Float: fFinalDistance,
    Float: fDistance,
    Float: fX,
    Float: fY,
    Float: fZ;
    GetPlayerPos(playerid, fX, fY, fZ);
    fFinalDistance = fRadius;

    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if((fDistance = GetPlayerDistanceFromPoint(i, fX, fY, fZ)) < fFinalDistance)
    {
    fFinalDistance = fDistance;
    iClosestID = i;
    }
    }
    if(iClosestID == INVALID_PLAYER_ID)
    {
    return iClosestID;
    }
    else
    {
    GetPlayerName(iClosestID, sName, sizeof(sName));
    return sName;
    }
    }


    So müsstest du dann einfach nur noch Abfragen, ob der return von GetClosestPlayer (also if(GetClosestPlayer(playerid, 5.0) == INVALID_PLAYER_ID)) und wenn es so ist, dann die Nachricht senden, dass kein Spieler in der nähe ist.
    Als Else kannst du dann einfach die Nachricht wie hier senden:



    €dit:


    Wenn du noch Probleme damit hast, kannst du dich auch bei mir in Skype melden. - Name im Profil.

    Na dann so:



    if (strcmp("/test", cmdtext, true, 10) == 0)
    {
    GetClosestPlayer(playerid, 5.0); // <-- Das gibt dir gleich den Namen raus. Verwendung wie folgt:
    new string[MAX_PLAYER_NAME+1];
    format(string, sizeof(string), "Dein nächster Spieler ist %s",GetClosestPlayer(playerid, 5.0));
    SendClientMessage(playerid, -1, string);
    return 1;
    }

    GetClosestPlayer(playerid, Float: fRadius)
    {
    new
    iClosestID = INVALID_PLAYER_ID,
    sName[MAX_PLAYER_NAME+1],
    Float: fFinalDistance,
    Float: fDistance,
    Float: fX,
    Float: fY,
    Float: fZ;
    GetPlayerPos(playerid, fX, fY, fZ);
    fFinalDistance = fRadius;

    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if((fDistance = GetPlayerDistanceFromPoint(i, fX, fY, fZ)) < fFinalDistance)
    {
    fFinalDistance = fDistance;
    iClosestID = i;
    }
    }
    GetPlayerName(iClosestID, sName, sizeof(sName));
    return sName;
    }


    Das returnt dann direkt den Namen, anstatt der ID.


    if (strcmp("/test", cmdtext, true, 10) == 0)
    {
    new name[MAX_PLAYER_NAME+1];
    GetPlayerName(playerid, name, sizeof(name));
    return 1;
    }


    AName[ MAX_PLAYER_NAME+1] //warum +1?


    GetPlayerName (aplayer ,AName,MAX_PLAYER_NAME +1); // ""


    Das +1 ist, da am Ende jedes Strings immer noch eine "Leer-Zelle" ist.
    (Soweit ich weiß, lasse mich aber auch gerne eines besseren belehren.)


    @Thread:


    Also ich würde es ja so machen, dass ich den Namen von dem Listitem nehmen würde, und von dem Namen dann die ID ermitteln.
    GetPlayerID(string[], partofname=0);


    (Weiß nicht ob das so klappt, aber ein Versuch wäre es wert. :b)


    Gruß,
    Neo. :)

    Man könnte ihn doch in einen AFK-Raum schicken, sobald er auf den Desktop ist.


    Mit OnPlayerUpdate zum Beispiel. Ist jemand auf dem Desktop oder auf ESC, dann wird OnPlayerUpdate nicht mehr ausgeführt.
    Wie genau du das anstellst, musst du selbst raus finden. Hab's leider selbst noch nicht hin bekommen.


    Nun aber zum Thema:


    Schaut soweit ganz gut aus.
    Ist zwar nichts großes, aber ganz gut umgesetzt. Nur weiter so. :)



    Gruß,
    Neo. :)


    PS: (Aber das mit dem Eine im Lauf war meine Idee. Gr :D)

    Das kann zwei Gründe haben.
    Entweder wird das Addon nicht richtig geladen, oder das Addon ist veraltet und funktioniert einfach nicht mehr.


    Versuch mal manuell das Addon zu laden. (Im Spiel: rcon es_load PLUGINNAME)


    Wenn er dir ausgibt, dass es schon geladen ist, dann ist es höchstwahrscheinlich veraltet.
    Gibt er dir aber aus, dass er das Addon nicht finden kann, dann hast du es falsch installiert.


    Eventscript-Addons sind immer wie folgt zu finden:


    1. Eventscript-Shell:
    addons / NAME / es_NAME.txt


    2. Eventscripts-Python
    addons / NAME / NAME.py


    Gruß,
    Neo. :)

    • Gehe auf den Server
    • Logge dich im Rcon ein (rcon_password PASSWORD)
    • Gib die Befehle als Rcon ein (rcon sv_...)


    Den Fehler, den du gemacht hast, ist dass du die Befehle nicht via rcon benutzt hast. (Punkt 3)


    Oder du machst es über die Server-Konsole, falls du da ran kommst.
    Oder auch über ein Plugin, was aber meiner Meinung nach unnötig ist.


    Gruß,
    Neo. :)


    €dit:
    Eventuell sind die Werte zu hoch? (Vielleicht seit irgendeinem neuen Update? Früher gingen sie aufjedenfall bis ins unendliche - soweit ich weiß)

    1. Du hast name nicht als String definiert. 8|
    2. bei sscanf braucht man kein % (?)
    3. Bei sscanf braucht man bei einem string (also s) immer noch die größer dahinter. s[25]


    Das ist was mir so auffällt.

    Nicht ganz.


    bei dem FloatSet hast du das GetPlayerHealth falsch.


    new Float:health;
    GetPlayerHealth(playerid, health);
    dini_FloatSet(Spielerdatei, "Gesundheit", health);



    Gruß,
    Neo. :)

    Höaa?
    Das ist doch richtig so? :O

    public OnPlayerConnect(playerid)
    {


    if(IsPlayerNPC(playerid)) return 1;
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);


    if(dini_Exists(Spielerdatei))
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Dein Account wurde gefunden. Gib bitte das Passwort ein.","Login","Abbrechen");


    }
    else
    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Gib bitte das gewünschte Passwort ein:","Register","Abbrechen");
    }
    return 1; // Weg machen
    }


    return 1;
    }



    public OnPlayerSpawn(playerid)
    {
    SetPlayerVirtualWorld(playerid,0);
    SetPlayerPos(375.7934,-2036.4897,7.8301); // Playerid vergessen
    SetPlayerFacingAngle(359.0466); // Playerid vergessen
    return 1;
    }



    stock Login(playerid,key[]= // = zu )
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    if(!strcmp(key,dini_Get(Spielerdatei,"Passwort"),false))
    {
    LoadAccount(playerid);
    SendClientMessage(playerid,WEIS,"Erfolgreich eingeloggt. Willkommen zurück auf Era of San Andreas");
    return 1;
    }


    else
    {
    SendClientMessage(playerid,INDIANRED,"Du hast ein falsches Passwort eingegeben");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Dein Account wurde gefunden. Gib bitte das Passwort ein.","Login","Abbrechen");
    return 1;
    }
    // return 1;
    }


    if(dialogid==DIALOG_LOGIN) return 0; // Geht soweit ich weiß nicht o.o
    {
    ...



    Hier sind erst mal ein par. :O


    €dit: DAS WICHTIGSTE:



    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid==DIALOG_LOGIN) return 0;
    {
    if(response==0)
    SendClientMessage(playerid,GREY,"Du hasten Vorgang abgebrochen");
    Kick(playerid);


    }


    if(response==1)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,WEIS,"Das Passwort ist nicht lang genug");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Dein Account wurde gefunden. Gib bitte das Passwort ein.","Login","Abbrechen");
    return 1;
    }
    else
    {
    Login(playerid,inputtext);
    return 1;
    }
    }


    if(dialogid==DIALOG_REGISTER)
    {
    if(response==0) return 1;
    SendClientMessage(playerid,GREY,"Du hasten Vorgang abgebrochen");
    Kick(playerid);


    }
    if(response==1)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,WEIS,"Das Passwort ist nicht lang genug");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Dein Account wurde gefunden. Gib bitte das Passwort ein.","Login","Abbrechen");
    return 1;
    }
    else
    {
    Login(playerid,inputtext);
    return 1;
    }
    // Hier hast du eine } vergessen!
    }