Автор: VEN
Перед тем, как начать, вы должны быть знакомы с основами AMXX скриптинга.
Чтобы получить индекс игрока (только внутри ""logevent_function_p"), необходимо использовать:
stock get_loguser_index()
{
new loguser[80], name[32]
read_logargv(0, loguser, 79)
parse_loguser(loguser, name, 31)
return get_user_index(name)
}
{
new loguser[80], name[32]
read_logargv(0, loguser, 79)
parse_loguser(loguser, name, 31)
return get_user_index(name)
}
К примеру:
public logevent_function_p()
{
new id = get_loguser_index()
// Код
}
{
new id = get_loguser_index()
// Код
}
1. Игрок/бомба
Бомба выкинута/у игрока:
if (fm_find_ent_by_class(-1, "weapon_c4"))
Бомба выкинута:
new bomb = fm_find_ent_by_class(-1, "weapon_c4")
if (bomb && pev(bomb, pev_owner) > get_maxplayers())
if (bomb && pev(bomb, pev_owner) > get_maxplayers())
Бомба у игрока/кто несет:
new carrier = 0, ownerent, bomb = fm_find_ent_by_class(-1, "weapon_c4")
if (bomb && (ownerent = pev(bomb, pev_owner)) get_maxplayers())
{
dllfunc(DLLFunc_Think, weapbox) // удаляет объекты weaponbox + weapon_c4
// удаляет красную точку на радаре
message_begin(MSG_ALL, get_user_msgid("BombPickup"))
message_end()
}
if (bomb && (ownerent = pev(bomb, pev_owner)) get_maxplayers())
{
dllfunc(DLLFunc_Think, weapbox) // удаляет объекты weaponbox + weapon_c4
// удаляет красную точку на радаре
message_begin(MSG_ALL, get_user_msgid("BombPickup"))
message_end()
}
Как дать бомбу игроку:
fm_give_item(id, "weapon_c4")
// используйте cs_set_user_plant(id), чтобы разрешить игроку минировать бомбу
// используйте cs_set_user_plant(id), чтобы разрешить игроку минировать бомбу
Как удалить бомбу у игрока:
engclient_cmd(id, "weapon_c4")
cs_set_user_bpammo(id, CSW_C4, 0)
engclient_cmd(id, "lastinv")
// удаляем HUD иконку бомбы
message_begin(MSG_ONE, get_user_msgid("StatusIcon"), _, id)
write_byte(0)
write_string("c4")
message_end()
cs_set_user_bpammo(id, CSW_C4, 0)
engclient_cmd(id, "lastinv")
// удаляем HUD иконку бомбы
message_begin(MSG_ONE, get_user_msgid("StatusIcon"), _, id)
write_byte(0)
write_string("c4")
message_end()
Бомба установлена/как удалить установленную бомбу:
new bomb
if ((bomb = fm_find_ent_by_model(-1, "grenade", "models/w_c4.mdl")))
{
// бомбу установлена
fm_remove_entity(bomb) // удалить установленную бомбу
}
if ((bomb = fm_find_ent_by_model(-1, "grenade", "models/w_c4.mdl")))
{
// бомбу установлена
fm_remove_entity(bomb) // удалить установленную бомбу
}
2. Выкинуть/взять
Событие, когда игрок появился с бомбой:
register_logevent("logevent_function_p", 3, "2=Spawned_With_The_Bomb")
Бомба выкинута (включает событие, когда игрок вышел с сервера или умер):
register_logevent("logevent_function_p", 3, "2=Dropped_The_Bomb")
// используйте is_user_alive/is_user_connected для проверки подключен/живой ли игрок
// используйте is_user_alive/is_user_connected для проверки подключен/живой ли игрок
Бомба поднята (кроме события появления игрока):
register_logevent("logevent_function_p", 3, "2=Got_The_Bomb")
Бомба получена (включает события появления игрока и give_item):
register_event("WeapPickup", "event_function", "be", "1=6")
3. Минирование/разминирование
Событие начала минирования бомбы:
register_event("BarTime", "event_function", "be", "1=3")
Бомба установлена:
register_logevent("logevent_function_p", 3, "2=Planted_The_Bomb")
Событие начала разминирования бомбы:
register_event("BarTime", "event_function", "be", "1=5", "1=10")
Событие начала разминирования бомбы (без щипцов):
register_logevent("logevent_function_p", 3, "2=Begin_Bomb_Defuse_Without_Kit")
Событие начала разминирования бомбы (с щипцами):
register_logevent("logevent_function_p", 3, "2=Begin_Bomb_Defuse_With_Kit")
Бомба разминирована:
register_logevent("logevent_function_p", 3, "2=Defused_The_Bomb")
Событие отмены минирования/разминирования бомбы (вы должны быть уверены, что минирование/разминирование бомбы в процессе) :
register_event("BarTime", "event_function", "b", "1=0")
Событие спасения цели:
register_logevent("logevent_function", 6, "3=Target_Saved")
4. Взрыв
Цель взорвана раньше окончания раунда:
register_logevent("logevent_function", 6, "3=Target_Bombed")
Событие взрыва бомбы (раньше/позже окончания раунда):
register_event("23", "event_function", "a", "1=17", "6=-105", "7=17")
5. Цель (место закладки бомбы)
Игрок находится на месте установки бомбы (func_bomb_target):
// Примечание: нет хорошего способа определения находится ли игрок в info_bomb_target
new target = -1, class[] = "func_bomb_target", bool:is_inside = false
while ((target = fm_find_ent_by_class(target, class)))
{
if (!fm_boxents_distance(index, target))
{
is_inside = true
break
}
}
if (is_inside)
new target = -1, class[] = "func_bomb_target", bool:is_inside = false
while ((target = fm_find_ent_by_class(target, class)))
{
if (!fm_boxents_distance(index, target))
{
is_inside = true
break
}
}
if (is_inside)
Карта содержит места закладки бомбы:
if (fm_find_ent_by_class(-1, "func_bomb_target") || fm_find_ent_by_class(-1, "info_bomb_target"))
Как удалить место закладки бомбы:
new target = -1, classname[] = "func_bomb_target"
while ((target = fm_find_ent_by_class(target, classname)))
fm_remove_entity(target)
classname = "info_bomb_target"
while ((target = fm_find_ent_by_class(target, classname)))
fm_remove_entity(target)
while ((target = fm_find_ent_by_class(target, classname)))
fm_remove_entity(target)
classname = "info_bomb_target"
while ((target = fm_find_ent_by_class(target, classname)))
fm_remove_entity(target)
Игрок убит от взрыва бомбы (не сработает, если игрок был убил от объекта env_explosion):
public client_death(killer, victim, wpnindex, hitplace, TK)
{
if (wpnindex == CSW_C4)
}
{
if (wpnindex == CSW_C4)
}