Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Сравнение 2-ух плагинов

Статус пользователя Slavik
сообщение 16.8.2019, 9:44
Сообщение #1


Стаж: 12 лет

Сообщений: 185
Благодарностей: 13
Полезность: < 0

Уважаемый друзья, подскажите пожалуйста, какой плагин менее нагружает сервер и лучше использовать, сам подозреваю, что тот, где не используется Curweapon.

1 вариант с CurWeapon

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <cstrike>

#define ENG_NULLENT -1
#define EV_INT_WEAPONKEY EV_INT_impulse
#define akdragon_WEAPONKEY 825
#define MAX_PLAYERS 32
#define IsValidUser(%1) (1 <= %1 <= g_MaxPlayers)

const USE_STOPPED = 0
const OFFSET_ACTIVE_ITEM = 373
const OFFSET_WEAPONOWNER = 41
const OFFSET_LINUX = 5
const OFFSET_LINUX_WEAPONS = 4

#define WEAP_LINUX_XTRA_OFF 4
#define m_fKnown 44
#define m_flNextPrimaryAttack 46
#define m_flTimeWeaponIdle 48
#define m_iClip 51
#define m_fInReload 54
#define PLAYER_LINUX_XTRA_OFF 5
#define m_flNextAttack 83

#define AK47DRAGON_RELOAD_TIME 2.4
#define AK47DRAGON_RELOAD 1
#define AK47DRAGON_DRAW 2
#define AK47DRAGON_SHOOT1 3
#define AK47DRAGON_SHOOT2 4

#define write_coord_f(%1) engfunc(EngFunc_WriteCoord,%1)

new const Fire_Sounds[][] = { "weapons/ak47-1.wav" }

new akdragon_V_MODEL[64] = "models/zm/weapons/ak47dragon/v_akd.mdl"
new akdragon_P_MODEL[64] = "models/zm/weapons/ak47dragon/p_akd.mdl"
new akdragon_W_MODEL[64] = "models/zm/weapons/ak47dragon/w_akd.mdl"

new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }

new cvar_dmg_akdragon, cvar_recoil_akdragon, g_itemid_akdragon, cvar_clip_akdragon, cvar_spd_akdragon, cvar_akdragon_ammo, cvar_akdragon_cost
new g_MaxPlayers, g_orig_event_akdragon, g_IsInPrimaryAttack
new Float:cl_pushangle[MAX_PLAYERS + 1][3], m_iBlood[2]
new g_has_akdragon[33], g_clip_ammo[33], g_akdragon_TmpClip[33], oldweap[33]

const PRIMARY_WEAPONS_BIT_SUM =
(1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<
CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_knife", "weapon_p90" }

public plugin_init()
{
register_plugin("[ZP] Extra: AK47 Red Dragon", "1.0", "Crock / =)")
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
register_event("CurWeapon","CurrentWeapon","be","1=1")
RegisterHam(Ham_Item_AddToPlayer, "weapon_ak47", "fw_akdragon_AddToPlayer")
RegisterHam(Ham_Use, "func_tank", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankmortar", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tankrocket", "fw_UseStationary_Post", 1)
RegisterHam(Ham_Use, "func_tanklaser", "fw_UseStationary_Post", 1)
for (new i = 1; i < sizeof WEAPONENTNAMES; i++)
if (WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Item_Deploy_Post", 1)
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_akdragon_PrimaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_ak47", "fw_akdragon_PrimaryAttack_Post", 1)
RegisterHam(Ham_Item_PostFrame, "weapon_ak47", "akdragon_ItemPostFrame")
RegisterHam(Ham_Weapon_Reload, "weapon_ak47", "akdragon_Reload")
RegisterHam(Ham_Weapon_Reload, "weapon_ak47", "akdragon_Reload_Post", 1)
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
register_forward(FM_SetModel, "fw_SetModel")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_PlaybackEvent, "fwPlaybackEvent")

RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1)

cvar_dmg_akdragon = register_cvar("zp_akdragon_dmg", "1.0")
cvar_recoil_akdragon = register_cvar("zp_akdragon_recoil", "0.6")
cvar_clip_akdragon = register_cvar("zp_akdragon_clip", "33")
cvar_spd_akdragon = register_cvar("zp_akdragon_spd", "1.0")
cvar_akdragon_ammo = register_cvar("zp_akdragon_ammo", "200")
cvar_akdragon_cost = register_cvar("akdragon_cost", "6000")

g_MaxPlayers = get_maxplayers()
}

