Как сделать чтобы модель светилась random свечением?
- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <fakemeta>
#include <engine>
#define PLUGIN "Shrap deccoration"
#define VERSION "1.0"
#define AUTHOR "NolkFun Team"
#pragma tabsize 0
new g_infoTarget;
new obj_Name[128][64];
new obj_ClassName[128][64];
new obj_Model[128][64];
new obj_Lines;
new g_entCount;
new g_entId[128];
new g_entMdl[128];
new g_entTangible[128];
new bool:g_tang_cpl;
xs_vec_add(Float:in1[], Float:in2[], Float:out[])
{
out[0] = in1[0] + in2[0];
out[1] = in1[1] + in2[1];
out[2] = in1[2] + in2[2];
return 0;
}
xs_vec_mul_scalar(Float:vec[], Float:scalar, Float:out[])
{
out[0] = vec[0] * scalar;
out[1] = vec[1] * scalar;
out[2] = vec[2] * scalar;
return 0;
}
fm_get_aim_origin(index, Float:origin[3])
{
new Float:start[3];
new Float:view_ofs[3];
pev(index, pev_origin, start);
pev(index, pev_view_ofs, view_ofs);
xs_vec_add(start, view_ofs, start);
new 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.00, dest);
xs_vec_add(start, dest, dest);
engfunc(EngFunc_TraceLine, start, dest, 0, index, 0);
get_tr2(0, TR_vecEndPos, origin);
return 1;
}
public plugin_init()
{
register_plugin("PLUGIN", "VERSION", "AUTHOR");
register_clcmd("set_obj", "open_menu", -1, "", -1);
register_clcmd("say /set_obj", "open_menu", -1, "", -1);
register_clcmd("say_team /set_obj", "open_menu", -1, "", -1);
new i = 0;
while (i < obj_Lines)
{
register_touch(obj_ClassName[i], "player", "fwd_Touch");
i++;
}
g_infoTarget = engfunc(EngFunc_AllocString, "info_target");
return 0;
}
public plugin_precache()
{
_ini_check();
new i = 0;
while (i < obj_Lines)
{
precache_model(obj_Model[i]);
i++;
}
return 0;
}
public plugin_cfg()
{
new szMap[64];
new szCfg[128];
new szDir[255];
get_mapname(szMap, 63);
get_configsdir(szCfg, 127);
format(szMap, 63, "%s.ini", szMap);
if (file_exists(szDir))
{
obj_load(szDir);
}
else
{
log_amx("Ошибка: конфиг с объектами не найден!");
}
return 0;
}
public fwd_Touch(ent, id)
{
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
if (entity_get_int(id, EV_INT_button) & 32)
{
new Float:f_Origin[3];
entity_get_vector(ent, 6, f_Origin);
f_Origin[1] += 1.00;
entity_set_vector(ent, 6, f_Origin);
}
}
return 0;
}
public open_menu(id)
{
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
new menu = menu_create("Меню декораций", "func_omenu", 0);
menu_additem(menu, "Меню выбора декораций^n", "1", 0, -1);
if (!g_entCount)
{
menu_additem(menu, "\dУдалить предыдущий^n", "2", 0, -1);
}
else
{
menu_additem(menu, "Удалить предыдущий^n", "2", 0, -1);
}
if (g_tang_cpl)
{
menu_additem(menu, "\wРежим: \yНе проходить", "3", 0, -1);
}
else
{
menu_additem(menu, "\wРежим: \yПроходить", "3", 0, -1);
}
menu_setprop(menu, MPROP_NEXTNAME, "Далее");
menu_setprop(menu, MPROP_BACKNAME, "Назад");
menu_setprop(menu, MPROP_EXITNAME, "Выход");
menu_display(id, menu, 0);
}
else{
ChatColor(id, "!g[Острые ножи] !tУ вас недостаточно прав!")
return PLUGIN_HANDLED
}
return 1;
}
public func_omenu(id, menu, item)
{
if (item == -3)
{
menu_destroy(menu);
return 1;
}
switch (item)
{
case 0:
{
open_objects(id);
}
case 1:
{
if (g_entCount)
{
remove_entity(g_entId[g_entCount + -1]);
g_entCount += -1;
ChatColor(id, "!g[Острые ножи] !tДекорация удалёна!");
}
else
{
ChatColor(id, "!g[Острые ножи] !tБольше не осталось декораций!");
}
open_menu(id);
}
case 2:
{
if(g_tang_cpl)
{
g_tang_cpl = false;
}
else
{
g_tang_cpl = true;
}
if(g_tang_cpl)
{
ChatColor(id, "!g[Острые ножи] !tВыбран режим: !gНе проходить");
}
else
{
ChatColor(id, "!g[Острые ножи] !tВыбран режим: !gПроходить");
}
open_menu(id);
}
default:
{
}
}
return 1;
}
public open_objects(id)
{
if(get_user_flags(id) & ADMIN_LEVEL_A)
{
new menu = menu_create("Выберите декорацию", "finc_objects", 0);
new i = 0;
while (i < obj_Lines)
{
new szTemp[10];
num_to_str(i, szTemp, 9);
menu_additem(menu, obj_Name[i], szTemp, 0, -1);
i++;
}
menu_setprop(menu, MPROP_NEXTNAME, "Далее");
menu_setprop(menu, MPROP_BACKNAME, "Назад");
menu_setprop(menu, MPROP_EXITNAME, "Выход");
menu_display(id, menu, 0);
}
return 1;
}
public finc_objects(id, menu, item, line)
{
if (item == -3)
{
menu_destroy(menu);
open_menu(id);
return 1;
}
new Float:origin[3];
new data[15];
new iName[64];
new access = 0;
new callback = 0;
new key = 0;
menu_item_getinfo(menu, item, access, data, 15, iName, 64, callback);
key = str_to_num(data);
fm_get_aim_origin(id, origin);
obj_create(origin, key, g_tang_cpl);
open_objects(id);
ChatColor(id, "!g[Острые ножи] !tВы устоновили декорацию: !g%s", obj_Name[line]);
return 1;
}
bool:obj_load(iFile[255])
{
new file = fopen(iFile, "rt");
while (file && !feof(file))
{
new sfLineData[512];
fgets(file, sfLineData, 511);
if (sfLineData[0] == 59)
{
}
else
{
if (equal(sfLineData, "", 0))
{
}
else
{
new origins[3][32];
// origins[0] = 104964;
new Float:origin[3];
new f_Origins[3][32];
// f_Origins[0] = 104976;
new Float:f_Origin[3];
new id_mdl[32];
new id_Tang[32];
parse(sfLineData, origins[0], 31, 4, 31, 8, 31, f_Origins[0], 31, 4, 31, 8, 31, id_mdl, 31, id_Tang, 31);
origin[0] = str_to_float(origins[0]);
origin[1] = str_to_float(origins[1]);
origin[2] = str_to_float(origins[2]);
f_Origin[0] = str_to_float(f_Origins[0]);
f_Origin[1] = str_to_float(f_Origins[1]);
f_Origin[2] = str_to_float(f_Origins[2]);
obj_create_two(origin, f_Origin, str_to_num(id_mdl), str_to_num(id_Tang));
}
}
}
fclose(file);
return false;
}
bool:obj_create_two(Float:origin[3], Float:f_Origin[3], id_mdl, id_Tang)
{
new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget);
if (!pev_valid(ent))
{
return false;
}
engfunc(EngFunc_SetModel, ent, obj_Model[id_mdl]);
set_pev(ent, pev_origin, origin);
set_pev(ent, pev_angles, f_Origin);
if (id_Tang)
{
set_pev(ent, pev_solid, 2);
}
else
{
set_pev(ent, pev_solid, 1);
}
set_pev(ent, pev_movetype, 0);
set_pev(ent, pev_sequence, 0);
set_pev(ent, pev_framerate, 1.00/*1065353216*/);
set_pev(ent, pev_classname, obj_ClassName[id_mdl]);
set_pev(ent, pev_effects, 0);
engfunc(EngFunc_SetSize,ent,Float:{-25.0,-10.0,0.0},Float:{17.0,10.0,25.0});
g_entId[g_entCount] = ent;
g_entMdl[g_entCount] = id_mdl;
g_entTangible[g_entCount] = id_Tang;
g_entCount += 1;
return true;
}
bool:obj_create(Float:origin[3], id_mdl, id_Tang)
{
new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget);
if (!pev_valid(ent))
{
return false;
}
engfunc(EngFunc_SetModel, ent, obj_Model[id_mdl]);
set_pev(ent, pev_origin, origin);
if (id_Tang)
{
set_pev(ent, pev_solid, 2);
}
else
{
set_pev(ent, pev_solid, 1);
}
set_pev(ent, pev_movetype, 0);
set_pev(ent, pev_sequence, 0);
set_pev(ent, pev_framerate, 1.00/*1065353216*/);
set_pev(ent, pev_classname, obj_ClassName[id_mdl]);
set_pev(ent, pev_effects, 0);
engfunc(EngFunc_SetSize,ent,Float:{-25.0,-10.0,0.0},Float:{17.0,10.0,25.0});
g_entId[g_entCount] = ent;
g_entMdl[g_entCount] = id_mdl;
g_entTangible[g_entCount] = id_Tang;
g_entCount += 1;
return true;
}
_ini_check()
{
new line = 0;
new buffer[256];
new file = fopen("/addons/amxmodx/configs/decoration.ini", "r");
while (!feof(file))
{
fgets(file, buffer, 255);
trim(buffer);
if (buffer[0] == 34)
{
parse(buffer, obj_Name[line], 64, obj_Model[line], 64, obj_ClassName[line], 64);
line++;
}
}
obj_Lines = line;
fclose(file);
return 0;
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!t", "^3")
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
Название темы скорректировано // Subb98