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

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

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

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

Revenant Ice

, Восстановление скорости передвижения игрока
Статус пользователя Impeccable
сообщение 14.3.2021, 10:44
Сообщение #1
Стаж: 5 лет 2 месяца

Сообщений: 22
Благодарностей: 1
Полезность: 35

Добрый день. Поставив себе класс Revenant Ice я столкнулся с весьма неприятной проблемой.
Если играть за данный класс и кинуть шар в игрока, то он замораживается(как и должен), но вот незадача , после разморозки(или покупки антидота) у него скорость передвижения не восстанавливается.
тот самый код
Код:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
#include <cstrike>
#include <xs>

#define Ham_Player_ResetMaxSpeed Ham_Item_PreFrame

new const ball_name[] = "paralize_ball"
new const ball_model[] = "models/w_hiddentail2.mdl"
new const ball_soundtouch[] = { "warcraft3/frostnova.wav" }

new const zclass_name[] = { "Ревенант Ice" } // name
new const zclass_info[] = { "\r[ VIP/GOLDVIP ]" } // description
new const zclass_model[] = { "revenant_ice" } // model
new const zclass_clawmodel[] = { "v_revenant_ice.mdl" } // claw model
const zclass_health = 5500 // health
const zclass_speed = 245 // speed
const Float:zclass_gravity = 0.7 // gravity
const Float:zclass_knockback = 1.0 // knockback
new const v_zombie_bomb_model[64] = "revenant_ice"

new g_CurWeapon[33], g_bombmodelwpn[64]

#define OFFSET_MODELINDEX 491
#define OFFSET_LINUX 5

new index, defaultindex

new g_zclassparalize
new cvar_paralizedelay , cvar_paralizevelocity , cvar_paralizeballhealth , cvar_paralizeballparalizetime
new sTrail , g_touchs[512] , g_can[33] , g_paralizen[33]

new const WeaponNames[][] =
{
"", "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] Zombie Class: Paralize Zombie", "0.1", "=), LARS-BLOODLIKER")

cvar_paralizedelay = register_cvar("zp_classparalize_delay","15")
cvar_paralizevelocity = register_cvar("zp_classparalizeball_velocity","1300")
cvar_paralizeballhealth = register_cvar("zp_classparalizeball_health","5")
cvar_paralizeballparalizetime = register_cvar ( "zp_classparalizeball_paralizetime", "7.0" )

register_touch(ball_name, "worldspawn", "touchWorld")
register_touch(ball_name, "func_wall", "touchWorld")
register_touch(ball_name, "func_door", "touchWorld")
register_touch(ball_name, "func_door_rotating", "touchWorld")
register_touch(ball_name, "func_wall_toggle", "touchWorld")
register_touch(ball_name, "func_breakable", "touchWorld")
register_touch(ball_name, "player", "touchPlayer")
register_think(ball_name,"ball_think")

register_clcmd("drop","paralize_cmd")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_forward(FM_PlayerPreThink, "fw_PreThink")

RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Player_ResetMaxSpeed, "player", "fw_ResetMaxSpeed_Post", 1)

register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")


for(new i = 1; i < sizeof WeaponNames; i++)
if(WeaponNames[i][0]) RegisterHam(Ham_Item_Deploy, WeaponNames[i], "fw_Weapon_Deploy_Post", 1)

RegisterHam(Ham_Player_Duck, "player", "Player_Duck", 1)
}

public plugin_precache()
{
precache_model(ball_model)
sTrail = precache_model("sprites/laserbeam.spr")

g_zclassparalize = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)

formatex(g_bombmodelwpn, charsmax(g_bombmodelwpn), "models/zombie_plague/v_bomb_%s.mdl", v_zombie_bomb_model)
engfunc(EngFunc_PrecacheModel, g_bombmodelwpn)

index = precache_model("models/player/revenant_ice/revenant_ice.mdl")
defaultindex = precache_model("models/player.mdl")
}

