[AGFC: Valley of Gothic] М: Скриптинг в Готике

Страница 47 из 65 « Первая 374041424344454647 4849505152535457 Последняя »
Поиск в этой теме:

Расширенный поиск
Старый 03.10.2007, 04:37   #1841
HikeR

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2MaGoth:
Попробуй использовать проверку активного оружия перед торговлей
ммм... а как зовут нужную ф-ию вызова торговли? с наскоку не обнаружил :(

Хм.. кстати по поводу факелов, из всей их кучи используется именно один факел ;)
прием он становится сгоревшим и отделяется мож тут еще стоит порыться как оно реализовано?
Ведь при использовании факела, 10 факелов не иктивируются сразу, имхо. :))
но горящий факел в инвентаре не отображается. при активации кол-во уменьшается на один и все. я даже не понял, как его обратно засунуть. типа ночью поджег, утро наступило и приходится выкидывать.

Персонаж появляется обычно стоя, после того как вставится в мир запускается функция распорядка дня, определяющая выполнение распорядка дня для этого вейпоинта.
вот только что на пути в болотный лагерь встретил Гор (не помню как), который шел вместе со Стражем. встретил аккурат на полпути, у моста с гоблинами, было 3 часа дня. а утром шел обратно, и этот Гор возвращался в болотный лагерь (по слухам, он ходит в старый лагерь).
или у этого персонажа путь состоит не из двух точек "начало" и "конец", а весь путь разбит на маленькие отрезки с временным указанием каждого из них?
если бы я видел, как этот Гор уходил из болотного лагеря у самых ворот, а потом оказывался в старом лагере, то вроде все понятно. но получается, что каждый день в 3 часа дня он с напарником оказывается в одной и той же точке. и в итоге имеем, что игра проверяет все доступные вейпоинты в пределах досягаемости (видимости, слышимости) игрока, а потом смотрит, не надо ли в эту точку в текущее время кого-нить заспавнить.

я прав, или куда-то не в ту сторону занесло?
Ответить с цитированием
Старый 03.10.2007, 15:44   #1842
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от HikeR link=board=gothic&t=1105030050&start=3769400#37694 05 date=10/03/07, в 04:37:17
2MaGoth:
ммм... а как зовут нужную ф-ию вызова торговли? с наскоку не обнаружил :(
Функция тогровли прописывается через диалог, пример:
Cпойлер(щелкните, чтобы прочесть):
instance DIA_Zuris_WAREZ(C_Info)
{
* * *npc = VLK_409_Zuris;
* * *nr = 2;
* * *condition = DIA_Zuris_WAREZ_Condition;
* * *information = DIA_Zuris_WAREZ_Info;
* * *permanent = TRUE;
* * *trade = TRUE;
* * *description = "Покажи мне свои товары";
};


func int DIA_Zuris_WAREZ_Condition()
{
* * *return TRUE;
};

func void DIA_Zuris_WAREZ_Info()
{
* * *B_GiveTradeInv(self);
* * *AI_Output(other,self,"DIA_Zuris_WAREZ_15_00"); * * *//Покажи мне твои товары.
* * *if((Zuris_einmal == FALSE) && !Npc_KnowsInfo(other,DIA_Zuris_Potions))
* * *{
* * * * * *AI_Output(self,other,"DIA_Zuris_GREET_14_02"); * * *//Буквально только что я получил новые снадобья. Дорогой гость, сам Мастер Дарон, маг Огня, доставил их мне из монастыря.
* * * * * *Zuris_einmal = TRUE;
* * *};
};
В объявлении инстанции диалога: * * *trade = TRUE;


но горящий факел в инвентаре не отображается. при активации кол-во уменьшается на один и все. я даже не понял, как его обратно засунуть. типа ночью поджег, утро наступило и приходится выкидывать.
;D... по утру открой инвентарь и нажми на факел иконку факелов которая там изображена, это если в инвентаре будут лежать несколько факелов а не один, с одним не работает он будет в руке.
Иначе, при нажатии на факелы активный факел уберется в инвентарь в виде нового прогоревшего факела если до этого там такого нет.

вот только что на пути в болотный лагерь встретил Гор (не помню как), который шел вместе со Стражем. встретил аккурат на полпути, у моста с гоблинами, было 3 часа дня. а утром шел обратно, и этот Гор возвращался в болотный лагерь (по слухам, он ходит в старый лагерь).
или у этого персонажа путь состоит не из двух точек "начало" и "конец", а весь путь разбит на маленькие отрезки с временным указанием каждого из них?
если бы я видел, как этот Гор уходил из болотного лагеря у самых ворот, а потом оказывался в старом лагере, то вроде все понятно. но получается, что каждый день в 3 часа дня он с напарником оказывается в одной и той же точке. и в итоге имеем, что игра проверяет все доступные вейпоинты в пределах досягаемости (видимости, слышимости) игрока, а потом смотрит, не надо ли в эту точку в текущее время кого-нить заспавнить.
я прав, или куда-то не в ту сторону занесло?
Открой скрипты. и глянь вейпоинты в распорядке, и тебе будет все ясно. :))
Вот примерчик:
Cпойлер(щелкните, чтобы прочесть):

При запуске распорядка:
func void Rtn_Start_777()
{
* * *TA_Sit_Throne(2,35,22,50,"NW_CITY_BANDA_2"); //сидит на троне
* * *TA_FleeToWp(22,50,23,0,"NW_CITY_HABOUR_TAVERN01_0 8"); //после чего перемещается в таверну.
* * *TA_Sit_Chair(23,0,2,30,"NW_CITY_HABOUR_TAVERN01_0 8"); //устраивается там садясь за стол, стул и т.д.
* * *TA_FleeToWp(2,30,2,35,"NW_CITY_BANDA_2"); //после товерны перемещается назад к себе в бандитский квартал
};
Все это просисходит мгновенно если рядом нет Гг, если Гг есть то мона видеть как он идет, бежит, и т.д. выполняя рутину в соответствии с распорядком Нпс.


Добавление от 10/03/07, в 15:49:14
Да и еще, то что продается т.е. товары в инвентаре непесей торговцев прописываются в этой папочке:
F:\Program Files\GothicSourcer V3.14\Gothic Projects\SolGlobal1.13\SolGlobal\PrjGothic\Story\B _GiveTradeInv

Для примера файл Нпс Зурис:
B_GiveTradeInv_Zuris.d

