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

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

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

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

ZP курильщик (баг)

Статус пользователя fitamin4ik
сообщение 29.10.2014, 14:56
Сообщение #1
Стаж: 15 лет

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

Всем привет, ребят, подскажите пожалуйста, как исправить баг?

Баг: играю за курильщика, жму на Е, попадаю языком прямо в игрока (человека), но он не притягивается. Такое бывает не всегда, в основном притягивает нормально, но иногда вот такая вот фигня.

Код:
#include <amxmodx>
#include <zombieplague>
#include <fakemeta>
#include <hamsandwich>
#include <engine>

#define PLUGIN "[ZP] Class Smoker"
#define VERSION "1.3ml"
#define AUTHOR "4eRT"
#define TIMER 2996

//Main Class, modelT & Sprite Beam
new g_zclass_smoker, g_Line
//Sounds
new g_sndMiss[] = "l4d/Smoker_TongueHit_miss.wav"
new g_sndDrag[] = "l4d/Smoker_TongueHit_drag.wav"
//Some vars
new g_hooked[33], g_hooksLeft[33], g_unable2move[33], g_ovr_dmg[33]
new g_lastHook[33] = 0
new bool: g_drag_i[33] = false
//Cvars
new cvar_maxdrags, cvar_dragspeed, cvar_dmg2stop, cvar_mates, cvar_extrahook, cvar_unb2move, cvar_nemesis, cvar_survivor, cvar_headstop;
//Smoker Atributes
new const zclass_name[] = { "smoker" }
new const zclass_info[] = { "lips" }
new const zclass_model[] = { "l4d_smoker" }
new const zclass_clawmodel[] = { "v_l4d_smoker.mdl" }
const zclass_health = 3000
const zclass_speed = 240
const cooldown = 10
const Float:zclass_gravity = 0.9
const Float:zclass_knockback = 1.0

public plugin_init()
{
// Added by nullbyte
register_dictionary("zp_zclass_smoker.txt");
cvar_headstop = register_cvar("zp_smoker_headstop", "0");
RegisterHam(Ham_TraceAttack, "player", "forward_trace_attack");

cvar_dragspeed = register_cvar("zp_smoker_dragspeed", "150")
cvar_maxdrags = register_cvar("zp_smoker_maxdrags", "15")
cvar_dmg2stop = register_cvar("zp_smoker_dmg2stop", "350")
cvar_mates = register_cvar("zp_smoker_mates", "0")
cvar_extrahook = register_cvar("zp_smoker_extrahook", "2")
cvar_unb2move = register_cvar("zp_smoker_unable_move", "0")
cvar_nemesis = register_cvar("zp_smoker_nemesis", "0")
cvar_survivor = register_cvar("zp_smoker_survivor", "1")
register_event("ResetHUD", "newSpawn", "b")
register_event("DeathMsg", "smoker_death", "a")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
}
public plugin_precache()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
g_zclass_smoker = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
precache_sound(g_sndDrag)
precache_sound(g_sndMiss)
g_Line = precache_model("sprites/zbeam4.spr")
}

public forward_trace_attack()
{
if(!get_pcvar_num(cvar_headstop))
return PLUGIN_HANDLED;

new victim = read_data(1);
new attacker = read_data(2);
new where = read_data(5);

if(zp_get_user_zombie(victim) && !zp_get_user_zombie(attacker) && (get_tr2(where, TR_iHitgroup) == HIT_HEAD))
{
drag_end(victim);
}
return PLUGIN_HANDLED;
}

public zp_user_infected_post(id, infector)
{
if (is_user_connected(infector) && zp_get_user_zombie_class(infector) == g_zclass_smoker && get_pcvar_num(cvar_extrahook) > 0)
{
g_hooksLeft[infector] = g_hooksLeft[infector] + get_pcvar_num(cvar_extrahook)
set_hudmessage(255, 0, 0, -1.0, 0.45, 0, 0.0, 3.0, 0.01, 0.01, -1)
show_hudmessage(infector, "+%d drag%s!", get_pcvar_num(cvar_extrahook), (get_pcvar_num(cvar_extrahook) < 2) ? "" : "s")
}

if (zp_get_user_zombie_class(id) == g_zclass_smoker)
{
g_hooksLeft[id] = get_pcvar_num(cvar_maxdrags)
g_lastHook[id] = 0
}
}

public newSpawn(id)
{
if (g_hooked[id])
drag_end(id)
}

