|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
Trip Mine, сенсорная, лазерная мина в Half-Life
|
|
Vladimirok | Дата: Воскресенье, 28.06.2009, 23:36:50 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| Как отловить момент когда игрок пересекает луч мины, что бы заблокировать взрыв мины и розорвать игрока на чати. Интересует момент пересичение лазера (луча) игроком. И если кто то знает, как изменить цвет луча. Спасибо.
|
|
| |
se7h | Дата: Понедельник, 29.06.2009, 10:00:30 | Сообщение # 2 |
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| в функции 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
Статус: Не в сети
| Да я не о той мине что в CS, а та что в Half-Life. В Half-Life хук ltm_Think( i_Ent ) вызываеться 8 раз в секнду если мина висит на стене. Цвет луча я нашол как изменить, посредством перерисовки своего луча над старым. А вот как отловить момент когда игрок пересекает луч мины? Спасибо.
|
|
| |
se7h | Дата: Вторник, 30.06.2009, 11:20:28 | Сообщение # 4 |
Генерал-майор
Группа: Cупер-модеры
Сообщений: 424
Статус: Не в сети
| то есть речь идёт о стандартных HL минах?
|
|
| |
Vladimirok | Дата: Вторник, 30.06.2009, 16:21:41 | Сообщение # 5 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| да
|
|
| |
PomanoB | Дата: Вторник, 30.06.2009, 16:56:36 | Сообщение # 6 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Можно ловить TraceLine от мины, и там смотреть попало в игрока или нет а взрыв это TE_EXPLOSION
http://romanov4400.mybrute.com
|
|
| |
Vladimirok | Дата: Вторник, 30.06.2009, 19:32:01 | Сообщение # 7 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| TraceLine тоже вызывается примерно 1 раз в секунду когда мина весит на стене. Хочу зделать следующее: узнать когда игрок пересекает луч, заблокировать пересичение (как бы его небыло) что бы мина не взорвалась а потом розорвать игрока на части. Почти готовый плагин. +attack1 можно ставить обычные лазерные мины, +attack2 ставиться вот такие мины которые не взрываються а розрывают игрока. Блин, а отловить пересичение немогу . Помогите ктонить. Большое спасибо.
|
|
| |
PomanoB | Дата: Вторник, 30.06.2009, 19:57:20 | Сообщение # 8 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Ну так ты смотри tr.pHit, если это игрок, значит мина взорвется, значит подменяй результат
http://romanov4400.mybrute.com
|
|
| |
Vladimirok | Дата: Вторник, 30.06.2009, 20:14:08 | Сообщение # 9 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| tr.pHit это в TraceLine? Если да то опишите пожалуяста какие переменные можно вытянуть из этого хука.
|
|
| |
PomanoB | Дата: Вторник, 30.06.2009, 20:24:52 | Сообщение # 10 |
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| 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
Статус: Не в сети
| Вот что выдает: 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
Статус: Не в сети
| мина это 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
Статус: Не в сети
| Работает, но не блокирует взрыв, мина всеравно взрываеться 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
Статус: Не в сети
| попробуй return FMRES_HANDLED в случае пересечения Добавлено (2009-06-30, 9:19 Pm) --------------------------------------------- И попробуй устанавливать pHit предыдущий, тоесть тот, который был до игрока
http://romanov4400.mybrute.com
|
|
| |
Vladimirok | Дата: Вторник, 30.06.2009, 22:04:37 | Сообщение # 15 |
Лейтенант
Группа: Пользователи
Сообщений: 73
Статус: Не в сети
| Пределущий 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 Russian Community © 2006-2024 | |
|
| |