Диск твой. ;)
Отправить личное сообщение для Ответить с цитированием
Старый 03.10.2007, 16:09   #1843
Artem-modder

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Такой вопрос:

Как вставить новую музыку в Г2а?.. Я просмотрел скрипт MusicInst.d, там есть инстанции музыки из Г1
Cпойлер(щелкните, чтобы прочесть):
// --- INEXTREMO ----


INSTANCE IE_Day_Std            (C_MUSICTHEME_DEF)      {      file                  = "oc_day_std.sgt";                                      };
INSTANCE IE_Ngt_Std            (C_MUSICTHEME_DEF)      {      file                  = "cam_ngt_std.sgt";                                      };

INSTANCE IE_Day_Thr            (C_MUSICTHEME_DEF)      {      file                  = "oc_day_std.sgt";                                      };

INSTANCE IE_Day_Fgt            (C_MUSICTHEME_DEF)      {      file                  = "oc_day_fgt.sgt";                                      };
                                                                       

// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// XXXXXXXX  N E W C A M P  [NCO_/NCI_]   XXXXXXXX
// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

// Plateau davor

INSTANCE NCO_Day_Std      (C_MUSICTHEME_DEF)      {      file                  = "cam_day_std.sgt";      
                                                                       transType            = TRANSITION_TYPE_BREAK;
                                                                       transSubType      = TRANSITION_SUB_TYPE_MEASURE;                  };
                                                                       
INSTANCE NCO_Day_Thr      (C_MUSICTHEME_DEF)      {      file                  = "cam_day_thr.sgt";
                                                                       transType            = TRANSITION_TYPE_BREAK;
                                                                       transSubType      = TRANSITION_SUB_TYPE_MEASURE;                  };

INSTANCE NCO_Day_Fgt      (C_MUSICTHEME_DEF)      {      file                  = "cam_day_fgt.sgt";
                                                                       transType            = TRANSITION_TYPE_FILL;
                                                                       transSubType      = TRANSITION_SUB_TYPE_MEASURE;                  };

                                                               
INSTANCE NCO_Ngt_Std      (C_MUSICTHEME_DEF)      {      file                  = "cam_ngt_std.sgt";                              };
INSTANCE NCO_Ngt_Thr      (C_MUSICTHEME_DEF)      {      file                  = "cam_ngt_std.sgt";                              };
INSTANCE NCO_Ngt_Fgt      (C_MUSICTHEME_DEF)      {      file                  = "cam_ngt_std.sgt";                              };

// Hцhle

INSTANCE NCI_Day_Std      (C_MUSICTHEME_DEF)      {      file                  = "nci_day_std.sgt";
                                                                       transType            = TRANSITION_TYPE_BREAK;
                                                                       transSubType      = TRANSITION_SUB_TYPE_MEASURE;                  };

INSTANCE NCI_Day_Thr      (C_MUSICTHEME_DEF)      {      file                  = "nci_day_std.sgt";
                                                                       transType            = TRANSITION_TYPE_BREAK;
                                                                       transSubType      = TRANSITION_SUB_TYPE_MEASURE;                  };

INSTANCE NCI_Day_Fgt      (C_MUSICTHEME_DEF)      {      file                  = "nci_day_fgt.sgt";                              
                                                                       transType            = TRANSITION_TYPE_FILL;
                                                                       transSubType      = TRANSITION_SUB_TYPE_MEASURE;                  };
                                                               
INSTANCE NCI_Ngt_Std      (C_MUSICTHEME_DEF)      {      file                  = "nci_day_std.sgt";                              };
INSTANCE NCI_Ngt_Thr      (C_MUSICTHEME_DEF)      {      file                  = "nci_day_std.sgt";                              };
INSTANCE NCI_Ngt_Fgt      (C_MUSICTHEME_DEF)      {      file                  = "nci_day_fgt.sgt";                              
                                                                       transType            = TRANSITION_TYPE_FILL;
                       
, а мне как раз надо её оттуда вставить.

Я вставил файлы музыки из Г1 в папку _work\data\music\newworld
И на всяк случай сделал папку _work\data\musik\orchestra - такая папка была в Г1.

Далее я прописал инстанцию нужной мне музыки в спейсере, но музыка не играет :(.
Может кто-нидь уже добавлял с игру свою музыку, и знает как это делать?..
Ответить с цитированием
Старый 03.10.2007, 17:34   #1844
HikeR

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2MaGoth:
Да и еще, то что продается т.е. товары в инвентаре непесей торговцев прописываются в этой папочке:
F:\Program Files\GothicSourcer V3.14\Gothic Projects\SolGlobal1.13\SolGlobal\PrjGothic\Story\B _GiveTradeInv
это из мода? в первой готике такого нет. есть только скрипты вида B_Give_(имя_торговца)(Weapons|Runes), в которых прописан ассортимент в зависимости от главы. но ход мыслей понятен ;)
Функция тогровли прописывается через диалог, пример:
это получается, что поменять в одном месте нельзя, придется у ВСЕХ торговцев прописывать скрипт снятия оружия :(
Ответить с цитированием
Старый 03.10.2007, 18:08   #1845
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М: Скриптинг в Готике

2SMErtNIK:

Побегай по страницам, темы 1000 раз уже описывалось как вставить Ин-Екстремо. ;))

2HikeR:

это из мода? в первой готике такого нет. есть только скрипты вида B_Give_(имя_торговца)(Weapons|Runes), в которых прописан ассортимент в зависимости от главы. но ход мыслей понятен
Да, Глобал на Г2-НВ, но скрипт показывал оригинала Готы 2.

это получается, что поменять в одном месте нельзя, придется у ВСЕХ торговцев прописывать скрипт снятия оружия
Да именно так у всех прописывать.

Отправить личное сообщение для Ответить с цитированием
Старый 03.10.2007, 19:44   #1846
HikeR

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2MaGoth:
Попробуй использовать проверку активного оружия перед торговлей, если оружие активно, т.е. взято Гг в руки, то снимай его функцией спрятать оружие, запуская одновременно торговлю. ;)
сделал проще:
Cпойлер(щелкните, чтобы прочесть):
func void Stt_311_Fisk_Trade_Info()
{
* * *AI_Output (other, self, "Stt_311_Fisk_Trade_15_00"); * * *//Покажи мне, что у тебя есть.
* * *AI_UnequipWeapons(other);
};

