PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
new g_sync
new sprite_index[2]
new g_null[33]
new Float:g_step[33]
new g_nums[33]
new g_ent
new const Float:vector_min[][] =
{
{0.0, 0.0, 0.0}, // POINT
{-6.0, -3.0, -36.0}, // HUMAN
{-52.0, -52.0, 0.0}, // LARGE
{-8.0, -3.0, -6.0} // HEAD
}
new const Float:vector_max[][] =
{
{0.0, 0.0, 0.0}, // POINT
{6.0, 3.0, 36.0}, // HUMAN
{52.0, 52.0, 52.0}, // LARGE
{8.0, 3.0, 6.0} // HEAD
}
new const Float:step[] = {0.0, 0.1, 0.5, 1.0, 5.0, 10.0, 20.0}
public plugin_init()
{
register_clcmd("say y", "show_main_menus")
register_menucmd(register_menuid("main_menus"), 1023, "main_menus_handler")
RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
register_forward(FM_PlayerPreThink, "player_think")
g_sync = CreateHudSyncObj()
}
public plugin_precache()
{
sprite_index[0] = precache_model("sprites/laserbeam.spr")
sprite_index[1] = precache_model("sprites/yelflare2.spr")
}
public client_connect(id)
{
g_null[id] = HULL_HEAD
g_step[id] = floatabs(vector_min[g_null[id]][2])
g_ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
dllfunc(DLLFunc_Spawn, g_ent)
set_pev(g_ent, pev_movetype, MOVETYPE_NONE)
set_pev(g_ent, pev_solid, SOLID_NOT)
engfunc(EngFunc_SetSize, g_ent, vector_min[g_null[id]], vector_max[g_null[id]])
//set_pev(g_ent, pev_maxs, vector_max[g_null[id]])
//set_pev(g_ent, pev_mins, vector_min[g_null[id]])
}
public player_spawn(id)
{
if(!is_user_alive(id)) return
show_main_menus(id)
}
public show_main_menus(id)
{
static text[256], len; len = formatex(text, charsmax(text), "Null menu^n^n")
switch(g_null[id])
{
case HULL_POINT: len += formatex(text[len], charsmax(text) - len, "\y[\r1\y] \rHULL_POINT^n\y[\r2\y] \wHULL_HUMAN^n\y[\r3\y] \wHULL_LARGE^n\y[\r4\y] \wHULL_HEAD")
case HULL_HUMAN: len += formatex(text[len], charsmax(text) - len, "\y[\r1\y] \wHULL_POINT^n\y[\r2\y] \rHULL_HUMAN^n\y[\r3\y] \wHULL_LARGE^n\y[\r4\y] \wHULL_HEAD")
case HULL_LARGE: len += formatex(text[len], charsmax(text) - len, "\y[\r1\y] \wHULL_POINT^n\y[\r2\y] \wHULL_HUMAN^n\y[\r3\y] \rHULL_LARGE^n\y[\r4\y] \wHULL_HEAD")
case HULL_HEAD : len += formatex(text[len], charsmax(text) - len, "\y[\r1\y] \wHULL_POINT^n\y[\r2\y] \wHULL_HUMAN^n\y[\r3\y] \wHULL_LARGE^n\y[\r4\y] \rHULL_HEAD")
}
formatex(text[len], charsmax(text) - len, "^n^n\y[\r5\y] \wOrigin up to step^n\y[\r6\y] \wOrigin down to step^n^n\y[\r7\y] \wNext step \r%0.1f^n\y[\r8\y] \wReset origin", step[g_nums[id]])
show_menu(id, 255, text, -1, "main_menus")
return PLUGIN_HANDLED
}
public main_menus_handler(id, key)
{
switch(key)
{
case 4: g_step[id] += step[g_nums[id]]
case 5: g_step[id] -= step[g_nums[id]]
case 6:
{
if(++g_nums[id] > charsmax(step)) g_nums[id] = 0
}
case 7: g_step[id] = floatabs(vector_min[g_null[id]][2])
default:
{
g_null[id] = key
g_step[id] = floatabs(vector_min[g_null[id]][2])
engfunc(EngFunc_SetSize, g_ent, vector_min[g_null[id]], vector_max[g_null[id]])
//set_pev(g_ent, pev_maxs, vector_max[g_null[id]])
//set_pev(g_ent, pev_mins, vector_min[g_null[id]])
}
}
show_main_menus(id)
return PLUGIN_HANDLED
}
public player_think(id)
{
if(!is_user_alive(id)) return
static Float:origin[3]; pev(id, pev_origin, origin)
static Float:view_ofs[3]; pev(id, pev_view_ofs, view_ofs)
static Float:angles[3]; pev(id, pev_v_angle, angles)
static Float:vector[3]; angle_vector(angles, ANGLEVECTOR_FORWARD, vector)
static Float:end[3], Float:r[8][3], color[3]
end[0] = (view_ofs[0] += origin[0]) + (vector[0] * 8989.0)
end[1] = (view_ofs[1] += origin[1]) + (vector[1] * 8989.0)
end[2] = (view_ofs[2] += origin[2]) + (vector[2] * 8989.0)
engfunc(EngFunc_TraceLine, view_ofs, end, DONT_IGNORE_MONSTERS, id, 0)
//line(view_ofs, end, 255, 255, 0)
get_tr2(0, TR_vecEndPos, end); end[2] += g_step[id]
//engfunc(EngFunc_TraceHull, end, end, DONT_IGNORE_MONSTERS, g_null[id], id, 0)
engfunc(EngFunc_TraceMonsterHull, g_ent, end, end, DONT_IGNORE_MONSTERS, id, 0)
if(get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
{
color[0] = 255
color[1] = 0
color[2] = 0
}
else
{
color[0] = 0
color[1] = 255
color[2] = 0
}
if(g_null[id] == HULL_POINT)
{
sprite(end, 1)
r[0][0] = end[0] + 20.0
r[0][1] = end[1]
r[0][2] = end[2]
r[1][0] = end[0]
r[1][1] = end[1] + 20.0
r[1][2] = end[2]
r[2][0] = end[0]
r[2][1] = end[1]
r[2][2] = end[2] + 20.0
r[3][0] = end[0] - 20.0
r[3][1] = end[1]
r[3][2] = end[2]
r[4][0] = end[0]
r[4][1] = end[1] - 20.0
r[4][2] = end[2]
r[5][0] = end[0]
r[5][1] = end[1]
r[5][2] = end[2] - 20.0
if(color[1])
{
line(end, r[0], 255, 0, 0)
line(end, r[1], 255, 0, 0)
line(end, r[2], 255, 0, 0)
line(end, r[3], 0, 0, 255)
line(end, r[4], 0, 0, 255)
line(end, r[5], 0, 0, 255)
}
else
{
line(end, r[0], 255, 255, 255)
line(end, r[1], 255, 255, 255)
line(end, r[2], 255, 255, 255)
line(end, r[3], 255, 255, 255)
line(end, r[4], 255, 255, 255)
line(end, r[5], 255, 255, 255)
}
}
else
{
sprite(end, 1)
r[0][0] = end[0] - vector_min[g_null[id]][0]
r[0][1] = end[1] + vector_min[g_null[id]][1]
r[0][2] = end[2] + vector_min[g_null[id]][2]
r[1][0] = end[0] + vector_min[g_null[id]][0]
r[1][1] = end[1] + vector_min[g_null[id]][1]
r[1][2] = end[2] + vector_min[g_null[id]][2]
r[2][0] = end[0] + vector_min[g_null[id]][0]
r[2][1] = end[1] - vector_min[g_null[id]][1]
r[2][2] = end[2] + vector_min[g_null[id]][2]
r[3][0] = end[0] - vector_min[g_null[id]][0]
r[3][1] = end[1] - vector_min[g_null[id]][1]
r[3][2] = end[2] + vector_min[g_null[id]][2]
r[4][0] = end[0] + vector_max[g_null[id]][0]
r[4][1] = end[1] - vector_max[g_null[id]][1]
r[4][2] = end[2] + vector_max[g_null[id]][2]
r[5][0] = end[0] - vector_max[g_null[id]][0]
r[5][1] = end[1] - vector_max[g_null[id]][1]
r[5][2] = end[2] + vector_max[g_null[id]][2]
r[6][0] = end[0] - vector_max[g_null[id]][0]
r[6][1] = end[1] + vector_max[g_null[id]][1]
r[6][2] = end[2] + vector_max[g_null[id]][2]
r[7][0] = end[0] + vector_max[g_null[id]][0]
r[7][1] = end[1] + vector_max[g_null[id]][1]
r[7][2] = end[2] + vector_max[g_null[id]][2]
line(r[0], r[1], color[0], color[1], color[2])
line(r[1], r[2], color[0], color[1], color[2])
line(r[2], r[3], color[0], color[1], color[2])
line(r[3], r[0], color[0], color[1], color[2])
line(r[0], r[4], color[0], color[1], color[2])
line(r[1], r[5], color[0], color[1], color[2])
line(r[2], r[6], color[0], color[1], color[2])
line(r[3], r[7], color[0], color[1], color[2])
line(r[4], r[5], color[0], color[1], color[2])
line(r[5], r[6], color[0], color[1], color[2])
line(r[6], r[7], color[0], color[1], color[2])
line(r[7], r[4], color[0], color[1], color[2])
}
set_hudmessage(0, 255, 0, 0.36, 0.8, 0, 0.0, 0.1, 0.0, 0.0, 3)
ShowSyncHudMsg(id, g_sync, "%f %f %f player origin^n%f %f %f vievs origin", origin[0], origin[1], origin[2], end[0], end[1], end[2])
}
stock line(Float:start[3], Float:end[3], r, g, b, width = 1)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMPOINTS)
engfunc(EngFunc_WriteCoord, start[0])
engfunc(EngFunc_WriteCoord, start[1])
engfunc(EngFunc_WriteCoord, start[2])
engfunc(EngFunc_WriteCoord, end[0])
engfunc(EngFunc_WriteCoord, end[1])
engfunc(EngFunc_WriteCoord, end[2])
write_short(sprite_index[0])
write_byte(0)
write_byte(1)
write_byte(1)
write_byte(width)
write_byte(0)
write_byte(r)
write_byte(g)
write_byte(b)
write_byte(255)
write_byte(0)
message_end()
}
stock sprite(Float:origin[3], skale = 1)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_SPRITE)
engfunc(EngFunc_WriteCoord, origin[0])
engfunc(EngFunc_WriteCoord, origin[1])
engfunc(EngFunc_WriteCoord, origin[2])
write_short(sprite_index[1])
write_byte(skale)
write_byte(255)
message_end()
}