Beiträge von MaddDogg

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


    public AuftragsKiller(playerid)
    {
    newrandom:
    new typ=random(sizeof(spieler));
    new typ2=spieler[typ][0];
    if(IsPlayerConnected(typ2))
    {
    new str[126];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(typ2, name, sizeof(name));
    format(str, sizeof(str), " Du musst %s killen!", name);
    SendClientMessage(playerid, COLOR_YELLOW, str);
    killer[playerid] = 1;
    zielperson[playerid] = typ2;
    }
    else goto newrandom;
    }


    Hab das jetzt mit nem Label gelöst, geht aber auch anders.

    Bei OnPlayerDeath muss es playerid bleiben, die Variable ist ja vom Callback selbst vorgegeben.
    Außerdem machen manche Änderungen keinen Sinn, zB.:


    if(killer[playerid] == killerid)


    killer[] speichert doch nur, ob der Spieler ein Auftragskiller ist oder nicht, also wird boolsch genutzt. Btw könntest du sie auch gleich boolean machen, mit:


    new bool:killer[MAX_PLAYERS];



    Also so ist der OnPlayerDeath Part richtig:



    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(killer[killerid])
    {
    if(playerid == zielperson[killerid])
    {
    killer[killerid] = 0;
    GivePlayerMoney(killerid, 5000);
    SendClientMessage(killerid, GREEN, "Du hast die Zielperson ausgeschaltet und hast 5000$ bekommen.");
    }
    }


    return 1;
    }


    Ich verstehe den Sinn des Strings spieler nicht.
    Der random reicht doch vollkommen als Auswahl der zufälligen Zielperson.


    Die ausgesuchte Person solltest du global für jeden Spieler speichern. Weiter gehen würde es dann zB. mit:




    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(killer[killerid])
    {
    if(playerid == zielperson[killerid])
    {
    killer[killerid] = 0;
    GivePlayerMoney(killerid, KILLER_REWARD);
    SendClientMessage(killerid, 0xFFFFFFFF, "Du hast die Zielperson getötet.");
    }
    }

    return 1;
    }




    public OnPlayerDisconnect(playerid)
    {
    for(new i=0; i
    {
    killer[i] = 0;
    SendClientMessage(i, 0xFFFFFFFF, "Deine Zielperson ist vom Server gegangen. Du kannst einen neuen Auftrag annehmen.");
    }

    return 1;
    }

    Du meinst, der Gamemode restartet, oder?


    Also ich würde vllt mal eine Reihe von prints in OnPlayerDeath setzen und schauen, bis zu welchem er printet. Wenn er ab einer Stelle die folgenden nicht mehr printet, weißt du, dass da ein Fehler ist.


    Also setze mal an verschiedenen Stellen print("test 1"), print("test 2") usw.

    Naja, wenn du jetzt kein Backup hast, viel Spaß bei der Fehlersuche.
    Kommentiere aber einfach mal ein paar Stellen aus, zB. den kompletten OnPlayerCommandText Callback.
    Ansonsten noch die Scriptparts, die du geändert hast. Wenn es dann irgendwann wieder geht, weißt du, dass das letzte, was du auskommentiert hast, die Fehlerquelle ist.

    Du hast sicher nicht an einem Tag 30.000 Zeilen geändert.
    Also schau dir an, was du geändert hast und nutze ggf. existierende Backups.


    Der Server funktioniert nur nicht, da dein Gamemode einen Fehler hat. Und wenn der Compiler dir schon keinen Fehler gibt (wie ich ja mal denke), musst du dir wohl oder übel deine letzten Änderungen ansehen.

    Wenn ich das richtig verstanden habe, müsstest du dann ne ellenlange if Bedingung machen, dass alle Adminbefehle definiert.
    Oder du schreibst ans Ende jedes Adminbefehls sowas wie admincmd = true und machst damit dann deine Bedingung, womit du am Ende von OnPlayerCommandText die printf Zeilen hast.
    Beides sind aber ziemlich arbeitsintensive Wege, also überlege, ob es das wert ist.

    Welches Programm nutzt du für's compilen?
    Es sieht so aus, als ob ein Parameter nicht angegeben worden ist.


    Ich habe es zwar noch nie getestet, aber du müsstest auch manuell compilen können.
    Also Kommandozeile öffnen und dann:


    Code
    cd <Pfad zur pawncc.exe Datei>
    pawncc "<Pfad zur .pwn>"


    Die compilte .amx solltest du nun im gleichen Ordner wie die pawncc.exe finden.


    Wenn der bei der Eingabe das gleiche sagt, zieh dir das Server Paket neu und ersetze deinen "pawno" Ordner.

    Schrott??


    Und wieso sollte eine /settime Funktion nur bis 24 Slots funktionieren? oO

    WTF!?


    Erstmal so in Zeile 68:


    if(GetPlayerSkin(killerid) == GetPlayerSkin(playerid))



    Und in Zeile 75 einfach ein:


    else


    Wenn du's hier ohne else haben willst, halt:


    if(GetPlayerSkin(killerid) != GetPlayerSkin(playerid))



    Ich glaube, du musst dich nochmal mit dem Aufbau der Sprache beschäftigen, und überhaupt dem Thema if - else

    In Zeile 70 fehlt ne Klammer um die komplette Bedingung.


    Also statt:
    if GetPlayerSkin(killerid) == SetPlayerSkin(playerid)


    das hier:
    if (GetPlayerSkin(killerid) == SetPlayerSkin(playerid))



    EDIT:
    Wieso eigtl einmal ein SetPlayerSkin? Das muss auch ein Get... sein