перед торговлей ВСЁ оружие снимается. проверять на активное и экипированное оружие имеет смысл для того, чтобы по окончании торговли оно автоматом вешалось обратно.
назревает вопрос: как поймать момент окончания торговли?
тогда был бы такой алгоритм:
Cпойлер(щелкните, чтобы прочесть):
// перед торговлей
- получить id экипированного оружия.
- снять всё оружие
- удалить одну единицу оружия из инвентаря (чтоб не продать в куче)
// после торговли
- добавить в инвертарь одну единицу оружия (ранее удаленного)
- повесить его на ГГ

всё это я сделать могу. не могу отследить окончание торговли.
Ответить с цитированием
Старый 03.10.2007, 20:25   #1847
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М: Скриптинг в Готике

2HikeR:

всё это я сделать могу. не могу отследить окончание торговли.
То что тебе нужно зашито в движок, и отследить это нельзя никак.
Отправить личное сообщение для Ответить с цитированием
Старый 03.10.2007, 21:34   #1848
HikeR

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2MaGoth:
То что тебе нужно зашито в движок
жаль :(
тогда придется остановится на изменении констант примерно так:
const int ITEM_SWD = 1 << 14 + ITEM_MULTI;
чтобы не менять для каждого оружия. ну и следить самому, чтобы не продать последний ;)

и очень осторожный вопрос :)
первая готика на движке второй - это реально? или сразу в "модостроение" уходить?
с инвентарем там по крайней мере таких проблем нет.

Добавление от 10/03/07, в 21:54:06
p.s.
так и не понял, как включать в лог сообщения из ф-ий вида:
PrintDebugNpc (PD_ZS_LOOP, "ZS_FollowModeWait_Loop");
даже при установке 10 уровня в логе только сообщения движка.
Ответить с цитированием
Старый 04.10.2007, 01:07   #1849
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М: Скриптинг в Готике

2HikeR:

тогда придется остановится на изменении констант примерно так:
const int ITEM_SWD = 1 << 14 + ITEM_MULTI;
чтобы не менять для каждого оружия. ну и следить самому, чтобы не продать последний
- тоже вариант. :)

и очень осторожный вопрос
первая готика на движке второй - это реально? или сразу в "модостроение" уходить?
с инвентарем там по крайней мере таких проблем нет.
- Да реально, и мод также уже делается, смотри эту тему:M1: STRONGHAND - MOD FOR GOTHIC особо в шапочке глянь. ;)
Вообще моды на Г1 проблемно делать, очень неудобные скрипты постоянно приходится лезть в спейсер чтоб что-то править, да и багов полно.
Единственное что нельзя пока перенести при партировании платформ, с Г1 на Г2 это: баррер, и некоторые виды магии типа телекинез.
В остальном Г1 уже полностью портирована на платформу Г2, камрадами odin68 и Ukur.

По функии лога не скажу, както не было нужды с этим возится.
Отправить личное сообщение для Ответить с цитированием
Старый 04.10.2007, 01:20   #1850
basilio58

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от SMErtNIK link=board=gothic&t=1105030050&start=3770375#37703 75 date=10/03/07, в 16:09:56
Такой вопрос:
Как вставить новую музыку в Г2а?.. Может кто-нидь уже добавлял с игру свою музыку, и знает как это делать?..
*;) http://basilio58.worldofgothic.ru/Music.htm

;D ;D ;D ;D Удачи!
Ответить с цитированием
Старый 04.10.2007, 18:57   #1851
Kvils

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Люди, а появление НПС при воздействии Гг на триггер (или при открытии сундука, как в склепе около фермы Онара) надо прописать в каком-то скрипте или просто сделать через Спейсер? А то я хочу зделать чтобы при нажатии на рычаг в склепе появился кто-нибудь :)
Ответить с цитированием
Старый 04.10.2007, 20:24   #1852
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М: Скриптинг в Готике

2Владай:

Люди, а появление НПС при воздействии Гг на триггер (или при открытии сундука, как в склепе около фермы Онара) надо прописать в каком-то скрипте или просто сделать через Спейсер?
Да, прописываешь функцию для триггера, и в ней реализуешь вставку непеся, если Гг активировал триггер. Еестественно с проверкой на активацию Гг в первый раз триггера, после которого вставляется(ются) - нужные тебе Нпс.
Функцию нужно прописывать как в Спейсере так и в скриптах.

Вот в этой папочке лежат все скрипты триггеров для Г2, Г2-НВ и модов:
F:\Program Files\GothicSourcer V3.14\Gothic Projects\SolGlobal1.13\SolGlobal\PrjGothic\Story\E vents

Здесь и прописываем файл скрипта с нужными функциями выполнения.

Так-же, смотри для примера другие триггеры и их реализацию...  :)
Отправить личное сообщение для Ответить с цитированием
Старый 07.10.2007, 09:47   #1853
HikeR

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

1. смотрю на скрипт по вступлению в новый лагерь (DIA_Org_801_Lares, func void ORG_801_Lares_Reicht_Info()).
Ларс проверяет условие вступления, если все в порядке, то выдает новую броню. вызывает вопрос одно действие:
Cпойлер(щелкните, чтобы прочесть):
[table]
[tr][td]hero.guild = GIL_ORG;[/td][td][/td][/tr]
[tr][td]Npc_SetTrueGuild (hero, GIL_ORG);[/td][td]//устанавливаем принадлежность к ворам[/td][/tr]
[tr][td]CreateInvItem (hero, org_armor_l);[/td][td]//создаем "Легкое одеяние вора" у героя[/td][/tr]
[tr][td]CreateInvItem (self, ItAmArrow);[/td][td]//создаем стрелу у Ларса[/td][/tr]
[tr][td]B_GiveInvItems (self, hero, ItAmArrow, 1);[/td][td]//передаем стрелу герою[/td][/tr]
[tr][td]Npc_RemoveInvItem (hero, ItAmArrow);[/td][td]//уничтожаем стрелу у героя[/td][/tr]
[tr][td]AI_EquipBestArmor (hero);[/td][td]//одеваем самую навороченную защиту[/td][/tr]
[/table]

вот махинации со стрелой и непонятны.

