Beiträge von Zcelo12

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums

    Ganz einfach damit dieser fehler nie mehr erscheint füge das ganz oben hinzu:


    #pragma tabsize 0


    Danach musst du nix mehr verücken dann ist es egal.


    Und irgendwann wundert man sich, wenn eine Funktion nicht mehr richtig funktioniert.
    Tipp: Einfach mit der TAB-Taste richtig einrücken ;)

    Müsstest halt überlegen. Stell dir ein Koordinatensystem vor und verschiebe es dort dann, dann müsstes du es ungefährt herausfinden.
    Da sich aber x und y verändern würde ich lieber die Koordinaten neu eintragen ;)


    Ich empfehle die Funktion GetName ins Script einzufügen, da es einfach übersichtlicher ist - und man anstatt jedes mal new Name[];, GetPlayerName() etc. nur GetName(playerid) braucht - da diese Funktion den Spielernamen zurückgibt. Mein Befehl kannst du nur benutzen, wenn du sscanf benutzt - dies empfehle ich, damit sind Parameter in Befehlen einfach - einfach zu erstellen.


    Editierung: Sscanf ist ein Plugin, mit vielen nützlichen Funktionien. Lade dir einfach das Plugin hierherunter, schau in den Hauptthreadfür nützliche Funktionen und binde das Plugin ein - fertig ;)


    Man kann es aber auch anders und Ressourcenschonener machen ;)


    Im Script oben
    new PlayerName[MAX_PLAYERS][MAX_PLAYERNAME]
    Bei OnPlayerCOnnect
    GetPlayerName(playerid,PlayerName[playerid],MAX_PLAYER_NAME);


    und wenn du es in einem String brauchst nutzt du einfach:
    PlayerName[playerid]; //Kann auch ne andere ID sein ;)


    lg

    Wieso denken eigentlich alle immer, dass man nur mit den Warnings und ohne die Zeilen das
    Problem lösen kann? :pinch:

    Wozu brauchst du im string: str nochmal str?
    Versuch's mal so:
    public SaveZones()
    {
    new str[128];
    for(new z=0; z<ZONEN_ANZAHL; z++)
    {
    format(str,sizeof(str),"%d",str,Zonen[z][CurrentOwner]);
    }
    new File: file = fopen(OWNER_DATEI,io_write);
    fwrite(file,str);
    fclose(file);
    return 1;
    }


    lg

    Welchen hast du den genommen?


    Deine Kurzform:
    CMD:spectate(playerid,params[])
    {
    if(Player[playerid][Admin] >= 2)
    {
    new selection[10];
    if(sscanf(params,"s[10]",selection))
    {
    if(!IsPlayerSpectating[playerid]) return SpectateOn(playerid);
    else return SpectateOff(playerid);
    }
    if(strcmp(params,"next") == 0) return SpectateNext(playerid);
    if(strcmp(params,"previous") == 0) return SpectatePrevious(playerid);
    }
    return 1;
    }

    Gibt es eigentlich einen Unterschied zwischen der kurzen und längeren Art?
    WÜrde mich mal interessieren ob es was mit den Ressourcen ausmacht, falls ja soltle ich mich mal
    umstellen :D


    edit://
    Bekomme jetzt Warnings á la ...Should return a vakue.
    Ich musste bei den FUnktionen ein return 1; hinzufügen, jedoch werden die immernoch auf einmal ausgeführt.

    Du hast bei den Befehlen unter OnPlayerCommandText 2 Klammern vergessen:


    // Gamemode v0.1
    // by LK


    #include <a_samp>
    #include <dini>


    enum info
    {
    passwort[128], // Passwort
    skin, // Skin
    };


    new pInfo[MAX_PLAYERS] [info];


    new bool:loggedin[MAX_PLAYERS];



    main()
    {
    print("\n----------------------------------");
    print("Gamemode by LK");
    print("----------------------------------\n");
    }


    stock strget(strx[], pos, search = ' ') {
    new arg, ret[128], idxx;
    for (new i = 0; i < strlen(strx); i++) {
    if(strx[i] == search || i == strlen(strx) || strx[i + 1] == 10) {
    arg++;
    if (arg == pos + 1){
    ret[i-idxx] = EOS;
    return ret;
    } else if (arg == pos)
    idxx= i+1;
    }
    else if (arg == pos)
    ret[i - idxx] = strx[i];
    }
    return ret;
    }


    public OnGameModeInit()
    {
    SetGameModeText("Fun Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
    }


    public OnGameModeExit()
    {
    return 1;
    }


    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    new name[128], save[128]; // Namen und Save Variable
    GetPlayerName(playerid, name, sizeof(name)); // Name des Spieler bekommen
    format(save, sizeof(save), "/player/%s.ini", name); // Dateinamen bekommen
    if (dini_Exists(save))
    {
    SendClientMessage(playerid, 0x33CCFFAA, "Benutze /login [passwort], um dich einzuloggen");
    GivePlayerMoney(playerid, dini_Int(save, "money")); // Spieler das gespeicherte Geld geben
    SetPlayerSkin(playerid, dini_Int(save, "skin")); // Spieler das gespeicherte Skin geben
    }
    else
    {
    if (!dini_Exists(save))
    {
    SendClientMessage(playerid, 0x33CCFFA, "Benutze /register [passwort], um dich zu registrieren");
    }
    }
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    new name[128], save[128]; // Namen und Save Variable
    GetPlayerName(playerid, name, sizeof(name)); // Name des Spieler bekommen
    format(save, sizeof(save), "/player/%s.ini", name); // Dateinamen bekommen
    if (dini_Exists(save))
    {
    dini_IntSet(save, "money", GetPlayerMoney(playerid)); // speichert aktuelles Geld
    dini_IntSet(save, "skin", GetPlayerSkin(playerid)); // speichert aktuellen Skin
    }
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    new name[128], save[128];
    GetPlayerName(playerid, name, sizeof(name));
    format(save, sizeof(save), "/player/%s.ini", name);
    if (loggedin[playerid] == false)
    {
    SendClientMessage(playerid, 0xAA3333AA, "Du musst dich einloggen, bevor du spawnst!");
    Kick(playerid);
    }
    SetPlayerSkin(playerid, dini_Int(save, "skin")); // gespeicherten Skin geben
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    return 1;
    }


    public OnVehicleSpawn(vehicleid)
    {
    return 1;
    }


    public OnVehicleDeath(vehicleid, killerid)
    {
    return 1;
    }


    public OnPlayerText(playerid, text[])
    {
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new player[MAX_PLAYER_NAME];


    // /register [password]
    if(strcmp(strget(cmdtext, 0), "/register", true) == 0)
    {
    new save[40]; // neuen String "save" erstellen
    GetPlayerName(playerid, player, sizeof(player));
    format(save, sizeof(save), "/player/%s.ini", player); // Speicherort
    if (!dini_Exists(save))
    {
    dini_Create(save); // ini Datei erzeugen
    dini_IntSet(save, "password", udb_hash(strget(cmdtext, 1))); // PW in ini verschlüsselt speichern
    SendClientMessage(playerid, 0x33AA33AA, "***Account wurde erstellt***");
    SendClientMessage(playerid, 0x33AA33AA, "***Du kannst dich nun mit /login (password) anmelden***");
    }
    else
    {
    if (dini_Exists(save))
    {
    SendClientMessage(playerid, 0xAA3333AA, "Der Account ist bereits registriert");
    }
    }
    }


    if(strcmp(strget(cmdtext,0), "/login", true) == 0)
    {
    new save[40], s2[256]; //gleiche wie oben
    GetPlayerName(playerid,player,sizeof(player));
    format(save,sizeof(save),"player/%s.ini",player);
    if(dini_Exists(save)) // wenn Datei existiert
    {
    s2=dini_Get(save,"passwort"); // lade das Passwort
    if(strval(s2)==udb_hash(strget(cmdtext,1))) // wenn die Eingabe nach /login mit dem Passwort von der registration übereinstimmt
    {
    loggedin[playerid] = true; //sage dem Server, dass der Spieler eingeloggt ist.
    SendClientMessage(playerid, 0x33CCFFAA, "***Du hast dich erfolgreich eingeloggt***");
    SpawnPlayer(playerid);
    }
    else // wenn das passwort nicht stimmt
    {
    SendClientMessage(playerid, 0xAA3333AA, "Passwort Falsch!");
    }
    }
    }
    return 1;
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    return 1;
    }


    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerEnterRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnPlayerLeaveRaceCheckpoint(playerid)
    {
    return 1;
    }


    public OnRconCommand(cmd[])
    {
    return 1;
    }


    public OnPlayerRequestSpawn(playerid)
    {
    return 1;
    }


    public OnObjectMoved(objectid)
    {
    return 1;
    }


    public OnPlayerObjectMoved(playerid, objectid)
    {
    return 1;
    }


    public OnPlayerPickUpPickup(playerid, pickupid)
    {
    return 1;
    }


    public OnVehicleMod(playerid, vehicleid, componentid)
    {
    return 1;
    }


    public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
    {
    return 1;
    }


    public OnVehicleRespray(playerid, vehicleid, color1, color2)
    {
    return 1;
    }


    public OnPlayerSelectedMenuRow(playerid, row)
    {
    return 1;
    }


    public OnPlayerExitedMenu(playerid)
    {
    return 1;
    }


    public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
    {
    return 1;
    }


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    return 1;
    }


    public OnRconLoginAttempt(ip[], password[], success)
    {
    return 1;
    }


    public OnPlayerUpdate(playerid)
    {
    return 1;
    }


    public OnPlayerStreamIn(playerid, forplayerid)
    {
    return 1;
    }


    public OnPlayerStreamOut(playerid, forplayerid)
    {
    return 1;
    }


    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    return 1;
    }


    public OnVehicleStreamOut(vehicleid, forplayerid)
    {
    return 1;
    }


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    return 1;
    }


    public OnPlayerClickPlayer(playerid, clickedplayerid, source)
    {
    return 1;
    }


    stock strget(strx[], pos, search = ' ') {
    new arg, ret[128], idxx;
    for (new i = 0; i < strlen(strx); i++) {
    if(strx[i] == search || i == strlen(strx) || strx[i + 1] == 10) {
    arg++;
    if (arg == pos + 1){
    ret[i-idxx] = EOS;
    return ret;
    } else if (arg == pos)
    idxx= i+1;
    }
    else if (arg == pos)
    ret[i - idxx] = strx[i];
    }
    return ret;
    }

    Hab's jetzt so, doch immernoch dasselbe Problem:


    CMD:spectate(playerid,params[])
    {
    if(Player[playerid][Admin] >= 2)
    {
    new selection[10];
    if(sscanf(params,"s[10]",selection))
    {
    if(!IsPlayerSpectating[playerid])
    {
    SpectateOn(playerid);
    }
    else
    {
    SpectateOff(playerid);
    }
    return 1;
    }
    if(strcmp(selection,"next",true) == 0)
    {
    SpectateNext(playerid);
    return 1;
    }
    if(strcmp(selection,"previous",true) == 0)
    {
    SpectatePrevious(playerid);
    return 1;
    }
    }
    return 1;
    }


    edit:// Weiß jemand die Lösung?