public plugin_precache()
{
precache_model(akdragon_V_MODEL)
precache_model(akdragon_P_MODEL)
precache_model(akdragon_W_MODEL)
for(new i = 0; i < sizeof Fire_Sounds; i++)
precache_sound(Fire_Sounds[i])
m_iBlood[0] = precache_model("sprites/blood.spr")
m_iBlood[1] = precache_model("sprites/bloodspray.spr")

register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
}

public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
if(!is_user_alive(iAttacker))
return

new g_currentweapon = get_user_weapon(iAttacker)

if(g_currentweapon != CSW_AK47) return

if(!g_has_akdragon[iAttacker]) return

static Float:flEnd[3]
get_tr2(ptr, TR_vecEndPos, flEnd)

if(iEnt)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(iEnt)
message_end()
}
else
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
write_coord_f(flEnd[0])
write_coord_f(flEnd[1])
write_coord_f(flEnd[2])
write_short(iAttacker)
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}

public plugin_natives ()
{
register_native("give_weapon_akdragon", "native_give_weapon_add", 1)
}
public native_give_weapon_add(id)
{
give_akdragon(id)
}

public fwPrecacheEvent_Post(type, const name[])
{
if (equal("events/ak47.sc", name))
{
g_orig_event_akdragon = get_orig_retval()
return FMRES_HANDLED
}
return FMRES_IGNORED
}

public client_connect(id)
{
g_has_akdragon[id] = false
}

public client_disconnect(id)
{
g_has_akdragon[id] = false
}

public fw_SetModel(entity, model[])
{
if(!is_valid_ent(entity))
return FMRES_IGNORED

static szClassName[33]
entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))

if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED

static iOwner

iOwner = entity_get_edict(entity, EV_ENT_owner)

if(equal(model, "models/w_ak47.mdl"))
{
static iStoredAugID

iStoredAugID = find_ent_by_owner(ENG_NULLENT, "weapon_ak47", entity)

if(!is_valid_ent(iStoredAugID))
return FMRES_IGNORED

if(g_has_akdragon[iOwner])
{
entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, akdragon_WEAPONKEY)

g_has_akdragon[iOwner] = false

entity_set_model(entity, akdragon_W_MODEL)

return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}

public give_akdragon(id)
{

new money = cs_get_user_money(id)

if(money < get_pcvar_num(cvar_akdragon_cost)) {
ChatColor(id, "^x01У вас недостаточно денег")
return
}

drop_weapons(id, 1)
new iWep2 = give_item(id,"weapon_ak47")
if( iWep2 > 0 )
{
cs_set_weapon_ammo(iWep2, get_pcvar_num(cvar_clip_akdragon))
cs_set_user_bpammo (id, CSW_AK47, get_pcvar_num(cvar_akdragon_ammo))
// UTIL_PlayWeaponAnimation(id, AK47DRAGON_DRAW)
cs_set_user_money(id, money - get_pcvar_num(cvar_akdragon_cost))
set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
}
g_has_akdragon[id] = true
}

public vbkjhdfiugd(id, itemid)
{
if(itemid != g_itemid_akdragon)
return

give_akdragon(id)
}

public fw_akdragon_AddToPlayer(akdragon, id)
{
if(!is_valid_ent(akdragon) || !is_user_connected(id))
return HAM_IGNORED

if(entity_get_int(akdragon, EV_INT_WEAPONKEY) == akdragon_WEAPONKEY)
{
g_has_akdragon[id] = true

entity_set_int(akdragon, EV_INT_WEAPONKEY, 0)

return HAM_HANDLED
}
return HAM_IGNORED
}

public fw_UseStationary_Post(entity, caller, activator, use_type)
{
if (use_type == USE_STOPPED && is_user_connected(caller))
replace_weapon_models(caller, get_user_weapon(caller))
}

public fw_Item_Deploy_Post(weapon_ent)
{
static owner
owner = fm_cs_get_weapon_ent_owner(weapon_ent)

static weaponid
weaponid = cs_get_weapon_id(weapon_ent)

replace_weapon_models(owner, weaponid)
}

public CurrentWeapon(id)
{
replace_weapon_models(id, read_data(2))

if(read_data(2) != CSW_AK47 || !g_has_akdragon[id])
return

static Float:iSpeed
if(g_has_akdragon[id])
iSpeed = get_pcvar_float(cvar_spd_akdragon)

static weapon[32],Ent
get_weaponname(read_data(2),weapon,31)
Ent = find_ent_by_owner(-1,weapon,id)
if(Ent)
{
static Float:Delay
Delay = get_pdata_float( Ent, 46, 4) * iSpeed
if (Delay > 0.0)
{
set_pdata_float(Ent, 46, Delay, 4)
}
}
}

