Уважаемые, все просто.
Есть плагин:
Код:
#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <colorchat>
#define is_valid_player(%1) (1 <= %1 <= 32)
#define ZOOM
#define WK 3333
new const AK47_BIT_SUM = (1<<CSW_AK47)
new AK_V_MODEL[64] = "models/v_golden_ak47.mdl"
new AK_P_MODEL[64] = "models/p_golden_ak47.mdl"
new AK_W_MODEL[64] = "models/w_golden_ak47.mdl"
new g_hasZoom[33], gold_damage, golden_model, goldak_cost
new bool:g_HasAk[33]
public plugin_init() {
register_plugin("GoldenAK47 Remake ", "1.1", "Alienware")
register_clcmd("say /goldenak", "cmdGoldenAk")
gold_damage = register_cvar("goldenak_dmg", "5")
golden_model = register_cvar("goldenak_custommodel", "1")
goldak_cost = register_cvar("goldenak_cost", "3000")
register_event("WeapPickup", "checkModel", "b","1=19")
register_event("CurWeapon", "checkWeapon", "be","1=1")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_Item_AttachToPlayer, "weapon_ak47", "AttachToPlayer")
#if defined ZOOM
register_forward(FM_CmdStart, "fw_CmdStart")
#endif
register_forward(FM_SetModel, "fw_SetModel")
}
public client_connect(id)
g_HasAk[id] = false
public client_disconnect(id)
g_HasAk[id] = false
public plugin_precache() {
precache_model(AK_V_MODEL)
precache_model(AK_P_MODEL)
precache_model(AK_W_MODEL)
precache_sound("weapons/zoom.wav")
}
public cmdGoldenAk(id) {
if(!is_user_alive(id)) return
new money = cs_get_user_money(id)
if(money < get_pcvar_num(goldak_cost)) {
ColorChat(id, GREEN, "^x01У вас недостаточно денег")
return
}
drop_weapon(id, 1)
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, 90)
cs_set_user_money(id, money - get_pcvar_num(goldak_cost))
ColorChat(id, GREEN, "^x01[^x04Сервер^x01] Вы купили^x04 Gold AK-47")
g_HasAk[id] = true
}
public checkModel(id) {
new szWeapID = read_data(2)
if(szWeapID == CSW_AK47 && g_HasAk[id] == true && get_pcvar_num(golden_model) == 1) {
set_pev(id, pev_viewmodel2, AK_V_MODEL)
set_pev(id, pev_weaponmodel2, AK_P_MODEL)
}
return PLUGIN_HANDLED
}
public checkWeapon(id) {
new plrWeapId
plrWeapId = get_user_weapon(id)
if (plrWeapId == CSW_AK47 && g_HasAk[id])
checkModel(id)
else
return PLUGIN_CONTINUE
return PLUGIN_HANDLED
}
public fw_Item_AttachToPlayer(ent, id) {
if(pev_valid(ent) != 2 || !is_user_alive(id) )
return HAM_IGNORED
if(pev(ent, pev_impulse) == WK)
g_HasAk[id] = true
return HAM_IGNORED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage) {
if(is_valid_player(attacker) && get_user_weapon(attacker) == CSW_AK47 && g_HasAk[attacker])
SetHamParamFloat(4, damage * get_pcvar_float(gold_damage))
}
#if defined ZOOM
public fw_CmdStart( id, uc_handle, seed ) {
if(!is_user_alive(id))
return PLUGIN_HANDLED
if((get_uc(uc_handle, UC_Buttons) & IN_ATTACK2) && !( pev(id, pev_oldbuttons) & IN_ATTACK2)) {
new szWeapID = get_user_weapon(id)
if(szWeapID == CSW_AK47 && g_HasAk[id] == true && !g_hasZoom[id] == true) {
g_hasZoom[id] = true
cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 0)
emit_sound(id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100)
} else if(szWeapID == CSW_AK47 && g_HasAk[id] == true && g_hasZoom[id]) {
g_hasZoom[id] = false
cs_set_user_zoom(id, CS_RESET_ZOOM, 0)
}
}
return PLUGIN_HANDLED
}
#endif
public fw_SetModel(entity, model[]) {
if(!pev_valid(entity))
return FMRES_IGNORED
static szClassName[33]
pev(entity, pev_classname, szClassName, charsmax(szClassName))
if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED
static id
id = pev(entity, pev_owner)
if(equal(model, "models/w_ak47.mdl")) {
static weapon
weapon = fm_find_ent_by_owner(-1, "weapon_ak47", entity)
if(!pev_valid(weapon))
return FMRES_IGNORED
if(g_HasAk[id]) {
set_pev(weapon, pev_impulse, 1942)
engfunc(EngFunc_SetModel, entity, AK_W_MODEL)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
stock drop_weapon(id, dropwhat) {
static weapons[32], num, i, weaponid
num = 0
get_user_weapons(id, weapons, num)
for (i = 0; i < num; i++) {
weaponid = weapons[i]
if ((dropwhat == 1 && ((1<<weaponid) & AK47_BIT_SUM))) {
static wname[32]
get_weaponname(weaponid, wname, charsmax(wname))
engclient_cmd(id, "drop", wname)
}
}
}
А вот собственно ошибка в логах:
Код
L 10/18/2015 - 13:18:30: Info (map "de_oC2") (file "addons/amxmodx/logs/error_20151018.log")
L 10/18/2015 - 13:18:30: [HAMSANDWICH] Function AttachToPlayer not found.
L 10/18/2015 - 13:18:30: [AMXX] Displaying debug trace (plugin "goldenak.amxx")
L 10/18/2015 - 13:18:30: [AMXX] Run time error 10: native error (native "RegisterHam")
L 10/18/2015 - 13:18:30: [AMXX] [0] 042f4a76daafba1732bb03947c0edb5b.sma::plugin_init (line 35)