PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#define PLUGIN "DeathBones"
#define VERSION "1.1.0"
#define AUTHOR "mogel"
#define BONE_ALPHA_TASK_BASIS 1000
new pcv_deathmatch // Deathmatch-Support
new pcv_bonestime // anzeigen der Bones
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_message(get_user_msgid("DeathMsg"), "Event_Death")
register_event("HLTV", "Event_FreezeTime", "a", "1=0", "2=0")
register_cvar("DeathBones", VERSION, FCVAR_SERVER | FCVAR_SPONLY | FCVAR_UNLOGGED)
pcv_deathmatch = register_cvar("db_deathmatch", "0") // per default kein DM-Support
pcv_bonestime = register_cvar("db_bonestime", "30.0") // 30 Sekunden
}
public plugin_precache() {
precache_model("models/skeleton.mdl")
}
public Event_FreezeTime() {
new players[32], count
get_players(players, count, "h")
for(new i = 0; i < count; i++)
{
new player = players[i]
// Render zurück setzen
set_pev(player, pev_renderfx, kRenderFxNone)
set_pev(player, pev_rendercolor, 255,255,255)
set_pev(player, pev_rendermode, kRenderNormal)
set_pev(player, pev_renderamt, 0.0)
}
fm_remove_entity_name("deathbones")
}
public Event_Death() {
new player = get_msg_arg_int(2)
new Float:bones[3]
new Float:angle[3]
set_pev(player, pev_origin, bones)
set_pev(player, pev_angles, angle)
bones[2] -= 32.0 // gleich nach unten setzen
// Bones erstellen
new entity = fm_create_entity("info_target")
set_pev(entity, pev_classname, "deathbones")
engfunc(EngFunc_SetModel, entity, "models/skeleton.mdl")
set_pev(entity, pev_origin, bones)
set_pev(entity, pev_angles, angle)
set_pev(entity, pev_movetype, MOVETYPE_TOSS)
set_pev(entity, pev_solid, SOLID_NOT)
// Bones erstmal unsichtbar
set_pev(entity, pev_renderfx, kRenderFxNone)
set_pev(entity, pev_rendercolor, 255,255,255)
set_pev(entity, pev_rendermode, kRenderTransAlpha)
set_pev(entity, pev_renderamt, 0.0)
// Spieler durch Bones wechseln
set_pev(entity, pev_euser3, player) // den Bones dem Spieler zuweisen
set_pev(entity, pev_euser4, 0) // aktuelles Alpha für die Bones
set_task(1.0, "BonesAlphaIn", entity)
}
public BonesAlphaIn(bones) {
if (!pev_valid(bones)) return
new alpha = pev(bones, pev_iuser4) + 1
new player = pev(bones, pev_iuser3)
// Spieler ausblenden, aber nur wenn kein DM-Modus
if ((pev_valid(player)) && !get_pcvar_num(pcv_deathmatch))
{
set_pev(player, pev_renderfx, kRenderFxNone)
set_pev(player, pev_rendercolor, 255,255,255)
set_pev(player, pev_rendermode, kRenderTransAlpha)
set_pev(player, pev_renderamt, float(256 - alpha * 16))
}
if (pev_valid(bones))
{
set_pev(bones, pev_renderfx, kRenderFxNone)
set_pev(bones, pev_rendercolor, 255,255,255)
set_pev(bones, pev_rendermode, kRenderTransAlpha)
set_pev(bones, pev_renderamt, float(alpha * 16 - 1))
}
// neuen Alpha-Wert merken
set_pev(bones, pev_iuser4, alpha)
// jetzt entscheiden .. .weiter Alpha oder liegen lassen
if (alpha >= 16)
{
// wenn kein DM dann Spieler jetzt nach unten setzen
if (!get_pcvar_num(pcv_deathmatch))
{
// Bones werden am Rundenanfng automatisch gelöscht
PlayerMove(player)
} else
{
// im DM-Modus nach X Sekunden wieder ausblenden
set_task(get_pcvar_float(pcv_bonestime), "BonesAlphaOut", bones)
}
} else
{
set_task(0.1, "BonesAlphaIn", bones)
}
}
public BonesAlphaOut(bones) {
if (!pev_valid(bones)) return
new alpha = pev(bones, pev_iuser4) - 1
if (pev_valid(bones))
{
set_pev(bones, pev_renderfx, kRenderFxNone)
set_pev(bones, pev_rendercolor, 255,255,255)
set_pev(bones, pev_rendermode, kRenderTransAlpha)
set_pev(bones, pev_renderamt, float(alpha * 16 - 1))
}
// neuen Alpha-Wert merken
set_pev(bones, pev_iuser4, alpha)
// jetzt entscheiden .. .weiter Alpha oder killen
if (alpha)
{
set_task(0.1, "BonesAlphaOut", bones)
} else
{
fm_remove_entity(bones)
}
}
public PlayerMove(player) {
new Float:pos[3]
pev(player, pev_origin, pos)
pos[2] -= 2000.0
set_pev(player, pev_origin, pos)
}