• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Не стесняюсь спросить....

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
В скриптовой зацикленной функции при помощи Trigger-Script не работают следующие команды:

Npc_RemoveInvItems(a_kil_9027,ITAR_Vlk_M,1);
CreateInvItems(a_kil_9027,ITAR_TPLL,1);
AI_UnequipArmor(a_kil_9027);
AI_EquipBestArmor(a_kil_9027); или AI_EquipArmor(a_kil_9027,ITAR_TPLL); или EquipItem(a_kil_9027,ITAR_TPLL); - не работает (голый NPC стоит, в инвентаре лежит бронь)
Мой институтский преподаватель программирования микропроцессоров говаривал, что не всегда обычные программисты могут написать и понять машинный код. А происходит это потому, что такому программисту обычно кажется, что все строки, которые он аккуратно накатывает в своем виндовом окошке будут выполняться в той же последовательности, в которой они написаны.

По теме: у тебя AI_UnequipArmor скорее всего срабатывает позже, чем AI_EquipBestArmor. Попробуй удали строку AI_UnequipArmor вообще.
И это тоже бред какой-то:
Npc_RemoveInvItems(a_kil_9027,ITAR_Vlk_M,1);
CreateInvItems(a_kil_9027,ITAR_TPLL,1);
Старую бронь необязательно вычищать: если новая по параметрам лучше, НПЦ и будет ее носить.
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Мой институтский преподаватель программирования микропроцессоров говаривал, что не всегда обычные программисты могут написать и понять машинный код. А происходит это потому, что такому программисту обычно кажется, что все строки, которые он аккуратно накатывает в своем виндовом окошке будут выполняться в той же последовательности, в которой они написаны.

По теме: у тебя AI_UnequipArmor скорее всего срабатывает позже, чем AI_EquipBestArmor. Попробуй удали строку AI_UnequipArmor вообще.
И это тоже бред какой-то:
Npc_RemoveInvItems(a_kil_9027,ITAR_Vlk_M,1);
CreateInvItems(a_kil_9027,ITAR_TPLL,1);
Старую бронь необязательно вычищать: если новая по параметрам лучше, НПЦ и будет ее носить.

Не срабатывает даже если ставить так:

Вариант 1:

CreateInvItems(a_kil_9027,ITAR_TPLL,1);
Npc_RemoveInvItems(a_kil_9027,ITAR_Vlk_M,1);
AI_UnequipArmor(a_kil_9027);

Вариант 2:

CreateInvItems(a_kil_9027,ITAR_TPLL,1);
AI_UnequipArmor(a_kil_9027);

Вариант 3:

Npc_RemoveInvItems(a_kil_9027,ITAR_Vlk_M,1);
CreateInvItems(a_kil_9027,ITAR_TPLL,1);
AI_UnequipArmor(a_kil_9027);

Вариант 4:

Npc_RemoveInvItems(a_kil_9027,ITAR_Vlk_M,1);
EquipItem(a_kil_9027,ITAR_TPLL)

и т.д.

Работает если ГГ говорит с NPC1 и NPC1 должен одеть новую бронь/одежду - даже в оригинальных скриптах нету такого варианта, чтобы ГГ разговаривал с NPC 1 и у NPC 10 менялась бронь/одежда.


Или у меня обозначает варианты и выделены чёрным все варианты - видимо слово "или" было маленьким шрифтом напечатано.
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
не будет у тебя на скриптах работать четкая последовательность, вроде:

- добавил новый предмет
- снял старый
- удалил старый
- одел новый

ни в каких комбинациях. Потому что функции по факту не исполняются в той последовательности, в какой ты написал.

может сработать только AI_EquipBestArmor при условии, что новая броня лучше старой, и она уже была где-то ранее добавлена в инвентарь нужного нпц. Старую при этом необязательно снимать и удалять.
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
не будет у тебя на скриптах работать четкая последовательность, вроде:

- добавил новый предмет
- снял старый
- удалил старый
- одел новый

ни в каких комбинациях. Потому что функции по факту не исполняются в той последовательности, в какой ты написал.

может сработать только AI_EquipBestArmor при условии, что новая броня лучше старой, и она уже была где-то ранее добавлена в инвентарь нужного нпц. Старую при этом необязательно снимать и удалять.

