AMX MOD X
Среда, 24.04.2024, 02:03:56



Приветствую Вас Гость | RSS
[ Главная ] [ Trip Mine, сенсорная, лазерная мина в Half-Life - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Trip Mine, сенсорная, лазерная мина в Half-Life
Trip Mine, сенсорная, лазерная мина в Half-Life
VladimirokДата: Воскресенье, 28.06.2009, 23:36:50 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 73
Репутация: 0
Статус: Не в сети
Как отловить момент когда игрок пересекает луч мины, что бы заблокировать взрыв мины и розорвать игрока на чати.

Интересует момент пересичение лазера (луча) игроком. И если кто то знает, как изменить цвет луча. Спасибо.

 
se7hДата: Понедельник, 29.06.2009, 10:00:30 | Сообщение # 2
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
в функции ltm_Think( i_Ent ) мина "ждёт" жертву, непосредственно сам взрыв как эффект реализуется в CreateExplosion( i_Ent )

а цвет в версии 2.3 задаётся в функции DrawLaser:

Code
    if(get_pcvar_num(g_LCLMODE) == 0)
   {
    switch(teamid){
     case 1:{
      tcolor[0] = 255;
      tcolor[1] = 0;
      tcolor[2] = 0;
     }
     case 2:{
      tcolor[0] = 0;
      tcolor[1] = 0;
      tcolor[2] = 255;
     }
    }
   }else
   {
    tcolor[0] = 0;
    tcolor[1] = 255;
    tcolor[2] = 0;
   }

tcolor[0] - красная
tcolor[1] - зелёная
tcolor[2] - синяя составляющие




Сообщение отредактировал se7h - Понедельник, 29.06.2009, 10:14:09
 
VladimirokДата: Вторник, 30.06.2009, 02:05:02 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 73
Репутация: 0
Статус: Не в сети
Да я не о той мине что в CS, а та что в Half-Life. В Half-Life хук ltm_Think( i_Ent ) вызываеться 8 раз в секнду если мина висит на стене. Цвет луча я нашол как изменить, посредством перерисовки своего луча над старым.

А вот как отловить момент когда игрок пересекает луч мины? Спасибо.

 
se7hДата: Вторник, 30.06.2009, 11:20:28 | Сообщение # 4
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Репутация: 13
Статус: Не в сети
то есть речь идёт о стандартных HL минах?

 
VladimirokДата: Вторник, 30.06.2009, 16:21:41 | Сообщение # 5
Лейтенант
Группа: Пользователи
Сообщений: 73
Репутация: 0
Статус: Не в сети
да
 
PomanoBДата: Вторник, 30.06.2009, 16:56:36 | Сообщение # 6
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Можно ловить TraceLine от мины, и там смотреть попало в игрока или нет
а взрыв это TE_EXPLOSION


http://romanov4400.mybrute.com
 
VladimirokДата: Вторник, 30.06.2009, 19:32:01 | Сообщение # 7
Лейтенант
Группа: Пользователи
Сообщений: 73
Репутация: 0
Статус: Не в сети
TraceLine тоже вызывается примерно 1 раз в секунду когда мина весит на стене.

Хочу зделать следующее: узнать когда игрок пересекает луч, заблокировать пересичение (как бы его небыло) что бы мина не взорвалась а потом розорвать игрока на части. Почти готовый плагин. +attack1 можно ставить обычные лазерные мины, +attack2 ставиться вот такие мины которые не взрываються а розрывают игрока. Блин, а отловить пересичение немогу :( . Помогите ктонить. Большое спасибо.

 
PomanoBДата: Вторник, 30.06.2009, 19:57:20 | Сообщение # 8
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Ну так ты смотри tr.pHit, если это игрок, значит мина взорвется, значит подменяй результат

http://romanov4400.mybrute.com
 
VladimirokДата: Вторник, 30.06.2009, 20:14:08 | Сообщение # 9
Лейтенант
Группа: Пользователи
Сообщений: 73
Репутация: 0
Статус: Не в сети
tr.pHit это в TraceLine? Если да то опишите пожалуяста какие переменные можно вытянуть из этого хука.
 
PomanoBДата: Вторник, 30.06.2009, 20:24:52 | Сообщение # 10
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Code

register_forward(FM_TraceLine, "forward_trace_line", 1)

forward_trace_line(Float:start[3], Float:dest[3], ignore_monsters, id, ptr)
{
/*
enum {
  TR_AllSolid,
  TR_StartSolid,
  TR_InOpen,
  TR_InWater,
  TR_flFraction,
  TR_vecEndPos,
  TR_flPlaneDist,
  TR_vecPlaneNormal,
  TR_pH it,
  TR_iHitgroup,
};
*/
new hit = get_tr2(ptr, TR_pHit) // По аналогии можно использовать и остальные TR_*  
}


http://romanov4400.mybrute.com
 
VladimirokДата: Вторник, 30.06.2009, 20:42:34 | Сообщение # 11
Лейтенант
Группа: Пользователи
Сообщений: 73
Репутация: 0
Статус: Не в сети
Вот что выдает:

Trace Line ignore_monsters: 0, player ID: 121, ptr: 1243572 //121 - ID мины
Trace Line ignore_monsters: 0, player ID: 1, ptr: 1241392 //1 - ID игрока
Trace Line ignore_monsters: 0, player ID: 121, ptr: 1243572
Trace Line ignore_monsters: 0, player ID: 121, ptr: 1243572
Trace Line ignore_monsters: 0, player ID: 1, ptr: 1241392
Trace Line ignore_monsters: 0, player ID: 121, ptr: 1243572
Trace Line ignore_monsters: 0, player ID: 121, ptr: 1243572

А толку. Здесь не указываеться что например игрок ID1, пересек мину или луч ID121.

 
PomanoBДата: Вторник, 30.06.2009, 20:54:42 | Сообщение # 12
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
мина это id, а игрок get_tr2(ptr, TR_pHit), смотри если is_user_alive(get_tr2(ptr, TR_pHit)), значит это действительно игрок, и мина взорвётся. В этом случае разрываешь игрока на части и делаешь set_tr2(ptr, TR_pHit, 0) к примеру, чтобы мина не взорвалась

http://romanov4400.mybrute.com
 
VladimirokДата: Вторник, 30.06.2009, 21:07:27 | Сообщение # 13
Лейтенант
Группа: Пользователи
Сообщений: 73
Репутация: 0
Статус: Не в сети
Работает, но не блокирует взрыв, мина всеравно взрываеться :(

Code
public forward_trace_line(Float:start[3], Float:dest[3], ignore_monsters, id, ptr)
{
  if (pev_valid(id))
  {
   static class[32]
   pev(id, pev_classname, class, sizeof class - 1)
   if(equal(class, "monster_tripmine"))
   {
    //set_tr2(ptr, TR_pHit, -1)
    if(is_user_alive(get_tr2(ptr, TR_pHit)))
    {
     set_tr2(ptr, TR_pHit, -1)
     client_print(0, print_chat, "Mine Trace Line")
    }
   }
  }
   
  return FMRES_IGNORED
}
 
PomanoBДата: Вторник, 30.06.2009, 21:19:54 | Сообщение # 14
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
попробуй return FMRES_HANDLED в случае пересечения

Добавлено (2009-06-30, 9:19 Pm)
---------------------------------------------
И попробуй устанавливать pHit предыдущий, тоесть тот, который был до игрока


http://romanov4400.mybrute.com
 
VladimirokДата: Вторник, 30.06.2009, 22:04:37 | Сообщение # 15
Лейтенант
Группа: Пользователи
Сообщений: 73
Репутация: 0
Статус: Не в сети
Пределущий pHit был -1, установил, не помогло. return FMRES_HANDLED тоже не помогло. В целом все успешно но мина взрываеться:

Code
public forward_trace_line(Float:start[3], Float:dest[3], ignore_monsters, id, ptr)
{
  if (pev_valid(id))
  {
   static class[32]
   pev(id, pev_classname, class, sizeof class - 1)
   if(equal(class, "monster_tripmine"))
   {
    new index = get_tr2(ptr, TR_pHit)
    new IsRedMine = entity_get_edict(id, EV_ENT_euser2)
     
    if(is_user_alive(index) && IsRedMine)
    {
     new MineOwner = entity_get_edict(id, EV_ENT_euser1)
     fm_fakedamage(index, "fire_entity", 999.0, DMG_BLAST)
     EmitKill(MineOwner, index, "tripmine")
      
     set_tr2(ptr, TR_pHit, -1)
     return FMRES_HANDLED
    }
   }
  }
   
  return FMRES_IGNORED
}

Может можно какимто другим способом заблокировать взрыв мины? Другим хуком. Как взрыв гранаты или еще чегото? Спасибо PomanoB, очень помог.

 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Trip Mine, сенсорная, лазерная мина в Half-Life
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

AMX Mod X Russian Community © 2006-2024