2. по вступлению в новый лагерь автоматом помечают проваленными некоторые квесты, даже если они уже были выполнены и сданы. я решил добавить условие проверки, если квест сдан, то не помечать его как проваленный.
чем можно проверить состояние конкретного квеста? нашел только ф-ии записи в дневник. пока приходится искать переменную состояния конкретного квеста и проверять ее, то есть вместо одной строки
Код:
Log_SetTopicStatus (CH1_LostNek, LOG_FAILED);
делать такую проверку:
Код:
if (Sly_LostNek != LOG_SUCCESS || Sly_LostNek == LOG_RUNNING) { * * *Log_SetTopicStatus (CH1_LostNek, LOG_FAILED); * * *B_LogEntry (CH1_LostNek, "Теперь я в Новом Лагере");};
Ответить с цитированием
Старый 07.10.2007, 10:32   #1854
B_Wolf

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2HikeR:
вот махинации со стрелой и непонятны.
Скорее всего разрабы подстрахавались против прямой передачи ГГ доспеха от Ларса.. При таком методе возможно снимание одетого доспеха у передающего, но это обычно происходит, если владелец передает такой же доспех, который существует у него в единственном экземпляре.

Т.е. создали доспех Вора напрямую у ГГ, но т.к. нужно было сделать видимость передачи предмета, заюзали для передачи Стрелу, все равно функция B_GiveInvItems в Г1 не отображает на экране Название предмета, только тип "Передано предметов (количество)". Похожий метод используется довольно часто и для передачи разных предметов.. У ГГ создаются все нужные предметы, далее ему передается общее количество Стрел для видимости передачи, которые затем удаляются.

2HikeR:
чем можно проверить состояние конкретного квеста?
2HikeR:
делать такую проверку:
Ну собственно ты ответил на свой вопрос, всегда можно прицепиться к какой-либо переменной.
Ответить с цитированием
Старый 08.10.2007, 12:11   #1855
kraw

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Г1:

1) В процессе диалога меняю персонажу  гильдию (делаю GUILG_NONE). После этого меняю ему расписание. Смотрю в отладке - гильдия поменялась. Но поведение осталось от прежней гильдии (в том числе диалоги). Если в этот момент сохранить, потом загрузить, то поведение уже от новой гильдии. Как сделать, чтобы поведение менялось сразу?
Ответить с цитированием
Старый 08.10.2007, 13:04   #1856
Artem-modder

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

kraw


Игру надо начинать сначала.
Ответить с цитированием
Старый 08.10.2007, 13:17   #1857
kraw

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от SMErtNIK link=board=gothic&t=1105030050&start=3779900#37799 05 date=10/08/07, в 13:04:06
kraw

Игру надо начинать сначала.
Не надо. Достаточно сохранить, загрузить. Вопрос в том, чтобы избежать этого. В процессе игры должна смениться гильдия.
Ответить с цитированием
Старый 08.10.2007, 13:48   #1858
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М: Скриптинг в Готике

2kraw:

Меняем Гильдию Нпс, после чего нуна попробывать очистить ИИ Непеся, только затем запустить новую функцию распорядка дня для этой Гильдии.
Может так сработает. :)
Отправить личное сообщение для Ответить с цитированием
Старый 08.10.2007, 14:40   #1859
kraw

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от MaGoth link=board=gothic&t=1105030050&start=3780000#37800 02 date=10/08/07, в 13:48:58
2kraw:

Меняем Гильдию Нпс, после чего нуна попробывать очистить ИИ Непеся, только затем запустить новую функцию распорядка дня для этой Гильдии.
Может так сработает. :)
А как это - "очистить ИИ Непеся"?

Имеется в виду распорядок дня персонажа?
Ответить с цитированием
Старый 08.10.2007, 15:25   #1860
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М: Скриптинг в Готике

2kraw:

За Готику 1 не скажу а в скриптах Г2 есть такая функция:

// удаляет все команды для НПС npc из очереди AI_Queue.
func void Npc_ClearAIQueue(var C_NPC npc);

После чего можно попробывать это:
// поменять у НПС npc распорядок дня routine.
func void Npc_ExchangeRoutine(var C_NPC npc, var string routine);

Опять же по скриптам Г2.
Отправить личное сообщение для Ответить с цитированием
Старый 09.10.2007, 12:29   #1861
kraw

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от MaGoth link=board=gothic&t=1105030050&start=3780175#37801 83 date=10/08/07, в 15:25:06
2kraw:

За Готику 1 не скажу а в скриптах Г2 есть такая функция:

// удаляет все команды для НПС npc из очереди AI_Queue.
func void Npc_ClearAIQueue(var C_NPC npc);

После чего можно попробывать это:
// поменять у НПС npc распорядок дня routine.
func void Npc_ExchangeRoutine(var C_NPC npc, var string routine);

Опять же по скриптам Г2.
В Г1 такие функции есть. Буду пробовать.

Добавление от 10/09/07, в 10:45:58
Цитата:
Сообщение от kraw link=board=gothic&t=1105030050&start=3780500#37805 13 date=10/08/07, в 18:02:05
В Г1 такие функции есть. Буду пробовать.
Попробовал. Не работает. Мало того, что не решает основную задачу, да еще и диалог вешает. Выйти из него получается только марвином.

Добавление от 10/09/07, в 12:49:41
Еще одна проблема. Нужно инициировать диалог одного персонажа по попытке напасть на него. Т. е. ГГ вытаскивает меч (например), и идет диалог. Но тут, похоже, событие перехватывается чем-то. "Убери оружие..." и т. подобное. И состояние персонажа не меняется пока ГГ не уберет меч.

Как бы решить эту проблему?
Ответить с цитированием
Старый 09.10.2007, 13:57   #1862
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М: Скриптинг в Готике

2kraw:

Попробовал. Не работает. Мало того, что не решает основную задачу, да еще и диалог вешает. Выйти из него получается только марвином.
А сам скрипт можно увидеть? Может к чему и придем.  ;)
Так как, если эти функции есть то они должны работать.

Можно без очистки одну эту попробывать:
func void Npc_ExchangeRoutine(var C_NPC npc, var string routine);

Добавление от 10/09/07, в 14:00:08
Еще одна проблема. Нужно инициировать диалог одного персонажа по попытке напасть на него. Т. е. ГГ вытаскивает меч (например), и идет диалог. Но тут, похоже, событие перехватывается чем-то. "Убери оружие..." и т. подобное. И состояние персонажа не меняется пока ГГ не уберет меч.

Как бы решить эту проблему?
Нужно смотреть в функции восприятия непесей, она оттуда перехватывается, и как дополнительное условие выполнения восприятия ставить твой, диалог. Наверное так.
Отправить личное сообщение для Ответить с цитированием
Старый 09.10.2007, 14:24   #1863
kraw

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Цитата:
Сообщение от MaGoth link=board=gothic&t=1105030050&start=3782000#37820 09 date=10/09/07, в 13:57:56
2kraw:

А сам скрипт можно увидеть? Может к чему и придем.  ;)
Так как, если эти функции есть то они должны работать.

Можно без очистки одну эту попробывать:
func void Npc_ExchangeRoutine(var C_NPC npc, var string routine);

С этого и начал. Если одну эту, то не меняется поведение гильдии. Но я нашел другой способ, я удаляю персонажа, потом снова его вставляю. Потом меняю ему гильдию и расписание. Тогда все в порядке
Ответить с цитированием
Старый 09.10.2007, 15:24   #1864
DimonKDF

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Пожалуйста, напишите структуру StartUp'a для читых скритпов от WSA. А то там много лишнего (ИМХО).
Ответить с цитированием
Старый 11.10.2007, 05:33   #1865
HikeR

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

вот есть секция стойкости к определенному виду оружия у монстров. правильно ли я ее понял?

protection[PROT_BLUNT] = 150; - защита от тупого оружия (булавы, посохи)
protection[PROT_EDGE] = 150; - защита от заточенное оружие (мечи, топоры)
protection[PROT_POINT] = 9999; - защита от стрел
protection[PROT_FIRE] = 110; - защита от огня
protection[PROT_FLY] = 9999; - ????
protection[PROT_MAGIC] = 100; - защита от магии

blunt и edge в игре практически одинаковы, только некоторые големы более восприимчивы к тупому оружию. ;) а вот что за PROT_FLY?
Ответить с цитированием
Старый 11.10.2007, 07:46   #1866
marazmus
A.G.F.C.
 
Регистрация: 02.09.2005
Сообщений: 6
marazmus вне форума

По умолчанию Re: М: Скриптинг в Готике

Защита от повреждения при падении с высоты.
Отправить личное сообщение для Ответить с цитированием
Старый 11.10.2007, 19:22   #1867
Kvils

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2MaGoth:
Да, прописываешь функцию для триггера, и в ней реализуешь вставку непеся, если Гг активировал триггер. Еестественно с проверкой на активацию Гг в первый раз триггера, после которого вставляется(ются) - нужные тебе Нпс.
Функцию нужно прописывать как в Спейсере так и в скриптах.
А можно поподробнее, как и где прописывать, а то я же не совсем-таки спец по программированию :)
Ответить с цитированием
Старый 12.10.2007, 23:38   #1868
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Привет! :) Люди добрые, может кто-нибудь объяснить, что происходит?

Картина такая: есть некий маг, в диалоге с ним вызываются три непися, ждут конца разговора и нападают на ГГ. Если маг стоит рядом и наблюдает за сражением, все в порядке. А вот если его попытаться телепортнуть подальше, то ГГ исчезает (как будто вид не из-за спины, а от него самого), камера фиксируется в одной точке и больше ничего не сдвигается и не работает. Висим. *
Написано буквально следующее:

{Тру-ля-ля диалог
Wld_SpawnNpcRange(hero,none_3101_ghastly,3,100);
* * Npc_SetTarget (none_3101_ghastly, hero);
* * AI_Attack(none_3101_ghastly);
* * AI_StopProcessInfos(self);
* * AI_Teleport(none_3001_MadMage,"TOT");
};
Про эффект телепортации при неоконченном диалоге что-то в этой теме было, но вроде это не тот случай?
AI_StopProcessInfos(self) - это же окончание или что-то можно добавить?

Правда, есть такой момент - если ввести INVINCIBLE=FALSE для ГГ, то маг улетучивается нормально, но духи рановато начинают атаковать и успевают вынести ГГ до окончания диалога. Ожидание окончания разговора прописано у них в ZS...

С магом, его диалогами и т.д. вроде все в порядке, он вообще по природе своей вызывается из кольца и регулярно посылается в ТОТ после окончания разговора *;) *До этого места с ним не было никаких проблем...

С вызванными тоже есть фокусы - у них особая функция повреждения (как у Ворона, но наоборот - повреждения ГГ лечатся, а они при повреждении испаряются...) И это тоже работает, пока маг стоит рядом.

В общем, не пойму куда смотреть. Слишком много накручено вокруг этой ситуации и не хватает мозгов, чтоб проанализировать, где могет быть не так.
Может, кто-то с чем-то подобным встречался? Если надо, могу показать еще какие-то части скриптов, не пойму только какие могут влиять... А если все, то их много...

ps В общем-то по сюжету присутствие мага даже лучше, я и обнаружила-то такое случайно... Но теперь очень хочется разобраться, где я делаю ошибку. ::) Помогите, а? Пожа-алуйста...
Ответить с цитированием
Старый 12.10.2007, 23:55   #1869
B_Wolf

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
{Тру-ля-ля диалог
Wld_SpawnNpcRange(hero,none_3101_ghastly,3,100);
   Npc_SetTarget (none_3101_ghastly, hero);
   AI_Attack(none_3101_ghastly);
   AI_StopProcessInfos(self);
   AI_Teleport(none_3001_MadMage,"TOT");
};
2okin:
{Тру-ля-ля диалог
Wld_SpawnNpcRange(hero,none_3101_ghastly,3,100);
   Npc_SetTarget (none_3101_ghastly, hero);
   AI_Attack(none_3101_ghastly);
   AI_StopProcessInfos(self);
   AI_Teleport(none_3001_MadMage,"TOT");
};
Про эффект телепортации при неоконченном диалоге что-то в этой теме было, но вроде это не тот случай?
Собственно у вас происходит именно то, что описано в скрипте.. Во время диалога происходит телепортирование без ожидания завершения диалога. AI_StopProcessInfos(self) в этом случае НЕ поможет.

Телепортирование можно реализовать переводом НПЦ в заранее описанный
TA_ распорядок (в примере TA_MyTeleport) дня прописываемый в файле НПЦ

(444 в примере ID НПЦ)

func void Rtn_GoMyPoint_444()
{
TA_MyTeleport(23,0,6,0,"WP_STAY01");
};


, используя в диалоге

B_StartOtherRoutine(self,"GoMyPoint");

в ZS_ функции (TA_ распорядка) которого и будет прописано телепортирование.

func void ZS_MyTeleport()
{
};

func int ZS_MyTeleport_loop()
{
     return LOOP_END;
};