Но тогда вопрос:

1. С 12 часов NPC носит новую бронь, максимум до 14 и если ГГ раньше NPC поговорил с доносителем NPC чем 14 часов - квест выполнен т.к. ГГ успел перекрыть источник информации.
2. Если квест выполнен NPC должен снова одеть гражданскую одежду (она по параметрам хуже брони), чтобы не выделяться до нужного момента среди граждан Хориниса.

Как такое прописать?

Удалять бронь новую и оставлять гражданский доспех - результата не даёт.

Сразу ещё одна проблема не решённая есть:

AI_EquipBestRangedWeapon(hero); - работает только для ГГ.

Для NPC не работает. Исправлению подлежит?

Ещё проведу испытание как описал alex_draven - поставить чисто AI_EquipBestArmor - без других команд. И заранее у NPC будет лежать бронь.

Об результате отпишусь через минут 10.

UPD: Новая бронь игнорируется. Даже когда она заранее лежит изначально в инвентаре NPC. Показатели брони 90 по всем характеристикам. (сила NPC 200, чтобы новую бронь носить надо 0 силы) Показатели городской одежды 10 брони.

Код:
   guild = GIL_VLK;
   id = 9027;
   voice = 1;
   flags = 0;
   npcType = npctype_main;
   aivar[AIV_IgnoresArmor] = TRUE;
   B_SetAttributesToChapter(self,6);
   fight_tactic = FAI_HUMAN_MASTER;
   EquipItem(self,ItMw_Addon_PIR1hSword);
   CreateInvItems(self,ITAR_TPLL,1);
   B_SetNpcVisual(self,MALE,"Hum_Head_Psionic",Face_L_Tough01,BodyTex_N,ITAR_Vlk_M);
   Mdl_SetModelFatness(self,0);
   Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds");
   B_GiveNpcTalents(self);
   B_SetFightSkills(self,100);
   daily_routine = rtn_start_9027;

Код:
  name = "Броня элитного убийцы";
   mainflag = ITEM_KAT_ARMOR;
   flags = 0;
   protection[PROT_EDGE] = 90;
   protection[PROT_BLUNT] = 90;
   protection[PROT_POINT] = 90;
   protection[PROT_FIRE] = 90;
   protection[PROT_MAGIC] = 90;
   value = VALUE_ITAR_XARDAS;
   wear = WEAR_TORSO;
   visual = "TPLL.3ds";
   visual_change = "HUM_TPLL_ARMOR.asc";
   visual_skin = 0;
   material = MAT_LEATHER;
   description = name;
   text[1] = NAME_Prot_Edge;
   count[1] = protection[PROT_EDGE];
   text[2] = NAME_Prot_Point;
   count[2] = protection[PROT_POINT];
   text[3] = NAME_Prot_Fire;
   count[3] = protection[PROT_FIRE];
   text[4] = NAME_Prot_Magic;
   count[4] = protection[PROT_MAGIC];
   text[5] = NAME_Value;
   count[5] = value;

Код:
  name = "Одежда горожанина";
   mainflag = ITEM_KAT_ARMOR;
   flags = 0;
   on_equip = equip_sss131;
   on_unequip = unequip_sss131;
   protection[PROT_EDGE] = 10;
   protection[PROT_BLUNT] = 10;
   protection[PROT_POINT] = 10;
   protection[PROT_FIRE] = 0;
   protection[PROT_MAGIC] = 0;
   value = VALUE_ITAR_Vlk_M;
   wear = WEAR_TORSO;
   visual = "ItAr_VLK_M.3DS";
   visual_change = "Armor_Vlk_M.asc";
   visual_skin = 0;
   material = MAT_LEATHER;
   description = name;
   text[1] = NAME_Prot_Edge;
   count[1] = protection[PROT_EDGE];
   text[2] = NAME_Prot_Point;
   count[2] = protection[PROT_POINT];
   text[3] = NAME_Prot_Fire;
   count[3] = protection[PROT_FIRE];
   text[4] = NAME_Prot_Magic;
   count[4] = protection[PROT_MAGIC];
   text[5] = NAME_Value;
   count[5] = value;