replace_weapon_models(id, weaponid)
{
switch (weaponid)
{
case CSW_AK47:
{

if(g_has_akdragon[id])
{
set_pev(id, pev_viewmodel2, akdragon_V_MODEL)
set_pev(id, pev_weaponmodel2, akdragon_P_MODEL)
if(oldweap[id] != CSW_AK47)
{
UTIL_PlayWeaponAnimation(id, AK47DRAGON_DRAW)
set_pdata_float(id, m_flNextAttack, 1.0, PLAYER_LINUX_XTRA_OFF)
}
}
}
}
oldweap[id] = weaponid
}

public fw_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
{
if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_AK47 || !g_has_akdragon[Player]))
return FMRES_IGNORED

set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
return FMRES_HANDLED
}

public fw_akdragon_PrimaryAttack(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)

if (!g_has_akdragon[Player])
return

g_IsInPrimaryAttack = 1
pev(Player,pev_punchangle,cl_pushangle[Player])

g_clip_ammo[Player] = cs_get_weapon_ammo(Weapon)
}

public fwPlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
if ((eventid != g_orig_event_akdragon) || !g_IsInPrimaryAttack)
return FMRES_IGNORED
if (!(1 <= invoker <= g_MaxPlayers))
return FMRES_IGNORED

playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
return FMRES_SUPERCEDE
}

public fw_akdragon_PrimaryAttack_Post(Weapon)
{
g_IsInPrimaryAttack = 0
new Player = get_pdata_cbase(Weapon, 41, 4)

new szClip, szAmmo
get_user_weapon(Player, szClip, szAmmo)

if(!is_user_alive(Player))
return

if(g_has_akdragon[Player])
{
if (!g_clip_ammo[Player])
return

new Float:push[3]
pev(Player,pev_punchangle,push)
xs_vec_sub(push,cl_pushangle[Player],push)

xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil_akdragon),push)
xs_vec_add(push,cl_pushangle[Player],push)
set_pev(Player,pev_punchangle,push)

emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
UTIL_PlayWeaponAnimation(Player, random_num(AK47DRAGON_SHOOT1, AK47DRAGON_SHOOT2))
}
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
if (victim != attacker && is_user_connected(attacker))
{
if(get_user_weapon(attacker) == CSW_AK47)
{
if(g_has_akdragon[attacker])
SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmg_akdragon))
}
}
}

public message_DeathMsg(msg_id, msg_dest, id)
{
static szTruncatedWeapon[33], iAttacker, iVictim

get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))

iAttacker = get_msg_arg_int(1)
iVictim = get_msg_arg_int(2)

if(!is_user_connected(iAttacker) || iAttacker == iVictim)
return PLUGIN_CONTINUE

if(equal(szTruncatedWeapon, "ak47") && get_user_weapon(iAttacker) == CSW_AK47)
{
if(g_has_akdragon[iAttacker])
set_msg_arg_string(4, "ak47")
}
return PLUGIN_CONTINUE
}

stock fm_cs_get_current_weapon_ent(id)
{
return get_pdata_cbase(id, OFFSET_ACTIVE_ITEM, OFFSET_LINUX)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
}

stock UTIL_PlayWeaponAnimation(const Player, const Sequence)
{
set_pev(Player, pev_weaponanim, Sequence)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
write_byte(Sequence)
write_byte(pev(Player, pev_body))
message_end()
}

public akdragon_ItemPostFrame(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED

if (!g_has_akdragon[id])
return HAM_IGNORED

static iClipExtra

iClipExtra = get_pcvar_num(cvar_clip_akdragon)
new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, PLAYER_LINUX_XTRA_OFF)

new iBpAmmo = cs_get_user_bpammo(id, CSW_AK47)
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

new fInReload = get_pdata_int(weapon_entity, m_fInReload, WEAP_LINUX_XTRA_OFF)

if( fInReload && flNextAttack <= 0.0 )
{
new j = min(iClipExtra - iClip, iBpAmmo)

set_pdata_int(weapon_entity, m_iClip, iClip + j, WEAP_LINUX_XTRA_OFF)
cs_set_user_bpammo(id, CSW_AK47, iBpAmmo-j)

set_pdata_int(weapon_entity, m_fInReload, 0, WEAP_LINUX_XTRA_OFF)
fInReload = 0
}
return HAM_IGNORED
}

