Beiträge von Splash

    stock Login(playerid,key[])
    {
    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))
    {
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    SetSpawnInfo(playerid,0,SetPlayerSkin(playerid,dini_Int(Spielerdatei,"Skin")),1760.0948,-1895.0768,13.5610,267.1592,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    SendClientMessage(playerid,HELLBLAU,"Du hast dich erfolgreich eingeloggt\nViel Spaß wünscht dir Maurice.");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,ROT,"Du hast das falsches Passwort eingegeben.");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Es wurde ein Account in der Datenbank gefunden.\nBitte gebe dein Passwort ein\nViel Spaß wünscht dir Maurice","Login","Abbrechen");
    return 1;


    }
    return 1;
    }


    Sollte jetzt aber funktionieren.

    public OnPlayerRequestClass(playerid, classid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    //SetSpawnInfo(playerid,0,SetPlayerSkin(playerid,dini_Int(Spielerdatei,"Skin")),1760.0948,-1895.0768,13.5610,267.1592,0,0,0,0,0,0); <--- Kann in den Login stock
    //SpawnPlayer(playerid); <---- Diese Funktion lässt einen Spieler spawnen wenn er in der Klassenwahl ist, die müsstest du wenn dann in deinen Login stock am Ende packen (vor dem return 1;)
    return 1;
    }


    Wenn du dich fragst warum sie nur grün sind, scroll mal nach hinten.


    EDIT: Zusatz

    Okay so wie ich es erst einmal sehe, hast du auch bei deiner Login response ein paar returns zuviel, du brauchst in den responsen ganz ganz selten ein return.


    So wäre erst einmal dein Login dialog richtig:


    if(dialogid==DIALOG_LOGIN)
    {
    if(response==0)
    {
    SendClientMessage(playerid,ROT,"Du hast den Vorgang abgebrochen");
    Kick(playerid);
    }
    if(response==1)
    {
    if(strlen(inputtext) <4)
    {
    SendClientMessage(playerid,ROT,"Dein Passwort ist nicht lang genung");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Es wurde ein Account in der Datenbank gefunden.\nBitte gebe dein Passwort ein\nViel Spaß wünscht dir Maurice","Login","Abbrechen");
    }
    else
    {
    Login(playerid,inputtext);
    }
    }
    }
    return 1;


    Richtig einrücken bitte nicht vergessen.


    Dann zu deinem Register stock, hast du wirklich kein return 1; drinne oder hast du es hier nur vergessen andernfals müsste es so aussehen:


    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,HELLBLAU,"Erfolgreich registiert.");
    dini_IntSet(Spielerdatei,"Level",0);
    return 1;
    }


    Und ich möchte dich ein drittes Mal darauf hinweissen, dass seit 0.3x keine SendClientMessage mehr geschickt wird, wenn direkt dannach eine Kick(playerid); etc Funktion aufgerufen wird, du musst das mit einem Timer lösen.


    EDIT: Ich hasse das Einrücken hier...

    Zeige mal bitte jetzt beide Sachen, einmal die response des Register Dialogs und einmal deinen Register stock und eine andere Frage, du löschst deine Accountdaten oder nutzt einen anderen Accountnamen wenn du wieder testest? Sonst würde ja dein Login aufgerufen werden.

    Nehme mal das "!" raus.


    Übrigens du weisst schon wenn du die Funktion Kick(playerid); aufrufst dass seit 0.3x keine Nachrichten mehr angezeigt werden, da diese Funktion eher als SendClientMessage aufgerufen wird, das musst du dann mit einem Timer überbrücken.


    EDIT: Zusatz

    Ich denke sein Problem ist viel mehr das gar keine Skin Auswahl existiert daher


    Ohne Skins wird er nicht korrekt gespawnt. Also wird er schon AddPlayerClass haben. Nur sollte man nicht in einem Register stock dann die funktion SpawnPlayer(playerid); aufrufen, wo ich denke was er macht.


    @ulbi1990: Falls du schon vorher mit •Maurice.• zu tun hattest weißt du vermutlich mehr^^


    Nope eigentlich net, habe nur diese response gesehen und dachte OMG. (net böse gemeint)

    Okay erst mal deinen Dialog response fürn Register etwas aufgeräumter:



    if(dialogid==DIALOG_REGISTER)
    {
    if(response==0)
    {
    SendClientMessage(playerid,ROT,"Du hast den Vorgang abgebrochen");
    Kick(playerid);
    }
    if(response==1)
    {
    if(!strlen(inputtext) <4)//Wäre super wenn du noch defienieren würdest ab wo das Passwort zu kurz ist mit "<", ich habe es jetzt mal auf kleiner als 4 Zeichen gemacht
    {
    SendClientMessage(playerid,ROT,"Dein Passwort ist nicht lang genung");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrieren","Bitte gebe dein gewünschtes Passwort ein\nViel Spaß wünscht dir Maurice","Register","Abbrechen");
    }
    else
    {
    Register(playerid,inputtext);
    }
    }
    }


    Als nächstes zeigst du uns mal bitte deinen Register(playerid,inputtext) stock.


    EDIT: Rechtschreibung ._.

    Abfragen machen sollte doch gelernt sein, sorry aber bekomme da Augenkrebs...


    public OnPlayerText(playerid, text[])
    {
    new string[258];
    format(string, sizeof(string), "%s sagt: %s", SpielerName(playerid), text);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if(IsPlayerInRangeOfPoint(i, 10.0, x, y, z))
    {
    if(GetPlayerScore(playerid) <25) //Hier wird gefragt ob der Score kleiner als 25 ist.
    {
    SendClientMessage(i, Weis, string);
    }


    else if(GetPlayerScore(playerid) >= 25) //Hier wird gefragt ob der Score Größer oder gleich 25 ist.
    {
    SendClientMessage(i, Blau, string);
    }
    }
    }
    return 0;
    }

    Ihr könnt noch 2 Zeilen sparen indem ihr das SetPlayerPos rausnehmt, DA sobald jemand in einem Fahrzeug als Fahrer sitzt und die Funktion SetVehiclePos aufgerufen wird, wird der Fahrer automatisch mit geportet.


    D.h. bei der Abfrage ob er in einem Auto ist nur so machen:


    new vid = GetPlayerVehicleID(playerid);
    SetVehiclePos(vid,1212.7854,-885.9028,42.9159);
    SendClientMessage(playerid, COLOR_GRAU, "Du hast dich Teleportiert! Nutze dies nicht aus.");


    Und um es um noch eine Zeile zu verkürzen kann man es auch so machen:


    SetVehiclePos(GetPlayerVehicleID(playerid),1212.7854,-885.9028,42.9159);
    SendClientMessage(playerid, COLOR_GRAU, "Du hast dich Teleportiert! Nutze dies nicht aus.");


    So hat man wieder etwas gespart. :P

    Du definierst Teams, dann je nachdem wo sie sich die Teams raussuchen können, nutzt du
    SetPlayerTeam();


    Dannach können sich Teammates nicht mehr gegenseitig killen. Siehe dazu auch SetPlayerTeam zudem können sie seit 0.3x auch keine friendly Vehicles mehr zerstören. Ausser du deklarierst es.


    Dann kannst du noch bei


    OnPlayerGiveDamage


    OnPlayerGiveDamage


    deine Nachricht formatieren, fragst dort ab ob in welchem Team beide sind and done.


    Ist eigentlich ganz simple. :P


    PS: Ich weiss jetzt ob OnPlayerGiveDamage jetzt auch funtioniert wenn sie im gleichen Team sind, aber probieren geht über studieren.

    Korrekt. Lade es dir noch einmal runter, dann gehst du in pawno machst ein komplett neues Projekt, aber anstatt dass du irgendetwas daran änderst compilest du es als blank in Gamemodes.


    Dann änderst du deine server.cfg zu dem:


    gamemodes0 blank
    filterscripts TD


    Startest den Server und nutzt es.

    Warum tust du auch das FS neu compilen? oO


    Es funktioniert auch wenn du es (während es auf 0.3e compiled ist) nicht compilest auf 0.3x. Nutze dazu dann einfach ein leeres Gamemode (einfach Pawno aufmachen das script wie es ist compilen and done), dann in die server.cfg das blanke gamemode rein und den NICHT compilten TextDraw Editor. Es funktioniert sonst würde ich es nicht sagen, da ich es selber genau in mit diesem wege nutze.