func void ZS_MyTeleport_end()
{
     AI_Teleport(self,"WP_MYPOINT");
};
Ответить с цитированием
Старый 13.10.2007, 11:31   #1870
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Что-то я окончательно запуталась...

Цитата:
Сообщение от Ukur link=board=gothic&t=1105030050&start=3789600#37896 01 date=10/12/07, в 23:55:10
2okin:
2okin:
AI_StopProcessInfos(self) в этом случае НЕ поможет.
1. Почему? Чем ситуация

{Тру-ля-ля диалог
* AI_StopProcessInfos(self);
* AI_Teleport(none_3001_MadMage,"TOT");
};

которая работает, отличается от

{Тру-ля-ля диалог
Wld_SpawnNpcRange(hero,none_3101_ghastly,3,100);
* Npc_SetTarget (none_3101_ghastly, hero);
* AI_Attack(none_3101_ghastly);
* AI_StopProcessInfos(self);
* AI_Teleport(none_3001_MadMage,"TOT");
};
??? Присутствием свидетелей?

2. Глупый вопрос: где и как zs превращается в TA-функцию? Уже давно ищу. Если просто создать zs-файлик в папке ТА, он не понимает... Где и что еще надо прописать? До сих пор рисовала zs для вызванных существ, у которых вместо daily_routine стоит start_aistate, а вот как сделать ТА?

3. Предложенный вариант попыталась проверить в таком виде: испортила одну из стандартных ТА-функций с условием
* * *var C_Npc madm;
* * *madm = Hlp_GetNpc(NONE_3001_madmage);
* * *if (Hlp_GetInstanceID(self) == (Hlp_GetInstanceID(madm)))
* * *
return LOOP_END и AI_Teleport(self,"TOT") в соответствующих блоках;
* * *
Ну и B_StartOtherRoutine(self,"Goodby") в диалоге. Но при этом непись остался где был... Я пробовала отбежать от него подальше, чтоб исчез, но похоже, что у него вообще не произошла смена распорядка. У него стоит start_aistate = ZS_Mag_Summoned и он продолжал бегать за ГГ, как в ней прописано... Раньше я меняла ему распорядок, но по-другому:
* * *AI_teleport(none_3001_MadMage,"TOT");
* * *Wld_InsertNpc(NONE_3001_madmage,"NW_XARDAS_START" );
* * *Npc_ExchangeRoutine(self,"Joke");

Кстати, при изменении порядка строк
* AI_StopProcessInfos(self);
* Wld_SpawnNpcRange(hero,none_3101_ghastly,3,100);
* Npc_SetTarget (none_3101_ghastly, hero);
* AI_Attack(none_3101_ghastly);
* AI_Teleport(none_3001_MadMage,"TOT");
маг исчезает нормально, а в неподвижном состоянии застревают ghastly'ки. А еще был смешной вариант, когда камера перенеслась вместе с магом в ТОТ и застряла там...
Личность вызванных действительно ни при чем, это я уже проверила.

Но понятней пока не становится...

Чайник закипает... *:o ;D

Добавление от 10/13/07, в 10:44:57
2Ukur

Не-а... Вынесение команды телепорта непосредственно из диалога ничего не меняет. Поскольку получилось, что start_aistate мешает изменять распорядок, я сделала мага мирно курящим на постоянном месте. При этом новый ТА с телепортацией сработал, маг исчез и... см описание из моего первого поста. Висим. В той же позе.

Кстати, а почему start_aistate мешает изменять распорядок? и что с этим делать? *Npc_ClearAIQueue в разных местах не помогает. Уже писала - если вставить мага заново, то распорядок меняется...

Что вообще происходит?
можно убрать мага после диалога - нормально,
можно вызвать неписей и закончить диалог - нормально,
можно вызвать и телепортнуть - абзац. Кому-то плохо - или магу, или вызванным, или висим... :(

Не понимаю, где я создаю противоречие. Каким образом вызванные связаны с магом? Вроде те и другие взаимодействуют с ГГ, а не между собой... Объясните, пожалуйста, почему возникает проблема?

Добавление от 10/13/07, в 11:51:45
Убрала телепорт и посмотрела просто на окончание диалога.
AI_StopProcessInfos(self) срабатывает меньше, чем в четверти случаев (то есть разговор кончается сам), в остальных - остается строчка "выход".
Если выйти сразу - призраки нападают, если выбрать другой пункт диалога, после которого маг тоже телепортируется - застревают и ни на что не реагируют (маг при этом телепортируется нормально).
Это что, последовательность обработки событий? Когда они происходят одновременно, результат непредсказуем? Пока говоришь с магом, вызванные забывают, что собирались делать? Похоже, я делаю какую-то особо тупую ошибку... * :-[

Условие

* * *Npc_PerceiveAll(self);
* * *if ((Wld_DetectNpc(self,ghastly,ZS_MM_Ghastly,-1)==FALSE)&&(Npc_KnowsInfo(o
ther,DIA_madmage_transform)))

как у Сатураса, тоже срабатывает нестабильно, через раз... *:(
Ответить с цитированием
Старый 13.10.2007, 17:36   #1871
B_Wolf

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
2. Глупый вопрос: где и как zs превращается в TA-функцию? Уже давно ищу.
Здесь: AI\Human\TA.d

Например: Распорядок писяния :)

func void TA_Pee(var int start_h,var int start_m,var int stop_h,var int stop_m,var string waypoint)
{
     TA_Min(self,start_h,start_m,stop_h,stop_m,ZS_Pee,waypoint);
};

2okin:
Кстати, при изменении порядка строк
 AI_StopProcessInfos(self);
 Wld_SpawnNpcRange(hero,none_3101_ghastly,3,10 0);
 Npc_SetTarget (none_3101_ghastly, hero);
 AI_Attack(none_3101_ghastly);
 AI_Teleport(none_3001_MadMage,"TOT");
маг исчезает нормально, а в неподвижном состоянии застревают ghastly'ки. А еще был смешной вариант, когда камера перенеслась вместе с магом в ТОТ и застряла там...
Личность вызванных действительно ни при чем, это я уже проверила.

Но понятней пока не становится...
Да, объяснить это с научной точки зрения трудно, но лучше в диалоге все же не пытаться телепортировать того, с кем ведешь диалог :)

2okin:
Это что, последовательность обработки событий? Когда они происходят одновременно, результат непредсказуем?
Мда, мистика! Вообщем попробуйте все же реализовать телепортирование на TA_ :)
Ответить с цитированием
Старый 13.10.2007, 18:06   #1872
HikeR

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Это что, последовательность обработки событий? Когда они происходят одновременно, результат непредсказуем?
вспомнилось тут, когда сдавал квесты квестодателю при выборе строки диалога типа "я принес тебе вещь" одновременно с началом данной ветки диалога всплывала надпись "передан 1 предмет, получено столько-то опыта", хотя вызов ф-ии показа данных сообщений в скрипте шёл по окончании диалога.
что-то типа:

AI_Output (self, other, "GUR_1201_CorKalom_BRINGWEED_10_02"); * * *//А, давай сюда. И убирайся с глаз моих!
B_GiveInvItems (hero, self, ItMi_Plants_Swampherb_01, 100);
Npc_RemoveInvItems (self, ItMi_Plants_Swampherb_01, 100);
BaalOrun_FetchWeed = LOG_SUCCESS;
B_LogEntry (CH1_DeliverWeed, "Когда я вручал ему сегодняшний урожай, Кор Галом был снова просто невыносим.");
Log_SetTopicStatus (CH1_DeliverWeed, LOG_SUCCESS);
B_GiveXP (XP_DeliveredWeedHarvest);


то есть последняя строка вызывается одновременно с первой. это так и должно быть?
Ответить с цитированием
Старый 13.10.2007, 18:14   #1873
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Спасибо!
С ТА попробую. Но тот вариант, который я описала, с измененим другого ТА - не то же самое? По сути он стал для моего нпс ТА_телепортом, хотя для остальных остался ТА_StandEating. Результат я описывала - тот же. Попробую написать функцию отдельно (хотя бы чтоб разобраться, как это делается), но почти уверена, что ничего не изменится...

Да, объяснить это с научной точки зрения трудно, но лучше в диалоге все же не пытаться телепортировать того, с кем ведешь диалог :)
Да? А что мне с ним делать? Мне надо, чтоб следующий диалог начинался после вынесения ГГ всех гастликов.
Пробовала через Wld_DetectNpc, она срабатывает через раз... Ну не видит он нпс даже у себя под носом! И диалог начинается слишком рано. Если important стоит false, то вообще в конце предыдущего появляется строчка, если true - диалог заканчивается, а потом через раз тут же начинается новый (интересно, откуда такая разница? ::)). Иногда все гладко прокатывает, но мне не нравится это "иногда"...
;) Смутно подозреваю, что Сатурас тоже перестает видеть гоблинов раньше времени, но он занят делом - швыряется фаерболами... И Assess_Enemy гарантирует, что гоблинов точно не останется! А у меня маг просто смотрит.
Поэтому второй вариант - телепортнуть, а потом вызвать из кольца заново. Ну и - тоже фигня получается...
Можно просто закончить диалог, побить духов и начать его заново - но я уже описывала работу AI_StopProcessInfos...

Ну и что мне с этим делать? ::) :(

Что вы думаете по поводу несрабатывания AI_StopProcessInfos и Wld_DetectNpc? Это мой глюк или его? И можно ли это победить?

Добавление от 10/13/07, в 18:19:30
Цитата:
Сообщение от HikeR link=board=gothic&t=1105030050&start=3790850#37908 70 date=10/13/07, в 18:06:32

вспомнилось тут, когда сдавал квесты квестодателю при выборе строки диалога типа "я принес тебе вещь" одновременно с началом данной ветки диалога всплывала надпись "передан 1 предмет, получено столько-то опыта", хотя вызов ф-ии показа данных сообщений в скрипте шёл по окончании диалога.
что-то типа:
то есть последняя строка вызывается одновременно с первой. это так и должно быть?
Я с этим тоже сталкивалась... Пыталась вставить в диалог последовательность звуков. Они исполнились в виде рева все одновременно в начале диалога. Мне объяснили, что это из-за отсутствия звуковых файлов диалога...
Проверить это и сделать как надо я пока не в состоянии... ;D
Ответить с цитированием
Старый 13.10.2007, 21:44   #1874
B_Wolf

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2HikeR:
то есть последняя строка вызывается одновременно с первой. это так и должно быть?
Функции выполняются по порядку, при этом обычно не ожидая завершения диалоговой фразы.

А вообще вот несколько функций по теме из Уроков Vam'a, которые могут приостанавливать некоторые действия. Примеры можно посмотреть в скриптах.

void AI_Wait (c_npc n0, float n1); - НПС n0 переводится на n1 секунд в состояние ожидания, в этом состоянии он не делает ничего, но наносимый ущерб регистрируется и работает пассивное восприятие.

void AI_WaitTillEnd (c_npc self, c_npc other); - НПС self ждет от НПС other ответа на свою фразу. (Не выполняется перед функцией AI_OutputSVM_Overlay).

Использование этой (AI_WaitTillEnd) функции заметил в моде "Жизнь пирата", в сцене, "клятвы верности Пирата".
Ответить с цитированием
Старый 13.10.2007, 23:43   #1875
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Прилетели...

Что такое C:could not copy file: D:\Akella Games\GothicII\System\MssSoft.m3d into the system directory?

Короче, игра не грузится вообще... Что я сделала, а? Хотя бы где я намудрила - в скриптах или в зене? Просто отменить все изменения за последние два часа уже не могу. Да и жалко...
Ответить с цитированием
Старый 13.10.2007, 23:59   #1876
B_Wolf

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2okin:
Что такое C:could not copy file: D:\Akella Games\GothicII\System\MssSoft.m3d into the system directory?
Помоему это файл настроек\дамп звуковой системы Miles Sound System, применяемая в игре, и этот файл кажется создается\обновляется всякий раз при запуске игры или Спайсера.
Вероятно у вас файл оказался заблокированным вследствие системного глюка, или вы попытались запустить игру, не выгрузив спайсер или наоборот.. Возможно вторую копию спайсера... Вообщем проверьте в Диспетчере Задач, не висит ли где Спайсер или Игра в процессах, затем перезапустите. Если системный глюк - иногда помогает перезагрузка компьютера :)
Ответить с цитированием
Старый 14.10.2007, 00:35   #1877
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2Ukur:
Уф! Спасибо! Заработало! А то я боялась, что придется переделывать зен из исходного... Глюкнуло-то действительно после спейсера, а я там пока полувслепую брожу...

М-да, буду почаще сохранять промежуточные варианты, на всякий очень вероятный случай... Мои вредительские таланты пока явно превосходят творческие.*:)
Ответить с цитированием
Старый 14.10.2007, 14:29   #1878
HikeR

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