public akdragon_Reload(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED

if (!g_has_akdragon[id])
return HAM_IGNORED

static iClipExtra

if(g_has_akdragon[id])
iClipExtra = get_pcvar_num(cvar_clip_akdragon)

g_akdragon_TmpClip[id] = -1

new iBpAmmo = cs_get_user_bpammo(id, CSW_AK47)
new iClip = get_pdata_int(weapon_entity, m_iClip, WEAP_LINUX_XTRA_OFF)

if (iBpAmmo <= 0)
return HAM_SUPERCEDE

if (iClip >= iClipExtra)
return HAM_SUPERCEDE

g_akdragon_TmpClip[id] = iClip

return HAM_IGNORED
}

public akdragon_Reload_Post(weapon_entity)
{
new id = pev(weapon_entity, pev_owner)
if (!is_user_connected(id))
return HAM_IGNORED

if (!g_has_akdragon[id])
return HAM_IGNORED

if (g_akdragon_TmpClip[id] == -1)
return HAM_IGNORED

set_pdata_int(weapon_entity, m_iClip, g_akdragon_TmpClip[id], WEAP_LINUX_XTRA_OFF)

set_pdata_float(weapon_entity, m_flTimeWeaponIdle, AK47DRAGON_RELOAD_TIME, WEAP_LINUX_XTRA_OFF)

set_pdata_float(id, m_flNextAttack, AK47DRAGON_RELOAD_TIME, PLAYER_LINUX_XTRA_OFF)

set_pdata_int(weapon_entity, m_fInReload, 1, WEAP_LINUX_XTRA_OFF)

UTIL_PlayWeaponAnimation(id, AK47DRAGON_RELOAD)

return HAM_IGNORED
}

stock drop_weapons(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) & PRIMARY_WEAPONS_BIT_SUM))
{
static wname[32]
get_weaponname(weaponid, wname, sizeof wname - 1)
engclient_cmd(id, "drop", wname)
}
}
}

stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)

replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!t", "^3")

if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}


2 вариант, без curweapon

#include <amxmodx>
#include <fakemeta>
#include <xs>
#include <hamsandwich>
#include <zombieplague>
#include <cstrike>

//Linux extra offsets
#define pData_Player 5
#define pData_Item 4

// CWeaponBox
#define pDataKey_WeaponBoxItems 34

//CBasePlayerItem
#define pDataKey_iOwner 41
#define pDataKey_iNext 42
#define pDataKey_iId 43

//CBasePlayerWeapon
#define pDataKey_flNextPrimaryAttack 46
#define pDataKey_flNextSecondaryAttack 47
#define pDataKey_flNextTimeWeaponIdle 48
#define pDataKey_iPrimaryAmmoType 49
#define pDataKey_iClip 51
#define pDataKey_iInReload 54
#define pDataKey_iSpecialReload 55
#define pDataKey_iState 74

//CBaseMonster
#define pDataKey_iLastHitGroup 75
#define pDataKey_flNextAttack 83

//CBasePlayer
#define pDataKey_iPlayerItems 367
#define pDataKey_iActiveItem 373
#define pDataKey_ibpAmmo 376

new g_iItemID

#define weapon_name "weapon_ump45"
#define weapon_new "weapon/weapon_dualkrisshero_zombus"

enum
{
ANIM_IDLE = 0,
ANIM_IDLE_LEFT_EMPTY,
ANIM_SHOOT_LEFT1,
ANIM_SHOOT_LEFT2,
ANIM_SHOOT_LEFT_LAST,
ANIM_SHOOT_RIGHT1,
ANIM_SHOOT_RIGHT2,
ANIM_SHOOT_RIGHT_LAST,
ANIM_RELOAD,
ANIM_DRAW
}

#define WEAPON_KEY 10003
#define Is_CustomItem(%0) (pev(%0, pev_impulse) == WEAPON_KEY)

#define sound_shot "weapon/dualkrisshero-1.wav"

#define model_v "models/weapon/v_dualkrisshero.mdl"
#define model_p "models/weapon/p_dualkrisshero.mdl"
#define model_w "models/weapons/w_weapon_weapons.mdl"

#define weapon_punchangle 0 //0.8
#define weapon_damage 2.3
#define weapon_aspeed 0.09

#define weapon_ammo 50 // kol. patronov
//#define weapon_bpammo 100

#define idle_time 4.1
#define draw_time 1.36
#define reload_time 3.1

new const sounds_dump[][] =
{
"weapon/dualkriss_clipin.wav",
"weapon/dualkriss_clipout.wav",
"weapon/dualkriss_draw.wav",
"weapon/dualkrisshero-1.wav"
}