Код:
  if((MIS_KILL9 == LOG_Running) && (t == 6) && (PRIZO28 == 1))
   {
   Npc_ExchangeRoutine(a_kil_9027,"SEARCH");
   AI_EquipBestArmor(a_kil_9027);
   PRIZO28 = 2;
   };
 
Последнее редактирование:

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
Как такое прописать?
Поищи примеры в готовых модах. В Диккурике было что-то с квестовыми переодеваниями девки какой-то.

Для NPC не работает. Исправлению подлежит?
Если реально не пашет, то нет.

Новая бронь игнорируется.
Пропиши:
AI_EquipBestArmor(self,armor) в расписании SEARCH, которое вызовет строка Npc_ExchangeRoutine(a_kil_9027,"SEARCH")
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Поищи примеры в готовых модах. В Диккурике было что-то с квестовыми переодеваниями девки какой-то.


Если реально не пашет, то нет.


Пропиши:
AI_EquipBestArmor(self,armor) в расписании SEARCH, которое вызовет строка Npc_ExchangeRoutine(a_kil_9027,"SEARCH")


Игнорируется:

Вариант 1:

Код:
   guild = GIL_VLK;
   id = 9027;
   voice = 1;
   flags = 0;
   npcType = npctype_main;
   aivar[AIV_IgnoresArmor] = TRUE;
   B_SetAttributesToChapter(self,6);
   fight_tactic = FAI_HUMAN_MASTER;
   EquipItem(self,ItMw_Addon_PIR1hSword);
   CreateInvItems(a_kil_9027,ITAR_TPLL,1);
   B_SetNpcVisual(self,MALE,"Hum_Head_Psionic",Face_L_Tough01,BodyTex_N,ITAR_Vlk_M);
   Mdl_SetModelFatness(self,0);
   Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds");
   B_GiveNpcTalents(self);
   B_SetFightSkills(self,100);
   daily_routine = rtn_start_9027;
};


func void rtn_start_9027()
{
   AI_EquipBestArmor(self);
   TA_Stand_ArmsCrossed(5,10,7,50,"NW_CITY_HABOUR_POOR_AREA_01_B");
   TA_Stand_ArmsCrossed(7,50,10,0,"NW_CITY_HABOUR_POOR_AREA_BACK_ALLEY_06");
   TA_Stand_ArmsCrossed(10,0,12,0,"NW_CITY_HABOUR_POOR_AREA_PATH_08");
   TA_Stand_ArmsCrossed(12,0,14,50,"NW_CITY_HABOUR_POOR_AREA_PATH_13");
   TA_Stand_ArmsCrossed(14,50,16,0,"NW_CITY_HABOUR_POOR_AREA_PATH_15");
   TA_Stand_ArmsCrossed(16,0,17,0,"NW_CITY_HABOUR_POOR_AREA_PATH_19");
   TA_Stand_ArmsCrossed(17,0,18,0,"NW_CITY_PATH_HABOUR_19");
   TA_Stand_ArmsCrossed(18,0,19,50,"NW_CITY_PATH_HABOUR_16");
   TA_Stand_ArmsCrossed(19,50,0,10,"NW_CITY_HABOUR_12");
   TA_Sleep(0,10,5,10,"NW_CITY_HOTEL_BED_01");

Вариант 2:

Код:
  guild = GIL_VLK;
   id = 9027;
   voice = 1;
   flags = 0;
   npcType = npctype_main;
   aivar[AIV_IgnoresArmor] = TRUE;
   B_SetAttributesToChapter(self,6);
   fight_tactic = FAI_HUMAN_MASTER;
   EquipItem(self,ItMw_Addon_PIR1hSword);
   B_SetNpcVisual(self,MALE,"Hum_Head_Psionic",Face_L_Tough01,BodyTex_N,ITAR_Vlk_M);
   Mdl_SetModelFatness(self,0);
   Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds");
   B_GiveNpcTalents(self);
   B_SetFightSkills(self,100);
   daily_routine = rtn_start_9027;
};