2Ukur:
Функции выполняются по порядку, при этом обычно не ожидая завершения диалоговой фразы.
если AI_Output есть несколько, а не одна, как в вышеприведенном примере, то все равно происходит выполнение следующих за ними ф-ий при проигрывании первой.
если взять такой пример:

AI_Output (self, other ...
AI_Output (other, self ...
AI_Output (self, other ...
B_GiveXP (...


то B_GiveXP сработает сразу же. вот такое поведение является стандартным?
в длинных диалогах просто забываешь иногда, что в начале тебе что-то дали ;)
Ответить с цитированием
Старый 15.10.2007, 11:45   #1879
okin

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

Не поняла...

void CreateInvItem (c_npc n0, int n1)
c_item Npc_GetEquippedArmor (c_npc n0)

Как получается, что в первой функции n1 int, а вторая выдает с_item, если в обоих случаях может оказаться вроде бы одно и то же, например, ITAR_KDW_L_Addon?

CreateInvItem (self, ITAR_KDW_L_Addon)
и
var C_Item myArm;
myArm = Npc_GetEquippedArmor(xxx);
if (Hlp_IsItem(myArm,ITAR_KDW_L_Addon) == .....

Каким образом одна и та же ITAR_KDW_L_Addon оказывается принадлежащей к разным типам??? Едина в двух лицах - и предмет, и его номер?

И если так, можно ли получить номер надетого на непися доспеха? Или создать C_item? И вообще, где предметам присваивается ID? В явном виде, как у пнс, нету...

Добавление от 10/15/07, в 12:05:41
Смешно...
Поигралась еще немножко с AI_StopProcessInfos и Wld_DetectNpc.
Поскольку

{Тру-ля-ля диалог
Wld_SpawnNpcRange(hero,none_3101_ghastly,3,100);
*Npc_SetTarget (none_3101_ghastly, hero);
*AI_Attack(none_3101_ghastly);
*AI_StopProcessInfos(self);
*AI_Teleport(none_3001_MadMage,"TOT");
};

через раз приводила к разным результатам и оказался важен порядок строк, решила просто продублировать строчку AI_StopProcessInfos. Вставила сразу пяток, мне не жалко! *:) В итоге маг стал ВСЕГДА нормально уходить в ТОТ, а вызванные ВСЕГДА застывают... Из двух описанных вариантов остался один. Сие приятно, но...
Вопрос: нету идей, почему нарушается поведение вызванных? Хотя бы в какую сторону думать и проверять? У меня интеллехту не хватат...

Кстати, что конкретно делает AI_StopProcessInfos? Например, AI_StopProcessInfos(other) и AI_StopProcessInfos(self) синонимичны или могут быть нюансы?

Если убрать телепорт, то теперь диалог нормально заканчивается ВСЕГДА, дальше драка и начало нового диалога... Так что появился хоть один стабильный вариант проигрывания сюжета, ура, будем радоваться и искать следующие грабли!
Глупо, но эффективно! *;D

Попробовала продублировать Wld_DetectNpc. Номер не прошел...
Cпойлер(щелкните, чтобы прочесть):
Npc_PerceiveAll(self);
* * *if (Npc_KnowsInfo(other,DIA_madmage_transform))
* * *{ if (Wld_DetectNpc(self,ghastly,ZS_MM_Ghastly,-1)>0) * * * * * *
* * * * * *{return FALSE;
* * * * * *};
* * *if (Wld_DetectNpc(self,ghastly,ZS_MM_Ghastly,-1)>0) * * * * * *
* * * * * *{return FALSE;
* * * * * *};
* * *if (Wld_DetectNpc(self,ghastly,ZS_MM_Ghastly,-1)>0) * * * * * *
* * * * * *{return FALSE;
* * * * * *};
* * *if (Wld_DetectNpc(self,ghastly,ZS_MM_Ghastly,-1)>0) * * * * * *
* * * * * *{return FALSE;
* * * * * *};
* * *if (Wld_DetectNpc(self,ghastly,ZS_MM_Ghastly,-1)>0) * * * * * *
* * * * * *{return FALSE;
* * * * * *};
* * *return TRUE; * * *
* * *};

Эта штука всегда выдает true. Если написано правильно (проверьте,а? но вроде правильно, с условием ">=0" всегда честный false), то он гастликов в упор не видит... Может, призраков замечать не положено?! ;D

Вот такие пироги... Мало мне самолично зарытых собак, еще и такие попадаются...
Ответить с цитированием
Старый 15.10.2007, 20:31   #1880
halogene

AGFC
Гость
 
Сообщений: n/a

По умолчанию Re: М: Скриптинг в Готике

то B_GiveXP сработает сразу же. вот такое поведение является стандартным?
в длинных диалогах просто забываешь иногда, что в начале тебе что-то дали
Вполне. Если отсутвуют звуковые файлы диалогов, так и происходит... Диалог тогда лучше разбивать на несколько веток, например:
- Вот то что ты просил (передача прдемета)
- Как насчет награды? (дача опыта и руды)
Еще есть смысл давать предметы невидимо для игрока (как в случае с доспехами), чтобы текст не накладывался друг на друга, или переписать саму функцию вывода текста при передачи предмета.

Кстати, что конкретно делает AI_StopProcessInfos? Например, AI_StopProcessInfos(other) и AI_StopProcessInfos(self) синонимичны или могут быть нюансы?
AI_StopProcessInfos (c_npc npc); - режим диалога НПС npc, начатый предыдущей функцией, заканчивается.
Есть особенность, что некоторые функции во время своего выполнения могут вернуть значение, которое заменит self. Т.е. вместо НПЦ А, начавшего диалог, в self будет храниться ссылка на некого НПЦ Б, вызванного например Wld_InsertNpc. И диалог с "НПЦ А" не завершиться. В таком случаее разумнее будет написать не "AI_StopProcessInfos(self)" а "AI_StopProcessInfos(Инстанция_НПЦ_А)".
Ответить с цитированием
Страница 47 из 65 « Первая 374041424344454647 4849505152535457 Последняя »


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе

Смайлы Вкл.
[IMG] код Вкл.
HTML код Вкл.


Текущее время: 12:51. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2021, vBulletin Solutions, Inc. Перевод: zCarot

AGFC: Valley of Gothic © 2004-2020

Яндекс.Метрика