public drag_start(id) // starts drag, checks if player is Smoker, checks cvars
{
if(!is_user_alive(id) || !is_user_connected(id) || !zp_get_user_zombie(id) || zp_get_user_nemesis(id) || zp_get_user_zombie_class(id) != g_zclass_smoker)
{
return PLUGIN_HANDLED
}

if (!g_drag_i[id]) {

if (!is_user_alive(id)) {
client_print(id, print_chat, "[ZP] %L", id, "CANT_DRAG_DEAD");
return PLUGIN_HANDLED
}

if (g_hooksLeft[id] <= 0) {
client_print(id, print_chat, "[ZP] %L", id, "CANT_DRAG_ANYMORE");
return PLUGIN_HANDLED
}

if (g_lastHook[id] > 0) {
//client_print(id, print_chat, "[ZP] %L", id, "CANT_DRAG_WAIT", get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id]));
return PLUGIN_HANDLED
}

new hooktarget, body
get_user_aiming(id, hooktarget, body)

if (zp_get_user_nemesis(id) && get_pcvar_num(cvar_nemesis) == 0) {
client_print(id, print_chat, "[ZP] %L", id, "CANT_DRAG_NEMESIS");
return PLUGIN_HANDLED
}

if (is_user_alive(hooktarget)) {
if (!zp_get_user_zombie(hooktarget))
{
if (zp_get_user_survivor(hooktarget) && get_pcvar_num(cvar_survivor) == 0) {
client_print(id, print_chat, "[ZP] %L", id, "CANT_DRAG_SURVIVOR");
return PLUGIN_HANDLED
}

g_hooked[id] = hooktarget
emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH)
}
else
{
if (get_pcvar_num(cvar_mates) == 1)
{
g_hooked[id] = hooktarget
emit_sound(hooktarget, CHAN_BODY, g_sndDrag, 1.0, ATTN_NORM, 0, PITCH_HIGH)
}
else
{
client_print(id, print_chat, "[ZP] %L", id, "CANT_DRAG_TEAM");
return PLUGIN_HANDLED
}
}

if (get_pcvar_float(cvar_dragspeed) <= 0.0)
cvar_dragspeed = 1

new parm[2]
parm[0] = id
parm[1] = hooktarget

set_task(0.1, "smoker_reelin", id, parm, 2, "b")
harpoon_target(parm)

g_hooksLeft[id]--
client_print(id, print_chat, "[ZP] %L", id, "CAN_DRAG_TIMES", g_hooksLeft[id]);
g_drag_i[id] = true

if(get_pcvar_num(cvar_unb2move) == 1)
g_unable2move[hooktarget] = true

if(get_pcvar_num(cvar_unb2move) == 2)
g_unable2move[id] = true

if(get_pcvar_num(cvar_unb2move) == 3)
{
g_unable2move[hooktarget] = true
g_unable2move[id] = true
}
} else {
g_hooked[id] = 33
noTarget(id)
emit_sound(hooktarget, CHAN_BODY, g_sndMiss, 1.0, ATTN_NORM, 0, PITCH_HIGH)
g_drag_i[id] = true
g_hooksLeft[id]--
client_print(id, print_chat, "[ZP] %L", id, "CAN_DRAG_TIMES", g_hooksLeft[id]);
}
}
else
{
return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public Check_Timer_Skill(id)
{
if (!is_user_alive(id)) return;

if(g_lastHook[id] > 0)
{
g_lastHook[id]--
if (g_lastHook[id] < 0) g_lastHook[id] = 0;
set_hudmessage(200, 100, 0, -1.0, 0.94, 0, 1.0, 1.1, 0.0, 0.0, -1)
show_hudmessage(id, "Способность через: %d", g_lastHook[id])
}
else
{
remove_task(id)
}
}

public smoker_reelin(parm[]) // dragging player to smoker
{
new id = parm[0]
new victim = parm[1]

if (!g_hooked[id] || !is_user_alive(victim))
{
drag_end(id)
return
}

new Float:fl_Velocity[3]
new idOrigin[3], vicOrigin[3]

get_user_origin(victim, vicOrigin)
get_user_origin(id, idOrigin)

new distance = get_distance(idOrigin, vicOrigin)

if (distance > 1) {
new Float:fl_Time = distance / get_pcvar_float(cvar_dragspeed)

fl_Velocity[0] = (idOrigin[0] - vicOrigin[0]) / fl_Time
fl_Velocity[1] = (idOrigin[1] - vicOrigin[1]) / fl_Time
fl_Velocity[2] = (idOrigin[2] - vicOrigin[2]) / fl_Time
} else {
fl_Velocity[0] = 0.0
fl_Velocity[1] = 0.0
fl_Velocity[2] = 0.0
}

entity_set_vector(victim, EV_VEC_velocity, fl_Velocity) //<- rewritten. now uses engine
}

public drag_end(id) // drags end function
{
if (g_lastHook[id] > 0) return PLUGIN_HANDLED;
g_hooked[id] = 0
beam_remove(id)
remove_task(id)
if (g_drag_i[id])
g_lastHook[id] = cooldown
set_task(1.0 , "Check_Timer_Skill", id, _, _, "b")
g_drag_i[id] = false
g_unable2move[id] = false

return PLUGIN_CONTINUE
}

public zp_round_ended()
{
static id ;
for ( id = 1; id <= get_maxplayers( ); id++ )
{
remove_task(id)
}
}


public smoker_death() // if smoker dies drag off
{
new id = read_data(2)

beam_remove(id)

if (g_hooked[id])
drag_end(id)
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage) // if take damage drag off
{
if (is_user_alive(attacker) && (get_pcvar_num(cvar_dmg2stop) > 0))
{
g_ovr_dmg[victim] = g_ovr_dmg[victim] + floatround(damage)
if (g_ovr_dmg[victim] >= get_pcvar_num(cvar_dmg2stop))
{
g_ovr_dmg[victim] = 0
drag_end(victim)
return HAM_IGNORED;
}
}

return HAM_IGNORED;
}

public fw_PlayerPreThink(id)
{
if (!is_user_alive(id))
return FMRES_IGNORED

new button = get_user_button(id)
new oldbutton = get_user_oldbutton(id)

if (zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_smoker))
{
if (!(oldbutton & IN_USE) && (button & IN_USE))
drag_start(id)

if ((oldbutton & IN_USE) && !(button & IN_USE))
drag_end(id)
}

if (!g_drag_i[id]) {
g_unable2move[id] = false
}

if (g_unable2move[id] && get_pcvar_num(cvar_unb2move) > 0)
{
set_pev(id, pev_maxspeed, 1.0)
}

return PLUGIN_CONTINUE
}