func void rtn_start_9027()
{
   AI_EquipBestArmor(self);
   TA_Stand_ArmsCrossed(5,10,7,50,"NW_CITY_HABOUR_POOR_AREA_01_B");
   TA_Stand_ArmsCrossed(7,50,10,0,"NW_CITY_HABOUR_POOR_AREA_BACK_ALLEY_06");
   TA_Stand_ArmsCrossed(10,0,12,0,"NW_CITY_HABOUR_POOR_AREA_PATH_08");
   TA_Stand_ArmsCrossed(12,0,14,50,"NW_CITY_HABOUR_POOR_AREA_PATH_13");
   TA_Stand_ArmsCrossed(14,50,16,0,"NW_CITY_HABOUR_POOR_AREA_PATH_15");
   TA_Stand_ArmsCrossed(16,0,17,0,"NW_CITY_HABOUR_POOR_AREA_PATH_19");
   TA_Stand_ArmsCrossed(17,0,18,0,"NW_CITY_PATH_HABOUR_19");
   TA_Stand_ArmsCrossed(18,0,19,50,"NW_CITY_PATH_HABOUR_16");
   TA_Stand_ArmsCrossed(19,50,0,10,"NW_CITY_HABOUR_12");
   TA_Sleep(0,10,5,10,"NW_CITY_HOTEL_BED_01");
};

func void rtn_search_9027()
{
   AI_EquipBestArmor(self);
   TA_Stand_ArmsCrossed(6,0,8,30,"NW_CITY_HABOUR_POOR_AREA_PATH_14");
   TA_Stand_ArmsCrossed(8,30,13,0,"NW_CITY_HABOUR_POOR_AREA_01_B");
   TA_Stand_ArmsCrossed(13,0,13,30,"NW_CITY_HABOUR_PUFF_IN_07");
   TA_Stand_Drinking(14,0,0,0,"NW_CITY_HABOUR_TAVERN01_01");
   TA_Stand_Drinking(0,0,6,0,"NW_CITY_HABOUR_TAVERN01_01");
  };

Код:
  if((MIS_KILL9 == LOG_Running) && (t == 6) && (PRIZO28 == 1))
   {
   CreateInvItems(a_kil_9027,ITAR_TPLL,1);
   Npc_ExchangeRoutine(a_kil_9027,"SEARCH");
   PRIZO28 = 2;
   };

Даже на старте не работает. Если разговор с NPC1 ГГ ведёт, переодевается NPC1, если нужно переодеть NPC2 уже не работает.

Единственный вариант в Диккурике:

Код:
func void ZS_Bathing_Babe()
{
   PrintDebug("Enter ZS_Bathing_Babe () ");
   B_SetBabeDefaultPerceptions();
   AI_SetWalkMode(self,NPC_WALK);
   PrintDebug("Найди ванну!");
   if(Wld_IsMobAvailable(self,"BATHTUB"))
   {
     PrintDebug("Ванна найдена! Иди купаться.");
     CreateInvItem(self,bab_armor_nude);
     AI_EquipBestArmor(self);
     AI_UseMob(self,"BATHTUB",1);
     Mdl_ApplyRandomAni(self,"S_BATHTUB_S1","T_BATHTUB_RANDOM1");
     Mdl_ApplyRandomAni(self,"S_BATHTUB_S1","T_BATHTUB_RANDOM2");
     Mdl_ApplyRandomAniFreq(self,"S_BATHTUB_S1",3);
   }
   else
   {
     PrintDebug("Здесь нет ванны!");
   };
};

func void ZS_Bathing_Babe_Loop()
{
};

func void ZS_Bathing_Babe_End()
{
   PrintDebug("Enter ZS_Bathing_Babe_End() ");
   AI_UseMob(self,"BATHTUB",-1);
   AI_UnequipArmor(self);
   Npc_RemoveInvItem(self,bab_armor_nude);
};

Реализовано как новый распорядок дня. И у NPC не используется.
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
В скриптовой зацикленной функции при помощи Trigger-Script не работают следующие команды:

Npc_RemoveInvItems(a_kil_9027,ITAR_Vlk_M,1);

Когда нужно что-то сделать с третьими лицами, в подобных функциях должна использоваться в качестве аргумента переменная класса C_Npc:
Код:
var C_Npc npc;
npc = Hlp_GetNpc(a_kil_9027);
Npc_RemoveInvItem(npc,ITAR_Vlk_M);

В функции распорядка тоже нужно использовать данный подход:
Код:
func void rtn_start_9027()
{
   var C_Npc npc;
   npc = Hlp_GetNpc(a_kil_9027);
   AI_EquipBestArmor(npc);
   TA_Stand_ArmsCrossed(5,10,7,50,"NW_CITY_HABOUR_POOR_AREA_01_B");
   ...
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.574
Благодарности
4.168
Баллы
915
Зачем каждый раз раз объявлять новую локальную переменную npc? Если обращение к этому персонажу используется несколько раз, то можно внести связанную с ним глобальную переменную в скрипт Npc_Globals.d:
Код:
var C_Npc Killer;
...
Killer = Hlp_GetNpc(a_kil_9027);
Затем уже можно обращаться к ней, например:
Код:
Npc_RemoveInvItem(Killer,ITAR_Vlk_M);
...
AI_EquipBestArmor(Killer);
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Можно и так. С точки зрения скриптера, это удобно. Но наличие такого массива переменных требует дополнительного места в сохранёнке и дополнительного времени на их сохранение и загрузку, если переменные класса C_Npc сохраняются там. Либо требуется дополнительное время, чтобы каждый раз при инициализации мира инициализировать эти переменные. Это, конечно, не критично. :)
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Когда нужно что-то сделать с третьими лицами, в подобных функциях должна использоваться в качестве аргумента переменная класса C_Npc:
Код:
var C_Npc npc;
npc = Hlp_GetNpc(a_kil_9027);
Npc_RemoveInvItem(npc,ITAR_Vlk_M);

В функции распорядка тоже нужно использовать данный подход:
Код:
func void rtn_start_9027()
{
   var C_Npc npc;
   npc = Hlp_GetNpc(a_kil_9027);
   AI_EquipBestArmor(npc);
   TA_Stand_ArmsCrossed(5,10,7,50,"NW_CITY_HABOUR_POOR_AREA_01_B");
   ...

Доброе утро. Снова не срабатывает (бронь в инвентаре и снова игнорирование новой брони)

Код:
  if((MIS_KILL9 == LOG_Running) && (t == 6) && (PRIZO28 == 1))
   {
   Npc_ExchangeRoutine(a_kil_9027,"SEARCH");
   var C_Npc npc;
   npc = Hlp_GetNpc(a_kil_9027);
   CreateInvItems(npc,ITAR_TPLL,1);
   AI_EquipBestArmor(npc);
   PRIZO28 = 2;
   };

Квест 21 так и оставляю, его не реализовать в полной мере. За квест 22 берусь реализовывать.
Всем спасибо за предоставленную помощь.
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Npc_ExchangeRoutine(a_kil_9027,"SEARCH");
Возможно, в некоторых случаях в качестве аргумента здесь прокатит и инстанция, но правильным является использование переменной класса C_Npc.

Снова не срабатывает (бронь в инвентаре и снова игнорирование новой брони)
Подробности, конечно же, мы должны додумывать. ;)

Если переодевание непися происходит, когда он находится вне зоны обработки ИИ, так и должно получиться. Дело в том, что в инстанции непися прописана функция визуализации, где указана инстанция доспеха:
B_SetNpcVisual(self,MALE,"Hum_Head_Psionic",Face_L_Tough01,BodyTex_N,ITAR_Vlk_M);

Когда непись входит в зону действия ИИ, его визуал считывается из инстанции. Соответственно, непись одевается в первоначальный доспех. Подмену доспеха нужно организовывать ещё и на уровне функции типа B_SetNpcVisual. Можно для данного конкретного непися написать свой вариант функции.

Квест 21 так и оставляю, его не реализовать в полной мере.
Смелый вывод! Но не верный. Правильно было сказать так: "Квест 21 так и оставляю, потому что не знаю, как его реализовать".
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Когда непись входит в зону действия ИИ, его визуал считывается из инстанции. Соответственно, непись одевается в первоначальный доспех. Подмену доспеха нужно организовывать ещё и на уровне функции типа B_SetNpcVisual. Можно для данного конкретного непися написать свой вариант функции.


Смелый вывод! Но не верный. Правильно было сказать так: "Квест 21 так и оставляю, потому что не знаю, как его реализовать".

У меня срок до Декабря 2015 завершить мод, уже запланировано с Января 2016 по Май 2016 другая работа. Может у Вас по иному всё обстоит.

Код:
  guild = GIL_VLK;
   id = 9027;
   voice = 1;
   flags = 0;
   npcType = npctype_main;
   aivar[AIV_IgnoresArmor] = TRUE;
   B_SetAttributesToChapter(self,6);
   fight_tactic = FAI_HUMAN_MASTER;
   EquipItem(self,ItMw_Addon_PIR1hSword);
   CreateInvItems(self,ITAR_Vlk_M,1);
   B_SetNpcVisual(self,MALE,"Hum_Head_Psionic",Face_L_Tough01,BodyTex_N,NO_ARMOR);
   Mdl_SetModelFatness(self,0);
   Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds");
   B_GiveNpcTalents(self);
   B_SetFightSkills(self,100);
   daily_routine = rtn_start_9027;

Голым NPC стоит = хотя у него лежит в инвентаре две брони ITAR_Vlk_M и ITAR_TPLL - не работает AI_EquipBestArmor(npc); (Т.е. игра команду игнорирует) (в игре всё построено от диалогов, без диалогов много пропущенного в движке и скриптовом языке)

1. Как только добавился новый NPC, он должен выбрать из 1 брони какую одеть - не срабатывает.
2. В 6 утра к нему добавляется 2 броня и он должен выбрать из 2 броней - не срабатывает.

Итог: без диалога переодевание NPC не реализовать.

Готика для такого не задумывалась, вот и не работает. (Платформа Готика - для таких квестов не очень подходит т.е. квестов уровня А, АА, ААА - по иностранной градации квестов (отечественной градации квестов нет))
 
Последнее редактирование:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
871
Благодарности
500
Баллы
230
Голым NPC стоит = хотя у него лежит в инвентаре две брони ITAR_Vlk_M и ITAR_TPLL - не работает AI_EquipBestArmor(npc); (Т.е. игра команду игнорирует) (в игре всё построено от диалогов, без диалогов много пропущенного в движке и скриптовом языке)
Только что потестил у себя.
Мой непись NPC_60011_BRONT изначально одет в ItAr_BDT_M. Я в скрипте прописываю :
CreateInvItems(NPC_60011_Bront,ITAR_Dementor,1);
AI_EquipBestArmor(NPC_60011_Bront);
После срабатывания триггера, нпс благополучно меняет одежду.Ищи проблему у себя,а не в Готике.Возможно триггер не срабатывает.
 

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Только что потестил у себя.
Мой непись NPC_60011_BRONT изначально одет в ItAr_BDT_M. Я в скрипте прописываю :
CreateInvItems(NPC_60011_Bront,ITAR_Dementor,1);
AI_EquipBestArmor(NPC_60011_Bront);
После срабатывания триггера, нпс благополучно меняет одежду.Ищи проблему у себя,а не в Готике.Возможно триггер не срабатывает.

У меня срабатывание происходит:

if((MIS_KILL9 == LOG_Running) && (t == 6) && (PRIZO28 == 1))
{
var C_Npc npc;
npc = Hlp_GetNpc(a_kil_9027);
CreateInvItems(npc,ITAR_TPLL,1);
AI_EquipBestArmor(npc);
Npc_ExchangeRoutine(a_kil_9027,"SEARCH");
PRIZO28 = 2;
};

Если Миссия запущена, время равно 6 утра и в начальном разговоре где выдаётся квест PRIZO28=1 приравнивается.
Если все условия выполнены, броня у NPC в инвентаре есть (вселялось в него и проверялся инвентарь), переключение на новый распорядок дня (работает), PRIZO28 = 2 - высвечивается (и закрывает вероятное второе срабатывание в будущем). Не срабатывает AI_EquipBestArmor(npc).

Просьба повторить дословно опыт у себя. (Если триггер не работает, как 3 пункта из 4 работают?)

Отлично описан урок: https://worldofplayers.ru/threads/37747/ теперь гадаю, что за
< & &quot - очень много лишних знаков.
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Голым NPC стоит = хотя у него лежит в инвентаре две брони
Какая разница, что у него в инвентаре? Хреновина, которая лежит в инвентаре - это всего лишь модель снятого с непися доспеха. Выброси её на землю и посмотри, что это такое. Доспех, который "одет" на неписе - это его тело. Смена доспеха - это смена тела. Ты прописал неписю тело "NO_ARMOR" (-1) и хочешь, чтобы он был во что-то одет?

