|
|
18.11.2012, 19:55
|
#2561
|
|
Re: М: Скриптинг в Готике
2UkroLeha: Можно еще впорос? Как перекомпилировать zen с новой моделью mds? Просто у меня есть zen с предметами, вейнетом и прочим. Я обнаружил, что в mds модели в одном месте вода твердая. Исправил, и сейчас мне нужно перекомпилировать zen с новой mds'кой. Год назад я это уже делал, но за это время напрочь забыл, как это делается. Более не актуально, вспомнил. Добавление от 11/18/12, в 12:16:09
AIVAR_ отслеживаются движком, или можно в скриптах ввести свой и нормально использовать? Добавление от 11/18/12, в 19:15:21
Есть скрипт ZS_Intercept:
Cпойлер(щелкните, чтобы прочесть):
func void ZS_Intercept() { Npc_PercEnable(self,PERC_ASSESSPLAYER,B_AssessSCM ad); Npc_PercEnable(self,PERC_ASSESSDAMAGE,B_Intercept MadAssessDamage); Npc_PercEnable(self,PERC_ASSESSMAGIC,B_InterceptM adAssessMagic); Npc_PercEnable(self,PERC_ASSESSCASTER,B_AssessSCM ad); Npc_PercEnable(self,PERC_ASSESSTHREAT,B_AssessSCM ad); self.senses = SENSE_HEAR | SENSE_SEE; self.senses_range = 1300; Npc_SetPercTime(self,0.5); AI_Standup(self); AI_SetWalkMode(self,NPC_WALK); AI_GotoWP(self,self.wp); AI_AlignToWP(self); };
func int ZS_Intercept_Loop() { AI_Wait(self,1); return LOOP_CONTINUE; };
func void ZS_Intercept_End() { };
func void B_AssessSCMad() { if(Npc_CheckInfo(self,1)) { hero.aivar[AIV_IMPORTANT] = TRUE; B_FullStop(self); AI_StartState(self,ZS_Talk,1,""); return; }; };
func void B_InterceptMadAssessDamage() { if(Npc_CheckInfo(self,1)) { hero.aivar[AIV_IMPORTANT] = TRUE; B_FullStop(self); AI_StartState(self,ZS_Talk,1,""); return; } else { B_FullStop(self); AI_StartState(self,ZS_ReactToDamage,0,""); }; };
func void B_InterceptMadAssessMagic() { if(Npc_CheckInfo(self,1)) { hero.aivar[AIV_IMPORTANT] = TRUE; B_FullStop(self); AI_StartState(self,ZS_Talk,1,""); return; } else { B_FullStop(self); B_AssessMagic(); }; };
и есть файл диалога:
Cпойлер(щелкните, чтобы прочесть):
instance Info_HighPriest1(C_Info) { npc = ORC_Priest_1; nr = 1; condition = Info_HighPriest1_Condition; information = Info_HighPriest1_Info; permanent = 0; important = 1; };
func int Info_HighPriest1_Condition() { return TRUE; };
func void Info_HighPriest1_Info() { B_SelectWeapon(self,other); AI_SetWalkMode(self,NPC_WALK); AI_GotoNpc(self,other); AI_Output(self,other,"Info_HighPriest1_17_01" ); //СМЕЕЕЕЕЕЕРТНЫЫЫЙ! AI_Output(self,other,"Info_HighPriest1_17_02" ); //КАК ОСМЕЕЕЛИЛСЯ ТЫ ПОТРЕВОЖИТЬ МЕНЯ???!!! AI_Output(self,other,"Info_HighPriest1_17_03" ); //ГОТОВЬСЯ УМЕРЕТЬ! AI_Output(other,self,"Info_HighPriest1_15_04" ); //Мы еще посмотрим, кому нужно готовиться, ты, сгнивший кусок мяса! B_LogEntry(CH4_EnterTemple,"Я стою перед Варраг-Нашором, одним из пяти орочьих шаманов, которые привели Спящего в наш мир. Я положу конец его существованию."); AI_StopProcessInfos(self); Npc_SetAttitude(self,ATT_HOSTILE); Npc_SetTempAttitude(self,ATT_HOSTILE); Npc_SetTarget(self,hero); B_Attack(self,other,AR_NONE,1); };
После разговора орк должен атаковать героя, но он тупо стоит и даже не реагирует на удары. Хотя другой НПС с таким же ZS скриптом и с такой вставкой диалоге
Cпойлер(щелкните, чтобы прочесть):
Npc_SetAttitude(self,ATT_HOSTILE); Npc_SetTempAttitude(self,ATT_HOSTILE); Npc_SetTarget(self,hero); B_Attack(self,other,AR_NONE,1);
нормально атакует после разговора. В чем ошибка?
|
|
|
06.12.2012, 14:38
|
#2562
|
|
Re: М: Скриптинг в Готике
2JohaNBlack:
AIVAR_ отслеживаются движком, или можно в скриптах ввести свой и нормально использовать?
|
AIVAR это обычный массив, хранящий данные об AI как можно догадаться из названия, в Г2 его размер 100, в первой 50. Если речь идет о том, чтобы изменить его размеры, то да, размер отслеживается, и при правках в классе результатом будет вылет. Если речь идет о том, чтобы использовать свободное его пространство — то такое делать никто не запрещает, можно как через константы, так и напрямую по ключам, Г1 свободные с 43 по 50, в Г2 не помню. Данные сохраняются вместе с персонажем.
|
|
|
13.12.2012, 23:52
|
#2565
|
|
Re: М: Скриптинг в Готике
2Лавовый:
2) Нужно чтобы гарпии не нападали на ГГ, пока он не выполнит квест. В случае успеха миссии, они должны стать к нему дружественны, вне зависимости от гильдии. Мне кажется, если повесить на ГГ предмет аналогичный броне бандита (в слот для щита к примеру), он будет конфликтовать с упомянутой броней. Планируется использовать вместе и броню бандита и артефакт гарпии. Жду совета.
|
Можно просто при взятии квеста установить гарпиям нейтральное отношение к ГГ, а в случае успеха дружественное постоянное.
|
|
|
19.12.2012, 05:04
|
#2566
|
|
Re: М: Скриптинг в Готике
2Лавовый:
1) Как заставить монстра говорить? Скрипт монстра добавил, диалог создал наподобие диалога с овцой Бетти. Однако что-то не срабатывает. Нужен триггер для активации?
|
Если мне память не изменяет, у монстра должно быть включено "восприятие", которое собственно отвечает за реакции НПЦ на происходящее (кражи, убийства, оружие, магию и диалоги) Npc_PercEnable(self,PERC_ASSESSTALK,ZS_Talk); Лучше всего создать для необходимых монстров собственные ZS расписания и добавить необходимые восприятия в стартовую функцию.
|
|
|
14.01.2013, 13:16
|
#2568
|
|
Re: М: Скриптинг в Готике
2budunovmv:В реализации для G1 и G2 языка Daedalus есть константы и переменные типа float, но нет арифметических операций для этого типа данных. И в нём практически отсутствуют функции, работающие с типом float. Частичная реализация 32-битной арифметики с плавающей точкой (стандарт IEEE 754) есть только в скриптпакете Ikarus:
Cпойлер(щелкните, чтобы прочесть):
mkf = make float truncf = truncate float roundf = round float addf = add floats subf = subtract floats negf = negate float mulf = multiply floats divf = divide floats invf = inverse float gf = greater gef = greater or equal lf = lower lef = lower or equal sqrtf = square root of float printf = print float
|
|
|
15.01.2013, 09:02
|
#2571
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от budunovmv link=board=gothic&t=1105030050&goto=7163510 date=01/15/13, в 04:57:31
Какое максимальное значение целого, т.е. int=2147483646 или другое?
|
Да, так, только 7 на конце.
Цитата:
Сообщение от luciano link=board=gothic&t=1105030050&goto=7163515 date=01/15/13, в 06:09:59
2budunovmv: int = 255
|
Это максимальный размер массива в готике, насколько мне не изменяет память.
|
|
|
16.01.2013, 11:43
|
#2573
|
|
Re: М: Скриптинг в Готике
Цитата:
Сообщение от budunovmv link=board=gothic&t=1105030050&goto=7164241 date=01/16/13, в 10:31:14
А как сделать перебор массива?
|
Пример рекурсии есть здесь
|
|
|
29.01.2013, 03:57
|
#2578
|
|
Re: М: Скриптинг в Готике
Как исправить следующию ошибку ? //Ошибка нельзя преобразовать тип int в instance в int Компилирую в GothicSource 3.14 class MEMINT_HelperClass {}; var MEMINT_HelperClass MEMINT_AssignPredecessor; var int inte; inte = MEMINT_AssignPredecessor + 1; //Ошибка нельзя преобразовать тип int в instance
Cпойлер(щелкните, чтобы прочесть):
//* функция из скрипт пакета ikarus func void MEMINT_PrepareAssignments() { /* sorgt dafьr, dass MEMINT_Assign und MEMINT_StrAssign * genau die Funktion von zPAR_OP_IS bzw. zPAR_TOK_ASSIGNSTR * erfьllen. * Diese Funktion wird nach Start von Gothic genau einmal aufgerufen. */
var int symTab; var int MEMINT_Assign_Sym; var int MEMINT_Assign_StackPos; var int stackStart;
//Navigation zum Code dieser Funktionen: symTab = MEM_ReadInt (ContentParserAddress + zCParser_symtab_table_array_offset); stackStart = MEM_ReadInt (ContentParserAddress + zCParser_stack_offset); MEMINT_Assign_Sym = MEM_ReadInt (symTab + 4 * (MEMINT_AssignPredecessor + 1)); MEMINT_Assign_StackPos = MEM_ReadInt (MEMINT_Assign_Sym + zCParSymbol_content_offset);
//alte Lesemethode braucht Npc MEMINT_GetMemHelper(); var C_NPC othBak; othBak = Hlp_GetNpc (other);
//Code ьberschreiben. Vorsicht: Der erste Aufruf soll auch klappen! MEMINT_OldWriteInt (stackStart + MEMINT_Assign_StackPos , (zPAR_OP_IS << 0) | (zPAR_TOK_RET << 8) | (zPAR_TOK_RET << 16) | (zPAR_TOK_RET << 24)); MEMINT_OldWriteInt (stackStart + MEMINT_Assign_StackPos + 4, (zPAR_TOK_RET << 0) | (zPAR_OP_IS << 8) | (zPAR_TOK_RET << 16) | (zPAR_TOK_RET << 24)); MEMINT_OldWriteInt (stackStart + MEMINT_Assign_StackPos + 8, (zPAR_TOK_ASSIGNSTR << 0) | (zPAR_TOK_RET << 8) | (zPAR_TOK_RET << 16) | (zPAR_TOK_RET << 24)); MEMINT_OldWriteInt (stackStart + MEMINT_Assign_StackPos + 12, (zPAR_TOK_RET << 0) | (zPAR_TOK_ASSIGNSTR << 8) | (zPAR_TOK_RET << 16) | (zPAR_TOK_RET << 24));
//alte Lesemethode muss aufrдumen MEM_Helper.enemy = 0; other = Hlp_GetNpc (othBak); };
var MEMINT_HelperClass MEMINT_AssignPredecessor; */
Добавление от 01/29/13, в 03:17:56
Цитата:
Сообщение от budunovmv link=board=gothic&t=1105030050&goto=7164271 date=01/16/13, в 11:47:06
Будет какая-нибудь задержка, например при ударе меча, если выполнить выборку из массива размерность 600 (разбитый на 3 части)?
|
Добавление от 01/16/13, в 12:07:06 Или если выполнять сравнивание *2000 раз, например при ударе меча?
|
Код if(rnd <= 25) { return 1; } else if (rnd <= 50) { return 2; } else if (rnd <= 75) { return 3; } else if (rnd <= 99) { return 4; } повторяеться 2000 раз
|
Проверил, нет ни какой задержки?
|
|
|
Здесь присутствуют: 5 (пользователей: 0 , гостей: 5)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 23:45. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|