Kod:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#define PLUGIN "Kan Efekti"
#define VERSION "1.0"
#define AUTHOR "HmmS"
new g_iBloodSpray
new g_iBloodDrop
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_TakeDamage, "player", "OnTakeDamage_Post", 1)
RegisterHam(Ham_Killed, "player", "OnPlayerKilled_Pre", 0)
register_forward(FM_TraceAttack, "OnTraceAttack_Pre", 0)
}
public plugin_precache()
{
// Kan sprite dosyalarini yukle
g_iBloodSpray = precache_model("sprites/bloodspray.spr")
g_iBloodDrop = precache_model("sprites/blood.spr")
}
public OnTakeDamage_Post(iVictim, iInflictor, iAttacker, Float:flDamage, iDamageBits)
{
// Sadece canli oyunculara
if(!is_user_alive(iVictim))
return HAM_IGNORED
// Sadece diger oyunculardan gelen hasarda
if(!is_user_connected(iAttacker) || iAttacker == iVictim)
return HAM_IGNORED
// Kendi kendine zarar (ates, bici) - kan efekti gosterme
if(iDamageBits & (DMG_BURN | DMG_DROWN | DMG_FALL))
return HAM_IGNORED
new Float:fOrigin[3]
pev(iVictim, pev_origin, fOrigin)
// verilen hasara göre kan miktarı
new iKanMiktari
if(flDamage >= 80.0)
iKanMiktari = 6 // Cok buyuk hasar - cok fazla kan
else if(flDamage >= 50.0)
iKanMiktari = 5 // Buyuk hasar
else if(flDamage >= 30.0)
iKanMiktari = 4 // Orta hasar
else if(flDamage >= 15.0)
iKanMiktari = 3 // Kucuk hasar
else
iKanMiktari = 2 // Minimal hasar
// Kan efektini goster
KanEfektiGoster(fOrigin, iKanMiktari)
return HAM_IGNORED
}
KanEfektiGoster(Float:fOrigin[3], iMiktar)
{
new iOrigin[3]
iOrigin[0] = floatround(fOrigin[0])
iOrigin[1] = floatround(fOrigin[1])
iOrigin[2] = floatround(fOrigin[2]) + 20 // Biraz yukari kaydir
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
write_coord(iOrigin[0])
write_coord(iOrigin[1])
write_coord(iOrigin[2])
write_short(g_iBloodSpray)
write_short(g_iBloodDrop)
write_byte(247) // Kirmizi renk (kan)
write_byte(iMiktar + 3) // Boyut - miktara gore
message_end()
for(new i = 0; i < iMiktar; i++)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
write_coord(iOrigin[0] + random_num(-12, 12))
write_coord(iOrigin[1] + random_num(-12, 12))
write_coord(iOrigin[2] + random_num(-5, 15))
write_short(g_iBloodSpray)
write_short(g_iBloodDrop)
write_byte(247)
write_byte(random_num(2, 4))
message_end()
}
}
public OnPlayerKilled_Pre(iVictim, iKiller, iShouldGib)
{
// iShouldGib parametresini 0 yap = parcalanma olmaz
// 2 = parcalanir, 0 veya 1 = normal olum animasyonu
SetHamParamInteger(3, 0)
return HAM_HANDLED
}
public OnTraceAttack_Pre(iEntity, iAttacker, Float:flDamage, Float:fDirection[3], iTrace, iDamageBits)
{
if(!is_user_connected(iEntity))
{
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
işini göreceğini düşünüyorum spr dosyalarının varlığını doğruladığın taktirde düzgün bir şekilde çalışır derleme sorunu verirse hatayı yaz yardımcı olurum