public paralize_cmd( id )
{
if( !is_user_alive(id) || !zp_get_user_zombie(id) || zp_get_user_zombie_class(id) != g_zclassparalize || zp_get_user_nemesis(id) )
return PLUGIN_CONTINUE;

if(g_can[id])
{
client_print(id,print_center,"You cannot use ability now. Wait%d sec.",g_can[id])
return PLUGIN_HANDLED;
}

static Float:origin[3], Float:angles[3], Float:v_forward[3], Float:v_right[3], Float:v_up[3], Float:gun_position[3], Float:player_origin[3], Float:player_view_offset[3];
static Float:OriginX[3]
pev(id, pev_v_angle, angles);
pev(id, pev_origin, OriginX);
engfunc(EngFunc_MakeVectors, angles);

global_get(glb_v_forward, v_forward);
global_get(glb_v_right, v_right);
global_get(glb_v_up, v_up);

//m_pPlayer->GetGunPosition( ) = pev->origin + pev->view_ofs
pev(id, pev_origin, player_origin);
pev(id, pev_view_ofs, player_view_offset);
xs_vec_add(player_origin, player_view_offset, gun_position);

xs_vec_mul_scalar(v_forward, 13.0, v_forward);
xs_vec_mul_scalar(v_right, 0.0, v_right);
xs_vec_mul_scalar(v_up, 5.0, v_up);

xs_vec_add(gun_position, v_forward, origin);
xs_vec_add(origin, v_right, origin);
xs_vec_add(origin, v_up, origin);

new Float:StartOrigin[3]

StartOrigin[0] = origin[0];
StartOrigin[1] = origin[1];
StartOrigin[2] = origin[2];


new Float:fVelocity[3] , Float:flOrigin[3] , Float:flAngle[3]
pev(id,pev_origin,flOrigin)
pev(id,pev_angles,flAngle)

new ball = create_entity("info_target")

if (!ball) return PLUGIN_HANDLED

g_touchs[ball] = 0

entity_set_string(ball, EV_SZ_classname, ball_name)

entity_set_model(ball, ball_model)

entity_set_origin(ball, StartOrigin)

entity_set_vector(ball, EV_VEC_angles, flAngle)

new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}
entity_set_vector(ball, EV_VEC_mins, MinBox)
entity_set_vector(ball, EV_VEC_maxs, MaxBox)

entity_set_int(ball, EV_INT_solid, SOLID_SLIDEBOX)

entity_set_int(ball, EV_INT_movetype, MOVETYPE_BOUNCEMISSILE)

entity_set_edict(ball, EV_ENT_owner, id)

entity_set_int(ball, EV_INT_effects, EF_BRIGHTLIGHT)

VelocityByAim(id, get_pcvar_num(cvar_paralizevelocity ), fVelocity)
entity_set_vector(ball , EV_VEC_velocity, fVelocity)

fm_set_rendering(ball, kRenderFxGlowShell,255, 255, 255, kRenderNormal, 16)

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // Temporary entity ID
write_short(ball) // Entity
write_short(sTrail) // Sprite index
write_byte(10) // Life
write_byte(3) // Line width
write_byte(100) // Red
write_byte(255) // Green
write_byte(255) // Blue
write_byte(255) // Alpha
message_end()

UTIL_PlayPlayerAnimation(id,10)
UTIL_PlayWeaponAnimation(id,8)

g_can[id] = get_pcvar_num(cvar_paralizedelay)
set_task(1.0,"ability_zero",id)

entity_set_float(ball, EV_FL_health , get_pcvar_float(cvar_paralizeballhealth))

entity_set_float(ball, EV_FL_nextthink, get_gametime() + 0.1)

return PLUGIN_HANDLED;
}

public touchWorld(ball, world) {

emit_sound(ball, CHAN_WEAPON, ball_soundtouch, 1.0, ATTN_NORM, 0, PITCH_NORM)
g_touchs[ball] += 1
if(g_touchs[ball] == get_pcvar_num(cvar_paralizeballhealth)) remove_entity(ball)

return PLUGIN_HANDLED
}