new const precache_dump[][] =
{
"sprites/weapon/weapon_dualkrisshero_zombus.txt",
"sprites/weapon/640hud127.spr"
}

public plugin_precache()
{
engfunc(EngFunc_PrecacheModel, model_v)
engfunc(EngFunc_PrecacheModel, model_p)
engfunc(EngFunc_PrecacheModel, model_w)

new index;
for(index = 0; index < sizeof(sounds_dump); index++) engfunc(EngFunc_PrecacheSound, sounds_dump[index])
for(index = 0; index < sizeof(precache_dump); index++) engfunc(EngFunc_PrecacheGeneric, precache_dump[index])

register_forward(FM_Spawn, "HookFm_Spawn", false)
}

public plugin_init()
{
RegisterHam(Ham_Item_Deploy, weapon_name, "HookHam_Weapon_Deploy", true)
RegisterHam(Ham_Item_AddToPlayer, weapon_name, "HookHam_Weapon_Add", true)
RegisterHam(Ham_Item_PostFrame, weapon_name, "HookHam_Weapon_Frame")

RegisterHam(Ham_Weapon_Reload, weapon_name, "HookHam_Weapon_Reload")
RegisterHam(Ham_Weapon_WeaponIdle, weapon_name, "HookHam_Weapon_Idle", false)
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "HookHam_Weapon_PrimaryAttack", false)

// RegisterHam(Ham_TakeDamage, weapon_name, "HookHam_TakeDamage", false))
RegisterHam(Ham_TakeDamage, "player", "HookHam_TakeDamage", false)

register_forward(FM_UpdateClientData, "HookFm_UpdateClientData", true)
register_forward(FM_SetModel, "HookFm_SetModel")

register_clcmd(weapon_new, "hook_item")

g_iItemID = zp_register_extra_item("Akimbo", 149500, ZP_TEAM_HUMAN);
}

public zp_extra_item_selected(id, itemid)
{
if(cs_get_user_money(id) < 5000)
{
ChatColor(id, "!g* !yНедостаточно денег.")
return PLUGIN_HANDLED
}

if (cs_get_user_money(id) >= 5000 && itemid == g_iItemID)
{
get_item(id);
cs_set_user_money(id, cs_get_user_money(id) - 5000)
}

return PLUGIN_HANDLED
}

stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)

replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!t", "^3")

if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}