Меняй визуал через функцию Mdl_SetVisualBody в функции B_SetNpcVisual или специально написанной для непися функции.

Ну, или при входе в распорядок переодевай непися, как это сделано с купающейся Велаей.

квестов уровня А, АА, ААА - по иностранной градации квестов
Standard & Poors? Moody’s? Не узнаю вас в гриме. :D
 
Последнее редактирование:

Лебедев

Участник форума
Регистрация
3 Сен 2005
Сообщения
595
Благодарности
77
Баллы
225
Какая разница, что у него в инвентаре? Хреновина, которая лежит в инвентаре - это всего лишь модель снятого с непися доспеха. Выброси её на землю и посмотри, что это такое. Доспех, который "одет" на неписе - это его тело. Смена доспеха - это смена тела. Ты прописал неписю тело "NO_ARMOR" (-1) и хочешь, чтобы он был во что-то одет?

Меняй визуал через функцию Mdl_SetVisualBody в функции B_SetNpcVisual или специально написанной для непися функции.

Ну, или при входе в распорядок переодевай непися, как это сделано с купающейся Велаей.

Вот так работает, взято из 13 квеста т.к. диалог

Код:
func void dia_a_kil_9013_exit4_info()
{
   AI_Output(other,self,"dia_a_kil_9013_exit3_15_01");   //Вот твои вещи. Теперь отдавай кольцо.
   AI_Output(self,other,"dia_a_kil_9013_exit3_15_00");   //У Тируса снова есть одежда! Он может вернуться на ферму! Ему больше не нужно кольцо!
   PRIZO15 = 0;
   B_GiveInvItems(self,other,itri_prot_01,1);
   B_GiveInvItems(other,self,ItMw_1h_Bau_Axe1,1);
   B_GiveInvItems(other,self,ITAR_Bau_L1,1);
   AI_EquipBestMeleeWeapon(a_kil_9013);
   AI_EquipBestArmor(a_kil_9013);
   Npc_ExchangeRoutine(a_kil_9013,"START");
   B_LogEntry(TOPIC_KILL1,"Кольцо у меня. Надо наведаться к Норвусу.");
   AI_StopProcessInfos(self);
};


Standard & Poors? Moody’s? Не узнаю вас в гриме. :D
Градация квестов идёт от E - самый худший
D - чуть лучше туалетной бумаги
C - средний
B - хороший
A - самый лучший

И дальше ещё разделение идёт:

EE - хуже, чем E и т.д. (до трёх букв обозначающих качество)
Обозначения и не знать.
 

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
871
Благодарности
500
Баллы
230
Просьба повторить дословно опыт у себя.
Здесь,собственно,и нечего повторять дословно.
Я просто перенес твой скрипт к себе(в зацикленную функцию,вызываемую Trigger-Scriptом):
Код:
if(бла бла бла)
{
var C_Npc npc;
npc = Hlp_GetNpc(a_brval_9027);(выбрал жертву)
CreateInvItems(npc,ITAR_Dementor,1);(дал ему более лучший наряд,чем у него был)
Npc_ExchangeRoutine(a_brval_9027,"GETLOST");(и он ушел восвояси)
AI_EquipBestArmor(npc);(сначала примерив обнову)
};
Все работает как часы.
Единственное,пришлось поменять местами строки Npc_ExchangeRoutine(бла бла) и AI_EquipBestArmor(бла),иначе непись переодевался но отказывался менять рутину.
 
Последнее редактирование:

Phantom95

Участник форума
Регистрация
31 Июл 2014
Сообщения
2.227
Благодарности
1.910
Баллы
370
Народ, подскажите как можно изменить размер вывода на экран баров хп, маны, выносливости при помощи икаруса, где и какие функции прописать? (Мне нужно лишь ровно в 2 раза увеличить размер текстуры выведенной на экран, без смещений по координатам). 2 вопрос может и не в тему , но как можно текстуру сделать полупрозрачной? И 3 вопрос - как откомпилить скрипты движком? (В сурсере куча ошибок при компиле икаруса, эту хрень надо обойти таким способом) ps: заранее спасибо
 
Сверху Снизу