[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • UserPath(playerid)



    [pwn]// pInfo enum
    enum pInfo
    {
    pPass,
    pScore,
    pCash,
    pKills,
    pDeaths,
    }



    forward LoadUser_data(playerid,name[],value[]);
    public LoadUser_data(playerid,name[],value[])
    {
    INI_Int("Password",PlayerInfo[playerid][pPass]);
    INI_Int("Cash",PlayerInfo[playerid][pCash]);
    INI_Int("Kills",PlayerInfo[playerid][pKills]);
    INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
    INI_Int("Score",PlayerInfo[playerid][pScore]);
    return 1;
    }
    stock UserPath(playerid)
    {
    new string[128],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),PATH,playername);
    return string;
    }


    stock udb_hash(buf[]) {
    new length=strlen(buf);
    new s1 = 1;
    new s2 = 0;
    new n;
    for (n=0; n<length; n++)
    {
    s1 = (s1 + buf[n]) % 65521;
    s2 = (s2 + s1) % 65521;
    }
    return (s2 << 16) + s1;
    }
    [/pwn]


    Mit freundlichen Grüßen
    JustMe.77 8)

  • public OnPlayerConnect(playerid)
    {
    if(fexist(UserPath(playerid)))
    {
    INI_ParseFile(UserPath(playerid), "LoadUser_%s");
    new pname[MAX_PLAYER_NAME],
    string[39 + MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Login Menu","{FF0000}Type your password below to login.","Login","Kick");
    }
    else ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,"Register Menu","Type your password below to register a new account.","Register","Kick");


    new connect_name[MAX_PLAYER_NAME],
    str[64];
    GetPlayerName(playerid, connect_name, sizeof(connect_name));
    format(str, sizeof(str), "%s has Joined the server.", connect_name);
    SendClientMessageToAll(0xFF8000FF, str);
    return 1;
    }


    Hast du ein solches define?
    #define UserPath "Users/%s.ini"

  • @xCurry: @[LnD]JustMe.77:
    Leute, macht doch für solche Probleme einen eigenen Thread auf! Das ist doch ein elendes Durcheinander hier.


    Nochmal:
    Dieses Thema ist für kleine Scripting-Fragen gedacht, und nicht für Tonnen an Code, und auch nicht um MySQL Codes zu debuggen. Das sind, vom Namen her, schon keine kleinen Fragen.



    @[LnD]JustMe.77:
    Du musst das formatieren, mit format. Wenn du es nicht hinbekommst, mach einen Thread auf und beschreibe das Problem.
    Nein, doch nicht, laut der INI Doku wird das so gemacht. Sinnloses System, viel zu kompliziert aufgebaut.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • dcmd_invite(playerid,params[])
    {
    new pid;
    new spieler[256];
    new leader[256];
    new leadername[MAX_PLAYER_NAME];
    new spielername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,leadername, sizeof(leadername));
    GetPlayerName(playerid,spielername, sizeof(spielername));
    if(sSpieler[playerid][Leader] >= 1)
    {
    if(sscanf(params,"u",pid))
    {
    return SendClientMessage(playerid,Weiß,"/invite (playerid)");
    }
    if(pid == INVALID_PLAYER_ID)
    {
    return SendClientMessage(playerid,Weiß,"Der Spieler mit dieser ID ist nicht Online!");
    }
    if(sSpieler[playerid][Leader] == 1)
    {
    sSpieler[pid][Fraktion] = 1;
    sSpieler[pid][Rang] = 1;
    }
    format(spieler, sizeof(spieler),"Grove Leader %s hat dich in die Grove Street invitet!",leadername);
    format(leader, sizeof(leader),"Du hast %s in die Grove Street invitet!",spielername);
    SendClientMessage(pid,Weiß,spieler);
    SendClientMessage(playerid,Weiß,leader);
    }
    if(sSpieler[playerid][Leader] == 2)
    {
    sSpieler[pid][Fraktion] = 2;
    sSpieler[pid][Rang] = 1;
    }
    format(spieler, sizeof(spieler),"Ballas Leader %s hat dich in die Ballas Gang invitet!",leadername);
    format(leader, sizeof(leader),"Du hast %s in die Ballas Gang invitet!",spielername);
    SendClientMessage(pid,Weiß,spieler);
    SendClientMessage(playerid,Weiß,leader);
    }
    [color=#ff0000]else
    {
    SendClientMessage(playerid,Weiß,"Du bist kein Leader!");
    }
    return 1;
    }[/color]


    Code
    C:\Users\NoxiZ\Desktop\Server\gamemodes\selfmade.pwn(702) : warning 209: function "dcmd_invite" should return a value
    C:\Users\NoxiZ\Desktop\Server\gamemodes\selfmade.pwn(703) : error 010: invalid function or declaration
    C:\Users\NoxiZ\Desktop\Server\gamemodes\selfmade.pwn(707) : error 010: invalid function or declaration
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    2 Errors.


    der fehler ist bestimmt ganz einfach zu lösen nur ich peils grad nicht so ganz :/

    Einmal editiert, zuletzt von NoxiZ ()

  • Das war voller Klammerfehler, deshalb haben die Errors auch nicht wirklich was ausgesagt. Schreibe es so:
    dcmd_invite(playerid,params[])
    {
    new pid;
    new spieler[256];
    new leader[256];
    new leadername[MAX_PLAYER_NAME];
    new spielername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,leadername, sizeof(leadername));
    GetPlayerName(playerid,spielername, sizeof(spielername));
    if(sSpieler[playerid][Leader] >= 1)
    {
    if(sscanf(params,"u",pid))
    {
    return SendClientMessage(playerid,Weiß,"/invite (playerid)");
    }
    if(pid == INVALID_PLAYER_ID)
    {
    return SendClientMessage(playerid,Weiß,"Der Spieler mit dieser ID ist nicht Online!");
    }
    if(sSpieler[playerid][Leader] == 1)
    {
    sSpieler[pid][Fraktion] = 1;
    sSpieler[pid][Rang] = 1;
    format(spieler, sizeof(spieler),"Grove Leader %s hat dich in die Grove Street invitet!",leadername);
    format(leader, sizeof(leader),"Du hast %s in die Grove Street invitet!",spielername);
    SendClientMessage(pid,Weiß,spieler);
    SendClientMessage(playerid,Weiß,leader);
    }
    if(sSpieler[playerid][Leader] == 2)
    {
    sSpieler[pid][Fraktion] = 2;
    sSpieler[pid][Rang] = 1;
    format(spieler, sizeof(spieler),"Ballas Leader %s hat dich in die Ballas Gang invitet!",leadername);
    format(leader, sizeof(leader),"Du hast %s in die Ballas Gang invitet!",spielername);
    SendClientMessage(pid,Weiß,spieler);
    SendClientMessage(playerid,Weiß,leader);
    }
    }
    else
    {
    SendClientMessage(playerid,Weiß,"Du bist kein Leader!");
    }
    return 1;
    }

  • Moinsen, ich hab ein Problem wenn der Spieler ein falsches Passwort eingibt wird er nicht gekickt obwohl es im Script genau angegeben ist? bitte helft mir


    stock Login(playerid,key[])
    {
    new Spieler[64],Sname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Sname,sizeof Sname);
    format(Spieler,sizeof Spieler,"/Spieler/%s.txt",Sname);
    printf("key: %s | dini_Get: %s",key,dini_Get(Spieler,"Passwort"));
    if(!strcmp(key,dini_Get(Spieler,"Passwort"),false))
    {
    LoadAccount(playerid);
    return SendClientMessage(playerid,0x00FFE6FF,"Du hast dich erfolgreich eingeloggt!");
    }
    else
    {
    SendClientMessage(playerid,0xFF0019FF,"Du wurdest vom Server gekickt da du das falsche Passwort eingetippt hast!");
    Kick(playerid);
    }
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Zum ersten Problem:
    Du kannst einfach mit strfind überprüfen, ob [Admin] schon im Namen enthalten ist, wenn ja, einfach nicht mehr davor setzen ^^


    Zum zweiten:
    Du kannst [Admin] einfach mit strdel wieder aus dem Namen löschen.


    Schaue dir zu beiden Funktionen die Wiki an, dort ist es gut erklärt.

  • Du hast in dem Sinne ja einen anderen Namen ;)
    Mache das so. Überprüfe einfach beim offline gehen, ob der Spieler [Admin] im Namen hat, und wenn dann löscht du dies heraus bevor du die Datei überprüfst.
    Wenn du es nicht verstanden hast, dann schicke mir mal den Code.

  • ICy.: Das Prinzip wie du es vorschlägst ist ganz schlecht, denn wenn ein Spieler einen Namen hat, der zum Beispiel 17 Zeichen lang ist, und du dann die 7 Zeichen des Tags hinzufügst, dann sind es 24 Zeichen, wobei SA:MP maximal 20 Zeichen im Namen erlaubt, sprich es funktioniert nicht. Ebenfalls wäre dann beim entfernen des Tags der Rest des Namens abgeschnitten und weg.
    Besser wäre es, eine Funktion zu machen, die den Tag vor den Name schreibt, wenn er gebraucht wird, und bei dem aduty Befehl einfach nur eine SpielerVariable auf 1 zu setzen, wenn der Tag simuliert werden soll.


    Unter den Includes:
    new aDuty[MAX_PLAYERS];


    Im Befehl:
    aDuty[playerid] = 1; //Bzw. 0 wenn aus


    Und dann dort, wo der Name ausgegeben werden soll:
    new string[145];
    format(string, sizeof(string), "%s hat irgendwas gemacht.", SpielerName_Ex(playerid))
    SendClientMessageToAll(-1, string);



    Die Funktion:
    stock SpielerName_Ex(playerid)
    {
    new name[MAX_PLAYER_NAME + 10];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    if(aDuty[playerid] == 1) format(name, sizeof(name), "[Admin]%s", name);
    return name;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen