Уважаемые гости и новички, приветствуем Вас на нашем форуме
Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».
Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
func int B_SelectSpell (var C_NPC slf, var C_NPC oth)
{
...
if (C_IsNpc(slf,Gil_666_Nikita)) // это новый НПС
{
if(slf.aivar[AIV_SelectSpell] >= 3) // сделал три каста
{
return false; // отказ от магии. будет пытаться достать оружие
};
return B_ReadyRune(slf, ItRu_Firerain); // B_ReadyRune возвращает true
};
...
};
значение aivar[AIV_SelectSpell] увеличивается непосредственно после каста. внутри B_SelectSpell его руками изменять не надо, так как до фактического каста в игре на уровне скриптов B_SelectSpell может быть вызван несколько раз. из-за этого можно наблюдать всякие глюки у ищущих когда они достают магию и не сделав каста её меняют.
func int B_SelectSpell (var C_NPC slf, var C_NPC oth)
{
...
if (C_IsNpc(slf,Gil_666_Nikita)) // это новый НПС
{
if(slf.aivar[AIV_SelectSpell] >= 3) // сделал три каста
{
return false; // отказ от магии. будет пытаться достать оружие
};
return B_ReadyRune(slf, ItRu_Firerain); // B_ReadyRune возвращает true
};
...
};
значение aivar[AIV_SelectSpell] увеличивается непосредственно после каста. внутри B_SelectSpell его руками изменять не надо, так как до фактического каста в игре на уровне скриптов B_SelectSpell может быть вызван несколько раз. из-за этого можно наблюдать всякие глюки у ищущих когда они достают магию и не сделав каста её меняют
исправил, работает. c_is_npc крашил игру, я без него поставил. Все отлично, спасибо. Все таки это не чередование, а просто после достижения счетчиком значения нпс берет меч и с ним и остается до нового сражения. Я попробую сам что-нибудь придумать уже Проблему нашел одну только, может это и нормально - нпс при протыкании и возвращении в анимацию PracticeSword роняет меч и машет рукой) может есть идеи?
Среди активных восприятий неписей есть восприятие персонажа под управлением игрока PERC_ASSESSPLAYER, восприятие врага PERC_ASSESSENEMY и восприятие персонажа в боевом режиме PERC_ASSESSFIGHTER. Последнее в Г2, кажется, не используется. Ни одно из них не подходит под решение твоей задачи, если только не сделать так:
Есть ещё вариант с активацией атаки из того состояния, в котором пребывает непись, из его циклической части. Но это не всегда может быть удобно в реализации. Нужно периодически использовать в циклической части состояния функцию Wld_DetectNpc для поиска других неписей в непосредственной близости от твоего разбойника.
Все таки это не чередование, а просто после достижения счетчиком значения нпс берет меч и с ним и остается до нового сражения. Я попробую сам что-нибудь придумать уже
Нужно править функции выбора оружия. У меня в мод-фиксе маги умеют браться за саблю, если доступные им заклинания не подходят в конкретной ситуации боя против конкретного противника. Но это не "пара строк" кода. Там чутка посложнее будет. Если хочешь, могу дать ссылку на скрипты, сам посмотришь.
Нужно править функции выбора оружия. У меня в мод-фиксе маги умеют браться за саблю, если доступные им заклинания не подходят в конкретной ситуации боя против конкретного противника. Но это не "пара строк" кода. Там чутка посложнее будет. Если хочешь, могу дать ссылку на скрипты, сам посмотри
Вообще, состояние ZS_PracticeSword написано крайне убого (остальные состояния не особенно лучше). По хорошему, нужно его переписывать. Посмотри в скриптах мод-фикса.
Хочу реализовать появление нового экземпляра нпс после смерти предыдущего в x метрах от точки, где умер прошлый . Звучит просто, однако у меня нет определенного понимания, куда именно писать функции и как и где их вызывать. Помогите, пожалуйста.
RPD, найти внутри функции zs_dead подходящее место.
Сделай проверку на то погиб ли твой НПС. Далее сделай проверку где находится сейчас нпс и в зависимости от его местонахождения вставляй нового нпс на то или иное место.
Daedalus:
func void ZS_Dead ()
{
...
var c_npc npc; npc = Hlp_GetNpc(sld_666_name);
if Hlp_GetInstanceID(self) == Hlp_GetInstanceID(npc)
{
var string Insertwp;
if (Npc_GetDistToWP(npc,"OW_NEWMINE_03")<2500) { Insertwp = "OW_NEWMINE_03_b"; }
else if (Npc_GetDistToWP(npc,"OW_NEWMINE_05")<2500) { Insertwp = "OW_NEWMINE_05_b"; }
else if (Npc_GetDistToWP(npc,"OW_NEWMINE_09")<2500) { Insertwp = "OW_NEWMINE_09_b"; };
Wld_InsertNpc(sld_333_name, Insertwp);
};
...
};
RPD, найти внутри функции zs_dead подходящее место.
Сделай проверку на то погиб ли твой НПС. Далее сделай проверку где находится сейчас нпс и в зависимости от его местонахождения вставляй нового нпс на то или иное место.
Daedalus:
func void ZS_Dead ()
{
...
var c_npc npc; npc = Hlp_GetNpc(sld_666_name);
if Hlp_GetInstanceID(self) == Hlp_GetInstanceID(npc)
{
var string Insertwp;
if (Npc_GetDistToWP(npc,"OW_NEWMINE_03")<2500) { Insertwp = "OW_NEWMINE_03_b"; }
else if (Npc_GetDistToWP(npc,"OW_NEWMINE_05")<2500) { Insertwp = "OW_NEWMINE_05_b"; }
else if (Npc_GetDistToWP(npc,"OW_NEWMINE_09")<2500) { Insertwp = "OW_NEWMINE_09_b"; };
Wld_InsertNpc(sld_333_name, Insertwp);
};
...
};
Это не совсем нормально. Но в некоторых случаях проверка требуется. Например, в случаях, когда нужно проверить, что умер квестовый персонаж или квестовый монстр. Наверное, правильным будет пометить таких особых неписей особым флагом, и уже по флагу запускать проверку, какой именно квестовый непись помер.
Возможно, лучше будет использовать Wld_SpawnNpcRange, как в заклинаниях вызова. Точное расстояние или точку нельзя будет указать, но появление всегда будет рядом с погибшим.
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.