Etwas komplizierteres

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
  • Teleport CMD
    COMMAND:ls(playerid, params[])
    {
    if(PlayerActionForbidden(playerid)) return 1;
    if(GetPlayerMoney(playerid) >= 3000)
    {
    new stringDE[128],
    stringEN[128],
    pName[MAX_PLAYER_NAME],
    pVehicle = GetPlayerVehicleID(playerid),
    Float:VehicleAngle;
    GetPlayerName(playerid, pName, sizeof(pName));
    format(stringDE, sizeof(stringDE), "»TELEPORTINFO« {%06x}%s "#C_GOLD_E"hat sich nach Los Santos teleportiert! (/LS)", GetPlayerColor(playerid) >>> 8, pName);
    format(stringEN, sizeof(stringEN), "»TELEPORTINFO« {%06x}%s "#C_GOLD_E"has teleported to Los Santos! (/LS)", GetPlayerColor(playerid) >>> 8, pName);
    SendLanguageMessageToAll(C_GOLD, stringDE, stringEN);
    SetPlayerPos(playerid, 2492.7268, -1668.3849, 13.3438);
    SetPlayerFacingAngle(playerid, WEST);
    SetVehiclePos(pVehicle, 2492.7268, -1668.3849, 13.3438);
    GetVehicleZAngle(playerid, VehicleAngle);
    SetVehicleZAngle(playerid, VehicleAngle);
    PutPlayerInVehicle(playerid, pVehicle, 0);
    GivePlayerMoneyEx(playerid, -3000);
    [b]SavePlayerHPandAP(playerid);[/b]
    SetSpawnProtection(playerid);
    }
    else SendLanguageMessage(playerid, C_RED, "»WARNUNG« Du hast nicht genug Geld!", "»WARNING« You don't have enough money!");
    return 1;
    }


    enum
    enum HPandAP
    {
    Float:health,
    Float:armour
    }


    Timer
    forward EndGodMode(playerid);
    public EndGodMode(playerid) return SetPlayerHealth(playerid, 100);


    //=======================================================================================


    forward EndSpawnProtection(playerid);
    public EndSpawnProtection(playerid)
    {
    if(PlayerHPandAP[playerid][health] < 0 && PlayerHPandAP[playerid][armour] <= 0)
    {
    ReturnPlayerHPandAP(playerid);
    }
    else
    {
    SetPlayerHealth(playerid, 100);
    }
    return 1;
    }


    stock Funktion
    stock SetSpawnProtection(playerid)
    {
    if(GetPlayerVirtualWorld(playerid) != 0)
    {
    SetPlayerHealth(playerid, 99999);
    SetTimerEx("EndGodMode", 3000, false, "i", playerid);
    }
    else
    {
    SetPlayerHealth(playerid, 99999);
    SetTimerEx("EndSpawnProtection", 3000, false, "i", playerid);
    }
    return 1;
    }


    Erklärung meines Problems:
    Ich habe nach jedem Teleport eine kleine Spawnprotection von 3sec eingebaut, um Spawnkill zu verhindern. Nun ist aber das Problem, dass, wenn ein Spieler mit weniger als 100HP sich teleportiert, nach der Spawnprotection nicht mehr seinen ursprünglichen HP/AP Wert zugeteilt bekommt, sondern wieder alles aufgefüllt ist. Das ganze soll AUSSCHLIESSLICH in der virtuellen Welt 0 stattfinden, da alle anderen virtuellen Welten DM Arenen sind und dort alles läuft, wie es laufen soll.


    Was ich mir beim Scripten gedacht habe:
    Mittels "SavePlayerHPandAP(playerid);" möchte ich den HP und AP Wert beim Teleportieren speichern. Die Variablen sind im enum aufgelistet.
    Dann wird die Spawnprotection gesetzt. Wenn diese aussetzt, werden die Werte aus den Variablen ausgelesen und dementsprechend HP und AP gesetzt.


    Falls zusätzliche Informationen oder Codeschnipsel gebraucht werden, bitte ich euch sie anzufordern!

  • Genau wie du es machen willst , sollte es gehen.
    Bin gerade leider am PC deshalb werde ich heute abend mal dir den Code schreiben.
    Wenn mir einer zuvor kommt , kein Problem ;)


    MFG

    Mit freundlichen Grüßen
    [color=#696969][i][b]Maxi
    [tabmenu]
    [tab='Signatur!']

    [tab='Mein Computer System']

    • Gehäuse Delux SH891 Midi-Tower (ATX) schwarz
    • Netzteil 650 Watt Corsair VS650
    • Festplatte 1000GB SATA III 7200upm
    • Mainboard AM3 Gigabyte GA-970A-UD3P (Chipsatz:AMD 970/SB950/ATX)
    • NVIDIA Geforce GTX 770 Gainward Phantom
    • 8192MB DDR3 Single Channel 1600MHz
    • Prozessor AM3+ (FX-Serie) AMD FX-8350 8x 4.0 GHz


    [tab='Meine Handys']

    • HTC ONE M8
    • Samsung S3 mini
    • Vll bald HTC ONE M7


    [tab='Mein Steam Account = 1']

  • Danke für deine Hilfsbereitschaft!


    ... aber Probieren geht über Studieren. Ich hab die Lösung gefunden. ;)
    Ich habe im EndSpawnProtection Timer die if-Abfrage ein wenig angepasst. Mir ist aufgefallen, dass is die AP überhaupt nicht abfragen muss, sondern nur die HP.
    if(PlayerHPandAP[playerid][health] > 0 && PlayerHPandAP[playerid][health] < 100)
    Jetzt klappt alles wunderbar! :)


    Erledigt.