public client_disconnect(id) // if client disconnects drag off
{
if (id <= 0 || id > 32)
return

if (g_hooked[id])
drag_end(id)

if(g_unable2move[id])
g_unable2move[id] = false
}

public harpoon_target(parm[]) // set beam (ex. tongue:) if target is player
{
new id = parm[0]
new hooktarget = parm[1]

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(8) // TE_BEAMENTS
write_short(id)
write_short(hooktarget)
write_short(g_Line) // sprite index
write_byte(0) // start frame
write_byte(0) // framerate
write_byte(200) // life
write_byte(8) // width
write_byte(1) // noise
write_byte(155) // r, g, b
write_byte(155) // r, g, b
write_byte(55) // r, g, b
write_byte(90) // brightness
write_byte(10) // speed
message_end()
}

public noTarget(id) // set beam if target isn't player
{
new endorigin[3]

get_user_origin(id, endorigin, 3)

message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte( TE_BEAMENTPOINT ); // TE_BEAMENTPOINT
write_short(id)
write_coord(endorigin[0])
write_coord(endorigin[1])
write_coord(endorigin[2])
write_short(g_Line) // sprite index
write_byte(0) // start frame
write_byte(0) // framerate
write_byte(200) // life
write_byte(8) // width
write_byte(1) // noise
write_byte(155) // r, g, b
write_byte(155) // r, g, b
write_byte(55) // r, g, b
write_byte(75) // brightness
write_byte(0) // speed
message_end()
}

public beam_remove(id) // remove beam
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(99) //TE_KILLBEAM
write_short(id) //entity
message_end()
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
shel
сообщение 29.10.2014, 20:08
Сообщение #2
Стаж: 12 лет

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

Скрытый текст
client_print(id, print_chat, "[ZP] %L", id, "CANT_DRAG_WAIT", get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id]));
return PLUGIN_HANDLED
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя fitamin4ik
сообщение 29.10.2014, 21:38
Сообщение #3
Стаж: 15 лет

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

Цитата(shel @ 29.10.2014, 20:08) *
Скрытый текст
client_print(id, print_chat, "[ZP] %L", id, "CANT_DRAG_WAIT", get_pcvar_float(cvar_cooldown) - (get_gametime() - g_lastHook[id]));
return PLUGIN_HANDLED


разобрался

Отредактировал: fitamin4ik, - 29.10.2014, 21:42
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 29.10.2014, 21:43
Сообщение #4
Стаж: 15 лет

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

Цитата(fitamin4ik @ 29.10.2014, 23:38) *
и что не правильно?


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

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