public touchPlayer(ball, player) {
client_print(0,print_chat,"touch %d",player)
remove_task(player)
paralize(player)
//set_task(get_pcvar_float(cvar_paralizeballparalizetime),"unparalize_player",player)

return PLUGIN_HANDLED
}

public event_round_start()
{
new iEnt = FM_NULLENT;
while( (iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", ball_name)) > 0 )
{
engfunc(EngFunc_RemoveEntity,iEnt)
}

for(new i;i<=32;i++)
{
if(g_paralizen[i]) fm_set_rendering(i)
g_can[i] = 0
g_paralizen[i] = 0
remove_task(i)
}
}

public ball_think(ball)
{
if(!is_valid_ent(ball))
return;

new Float:oldangles[3],Float:angles[3]
pev(ball,pev_angles,oldangles)
angles[0] = oldangles[0] + random_float(20.0,100.0)
angles[1] = oldangles[1] + random_float(10.0,80.0)
angles[2] = oldangles[2] + random_float(10.0,80.0)
set_pev(ball,pev_angles,angles)

new Float:Velocity[3]
pev(ball,pev_velocity,Velocity)

if(Velocity[0] < 1.0 && Velocity[2] < 1.0 && Velocity[1] < 1.0) remove_entity(ball)

if (pev_valid(ball))
entity_set_float(ball, EV_FL_nextthink, get_gametime() + 0.1)

}

public paralize(id)
{
if(!is_user_alive(id) || zp_get_user_zombie(id))
return;

g_paralizen[id] = 1
fm_set_rendering(id, kRenderFxGlowShell,100, 255, 255, kRenderNormal, 16)
set_task(get_pcvar_float(cvar_paralizeballparalizetime),"unparalize_player",id)
}

public unparalize_player(id)
{
if(!is_user_alive(id) || zp_get_user_zombie(id))
return;

g_paralizen[id] = 0
ExecuteHamB(Ham_Player_ResetMaxSpeed, id);
fm_set_rendering(id)
}

public remove_values(id)
{
remove_task(id)
g_can[id] = 0
}

public ability_zero(id)
{
g_can[id] -= 1
if(!g_can[id]) client_print(id,print_center,"Now you can use ability!")
if(g_can[id]) set_task(1.0,"ability_zero",id)
}

public fw_PreThink(id)
{
if(!is_user_alive(id) || zp_get_user_zombie(id) || !g_paralizen[id])
return PLUGIN_CONTINUE;

set_pev( id, pev_button, pev(id,pev_button) & ~IN_ATTACK );

set_pev(id, pev_maxspeed, 0.0)

new Float:vel[3]
set_pev(id,pev_velocity,vel)
remove_values(id)

return PLUGIN_HANDLED
}

public zp_user_humanized_post(id)
{
fm_set_user_model_index(id, defaultindex)

remove_values(id)
}
public fw_PlayerKilled(id, attacker, shouldgib) remove_values(id)
public fw_ResetMaxSpeed_Post(id)
{
if(!g_paralizen[id]) return HAM_IGNORED;
}
public client_connect(id) remove_values(id)

public zp_user_infected_post(id)
{
set_wpnmodel(id)
if((zp_get_user_zombie_class(id) == g_zclassparalize) && (zp_get_user_zombie(id)))
{
fm_set_user_model_index(id, index)
}
remove_values(id)
}

public zp_user_infected_pre(id)
{
if(!(get_user_flags(id) & ADMIN_LEVEL_H))
{
if(zp_get_user_next_class(id) == g_zclassparalize)
{
zp_set_user_zombie_class(id, 0)
client_print(id, print_chat, "Your ability to G-click - throw ice ball.")
client_print(id, print_chat, "This class is only for *VIP* players. Take the other.")
}
}
}

stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
static Float:color[3]
color[0] = float®
color[1] = float(g)
color[2] = float(b)

set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, float(amount))
}

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()
}

