Уважаемые гости и новички, приветствуем Вас на нашем форуме
Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».
Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Если речь о Гг или Нпс, то не думаю что правильно использовать эту функцию.
Что до второго вопроса, то двиг будет использовать лучшее оружие которое есть в инвентаре. Можно ли это обойти, сказать не могу т.к. не интересовался этой темой.
// НПС npc готовит оружие ближнего радиуса поражения к бою.
func void AI_ReadyMeleeWeapon(var C_NPC npc);
// НПС npc готовит оружие дальнего радиуса поражения к бою.
func void AI_ReadyRangedWeapon(var C_NPC npc);
// в инвентаре НПС npc ищется самое лучшее оружие ближнего радиуса поражения и вешается на пояс или спину.
func void AI_EquipBestMeleeWeapon(var C_NPC npc);
// в инвентаре НПС npc ищется самое лучшее оружие дальнего радиуса поражения и вешается на спину.
func void AI_EquipBestRangedWeapon(var C_NPC npc);
Но здесь все зависит от того, что конкретно ты хочешь сделать. И тогда могут потребоваться совсем другие функции.
Не думал что буду еще задавать вопросы, но так уж сложилось.
Почему-то не правильно выполняется такое условие:
Код:
var c_item EquipedBow;
if (Npc_HasEquippedRangedWeapon(self))
{
EquipedBow = Npc_GetEquippedRangedWeapon(self);
if(EquipedBow.flags == ITEM_BOW) // вот тут косяк
{
....................
};
};
я конечно понимаю что можно ввести переменную или создать доп. aivar (вариантов хватает), но все-таки, почему данное сравнение возвращает FALSE даже если екипированное оружее действительно имеет флаг лука ??? может кто сталкивался с подобным...
PS: if equipedbow.name и т.д. срабатывает, но вот именно флаг почиму-то проверяется некорректно.
Уважаемые скриптеры. Встал вопрос. ответьте, кто знает, пожалуйста.
EquipItem - если я эту функцию вызываю не в инстанции НПС, а например в функции, которая вызывается из триггера, то если я открываю инвентарь, то оружие в красной рамке, но на поясе у гг не появляется и таким образом все некорректно работает. То есть оно фактически не экипируется.
Могу ли в готике экипировать то оружие, какое хочу? Или в реальном времени можно Экипировать только лучшее оружие - функция AI_EquipBestMeleeWeapon???
Если досихпор мучаешся, то попробуй примерно так: сделай нужное оружие лучшим, AI_EquipBestMeleeWeapon, верни аттрибуты обратно. Например такая функция:
Код:
func void B_EquipMeleeWeapon(var C_NPC slf, var C_ITEM weapon)
{
var int dam_normal;
weapon = Npc_GetEquippedMeleeWeapon(slf);
dam_normal = weapon.damageTotal;
weapon.damageTotal = 999;
AI_EquipBestMeleeWeapon(slf)
weapon.damageTotal = dam_normal;
};
Работоспособность не проверял, но впринципе должно проканать.
redleha написал(а):
vmazz
пробуй так if(EquipedBow.flags & ITEM_BOW) == ITEM_BOW
Вот этот код, тоже работает не корректно... хотя иногда и корректно, та и не понял почему:
Код:
func void B_GiveErrorInv(var C_Npc slf)
{
var C_Npc Trd_Tandor;
Trd_Tandor = Hlp_GetNpc(PAL_260_Tandor);
……
......
........
if(Npc_HasEquippedWeapon(slf))
{
if(Npc_HasEquippedMeleeWeapon(slf))
{
if(Hlp_GetInstanceID(slf) != Hlp_GetInstanceID(Trd_Tandor)) || (Hlp_GetInstanceID(slf) != Hlp_GetInstanceID(Trd_Sengrath)) || (Hlp_GetInstanceID(slf) != Hlp_GetInstanceID(Trd_Diego_DI))
{
//когда говорю с Тандором то этот код не должен обрабатываться... гм... а он
//обрабатывается, хотя если сделать проверку двух НПС то работает нормально...
WeapHear = Npc_GetEquippedMeleeWeapon(slf);
ValueWeaponMelee = Hlp_GetInstanceID(WeapHear);
ValueHear = TRUE;
};
};
......
..........
............
};
В принципе я это обошёл другим способом, но просто интересно, в чём косяк
Раз уж речь зашла о мечах, хочу для себя уточнить момент, ибо не скриптер. В некоторых модах реализована заточка оружия через диалог шлифовального круга. Я не ковырял их, но механизм представляю и могу предположить, что один меч там тупо заменяется другим. А нет ли способов изменить дамаг меча одной инстанции? Допустим, меч уже в руке у NPC, и через скрипт каким-то способом мы меняем параметры этого меча (думаю, что нет, но всё же) ???
Раз уж речь зашла о мечах, хочу для себя уточнить момент, ибо не скриптер. В некоторых модах реализована заточка оружия через диалог шлифовального круга. Я не ковырял их, но механизм представляю и могу предположить, что один меч там тупо заменяется другим. А нет ли способов изменить дамаг меча одной инстанции? Допустим, меч уже в руке у NPC, и через скрипт каким-то способом мы меняем параметры этого меча (думаю, что нет, но всё же) ???
Вот этот код, тоже работает не корректно... хотя иногда и корректно, та и не понял почему:
Код:
func void B_GiveErrorInv(var C_Npc slf)
{
var C_Npc Trd_Tandor;
Trd_Tandor = Hlp_GetNpc(PAL_260_Tandor);
……
......
........
if(Npc_HasEquippedWeapon(slf))
{
if(Npc_HasEquippedMeleeWeapon(slf))
{
if(Hlp_GetInstanceID(slf) != Hlp_GetInstanceID(Trd_Tandor)) || (Hlp_GetInstanceID(slf) != Hlp_GetInstanceID(Trd_Sengrath)) || (Hlp_GetInstanceID(slf) != Hlp_GetInstanceID(Trd_Diego_DI))
{
//когда говорю с Тандором то этот код не должен обрабатываться... гм... а он
//обрабатывается, хотя если сделать проверку двух НПС то работает нормально...
WeapHear = Npc_GetEquippedMeleeWeapon(slf);
ValueWeaponMelee = Hlp_GetInstanceID(WeapHear);
ValueHear = TRUE;
};
};
......
..........
............
};
В принципе я это обошёл другим способом, но просто интересно, в чём косяк
А косяк помоему тут:
if(Hlp_GetInstanceID(slf) != Hlp_GetInstanceID(Trd_Tandor))
||(Hlp_GetInstanceID(slf) != Hlp_GetInstanceID(Trd_Sengrath))
||(Hlp_GetInstanceID(slf) != Hlp_GetInstanceID(Trd_Diego_DI))
Надо наверно всетаки ставить И , а не ИЛИ.
У меня возник вопрос:
Я создаю скрипт диалога и у меня при определенных стечениях обстоятельств НПС должен убежать от гг на вэйпоинт, мне вставлять только ZS_FleeToWp() или всю функцию?
У меня возник вопрос:
Я создаю скрипт диалога и у меня при определенных стечениях обстоятельств НПС должен убежать от гг на вэйпоинт, мне вставлять только ZS_FleeToWp() или всю функцию?
Убежать после диалога? И вообще, можно подробнее? Желательно привести хотя бы важную часть скрипта. Плохо понял суть вопроса.
Можно использовать эту команду: AI_GotoWP(varC_NPCnpc, var stringwaypoint);
Если Нпс, должен убегать после диалога, то по окончанию диалога надо запускать новое расписание для этого Нпс, (если нужно принудительно). После чего, очищать Аи, и запускать то расписание, которое будет соответствовать месту на котором он в данный момент находится, т.е. куда бежал. Вроде так если правильно помню.
Если нужно чтобы он убегал во время диалога, оборвав его, то и это сделать тоже можно но здесь уже на много сложнее. И каждый момент придется отрабатывать и тестить в ручную. Проще говоря универсального способа на этот случай - нету.
Je00Ka
Ну разве так трудно проверить самому это все. Уже 6 сообщений подряд обсуждается одна функция. Я думаю проще и быстрее, а главное полезно было бы самому сесть и проверить как и что работает.
Ребята,у меня вопрос:
Какое условие должно быть в диологе,если я хочу чтобы каждый день ко мне обращался тип и допустим давал мне бутылку воды.
Но мне главное знать какое должно быть условие чтобы он обращался ко мне каждый день.
Ребята,у меня вопрос:
Какое условие должно быть в диологе,если я хочу чтобы каждый день ко мне обращался тип и допустим давал мне бутылку воды.
Но мне главное знать какое должно быть условие чтобы он обращался ко мне каждый день.
В диалоге, после которого следующий диалог (в Вашем случае тот же самый, в моем - другой диалог) должен повториться не ранее, чем через день, поставил такое :
self.aivar[AIV_PHIL_DAY_DIALOG]=Wld_GetDay();
А проверка допустимости диалога:
if (self.aivar[AIV_PHIL_DAY_DIALOG] >= Wld_GetDay()) {
При создании мода возникла проблема. Нужно в некий момент (определяется в диалоге) очистить некую WP и ее окрестности от живности (чтобы не сломать сюжет).
Единственное, что пришло в голову, это переопределить монстров (сделать "именными") и удалить или умертвить их из скрипта диалога.
Но тут есть сложность, чтобы нормально пройти, придется начать игру заново. А хотелось бы сохранить преемственность между релизами мода (тем более, что его разработка вышла на финишную прямую).
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.