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!