Shadows In Rain писал(а): Юля-Юлечка, на технических форумах любая проблема решается оченнь легко. Нужно просто показать сиськи. С пруфами.
Модератор: Модераторы
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
new sprite_index
new Float:g_normal[42][3] =
{
{0.000000, 0.000000, 1.000000}, // {90.0, 0.0, 0.0}, // Верх
{0.499999, 0.000000, 0.866025}, // {60.0, 0.0, 0.0},
{0.249999, 0.433012, 0.866025}, // {60.0, 60.0, 0.0},
{-0.250000, 0.433012, 0.866025}, // {60.0, 120.0, 0.0},
{-0.499999, 0.000000, 0.866025}, // {60.0, 180.0, 0.0},
{-0.249999, -0.433012, 0.866025}, // {60.0, 240.0, 0.0},
{0.249999, -0.433012, 0.866025}, // {60.0, 300.0, 0.0},
{0.000000, 0.000000, -1.000000}, // {-90.0, 0.0, 0.0}, // Низ
{0.499999, 0.000000, -0.866025}, // {-60.0, 0.0, 0.0},
{0.249999, 0.433012, -0.866025}, // {-60.0, 60.0, 0.0},
{-0.250000, 0.433012, -0.866025}, // {-60.0, 120.0, 0.0},
{-0.499999, 0.000000, -0.866025}, // {-60.0, 180.0, 0.0},
{-0.249999, -0.433012, -0.866025}, // {-60.0, 240.0, 0.0},
{0.249999, -0.433012, -0.866025}, // {-60.0, 300.0, 0.0},
{0.000000, -1.000000, 0.000000}, // {0.0, 270.0, 0.0}, // Право
{0.000000, -0.866025, 0.500000}, // {30.0, 270.0, 0.0},
{0.482962, -0.836516, 0.258819}, // {15.0, 300.0, 0.0},
{0.482962, -0.836516, -0.258819}, // {-15.0, 300.0, 0.0},
{0.000000, -0.866025, -0.500000}, // {-30.0, 270.0, 0.0},
{-0.482962, -0.836516, -0.258819}, // {-15.0, 240.0, 0.0},
{-0.482962, -0.836516, 0.258819}, // {15.0, 240.0, 0.0},
{0.000000, 1.000000, 0.000000}, // {0.0, 90.0, 0.0}, // Лево
{0.000000, 0.866025, 0.500000}, // {30.0, 90.0, 0.0},
{0.482962, 0.836516, 0.258819}, // {15.0, 60.0, 0.0},
{0.482962, 0.836516, -0.258819}, // {-15.0, 60.0, 0.0},
{0.000000, 0.866025, -0.500000}, // {-30.0, 90.0, 0.0},
{-0.482962, 0.836516, -0.258819}, // {-15.0, 120.0, 0.0},
{-0.482962, 0.836516, 0.258819}, // {15.0, 120.0, 0.0},
{1.000000, 0.000000, -0.000000}, // {0.0, 0.0, 0.0}, // Перед
{0.836516, -0.224143, 0.500000}, // {30.0, 345.0, 0.0},
{0.866025, -0.500000, -0.000000}, // {0.0, 330.0, 0.0},
{0.836516, -0.224143, -0.500000}, // {-30.0, 345.0, 0.0},
{0.836516, 0.224143, -0.500000}, // {-30.0, 15.0, 0.0},
{0.866025, 0.500000, -0.000000}, // {0.0, 30.0, 0.0},
{0.836516, 0.224143, 0.500000}, // {30.0, 15.0, 0.0},
{-1.000000, 0.000000, 0.000000}, // {0.0, 180.0, 0.0}, // Зад
{-0.836516, -0.224143, 0.500000}, // {30.0, 195.0, 0.0},
{-0.866025, -0.499999, -0.000000}, // {0.0, 210.0, 0.0},
{-0.836516, -0.224143, -0.500000}, // {-30.0, 195.0, 0.0},
{-0.836516, 0.224143, -0.500000}, // {-30.0, 165.0, 0.0},
{-0.866025, 0.500000, -0.000000}, // {0.0, 150.0, 0.0},
{-0.836516, 0.224143, 0.500000} // {30.0, 165.0, 0.0}
}
public plugin_init()
{
register_clcmd("ppfire", "functions")
}
public plugin_precache()
{
sprite_index = precache_model("sprites/laserbeam.spr")
}
public functions(id)
{
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)
angle_vector(angles, ANGLEVECTOR_FORWARD, angles)
static Float:end[3]
end[0] = (view_ofs[0] += origin[0]) + (angles[0] * 8989.0)
end[1] = (view_ofs[1] += origin[1]) + (angles[1] * 8989.0)
end[2] = (view_ofs[2] += origin[2]) + (angles[2] * 8989.0)
engfunc(EngFunc_TraceLine, view_ofs, end, DONT_IGNORE_MONSTERS, id, 0)
get_tr2(0, TR_vecEndPos, end); end[2] += 1.0
set_task(0.1, "functions2", 1, _:end, sizeof(end), "a", 1)
return PLUGIN_HANDLED
}
public functions2(Float:origin[3], radius)
{
if(radius > 300)
{
create_geo_sphere(origin, float(radius), 0, 0, 255, 100, 5)
return
}
origin[2] += 2.0
radius += 2
create_geo_sphere(origin, float(radius), 255, 0, 0, 1, 5)
set_task(0.1, "functions2", radius, _:origin, sizeof(origin), "a", 1)
}
public create_geo_sphere(Float:origin[3], Float:radius, r, g, b, life, width)
{
static Float:normal[42][3], i; i = -1
while(++i < sizeof(normal))
{
normal[i][0] = g_normal[i][0]
normal[i][1] = g_normal[i][1]
normal[i][2] = g_normal[i][2]
vector_mull(normal[i], radius, normal[i])
vector_add(normal[i], origin, normal[i])
}
i = 0
while(i < sizeof(normal))
{
create_line(normal[i], normal[i + 1], r, g, b, life, width)
create_line(normal[i], normal[i + 2], r, g, b, life, width)
create_line(normal[i], normal[i + 3], r, g, b, life, width)
create_line(normal[i], normal[i + 4], r, g, b, life, width)
create_line(normal[i], normal[i + 5], r, g, b, life, width)
create_line(normal[i], normal[i + 6], r, g, b, life, width)
create_line(normal[i + 1], normal[i + 2], r, g, b, life, width)
create_line(normal[i + 2], normal[i + 3], r, g, b, life, width)
create_line(normal[i + 3], normal[i + 4], r, g, b, life, width)
create_line(normal[i + 4], normal[i + 5], r, g, b, life, width)
create_line(normal[i + 5], normal[i + 6], r, g, b, life, width)
create_line(normal[i + 6], normal[i + 1], r, g, b, life, width)
i += 7
}
create_line(normal[1], normal[29], r, g, b, life, width)
create_line(normal[1], normal[34], r, g, b, life, width)
create_line(normal[2], normal[22], r, g, b, life, width)
create_line(normal[3], normal[22], r, g, b, life, width)
create_line(normal[4], normal[36], r, g, b, life, width)
create_line(normal[4], normal[41], r, g, b, life, width)
create_line(normal[5], normal[15], r, g, b, life, width)
create_line(normal[6], normal[15], r, g, b, life, width)
create_line(normal[8], normal[31], r, g, b, life, width)
create_line(normal[8], normal[32], r, g, b, life, width)
create_line(normal[9], normal[25], r, g, b, life, width)
create_line(normal[10], normal[25], r, g, b, life, width)
create_line(normal[11], normal[38], r, g, b, life, width)
create_line(normal[11], normal[39], r, g, b, life, width)
create_line(normal[12], normal[18], r, g, b, life, width)
create_line(normal[13], normal[18], r, g, b, life, width)
create_line(normal[16], normal[30], r, g, b, life, width)
create_line(normal[17], normal[30], r, g, b, life, width)
create_line(normal[19], normal[37], r, g, b, life, width)
create_line(normal[20], normal[37], r, g, b, life, width)
create_line(normal[23], normal[33], r, g, b, life, width)
create_line(normal[24], normal[33], r, g, b, life, width)
create_line(normal[26], normal[40], r, g, b, life, width)
create_line(normal[27], normal[40], r, g, b, life, width)
create_line(normal[2], normal[23], r, g, b, life, width)
create_line(normal[3], normal[27], r, g, b, life, width)
create_line(normal[5], normal[20], r, g, b, life, width)
create_line(normal[6], normal[16], r, g, b, life, width)
create_line(normal[9], normal[24], r, g, b, life, width)
create_line(normal[10], normal[26], r, g, b, life, width)
create_line(normal[12], normal[19], r, g, b, life, width)
create_line(normal[13], normal[17], r, g, b, life, width)
create_line(normal[16], normal[29], r, g, b, life, width)
create_line(normal[17], normal[31], r, g, b, life, width)
create_line(normal[19], normal[38], r, g, b, life, width)
create_line(normal[20], normal[36], r, g, b, life, width)
create_line(normal[23], normal[34], r, g, b, life, width)
create_line(normal[24], normal[32], r, g, b, life, width)
create_line(normal[26], normal[39], r, g, b, life, width)
create_line(normal[27], normal[41], r, g, b, life, width)
create_line(normal[2], normal[34], r, g, b, life, width)
create_line(normal[3], normal[41], r, g, b, life, width)
create_line(normal[5], normal[36], r, g, b, life, width)
create_line(normal[6], normal[29], r, g, b, life, width)
create_line(normal[9], normal[32], r, g, b, life, width)
create_line(normal[10], normal[39], r, g, b, life, width)
create_line(normal[12], normal[38], r, g, b, life, width)
create_line(normal[13], normal[31], r, g, b, life, width)
}
stock vector_mull(Float:in[3], Float:mul = 1.0, Float:out[3])
{
out[0] = in[0] * mul
out[1] = in[1] * mul
out[2] = in[2] * mul
}
stock vector_add(Float:vec1[3], Float:vec2[3], Float:out[3])
{
out[0] = vec1[0] + vec2[0]
out[1] = vec1[1] + vec2[1]
out[2] = vec1[2] + vec2[2]
}
stock create_line(Float:start[3], Float:end[3], r, g, b, life, width)
{
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)
write_byte(0)
write_byte(1)
write_byte(life)
write_byte(width)
write_byte(0)
write_byte(r)
write_byte(g)
write_byte(b)
write_byte(255)
write_byte(0)
message_end()
}
артист666 писал(а):Немножко лоханулся со степенью.
Ну и умножение отрицательного числа на отрицательное, даёт тоже отрицательное число, abs надо.
Вот что получилось:
- Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
new bool:g_is_jump[33][2]
new Float:g_jump_dist[33]
public plugin_init()
{
RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
register_forward(FM_PlayerPreThink, "player_think")
}
public player_spawn(id)
{
if(!is_user_alive(id)) return
g_is_jump[id][0] = false
g_is_jump[id][1] = false
}
public player_think(id)
{
if(!is_user_alive(id)) return
static bt; bt = pev(id, pev_button) & IN_JUMP
static obt; obt = pev(id, pev_oldbuttons) & IN_JUMP
static fl; fl = pev(id, pev_flags) & FL_ONGROUND
static Float:start[3], Float:end[3]
if(fl) // Игрок стоит на поверхности
{
if(g_is_jump[id][0]) // Приземление, точка C
{
g_is_jump[id][0] = false
g_is_jump[id][1] = false
pev(id, pev_origin, start)
static Float:bc; bc = get_distance2d_f(start, end)
client_print(id, print_chat, "C= %f %f %f BC= %f AC= %f", start[0], start[1], start[2], bc, g_jump_dist[id] + bc)
}
else if(bt && !obt) // Старт прыжка, точка A
{
g_is_jump[id][0] = true
g_jump_dist[id] = 0.0
pev(id, pev_origin, start)
client_print(id, print_chat, "A= %f %f %f", start[0], start[1], start[2])
}
}
else if(g_is_jump[id][0]) // Полет, где-то здесь точка B
{
static Float:velocity[3]; pev(id, pev_velocity, velocity)
if(velocity[2] <= 0.0 && !g_is_jump[id][1]) // Вот точка B, когда игрок начал падать.
{
g_is_jump[id][1] = true
pev(id, pev_origin, end)
g_jump_dist[id] = get_distance3d_f(start, end) // Получаем расстояние от A до B в 3х плоскостях
client_print(id, print_chat, "B= %f %f %f AB= %f", end[0], end[1], end[2], g_jump_dist[id])
}
}
}
Float:get_distance2d_f(const Float:s[3], const Float:e[3])
{
return floatsqroot(floatabs(floatpower(e[0] - s[0], 2.0)) + floatabs(floatpower(e[1] - s[1], 2.0)))
}
Float:get_distance3d_f(const Float:s[3], const Float:e[3])
{
return floatsqroot(floatabs(floatpower(e[0] - s[0], 2.0)) + floatabs(floatpower(e[1] - s[1], 2.0)) + floatabs(floatpower(e[2] - s[2], 2.0)))
}Значит буква вначале, это точка(понятно и так), потом идут координаты игрока в этой точке.
AB - расстояние от точки A до точки B в 3х плоскостях.
BC - расстояние от точки B до точки C в 2х плоскостях(без учёта высоты).
AC - оба расстояния вместе.A= 1161.478881 3453.010742 -91.968750
B= 1075.998291 3463.737548 -46.977180 AB= 97.191757
C= 991.214965 3465.099121 -91.968750 BC= 84.794258 AC= 181.986022A= 283.747772 3450.412353 28.990543
B= 197.715637 3453.085449 73.982116 AB= 97.123199
C= 120.986198 3440.712890 36.031250 BC= 77.720565 AC= 174.843765
get_distance3d_f полный аналог get_distance_f:
- Код: Выделить всё
#include <amxmodx>
new Float:s[] = {10.0, 10.0, 10.0}
new Float:e[] = {-10.0, -10.0, -10.0}
public plugin_init()
{
register_clcmd("say y", "functions")
}
public functions(id)
{
client_print(id, print_chat, "%f %f - %f %f", get_distance_f(s, e), get_distance_f(e, s), get_distance3d_f(s, e), get_distance3d_f(e, s))
}
Float:get_distance3d_f(const Float:s[3], const Float:e[3])
{
return floatsqroot(floatabs(floatpower(e[0] - s[0], 2.0)) + floatabs(floatpower(e[1] - s[1], 2.0)) + floatabs(floatpower(e[2] - s[2], 2.0)))
}
Получилось:34.641017 34.641017 - 34.641017 34.641017
Не знаю верно ли я понял условие...
П.с. если привести координату Z т.е. высоту к одному значению - будет тоже самое, просто зря будет рассчитываться...
Сейчас этот форум просматривают: Bing [Bot] и гости: 8