Beiträge von Manyula

    new Float:Hospitals[][] =
    {
    {1.0, 2.0, 3.0},
    {2.0, 3.0, 1.0},
    {3.0, 1.0, 2.0}
    };


    new Float:PostDeathSpawn[MAX_PLAYERS][3];


    public OnPlayerDeath(playerid, killerid, reason)
    {
    new Float:dist[3];
    dist[0] = GetPlayerDistanceFromPoint(playerid, Hospitals[0][0], Hospitals[0][1], Hospitals[0][2]);
    dist[1] = GetPlayerDistanceFromPoint(playerid, Hospitals[1][0], Hospitals[1][1], Hospitals[1][2]);
    dist[2] = GetPlayerDistanceFromPoint(playerid, Hospitals[2][0], Hospitals[2][1], Hospitals[2][2]);


    SortDeepArray(dist, 0, SORT_ASC); //ERROR LINE


    PostDeathSpawn[playerid][0] = Hospitals[0][0];
    PostDeathSpawn[playerid][1] = Hospitals[0][1];
    PostDeathSpawn[playerid][2] = Hospitals[0][2];
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    SetPlayerPos(playerid, PostDeathSpawn[playerid][0], PostDeathSpawn[playerid][1], PostDeathSpawn[playerid][2]);
    return 1;
    }


    error 001: expected token: ",", but found "["
    warning 215: expression has no effect
    error 001: expected token: ";", but found "]"
    error 029: invalid expression, assumed zero
    fatal error 107: too many error messages on one line


    Falls jemand Erfahrung mit dieser Include hat, wäre es nett, wenn er/sie helfen würde! :)

    Das geht so pauschal nicht. Du musst die Zonen selbst abgrenzen, indem du einfach DynamicAreas über die Städte erstellst (dafür brauchst du Incognitos Streamer Plugin).
    Schwierig wird es dann, wenn du außerhalb einer solchen Zone stirbst.


    Eine zweite Möglichkeit wäre den Abstand zu allen drei Krankenhäusern zu ermitteln und den Spieler zu dem, das in kürzester Entfernung liegt, zu teleportieren, was ich persönlich eine bessere Lösung als die obige finde.

    Hallo,


    ich möchte meinem Waffenkaufsystem etwas "Innovation" einhauchen, und habe mir gedacht, dass man sich ja eine Waffe vorher kaufen muss, bevor man Munition verballern kann, oder eben keine 50 Waffen kaufen kann nur um mehr Munition zu haben.
    Jetzt stellt sich die Frage, wie ich das am besten speicher. Es stehen 18 Waffen zum Kauf zur Verfügung, also habe ich mir gedacht, ich baller sowas hier in die SpielerInfo.


    enum PlayerInfo
    {
    bool:pWeaponsPurchased[18],
    //...
    }


    Auf diese Art und Weise könnte ich jeder Variable eine Waffe zuweisen.
    Wenn der Spieler z.B. ein Messer kauft, wird pWeaponPurchased[0] auf true gesetzt, sodass bei jedem weiterem Kauf dann gecheckt wird, ob die Waffe schon vorhanden ist und nur Munition gekauft wird.


    Jetzt zur Speicherung... y_ini.
    INI_WriteBool(file, "PurchasedWeapons", pInfo[playerid][pWeaponsPurchased]);
    ... ich hab in erster Linie kp, ob das überhaupt so geht.
    Kann ich das so in einer Zeile machen, oder muss ich jede einzelne boolean Variable einzeln abspeichern?

    Hallo,


    ich wollte mir nun einmal JernejLs Map Editor anschauen, nur scheitert das ganze, wenn ich die Map laden möchte. Er lädt bis zum Punkt, wo er die "levelmap.ipl" öffnen soll, dann freezt der Editor für eine halbe Minute und spuckt mir den Error "Out of memory" aus. Wie kann ich da vorgehen?

    Hallo,


    ich hatte damals schon ein Thema zu scriptgesteuertem Pickupverhalten gepostet, und habe es im Rahmen des Threads auch erfolgreich gelöst. Hier geht es zum Thread.
    Wie gesagt, das Script funktioniert einwandfrei. Wenn ich nun allerdings Whitetigers AC v2 laufen lasse, passiert nichts, wenn ich die Pickups aufnehmen möchte. Es liegt scheinbar am AC an sich. Hat sonst jemand Erfahrungen mit dem Anti Cheat Client von Whitetiger?

    Das müsste dann ja heißen, dass...
    format(LastKilledPlayer[playerid], MAX_PLAYER_NAME, "%s", kID);
    und
    format(LastKilledPlayer[playerid], sizeof(LastKilledPlayer[playerid]), "%s", kID);
    ...dasselbe sind.


    Aber wieso krieg ich bei zweiterem diese Errors?
    error 001: expected token: "]", but found "-identifier-"
    warning 215: expression has no effect
    error 001: expected token: ";", but found "]"
    error 029: invalid expression, assumed zero
    fatal error 107: too many error messages on one line

    Hallo,


    ich möchte den Namen der letzten killerid in eine Variable speichern, und scheine auf dem Schlauch zu stehen...


    new LastKilledPlayer[MAX_PLAYERS][MAX_PLAYER_NAME];


    public OnPlayerDeath(playerid, killerid, reason)
    {
    new kID[MAX_PLAYER_NAME];
    GetPlayerName(killerid, kID, sizeof(kID));
    LastKilledPlayer[playerid][kID]; //hier das irgendwie reinformatieren...
    return 1;
    }

    Du prüfst einfach überall wo sich das Geld ändert:
    if(pInfo[playerid][Geld] > pInfo[playerid][MonthlyBankMax]) pInfo[playerid][MonthlyBankMax] = pInfo[playerid][Geld];


    Mehr musst du da eigentlich nicht machen.


    Das berechnet dann ja den Durchschnitt von dem Konto und dem, was der Spieler auf der Hand hat, und das ist ja eigentlich nicht das, was ich erreichen möchte. ;)
    Das Geld auf der Hand soll unversteuert bleiben.


    Nur, um mal bisschen Licht ins Dunkle zu bringen: das System soll Inflation auf einem Freeroam Server mit ein paar RL Elementen vorbeugen.

    Beim monatlichen Durchschnitt fürchte ich, dass dieser leicht beeinflusst werden kann. Folgendes Beispiel:


    Nehmen wir an, der Spieler hat 1.000.000$ auf seinem Konto. Nun muss der monatliche Durchschnitt ja bei jeder Transaktion (Einzahlen, Abheben) neu berechnet werden.
    Ein Spieler, der keine Transaktion durchführt hat im Schnitt, nach wie vor, 1.000.000$.
    Ein Spieler, der das Geld draufzahlt, abhebt, und wieder draufzahlt, hat also insgesamt 3 Kontostände gehabt: 1.000.000$, dann 0$ und wieder 1.000.000$.
    Im Schnitt hat dieser Spieler dann ein Durchschnittsvermögen von 2.000.000/3 = 666.667$, was eine erhebliche Minussumme ist.


    Deswegen hab ich mir gedacht, dass das monatliche Maximum versteuert wird. Daran kann schlecht gepfuscht werden.
    enum PlayerInfo
    {
    //...
    MonthlyBankMax
    }


    //aus dem enum ergibt sich dann...
    pInfo[playerid][MonthlyBankMax];


    Nun bringt mir mein OnServerTime callback in diesem Zusammenhang nichts mehr. Ich brauche ein Callback, dass beim Umschwung von Tagen, Monaten und Jahren aufgerufen wird. Oder brauche ich da überhaupt ein Callback? Ich stell das ja mit getdate() an, aber wie am sinnvollsten?


    An diesem Punkt möchte ich mich mal bedanken, dass ihr mir helft!

    Ich hab mich jetzt mal dazu entschlossen keinen festen Betrag jeden Tag abzuziehen, sondern monatlich einen prozentualen. Allerdings habe ich hier ein Problem - die Abgaben können umgangen werden. Wenn man am letzten Tag des Monats das gesamte Geld von seinem Konto abhebt, ist die Steuer gleich 0. Wie könnte ich dem geschickt entgegenwirken...?

    else
    {
    pInfo[playerid][Bank] = pInfo[playerid][Bank] + strval(inputtext);
    GivePlayerMoneyEx(playerid, -strval(inputtext));
    format(stringDE, sizeof(stringDE), "Bitte gib den Betrag ein, den du einzahlen willst.\nWenn du alles einzahlen möchtest, klicke einfach\nauf OK, ohne einen Betrag anzugeben.\nDerzeitiger Kontostand: "#C_GREEN_E"%d$\n\n"#C_GREEN_E"Zahlung erfolgreich!\nDu hast %s$ eingezahlt.", pInfo[playerid][Bank], inputtext);
    format(stringEN, sizeof(stringEN), "Please enter the amount of money you want to deposit.\nIf you want to deposit all you have, just click\non OK, without typing in anything.\nCurrent account balance: "#C_GREEN_E"%d$\n\n"#C_GREEN_E"Payment successful!\nYou deposited %s$.", pInfo[playerid][Bank], inputtext);
    return ShowLanguageDialog(playerid, DIALOG_BANK_DEPOSIT, DIALOG_STYLE_INPUT, "Einzahlen", "Deposit", stringDE, stringEN, "OK", "OK", "Abbrechen", "Cancel");
    }


    Kannst du mir dann bitte erklären, warumhier ein normales "inputtext" ausreicht?