public get_item(iPlayer)
{
UTIL_DropWeapon(iPlayer, 1);

new iWeapon = make_weapon();

if(iWeapon <= 0)
return

if(!ExecuteHamB(Ham_AddPlayerItem, iPlayer, iWeapon))
{
engfunc(EngFunc_RemoveEntity, iWeapon);
return;
}

ExecuteHam(Ham_Item_AttachToPlayer, iWeapon, iPlayer)

//new ammotype = pDataKey_ibpAmmo + get_pdata_int(iWeapon, pDataKey_iPrimaryAmmoType, pData_Item)

// set_pdata_int(iPlayer, ammotype, weapon_bpammo, pData_Player)
set_pdata_int(iWeapon, pDataKey_iClip, weapon_ammo, pData_Item)

emit_sound(iPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}

public hook_item(iPlayer)
{
engclient_cmd(iPlayer, weapon_name)
return PLUGIN_HANDLED
}

public HookHam_Weapon_Deploy(iEntity)
{
if(!Is_CustomItem(iEntity))
return HAM_IGNORED

static iPlayer; iPlayer = get_pdata_cbase(iEntity, pDataKey_iOwner, pData_Item)


set_pev(iPlayer, pev_viewmodel2, model_v)
set_pev(iPlayer, pev_weaponmodel2, model_p)

set_pdata_float(iEntity, pDataKey_flNextPrimaryAttack, draw_time, pData_Item)
set_pdata_float(iEntity, pDataKey_flNextSecondaryAttack, draw_time, pData_Item)

Play_WeaponAnim(iPlayer, ANIM_DRAW)

set_pdata_string(iPlayer, 1968, "dualpistols", -1, 20)

return HAM_IGNORED
}

public HookHam_Weapon_Add(iEntity, iPlayer)
{
switch(pev(iEntity, pev_impulse))
{
case WEAPON_KEY: Weaponlist(iPlayer, true)
case 0: Weaponlist(iPlayer, false)
}
return HAM_IGNORED
}

public HookHam_Weapon_Frame(iEntity)
{
if(!Is_CustomItem(iEntity))
return HAM_IGNORED;

static iPlayer, iClip, iAmmoType, iAmmo, iAmount;
iPlayer = get_pdata_cbase(iEntity, pDataKey_iOwner, pData_Item);

if(get_pdata_int(iEntity, pDataKey_iInReload, pData_Item))
{
iClip = get_pdata_int(iEntity, pDataKey_iClip, pData_Item);
iAmmoType = pDataKey_ibpAmmo + get_pdata_int(iEntity, pDataKey_iPrimaryAmmoType, pData_Item);
iAmmo = get_pdata_int(iPlayer, iAmmoType, pData_Player);
iAmount = min(weapon_ammo - iClip, iAmmo);

set_pdata_int(iEntity, pDataKey_iClip, iClip + iAmount, pData_Item);
set_pdata_int(iPlayer, iAmmoType, iAmmo - iAmount, pData_Player);
set_pdata_int(iEntity, pDataKey_iInReload, 0, pData_Item);
}

return HAM_IGNORED;
}

public HookHam_Weapon_Reload(iEntity)
{
if(!Is_CustomItem(iEntity))
return HAM_IGNORED;

static iPlayer, iClip, iAmmoType;

iClip = get_pdata_int(iEntity, pDataKey_iClip, pData_Item);
iPlayer = get_pdata_cbase(iEntity, pDataKey_iOwner, pData_Item);
iAmmoType = pDataKey_ibpAmmo + get_pdata_int(iEntity, pDataKey_iPrimaryAmmoType, pData_Item);

if(iClip >= weapon_ammo)
return HAM_SUPERCEDE;

if(get_pdata_int(iPlayer, iAmmoType, pData_Player) <= 0)
return HAM_SUPERCEDE

set_pdata_int(iEntity, pDataKey_iClip, 0, pData_Item);
ExecuteHam(Ham_Weapon_Reload, iEntity);
set_pdata_int(iEntity, pDataKey_iClip, iClip, pData_Item);

set_pdata_float(iPlayer, 83, reload_time, pData_Item)

set_pdata_int(iEntity, pDataKey_iInReload, 1, pData_Item);

Play_WeaponAnim(iPlayer, ANIM_RELOAD)

return HAM_SUPERCEDE;
}

public HookHam_Weapon_Idle(iEntity)
{
if(!Is_CustomItem(iEntity))
return HAM_IGNORED

if(get_pdata_float(iEntity, pDataKey_flNextTimeWeaponIdle, pData_Item) > 0.0)
return HAM_IGNORED


set_pdata_float(iEntity, pDataKey_flNextTimeWeaponIdle, idle_time, pData_Item)

Play_WeaponAnim(get_pdata_cbase(iEntity, pDataKey_iOwner, pData_Item), ANIM_IDLE)

return HAM_SUPERCEDE
}

public HookHam_Weapon_PrimaryAttack(iEntity)
{
if(!Is_CustomItem(iEntity))
return HAM_IGNORED

static iClip;
iClip = get_pdata_int(iEntity, pDataKey_iClip, pData_Item);

if(iClip <= 0)
{
ExecuteHam(Ham_Weapon_PlayEmptySound, iEntity);
set_pdata_float(iEntity, pDataKey_flNextPrimaryAttack, weapon_aspeed, pData_Item)
return HAM_SUPERCEDE
}

static iPlayer, Float: flOldPush[3], Float: flNewPush[3], FM_TraceLineHook, FM_PlayBackEventHook;

iPlayer = get_pdata_cbase(iEntity, pDataKey_iOwner, pData_Item)


FM_PlayBackEventHook = register_forward(FM_PlaybackEvent, "HookFm_PlayBackEvent", false)
FM_TraceLineHook = register_forward(FM_TraceLine, "HookFm_TraceLine", true)

pev(iPlayer, pev_punchangle, flOldPush)

state FireBullets: Enabled;
ExecuteHam(Ham_Weapon_PrimaryAttack, iEntity)
state FireBullets: Disabled;

unregister_forward(FM_TraceLine, FM_TraceLineHook, true)
unregister_forward(FM_PlaybackEvent, FM_PlayBackEventHook, false)

pev(iPlayer, pev_punchangle, flNewPush)
flNewPush[0] = flOldPush[0] + (flNewPush[0] - flOldPush[0]) * weapon_punchangle
flNewPush[1] = flOldPush[1] + (flNewPush[1] - flOldPush[1]) * weapon_punchangle
flNewPush[2] = flOldPush[2] + (flNewPush[2] - flOldPush[2]) * weapon_punchangle
set_pev(iPlayer, pev_punchangle, flNewPush)

emit_sound(iPlayer, CHAN_WEAPON, sound_shot, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

enum
{
Left,
Right
}

if(get_pdata_int(iEntity, pDataKey_iSpecialReload, 4) == Left)
{
set_pdata_int(iEntity,pDataKey_iSpecialReload, Right, 4)
Play_WeaponAnim(iPlayer, iClip == 2 ? ANIM_SHOOT_LEFT_LAST : random_num(ANIM_SHOOT_LEFT1, ANIM_SHOOT_LEFT2))
}
else
{
set_pdata_int(iEntity, pDataKey_iSpecialReload, Left, 4)
Play_WeaponAnim(iPlayer, iClip == 1 ? ANIM_SHOOT_RIGHT_LAST : random_num(ANIM_SHOOT_RIGHT1, ANIM_SHOOT_RIGHT2))
}

set_pdata_float(iEntity, pDataKey_flNextPrimaryAttack, weapon_aspeed, pData_Item)
set_pdata_float(iEntity, pDataKey_flNextSecondaryAttack, weapon_aspeed, pData_Item)
set_pdata_int(iEntity, pDataKey_iClip, iClip - 1, pData_Item)

return HAM_SUPERCEDE
}

public HookHam_TakeDamage(iVictim, iInflictor, iAttacker, Float:fLDamage) <FireBullets: Enabled>
{
SetHamParamFloat(4, fLDamage * weapon_damage);
return HAM_OVERRIDE;
}

public HookHam_TakeDamage() <FireBullets: Disabled>
{
return HAM_IGNORED;
}

public HookHam_TakeDamage() <>
{
return HAM_IGNORED;
}

public HookFm_SetModel(iEntity)
{
static szClassName[32], iWeapon;

pev(iEntity, pev_classname, szClassName, 31);

if(!equal(szClassName, "weaponbox"))
return FMRES_IGNORED;

for(new i = 0; i < 6; i++)
{
iWeapon = get_pdata_cbase(iEntity, pDataKey_WeaponBoxItems + i, 4);

if(iWeapon > 0 && Is_CustomItem(iWeapon))
{
engfunc(EngFunc_SetModel, iEntity, model_w);
set_pev(iEntity, pev_body, 11)
return FMRES_SUPERCEDE;
}
}
return FMRES_IGNORED;
}

public HookFm_PlayBackEvent()
{
return FMRES_SUPERCEDE
}

public HookFm_TraceLine(Float: tr_start[3], Float: tr_end[3], tr_flag, tr_ignore, tr)
{
static iHit, iDecal, iGlassDecal;

iHit = get_tr2(tr, TR_pHit)

if(!iGlassDecal)
iGlassDecal = engfunc(EngFunc_DecalIndex, "{bproof1")

if(iHit > 0 && pev_valid(iHit))
{
if(pev(iHit, pev_solid) != SOLID_BSP)
{
return FMRES_IGNORED
}
else
{
if(pev(iHit, pev_rendermode) != 0)
{
iDecal = iGlassDecal
}
else
{
iDecal = random_num(41, 45)
}
}
}
else
{
iDecal = random_num(41, 45)
}

static Float: vecEnd[3];

get_tr2(tr, TR_vecEndPos, vecEnd)

engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
write_byte(TE_GUNSHOTDECAL)
engfunc(EngFunc_WriteCoord, vecEnd[0])
engfunc(EngFunc_WriteCoord, vecEnd[1])
engfunc(EngFunc_WriteCoord, vecEnd[2])
write_short(iHit > 0 ? iHit : 0)
write_byte(iDecal)
message_end()

static Float: WallVector[3];
get_tr2(tr, TR_vecPlaneNormal, WallVector)

engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecEnd, 0);
write_byte(TE_STREAK_SPLASH)
engfunc(EngFunc_WriteCoord, vecEnd[0]);
engfunc(EngFunc_WriteCoord, vecEnd[1]);
engfunc(EngFunc_WriteCoord, vecEnd[2]);
engfunc(EngFunc_WriteCoord, WallVector[0] * random_float(25.0,30.0));
engfunc(EngFunc_WriteCoord, WallVector[1] * random_float(25.0,30.0));
engfunc(EngFunc_WriteCoord, WallVector[2] * random_float(25.0,30.0));
write_byte(111) //colorid
write_short(12) //count
write_short(3) //speed
write_short(75) //random velocity
message_end()

return FMRES_IGNORED
}

public HookFm_UpdateClientData(iPlayer, SendWeapons, CD_Handle)
{
static iEntity;
iEntity = get_pdata_cbase(iPlayer, pDataKey_iActiveItem, pData_Player)

if(iEntity <= 0 || !Is_CustomItem(iEntity))
return FMRES_IGNORED

set_cd(CD_Handle, CD_flNextAttack, 99999.0)

return FMRES_HANDLED
}

public HookFm_Spawn(iPlayer)
{
if(pev_valid(iPlayer) != 2)
return FMRES_IGNORED

static szClName[32];
pev(iPlayer, pev_classname, szClName, charsmax(szClName))

if(strlen(szClName) < 5)
return FMRES_IGNORED

static Trie: ClBuffer;

if(!ClBuffer)
ClBuffer = TrieCreate()

if(!TrieKeyExists(ClBuffer, szClName))
{
TrieSetCell(ClBuffer, szClName, 1)
RegisterHamFromEntity(Ham_TakeDamage, iPlayer, "HookHam_TakeDamage", false)
}
return FMRES_IGNORED
}

stock make_weapon()
{
static ent;
static g_AllocString_E;

if(g_AllocString_E || (g_AllocString_E = engfunc(EngFunc_AllocString, weapon_name)))
ent = engfunc(EngFunc_CreateNamedEntity, g_AllocString_E)
else
return 0

if(ent <= 0)
return 0;

set_pev(ent, pev_spawnflags, SF_NORESPAWN);
set_pev(ent, pev_impulse, WEAPON_KEY);

ExecuteHam(Ham_Spawn, ent)

return ent
}

stock UTIL_DropWeapon(iPlayer, iSlot)
{
static iEntity;
iEntity = get_pdata_cbase(iPlayer, (pDataKey_iPlayerItems + iSlot), pData_Player);

if(iEntity > 0)
{
static iNext,szWeaponName[32];
do
{
iNext = get_pdata_cbase(iEntity, pDataKey_iNext, 4);
if(get_weaponname(get_pdata_int(iEntity, pDataKey_iId, 4), szWeaponName, 31))
engclient_cmd(iPlayer, "drop", szWeaponName)
}
while(( iEntity = iNext) > 0);
}
}

stock Play_WeaponAnim(iPlayer, iAnim)
{
set_pev(iPlayer, pev_weaponanim, iAnim)

message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, iPlayer)
write_byte(iAnim)
write_byte(0)
message_end()
}

