что бы при этом хватало на отображения хука
Извините если не внятно объяснил не знаю как толком мысль сформировать
- Код: Выделить всё
register_clcmd("+paint", "ClCmd_ConsPaint");
register_clcmd("-paint", "ClCmd_ConsPaint");
public ClCmd_ConsPaint(client) {
if(!IsSetBit(g_iBitUserDuel, client) && g_iDayMode != 3 && IsSetBit(g_iBitUserAlive, client) && g_iChiefId == client) {
static cmd[2];
read_argv(0, cmd, 1);
switch(cmd[0]) {
case '+': is_drawing[client] = true;
case '-': is_drawing[client] = false;
}
} else return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
public FakeMeta_PreThink(id)
{
if(prethink_counter[id]++ > 5)
{
if(g_iChiefId == id && is_drawing[id] && !is_aiming_at_sky(id))
{
static Float:cur_origin[3], Float:distance;
cur_origin = origin[id];
if(!is_holding[id])
{
fm_get_aim_origin(id, origin[id]);
move_toward_client(id, origin[id]);
is_holding[id] = true;
return FMRES_IGNORED;
}
fm_get_aim_origin(id, origin[id]);
move_toward_client(id, origin[id]);
distance = get_distance_f(origin[id], cur_origin);
if(distance > 2)
{
draw_line(origin[id], cur_origin);
}
}
else
{
is_holding[id] = false;
}
prethink_counter[id] = 0;
}
return FMRES_IGNORED;
}
stock draw_line(Float:origin1[3], Float:origin2[3])
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMPOINTS);
engfunc(EngFunc_WriteCoord, origin1[0]);
engfunc(EngFunc_WriteCoord, origin1[1]);
engfunc(EngFunc_WriteCoord, origin1[2]);
engfunc(EngFunc_WriteCoord, origin2[0]);
engfunc(EngFunc_WriteCoord, origin2[1]);
engfunc(EngFunc_WriteCoord, origin2[2]);
write_short(g_pSpritePaint);
write_byte(0);
write_byte(15);
write_byte(255);
write_byte(100);
write_byte(0);
write_byte(255); // R
write_byte(89); // G
write_byte(233); // B
write_byte(255);
write_byte(0);
message_end();
}
stock fm_get_aim_origin(index, Float:origin[3])
{
static Float:start[3], Float:view_ofs[3];
pev(index, pev_origin, start);
pev(index, pev_view_ofs, view_ofs);
xs_vec_add(start, view_ofs, start);
static Float:dest[3];
pev(index, pev_v_angle, dest);
engfunc(EngFunc_MakeVectors, dest);
global_get(glb_v_forward, dest);
xs_vec_mul_scalar(dest, 9999.0, dest);
xs_vec_add(start, dest, dest);
engfunc(EngFunc_TraceLine, start, dest, 0, index, 0);
get_tr2(0, TR_vecEndPos, origin);
return 1;
}
stock move_toward_client(id, Float:origin[3])
{
static Float:player_origin[3];
pev(id, pev_origin, player_origin);
origin[0] += (player_origin[0] > origin[0]) ? 1.0 : -1.0;
origin[1] += (player_origin[1] > origin[1]) ? 1.0 : -1.0;
origin[2] += (player_origin[2] > origin[2]) ? 1.0 : -1.0;
}
bool:is_aiming_at_sky(index)
{
new Float:origin[3];
fm_get_aim_origin(index, origin);
return engfunc(EngFunc_PointContents, origin) == CONTENTS_SKY;
}