#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <engine>
#include <xs>
#include <fun>
#include <hamsandwich>
#include <cstrike>
//Az alsó stock része(drop_pri)
new const priwpns[][] = {
"weapon_shield",
"weapon_scout",
"weapon_xm1014",
"weapon_mac10",
"weapon_aug",
"weapon_ump45",
"weapon_sg550",
"weapon_galil",
"weapon_famas",
"weapon_awp",
"weapon_mp5navy",
"weapon_m249",
"weapon_m3",
"weapon_m4a1",
"weapon_tmp",
"weapon_g3sg1",
"weapon_sg552",
"weapon_ak47",
"weapon_p90"
}
#define GAK47_WEAPONKEY 12553 //ez teljesen mindegy mi csak random legyen és két fegyónál ne használjuk egyan azt...
new bool:has_gak47[33]
new lastammo[33],in_reload[33],gak_clip[33]
new Float:cl_pushangle[33][3]
new v_model[64] = "models/v_goldak47.mdl"
new p_model[64] = "models/p_goldak47.mdl"
new w_model[64] = "models/w_goldak47.mdl"
new cvar_dmgx,cvar_cost,cvar_recoil,cvar_rof,cvar_clip,cvar_ammo,cvar_reload_time
public plugin_init() {
register_plugin("Arany AK","1.0","Nandee")
cvar_dmgx=register_cvar("gak47_dmgx","1.8")//Sebzés szorzó
cvar_cost=register_cvar("gak47_cost","5000")//Ár
cvar_recoil=register_cvar("gak47_recoil","1.5")//Visszalökés szorzó
cvar_rof=register_cvar("gak47_rof","1.2")//Sebzés sebesség szorzó(Rate of fire)
cvar_clip=register_cvar("gak47_clip","45")//Egyszerre betárazható golyók száma
cvar_ammo=register_cvar("gak47_ammo","4")//Tárolható tárak száma
cvar_reload_time=register_cvar("gak47_reload_time","4.0")//Újratöltési idő szorzó
register_clcmd("say /gak47","buy_gak47")
register_clcmd("weapon_gak47","switch_weapon")
register_event("CurWeapon","event_curwpn","be","1=1")
register_event("CurWeapon","make_tracer", "be", "1=1", "3>0")
register_event("DeathMsg","event_death","a")
register_message(get_user_msgid("DeathMsg"),"msg_death")
register_forward(FM_SetModel, "fw_setmodel")
RegisterHam(Ham_Item_AddToPlayer,"weapon_ak47","hevent_atp",.Post=true)
RegisterHam(Ham_TakeDamage,"player","hevent_damage")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "hevent_primary_attack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "hevent_primary_attack_post",1)
RegisterHam(Ham_Item_PostFrame,"weapon_ak47","hevent_postframe")
RegisterHam(Ham_Weapon_Reload,"weapon_ak47","hevent_reload")
RegisterHam(Ham_Weapon_Reload,"weapon_ak47","hevent_reload_post",1)
}
public plugin_precache()
{
precache_model(p_model)
precache_model(v_model)
precache_model(w_model)
}
//Vásárlás
public buy_gak47(id)
{
new cost=get_pcvar_num(cvar_cost)
if(!is_user_alive(id)||!is_user_connected(id))
return
else if(cs_get_user_money(id)<cost)
{
client_print(id,print_chat,"[GAK47] Nem eleg a penzed!")
return
}
else if(has_gak47[id]&&user_has_weapon(id,CSW_AK47))
{
client_print(id,print_chat,"[GAK47] Neked mar van Arany AK47-d!")
return
}
else
{
client_print(id,print_chat,"[GAK47] Sikeres vasarlas!")
cs_set_user_money(id,cs_get_user_money(id)-cost)
drop_pri(id)
new wpn=give_item(id,"weapon_ak47")
if(wpn>0)
{
cs_set_weapon_ammo(wpn,get_pcvar_num(cvar_clip))
//Ha a következő sort kitörlöd, akkor nem teljes tárral kapja
cs_set_user_bpammo (id,CSW_AK47,get_pcvar_num(cvar_clip)*get_pcvar_num(cvar_ammo))
}
engclient_cmd(id,"weapon_ak47")
has_gak47[id]=true
replace_weapon_models(id)
}
}
//Csatlakozáskor/lekapcsolódáskor/halálkor elveszik
public client_connect(id)
has_gak47[id]=false
public client_disconnect(id)
has_gak47[id]=false
public event_death()
has_gak47[read_data(2)]=false
//konzol üzenet megváltoztatása
public msg_death(msg_id, msg_dest, id)
{
new weapon[33], attacker
get_msg_arg_string(4,weapon, charsmax(weapon))
attacker=get_msg_arg_int(1)
if(equal(weapon,"ak47")&&get_user_weapon(attacker)==CSW_AK47&&has_gak47[attacker]&&is_user_connected(attacker))
set_msg_arg_string(4,"golden ak47")
return PLUGIN_CONTINUE
}
//konzol parancsra elővétel, ez szokott lenni a fegyvereknél...
public switch_weapon(id)
{
if(has_gak47[id]&&get_user_weapon(id)!=CSW_AK47)
engclient_cmd(id,"weapon_ak47")
}
//ha ak47 van a kezébe és van gold ak-ja akkor megszorozza a sebzést a cvarral
public hevent_damage(id, inflictor, attacker, Float:damage)
{
if(get_user_weapon(attacker)==CSW_AK47&&has_gak47[attacker])
{
SetHamParamFloat(4,damage*get_pcvar_float(cvar_dmgx))
}
}
//Modellek megváltoztatása
public replace_weapon_models(id)
{
if(is_user_alive(id)&&get_user_weapon(id)==CSW_AK47&&has_gak47[id])
{
set_pev(id, pev_viewmodel2,v_model)
set_pev(id, pev_weaponmodel2,p_model)
}
}
//Amikor ak47-re vált modellt változtat
//Lövés sebesség beállítása
public event_curwpn(id)
{
replace_weapon_models(id)
if(is_user_alive(id)&&get_user_weapon(id)==CSW_AK47&&has_gak47[id])
{
new ent=fm_find_ent_by_owner(-1,"weapon_ak47",id)//fm_util kell hozzá!
if(!ent)
return PLUGIN_CONTINUE
new Float:delay,Float:m_delay
delay=get_pdata_float(ent,46,4)*get_pcvar_float(cvar_rof)
m_delay=get_pdata_float(ent,47,4)*get_pcvar_float(cvar_rof)
if(delay>0.0)
{
set_pdata_float(ent,46,delay,4)
set_pdata_float(ent,47,m_delay,4)
}
}
return PLUGIN_HANDLED
}
//Eldobáskor megváltoztatja a modell-t és eltárolja rajta az GAK47_WEAPONKEY-t
//azért hogyha felveszi betudja azonosítani, hogy ez nem sima ak...
public fw_setmodel(ent, model[])
{
if(!is_valid_ent(ent))
return FMRES_IGNORED
new classname[33]
entity_get_string(ent, EV_SZ_classname, classname, charsmax(classname))
if(!equal(classname, "weaponbox"))
return FMRES_IGNORED
new owner=entity_get_edict(ent,EV_ENT_owner)
if(equal(model, "models/w_ak47.mdl"))
{
new weaponid=find_ent_by_owner(-1,"weapon_ak47", ent)
if(!is_valid_ent(weaponid))
return FMRES_IGNORED
if(has_gak47[owner])
{
entity_set_int(weaponid,EV_INT_impulse, GAK47_WEAPONKEY)
has_gak47[owner]=false
entity_set_model(ent,w_model)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
//Felvételkor megnézi, hogy arany ak-e
public hevent_atp(item,id)
{
if(entity_get_int(item,EV_INT_impulse)==GAK47_WEAPONKEY)
{
has_gak47[id]=true
entity_set_int(item,EV_INT_impulse,0)
}
}
//Visszalökés szorzó beállítása
public hevent_primary_attack(ent)
{
new id = pev(ent,pev_owner)
if(get_user_weapon(id)==CSW_AK47&&has_gak47[id])
pev(id,pev_punchangle,cl_pushangle[id])
return HAM_IGNORED
}
public hevent_primary_attack_post(ent)
{
new id = pev(ent,pev_owner)
if(get_user_weapon(id)==CSW_AK47&&has_gak47[id])
{
new Float:push[3]
pev(id,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[id],push)
xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
xs_vec_add(push,cl_pushangle[id],push)
set_pev(id,pev_punchangle,push)
}
return HAM_IGNORED
}
//Arany golyók létrehozása...
public make_tracer(id)
{
new clip=read_data(3)
if(lastammo[id]>clip&&get_user_weapon(id)==CSW_AK47&&has_gak47[id])
{
new o1[3],o2[3]
get_user_origin(id,o1,1)//Fegyver végpontja
get_user_origin(id,o2,4)//Utolsó lövés koordinátája
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_TRACER)//Arany golyók
write_coord(o1[0])//kezdő koordináta x
write_coord(o1[1])//kezdő koordináta y
write_coord(o1[2])//kezdő koordináta z
write_coord(o2[0])//végső koordináta x
write_coord(o2[1])//végső koordináta y
write_coord(o2[2])//végső koordináta z
message_end()
lastammo[id]=clip
}
}
//Lőszer beállítása
public hevent_postframe(ent)
{
new id=pev(ent,pev_owner)
if(!is_user_connected(id)||!has_gak47[id])
return HAM_IGNORED
new Float:nextattack=get_pdata_float(id,83, 5)
new bpammo=cs_get_user_bpammo(id, CSW_AK47)
new clip=get_pdata_int(ent,51,4)
new inreload=get_pdata_int(ent,54, 4)
if(inreload&&nextattack<= 0.0 )
{
new j=min(get_pcvar_num(cvar_clip)-clip,bpammo)
set_pdata_int(ent,51,clip+j,4)
cs_set_user_bpammo(id, CSW_AK47, bpammo-j)
set_pdata_int(ent,54, 0,4)
inreload=0
in_reload[id]=0
}
return HAM_IGNORED
}
public hevent_reload(ent)
{
new id=pev(ent,pev_owner)
if(!is_user_connected(id)||!has_gak47[id])
return HAM_IGNORED
gak_clip[id] = -1
new bpammo=cs_get_user_bpammo(id, CSW_AK47)
new clip=get_pdata_int(ent,51,4)
if(bpammo<=0||clip>=get_pcvar_num(cvar_clip))
return HAM_SUPERCEDE
gak_clip[id]=clip
in_reload[id]=1
return HAM_IGNORED
}
public hevent_reload_post(ent)
{
new id=pev(ent,pev_owner)
if(!is_user_connected(id)||!has_gak47[id]||gak_clip[id]==1)
return HAM_IGNORED
new bpammo=cs_get_user_bpammo(id, CSW_AK47)
new clip=get_pdata_int(ent,51,4)
if(bpammo<=0||clip>=get_pcvar_num(cvar_clip))
return HAM_SUPERCEDE
set_pdata_int(ent,51,gak_clip[id], 4)
set_pdata_float(ent,48,get_pdata_float(ent,48,4)*get_pcvar_float(cvar_reload_time),4)
set_pdata_float(id,83,get_pdata_float(id,83,5)*get_pcvar_float(cvar_reload_time),5)
set_pdata_int(ent,54,1,4)
return HAM_IGNORED;
}
//:::STOCK:::
//Egy saját stockom(erre copyright van xD)
//Eldobja ez elsődleges fegyvert
stock drop_pri(id)
{
for(new j = 0; j < sizeof priwpns; j++)
{
engclient_cmd(id,"drop", priwpns[j])
}
}