stock Weaponlist(iPlayer, bool:bChange)
{
if(!is_user_connected(iPlayer))
return

message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, iPlayer);
write_string(bChange ? weapon_new : weapon_name);
write_byte(6);
write_byte(100);
write_byte(-1);
write_byte(-1);
write_byte(0);
write_byte(15);
write_byte(12);
write_byte(0);
message_end();
}

#define MESSAGE_BEGIN(%0,%1,%2,%3) engfunc(EngFunc_MessageBegin, %0, %1, %2, %3)
#define MESSAGE_END() message_end()

#define WRITE_ANGLE(%0) engfunc(EngFunc_WriteAngle, %0)
#define WRITE_BYTE(%0) write_byte(%0)
#define WRITE_COORD(%0) engfunc(EngFunc_WriteCoord, %0)
#define WRITE_SHORT(%0) write_short(%0)

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя SISA
сообщение 16.8.2019, 10:38
Сообщение #2
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

В этих плагинах, я бы меньше всего переживал по поводу нагрузки от curweapon. smile.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя adva
сообщение 16.8.2019, 11:39
Сообщение #3


Иконка группы

Стаж: 12 лет

Сообщений: 2543
Благодарностей: 1676
Полезность: 819

Меценат Меценат

lol, csparena залайкал, типа че-то в коде понимает crazy.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csparena
сообщение 16.8.2019, 11:40
Сообщение #4


Стаж: 10 лет

Сообщений: 2377
Благодарностей: 541
Полезность: 106

Цитата(adva @ 16.8.2019, 13:39) *
lol, csparena залайкал, типа че-то в коде понимает crazy.gif

соскучился по мне? mega_shok.gif

Отредактировал: csparena, - 16.8.2019, 11:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Slavik
сообщение 16.8.2019, 11:56
Сообщение #5


Стаж: 12 лет

Сообщений: 185
Благодарностей: 13
Полезность: < 0

Цитата(SISA @ 16.8.2019, 11:38) *
В этих плагинах, я бы меньше всего переживал по поводу нагрузки от curweapon. smile.gif

Печально( Мне бы 1 нормальный плагин оружия, на основе него, можно было бы клепать много их))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mOdest
сообщение 16.8.2019, 12:33
Сообщение #6


Стаж: 9 лет 9 месяцев

Сообщений: 1255
Благодарностей: 255
Полезность: 79

оба жопашные для 2019, если ты это хотел услышать
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: