Первая по счету мессага называется TE_BEAMPOINTS.
Рассмотрим само название:
BEAM и POINTS - В переводе с английского Beam(Луч), Points(Точки).
В итоге складываются слова - Луч между двумя точками, точки это координаты.
/* Temp entity message types for message_begin() */
#define TE_BEAMPOINTS 0 // Beam effect between two points
// write_byte(TE_BEAMPOINTS)
// write_coord(startposition.x)
// write_coord(startposition.y)
// write_coord(startposition.z)
// write_coord(endposition.x)
// write_coord(endposition.y)
// write_coord(endposition.z)
// write_short(sprite index)
// write_byte(starting frame)
// write_byte(frame rate in 0.1's)
// write_byte(life in 0.1's)
// write_byte(line width in 0.1's)
// write_byte(noise amplitude in 0.01's)
// write_byte(red)
// write_byte(green)
// write_byte(blue)
// write_byte(brightness)
// write_byte(scroll speed in 0.1's)
Синтаксис:
Для того что бы создать сообщения нужно объявить по началу message_begin, а по окончанию message_end.
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Messages[TE_BEAMPOINTS]"
#define VERSION "0.1"
#define AUTHOR "Mon[str]"
enum _:AIM_ORIGIN
{
POINT_ONE,
POINT_TWO
};
new g_iOrigin[AIM_ORIGIN][3];
new g_iBeamSprite;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_concmd("Menu_<TE_BEAMPOINTS>", "Menu_Beampoints");
register_cvar("Amplitude", "0");
register_cvar("Line", "0");
}
public plugin_precache()
g_iBeamSprite = precache_model("sprites/laserbeam.spr");
public Menu_Beampoints(id)
{
if(is_user_alive(id))
{
new iMenu = menu_create("TE_BEAMPOINTS", "menu");
menu_additem(iMenu, "StartPoint", "1");
menu_additem(iMenu, "EndPoint", "2");
menu_addblank(iMenu, 0);
menu_additem(iMenu, "Create_BeamPoints", "3");
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, iMenu, 0);
}
}
public menu(id, iMenu, iItem)
{
if(iMenu == MENU_EXIT)
{
menu_destroy(iMenu);
return 1;
}
new szData[6], szName[16], iAccess = 0, iCallback = 0;
menu_item_getinfo(iMenu, iItem, iAccess, szData, charsmax(szData), szName, charsmax(szName), iCallback);
new iKey = str_to_num(szData);
switch(iKey)
{
case 1:
{
get_user_origin(id, g_iOrigin[POINT_ONE], 3);
menu_display(id, iMenu, 0);
}
case 2:
{
get_user_origin(id, g_iOrigin[POINT_TWO], 3);
menu_display(id, iMenu, 0);
}
case 3:
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMPOINTS);
write_coord(g_iOrigin[POINT_ONE][0]); //Стартовая точка x
write_coord(g_iOrigin[POINT_ONE][1]); //Стартовая точка y
write_coord(g_iOrigin[POINT_ONE][2]); //Стартовая точка z
write_coord(g_iOrigin[POINT_TWO][0]); //Конечная точка x
write_coord(g_iOrigin[POINT_TWO][1]); //Конечная точка y
write_coord(g_iOrigin[POINT_TWO][2]); //Конечная точка z
write_short(g_iBeamSprite); //Индекс спрайта
write_byte(0); //Стартовый кадр
write_byte(1); //Скорость анимации
write_byte(3000); //Время существования
write_byte(get_cvar_num("Line")); //Толщина луча
write_byte(get_cvar_num("Amplitude")); //Искажение
write_byte(random(255)); //Цвет красный
write_byte(random(255)); //Цвет зеленый
write_byte(random(255)); //Цвет синий
write_byte(1000); //Яркость
write_byte(0); //...
message_end();
menu_display(id, iMenu, 0);
}
}
return 1;
}
Описание:
По началу было создано меню, в котором находится 3 пункта:
1)Стартовая точка
2)Конечная точка
3)Создание сообщения
Думаю про первые 2 объяснять ни чего не надо.
Про 3 все написано в комментариях.