Игрок зашел в зону.
| |
Geny
|
Дата: Пятница, 24.05.2013, 17:41:33 | Сообщение # 1 |
|
Сообщений: 110
Репутация: 0 [ +/- ]
|
|
Подскажите пожалуйста как отловить момент когда игррок зашел в зону(периметр) которую указали на карте. И как собственно можно указать зону на карте. Моих наработок не дам так как идей просто нет. Могу только отловать отдельные позиции(каординаты). Очень прошу помочь в этом не легком деле. Спасибо. И еще как заставить игрока возрождаться только в указанной точке (как в ДМ)? Простите за наглость. Но с подобным не имел опыта ранее.
|
|
| |
Scarface_slv
|
Дата: Пятница, 24.05.2013, 18:42:26 | Сообщение # 2 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Цитата (Geny) как отловить момент когда игррок зашел в зону с trigger_multiple попробуй Цитата (Geny) как заставить игрока возрождаться только в указанной точке может с TeleportEntity не уверен:) а может с CreateEntityByName("info_player_terrorist"); хз в общем
Сообщение отредактировал Scarface_slv - Пятница, 24.05.2013, 18:50:45 |
|
| |
MongoL666
|
Дата: Суббота, 25.05.2013, 23:28:13 | Сообщение # 3 |
|
Сообщений: 92
Репутация: -9 [ +/- ]
|
|
Geny, Вип мод чтоли делаешь????
|
|
| |
Sunday
|
Дата: Воскресенье, 26.05.2013, 11:50:27 | Сообщение # 4 |
|
Сообщений: 186
Репутация: 24 [ +/- ]
|
|
Можно сделать через триггер мультиплей. Например:
Код
#pragma semicolon 1
#include <sourcemod> #include <sdktools>
public OnMapStart() { PrecacheModel("models/odessa.mdl", true);
new trigger_multiple = CreateEntityByName("trigger_multiple"); DispatchKeyValue(trigger_multiple, "spawnflags", "1"); DispatchKeyValue(trigger_multiple, "wait", "0"); DispatchSpawn(trigger_multiple); ActivateEntity(trigger_multiple); TeleportEntity(trigger_multiple, Float: {0.0, 0.0, 0.0}, NULL_VECTOR, NULL_VECTOR); // Тут указывай место положение зоны. SetEntityModel(trigger_multiple, "models/odessa.mdl"); SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMins", Float: {-0.0, -0.0, -0.0}); // Тут укажи размер минимального значения. SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMaxs", Float: {0.0, 0.0, 0.0}); // Тут укажи размер максимального значения. SetEntProp(trigger_multiple, Prop_Send, "m_nSolidType", 2); HookSingleEntityOutput(trigger_multiple, "OnStartTouch", OnStartTouch); HookSingleEntityOutput(trigger_multiple, "OnEndTouch", OnEndTouch); }
public OnStartTouch(const String:output[], ent, client, Float:delay) { // Тут код, если игрок коснулся зоны. PrintToChat(client, "Коснулись зоны!"); }
public OnEndTouch(const String:output[], ent, client, Float:delay) { // Тут код, если игрок вышел из зоны. PrintToChat(client, "Вышли из зоны!"); }
Добавлено (26.05.2013, 11:33:45) --------------------------------------------- Место положение зоны, означает ее центральная часть всего тригерра.
Удобнее всего взять Hammer, открыть карту и в нем нарисовать зону, потом посмотреть ее центральные координаты и размер всей зоны. Например размер 240 и ровный квадрат.
SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMins", Float: {-120.0, -120.0, -120.0}); SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMaxs", Float: {120.0, 120.0, 120.0});
Тут получается так, точка центральная и от нее 120 влево и 120 вправо, от сюда 240 в сумме. Все параметры в X Y Z задаются.
Можешь пойти проще, зайди в игру и зайди в это помещение где хочешь установить зону, найди центральную часть помещения и напиши в консоль getpos. Тебе в консоли напишет координаты по X Y Z, например 234.0 673.0 12.0, далее вписываешь в:
TeleportEntity(trigger_multiple, Float: {234.0 673.0 12.0}, NULL_VECTOR, NULL_VECTOR);
и дальше просто увеличивай значения и смотри когда тебя удовлетворит результат Мин и Макс этих двух параметров: SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMins", Float: {-120.0, -120.0, -0.0}); SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMaxs", Float: {120.0, 120.0, 240.0});
В любом случае тебе надо по разбираться с этим, я постарался как можно проще объяснить. Надеюсь помог.
Гости не могут скачивать файлы
|
Сообщение отредактировал Sunday - Воскресенье, 26.05.2013, 11:56:36 |
|
| |
horr0r
|
Дата: Понедельник, 10.06.2013, 07:47:48 | Сообщение # 5 |
|
Сообщений: 149
Репутация: 40 [ +/- ]
|
|
Пфф, зачем все так сложно, вот вам функция. Код stock IsPlayerInSquare(client,Float:minpos[3],Float:maxpos[3]) { new Float:cpos[3]; GetClientAbsOrigin(client, cpos); if((cpos[0] <= maxpos[0] && cpos[0] >= minpos[0]) && (cpos[1] <= maxpos[1] && cpos[1] >= minpos[1])) return 1; return 0; }
Сообщение отредактировал horr0r - Понедельник, 10.06.2013, 07:48:27 |
|
| |
хвостег
|
Дата: Понедельник, 10.06.2013, 18:26:04 | Сообщение # 6 |
|
Сообщений: 161
Репутация: 53 [ +/- ]
|
|
Т.е ты хочешь сказать, что таймер, который будет постоянно опрашивать игроков этой функцией, будет работать куда лучше чем триггер? Я уже делал подобное, результат удовлетворительный....Добавлено (10.06.2013, 18:26:04) --------------------------------------------- Вопрос решен.
Сообщение отредактировал хвостег - Понедельник, 10.06.2013, 14:03:50 |
|
| |
panorama
|
Дата: Пятница, 05.07.2013, 07:51:00 | Сообщение # 7 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Скажите а если зон несколько как быть ? Не создавать же еще несколько таких файлов ?Добавлено (05.07.2013, 07:51:00) --------------------------------------------- И подскажите пожалуйста . У меня на респауне все время пишет коснулись зоны и вышли из зоны хотя координаты совсем другие далеко от респавна ! Что делать ?
|
|
| |
Naykon
|
Дата: Понедельник, 12.05.2014, 01:24:35 | Сообщение # 8 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
как получить индексы предметов в этой зоне?Добавлено (12.05.2014, 01:24:35) --------------------------------------------- Народ если это не возможно отпишите хотябы... я надеюсь на вас и теряю свое время!
|
|
| |
panorama
|
Дата: Понедельник, 12.05.2014, 10:15:56 | Сообщение # 9 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Цитата Naykon ( ) Народ если это не возможно отпишите хотябы... я надеюсь на вас и теряю свое время! На будущее ! Читай код до конца ! Код public OnStartTouch(const String:output[], ent, client, Float:delay){ ent // Тот кого задели client // Тот кто задел } Та же фигня при Код public OnEndTouch(const String:output[], ent, client, Float:delay){ ent // Тот кого задели client // Тот кто задел } На счет предметов не знаю , попробуй может сработает (По идеи должно работать т.к. в настройках тригера есть only client)
|
|
| |
Naykon
|
Дата: Понедельник, 12.05.2014, 16:56:30 | Сообщение # 10 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
Цитата panorama ( ) Цитата Naykon писал(а): Народ если это не возможно отпишите хотябы... я надеюсь на вас и теряю свое время!
На будущее ! Читай код до конца ! Код
public OnStartTouch(const String:output[], ent, client, Float:delay){ ent // Тот кого задели client // Тот кто задел }
Та же фигня при Код
public OnEndTouch(const String:output[], ent, client, Float:delay){ ent // Тот кого задели client // Тот кто задел }
На счет предметов не знаю , попробуй может сработает (По идеи должно работать т.к. в настройках тригера есть only client)
Еслиб сработало то я бы не писал бы сюда.!! На будующее не стоит умничать... но за ответ спасибо =) Вопрос все еще актуален.
как получить индексы предметов в этой зоне?Добавлено (12.05.2014, 16:56:30) --------------------------------------------- Вопрос снял. Цель смог достигнуть другим путем. Однако хотелось бы узнать как можно выделить зону тригера чтоб она была визуально очерчена...?
|
|
| |
panorama
|
Дата: Понедельник, 12.05.2014, 17:02:27 | Сообщение # 11 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Цитата Naykon ( ) Вопрос снял. Цель смог достигнуть другим путем. Однако хотелось бы узнать как можно выделить зону тригера чтоб она была визуально очерчена...? Ох ну ладно ) Вот функция побалуйся , она создает коробку по указанным размерам , бери размеры тригера и передавай в функцию )
|
|
| |
Naykon
|
Дата: Понедельник, 12.05.2014, 23:28:56 | Сообщение # 12 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
Еще 1 вопросик появился.. можно ли отловить момент когда ТРИГГЕР касеться стены??
|
|
| |
panorama
|
Дата: Вторник, 13.05.2014, 10:38:16 | Сообщение # 13 |
|
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Цитата Naykon ( ) Еще 1 вопросик появился.. можно ли отловить момент когда ТРИГГЕР касеться стены?? Нет
|
|
| |
Naykon
|
Дата: Воскресенье, 18.05.2014, 18:46:08 | Сообщение # 14 |
|
Сообщений: 439
Репутация: -4 [ +/- ]
|
|
OnStartTouch OnEndTouch
а как отловить момент нахождения в триггере??Добавлено (17.05.2014, 18:32:09) --------------------------------------------- ИЗБАВТЕ МЕНЯ ТОЛЬКО ОТ глупых идей типа "Лови вхождение, пока нет Выхода значит он там." Добавлено (17.05.2014, 18:45:18) --------------------------------------------- OnTouching Добавлено (18.05.2014, 18:46:08) ---------------------------------------------
Код decl Float:origin[3]; GetClientEyePosition(client, origin); new trigger_multiple = CreateEntityByName("trigger_multiple"); DispatchKeyValue(trigger_multiple, "spawnflags", "1"); DispatchKeyValue(trigger_multiple, "wait", "0"); DispatchSpawn(trigger_multiple); ActivateEntity(trigger_multiple); TeleportEntity(trigger_multiple, origin, NULL_VECTOR, NULL_VECTOR); // Тут указывай место положение зоны. SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMins", Float: {-240.0, -240.0, -240.0}); SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMaxs", Float: {240.0, 240.0, 240.0}); SetEntProp(trigger_multiple, Prop_Send, "m_nSolidType", 2); HookSingleEntityOutput(trigger_multiple, "OnTrigger", OnTouching, false);
public OnTouching(const String:output[], ent, client, Float:delay) { PrintToChatAll("%N", client); }
Странно но работает через раз как-то... не всех игроков которые находятся в зоне ловит... ((( почему? что посоветуете?
|
|
| |
msl1
|
Дата: Пятница, 01.05.2020, 08:00:48 | Сообщение # 15 |
|
Сообщений: 2
Репутация: 0 [ +/- ]
|
|
Код #pragma semicolon 1
#include <sourcemod> #include <sdktools>
public OnMapStart() { PrecacheModel("models/props_c17/fence03a.mdl", true);
new trigger_multiple = CreateEntityByName("trigger_multiple"); DispatchKeyValue(trigger_multiple, "spawnflags", "1"); DispatchKeyValue(trigger_multiple, "wait", "0"); DispatchSpawn(trigger_multiple); ActivateEntity(trigger_multiple); TeleportEntity(trigger_multiple, Float: {-1478.419433, -589.590759, 129.089401}, NULL_VECTOR, NULL_VECTOR); // Тут указывай место положение зоны. SetEntityModel(trigger_multiple, "models/props_c17/fence03a.mdl"); SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMins", Float: {-0.0, -0.0, -0.0}); // Тут укажи размер минимального значения. SetEntPropVector(trigger_multiple, Prop_Send, "m_vecMaxs", Float: {240.0, 240.0, 240.0}); // Тут укажи размер максимального значения. SetEntProp(trigger_multiple, Prop_Send, "m_nSolidType", 2); HookSingleEntityOutput(trigger_multiple, "OnStartTouch", OnStartTouch); HookSingleEntityOutput(trigger_multiple, "OnEndTouch", OnEndTouch); }
public OnStartTouch(const String:output[], ent, client, Float:delay) { // Тут код, если игрок коснулся зоны. PrintToChat(client, "Коснулись зоны!"); }
public OnEndTouch(const String:output[], ent, client, Float:delay) { // Тут код, если игрок вышел из зоны. PrintToChat(client, "Вышли из зоны!"); } Подскажите код рабочий ? Я ставлю на карту не чего не создается, sm 1.8
|
|
| |
|