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

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

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

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

Ham_TakeDamage (урон)

[РЕШЕНО]
Статус пользователя Slavik
сообщение 23.7.2019, 2:49
Сообщение #1


Стаж: 12 лет

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

Не работает изменение урона у оружия, запарился уже пробовать разные варианты, если нашли ошибку, тыкните пальцем пож, задолбался уже)) В общем урон меняю тут, #define weapon_damage, но остается такой же, не увеличивается и не уменьшается.

Исходник
#include <amxmodx>
#include <fakemeta>
#include <xs>
#include <hamsandwich>
#include <zombieplague>

#include "weapons/vars.inl"

#define weapon_name "weapon_ump45"
#define weapon_new "files/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 "files/dualkrisshero-1.wav"

#define model_v "models/files/v_dualkrisshero.mdl"
#define model_p "models/files/p_dualkrisshero.mdl"
#define model_w "models/weapons/w_files_weapons.mdl"

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

#define weapon_ammo 50
#define weapon_bpammo 100

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

new g_cvarMaxSpeed, g_cvarSpeed

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

new const precache_dump[][] =
{
"sprites/weapon_dualkrisshero_zombus.txt",
"sprites/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)

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("Dual KRISS", 0, ZP_TEAM_HUMAN);

g_cvarSpeed = register_cvar("amx_infspeed", "300")
}

public zp_extra_item_selected(id, itemid)
{
if (itemid == g_iItemID)
{
get_item(id);
}
}

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 plugin_cfg()
{
g_cvarMaxSpeed = get_cvar_pointer("sv_maxspeed")
}

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)

static Float:fSpeed; fSpeed = get_pcvar_float(g_cvarSpeed)

if(fSpeed < 0.0)
set_pev(iPlayer, pev_maxspeed, get_pcvar_float(g_cvarMaxSpeed))
else if(fSpeed > 0.0)
set_pev(iPlayer, pev_maxspeed, fSpeed)

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)


Отредактировал: Slavik, - 23.7.2019, 2:51
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя DeMNiX
сообщение 23.7.2019, 4:49
Сообщение #2


Стаж: 13 лет

Сообщений: 263
Благодарностей: 113
Полезность: 646

Код:
//	RegisterHam(Ham_TakeDamage,	weapon_name, "HookHam_TakeDamage", false)

=>
Код:
RegisterHam(Ham_TakeDamage,	weapon_name, "HookHam_TakeDamage", false)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 23.7.2019, 7:16
Сообщение #3
Стаж: 15 лет

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

DeMNiX,

В таком случае, стейты тоже надо раскомментить:

//state FireBullets: Enabled;
ExecuteHam(Ham_Weapon_PrimaryAttack, iEntity)
//state FireBullets: Disabled;
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Slavik
сообщение 23.7.2019, 12:56
Сообщение #4


Стаж: 12 лет

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

Не ребят, не поможет.. это уже я покуралесил.. стейты были активны и с ними не работало и
Код:
RegisterHam(Ham_TakeDamage,   weapon_name, "HookHam_TakeDamage", false) 

я добавил, его вообще не было, просто оставил его и закрыл.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 23.7.2019, 17:57
Сообщение #5
Стаж: 15 лет

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

Цитата
// RegisterHam(Ham_TakeDamage, weapon_name, "HookHam_TakeDamage", false)


заменить на:

RegisterHam(Ham_TakeDamage, "player", "HookHam_TakeDamage", false)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Slavik
сообщение 23.7.2019, 18:16
Сообщение #6


Стаж: 12 лет

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

SISA, вчера пробовал так, не работало.. сейчас подумал, раз SISA говорит, попробую еще раз и заработало, wtf?! блин спасибо тебе!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mOdest
сообщение 23.7.2019, 22:20
Сообщение #7


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

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

Цитата(Slavik @ 23.7.2019, 19:16) *
SISA, вчера пробовал так, не работало.. сейчас подумал, раз SISA говорит, попробую еще раз и заработало, wtf?! блин спасибо тебе!


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