Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Игрок зашел в зону.
Игрок зашел в зону.
Geny Дата: Пятница, 24.05.2013, 17:41:33 | Сообщение # 1
Сообщений: 110
Репутация: 0 [ +/- ]
Подскажите пожалуйста как отловить момент когда игррок зашел в зону(периметр) которую указали на карте. И как собственно можно указать зону на карте. Моих наработок не дам так как идей просто нет. Могу только отловать отдельные позиции(каординаты). Очень прошу помочь в этом не легком деле. Спасибо.
И еще как заставить игрока возрождаться только в указанной точке (как в ДМ)?
Простите за наглость. Но с подобным не имел опыта ранее.
 
Scarface_slv Дата: Пятница, 24.05.2013, 18:42:26 | Сообщение # 2
Сообщений: 738
Репутация: 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});

В любом случае тебе надо по разбираться с этим, я постарался как можно проще объяснить. Надеюсь помог.

Прикрепления: trigger_multipl.sp(1.5 Kb)


Сообщение отредактировал 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
Сообщений: 206
Репутация: 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
Сообщений: 206
Репутация: 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
Сообщений: 206
Репутация: 2 [ +/- ]
Цитата Naykon ()
Вопрос снял. Цель смог достигнуть другим путем.
Однако хотелось бы узнать как можно выделить зону тригера чтоб она была визуально очерчена...?

Ох ну ладно )
Вот функция побалуйся , она создает коробку по указанным размерам , бери размеры тригера и передавай в функцию )
 
Naykon Дата: Понедельник, 12.05.2014, 23:28:56 | Сообщение # 12
Сообщений: 439
Репутация: -4 [ +/- ]
Еще 1 вопросик появился.. можно ли отловить момент когда ТРИГГЕР касеться стены??
 
panorama Дата: Вторник, 13.05.2014, 10:38:16 | Сообщение # 13
Сообщений: 206
Репутация: 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
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Игрок зашел в зону.
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: