| 
				
				Игрок зашел в зону.
				 |   |  
| 
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 
 | 
 
|   | 
 |    |     
		
		
 
 |