stock UTIL_PlayPlayerAnimation(const id, const Sequence , Float:frame = 1.0 , Float:framerate = 1.0)
{
entity_set_int(id, EV_INT_sequence, Sequence)
entity_set_int(id, EV_INT_gaitsequence, 1)
entity_set_float(id, EV_FL_frame, frame)
entity_set_float(id, EV_FL_framerate, framerate)
}

stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
new_velocity[0] = origin2[0] - origin1[0]
new_velocity[1] = origin2[1] - origin1[1]
new_velocity[2] = origin2[2] - origin1[2]
new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
new_velocity[0] *= num
new_velocity[1] *= num
new_velocity[2] *= num

return 1
}

stock fm_cs_set_user_deaths(id, value)
{
set_pdata_int(id, 444, value, 5)
}

stock fm_cs_get_user_team(id)
{
return get_pdata_int(id, 114, 5);
}

public Event_CurrentWeapon(id) g_CurWeapon[id] = read_data(2)

public fw_Weapon_Deploy_Post(weapon_ent)
{
static id; id = get_pdata_cbase(weapon_ent, 41, 4)

static weaponid; weaponid = cs_get_weapon_id(weapon_ent)

g_CurWeapon[id] = weaponid

replace_weapon_models(id, weaponid)
}

public Player_Duck(id)
{
if(zp_get_user_zombie_class(id) == g_zclassparalize && zp_get_user_zombie(id))
{
static button, ducking
button = pev(id, pev_button)
ducking = pev(id, pev_flags) & (FL_DUCKING | FL_ONGROUND) == (FL_DUCKING | FL_ONGROUND)

if(button & IN_DUCK || ducking)
{
set_pev(id, pev_view_ofs, {0.0, 0.0, 20.0})
}
}
}

set_wpnmodel(id)
{
if(!is_user_alive(id)) return

new wpn = get_user_weapon(id)

if(wpn == CSW_HEGRENADE || wpn == CSW_FLASHBANG || wpn == CSW_SMOKEGRENADE)
{
set_pev(id, pev_viewmodel2, g_bombmodelwpn)
}
}

replace_weapon_models(id, weaponid)
{
if(zp_get_user_zombie_class(id) == g_zclassparalize && zp_get_user_zombie(id))
{
switch(weaponid)
{
case CSW_HEGRENADE:
{
set_pev(id, pev_viewmodel2, g_bombmodelwpn)
}
case CSW_SMOKEGRENADE:
{
set_pev(id, pev_viewmodel2, g_bombmodelwpn)
}
case CSW_FLASHBANG:
{
set_pev(id, pev_viewmodel2, g_bombmodelwpn)
}
}
}
}

stock fm_set_user_model_index(id, value)
{
set_pdata_int(id, OFFSET_MODELINDEX, value, OFFSET_LINUX)
}


Пробовал исправить путём добавления функции:
Код:
RegisterHam(Ham_Player_ResetMaxSpeed, "player", "fw_ResetMaxSpeed_Post", 1)

*по дефолту не предусмотрена*

Но всё равно, результата никакого.


что-то вроде подписи
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя John1994
сообщение 14.3.2021, 19:50
Сообщение #2
Стаж: 13 лет

Сообщений: 374
Благодарностей: 97
Полезность: 183

Impeccable,
Lars почти сразу исправил этот косяк.У меня есть платная версия плагина,но не знаю актуально ли его продажа еще или нет.Сливать не очень хочется,но он старый,не думал что им еще кто то пользуеться )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Impeccable
сообщение 17.3.2021, 20:24
Сообщение #3
Стаж: 5 лет 2 месяца

Сообщений: 22
Благодарностей: 1
Полезность: 35

Код:
public zp_user_humanized_post(id)
{
fm_set_user_model_index(id, defaultindex)
remove_values(id)
}

=>>
Код:
public zp_user_humanized_post(id)
{
fm_set_user_model_index(id, defaultindex)
remove_values(id)
g_paralizen[id] = 0
fm_set_rendering(id)
}

Не думаю, что обязательно рендеринг устанавливать... Позже точно скажу)
Выход есть!

Отредактировал: Impeccable, - 17.3.2021, 20:32


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