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

Страница 65 из 65 « Первая 15555859606162636465
Поиск в этой теме:

Расширенный поиск
Старый 18.11.2012, 18:55   #2561
JohaNBlack

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

По умолчанию 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, 13:38   #2562
halogene

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

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

2JohaNBlack:
AIVAR_ отслеживаются движком, или можно в скриптах ввести свой и нормально использовать?
AIVAR это обычный массив, хранящий данные об AI как можно догадаться из названия, в Г2 его размер 100, в первой 50.
Если речь идет о том, чтобы изменить его размеры, то да, размер отслеживается, и при правках в классе результатом будет вылет.
Если речь идет о том, чтобы использовать свободное его пространство — то такое делать никто не запрещает, можно как через константы, так и напрямую по ключам, Г1 свободные с 43 по 50, в Г2 не помню. Данные сохраняются вместе с персонажем.
Ответить с цитированием
Старый 06.12.2012, 14:14   #2563
Dimus

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

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

Дополню ответ leet it b:
В G2 свободны элементы массива AIVAR c 89 по 100 - смотрите скрипт AI\AI_Intern\AI_Constants.d.
Ответить с цитированием
Старый 13.12.2012, 22:08   #2564
Magmatic

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

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

Три вопроса.
1) Как заставить монстра говорить? Скрипт монстра добавил, диалог создал наподобие диалога с овцой Бетти. Однако что-то не срабатывает. Нужен триггер для активации?
2) Нужно чтобы гарпии не нападали на ГГ, пока он не выполнит квест. В случае успеха миссии, они должны стать к нему дружественны, вне зависимости от гильдии. Мне кажется, если повесить на ГГ предмет аналогичный броне бандита (в слот для щита к примеру), он будет конфликтовать с упомянутой броней. Планируется использовать вместе и броню бандита и артефакт гарпии. Жду совета.
3) Совершенно не понимаю почему при добавлении новой анимации людям, начинают вылетать гарпии (те игра вылетает на этих крылатых тварях), при этом вылетает сообщение что не хватает людской анимации поворота тела! Как связаны человеческие тушки с гарпиями?
Ответить с цитированием
Старый 13.12.2012, 22:52   #2565
JohaNBlack

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

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

2Лавовый:
2) Нужно чтобы гарпии не нападали на ГГ, пока он не выполнит квест. В случае успеха миссии, они должны стать к нему дружественны, вне зависимости от гильдии. Мне кажется, если повесить на ГГ предмет аналогичный броне бандита (в слот для щита к примеру), он будет конфликтовать с упомянутой броней. Планируется использовать вместе и броню бандита и артефакт гарпии. Жду совета.
Можно просто при взятии квеста установить гарпиям нейтральное отношение к ГГ, а в случае успеха дружественное постоянное.
Ответить с цитированием
Старый 19.12.2012, 04:04   #2566
halogene

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

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

2Лавовый:
1) Как заставить монстра говорить? Скрипт монстра добавил, диалог создал наподобие диалога с овцой Бетти. Однако что-то не срабатывает. Нужен триггер для активации?
Если мне память не изменяет, у монстра должно быть включено "восприятие", которое собственно отвечает за реакции НПЦ на происходящее (кражи, убийства, оружие, магию и диалоги)
Npc_PercEnable(self,PERC_ASSESSTALK,ZS_Talk);

Лучше всего создать для необходимых монстров собственные ZS расписания и добавить необходимые восприятия  в стартовую функцию.
Ответить с цитированием
Старый 14.01.2013, 11:53   #2567
budunovmv

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

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

В уроках скриптологии. Автор: Vam
Написано, что в арифметических операциях. Операция деления это всего-то простое деление.
/ - простое деление (результат целая часть)

Не уже ли скриптинг готики 2 не позволяет вычислять:
1. Нормальное деление, т.е получения вещественного результата?
2. Корень числа и логарифм?
Ответить с цитированием
Старый 14.01.2013, 12:16   #2568
Dimus

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

По умолчанию 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, 04:57   #2569
budunovmv

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

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

Какое максимальное значение целого, т.е. int=2147483646 или другое?
Ответить с цитированием
Старый 15.01.2013, 06:09   #2570
luciano

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

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

2budunovmv:
int = 255
Ответить с цитированием
Старый 15.01.2013, 08:02   #2571
redleha

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

По умолчанию 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, 10:31   #2572
budunovmv

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

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

А как сделать перебор массива?
Ответить с цитированием
Старый 16.01.2013, 10:43   #2573
redleha

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

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

Цитата:
Сообщение от budunovmv link=board=gothic&t=1105030050&goto=7164241 date=01/16/13, в 10:31:14
А как сделать перебор массива?
Пример рекурсии есть здесь
Ответить с цитированием
Старый 16.01.2013, 11:47   #2574
budunovmv

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

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

Будет какая-нибудь задержка, например при ударе меча, если выполнить выборку из массива размерность 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 раз
Ответить с цитированием
Старый 17.01.2013, 08:08   #2575
redleha

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

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

2budunovmv: Я думаю, чтобы получить ответ на этот вопрос - надо ПОПРОБОВАТЬ самому.
Ответить с цитированием
Старый 19.01.2013, 11:04   #2576
budunovmv

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

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

Чем можно скомпилировать скриптпакет Ikarus и LeGo_2_0_1.7, в GothicSourcer V3.14 не компилируется выдает кучу ошибок, таких как return +ter; //но эта часть кода правильная
Ответить с цитированием
Старый 19.01.2013, 13:55   #2577
B_Wolf

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

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

2budunovmv:
Движком игры через GothicStarter_Mod
Ответить с цитированием
Старый 29.01.2013, 02:57   #2578
budunovmv

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

По умолчанию 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 раз
Проверил, нет ни какой задержки?
Ответить с цитированием
Старый 29.11.2013, 12:56   #2579
Cubic_2486

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

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

GIL_DMT значит и ищущие, и чёрные маги, правильно?
Ответить с цитированием
Старый 29.11.2013, 13:20   #2580
Dimus

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

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

2Cubic:
Ты же изучал скрипты игры. Хотя скорее всего чёрного мага приписали к GIL_DMT из-за того, что ради одного NPC создавать новую гильдию - непозволительная роскошь, т.к. есть ограничение на количество гильдий. Поэтому Ватрас, бывший единственным магом Воды в G2, имеет гильдию GIL_VLK, а не GIL_KDW. То же самое и с монстрами, например: появившийся в аддоне кабан (ID_Keiler) приписан к GIL_WOLF, а похожий на глорха кусач (ID_OrcBiter) приписан к GIL_SCAVENGER.
Ответить с цитированием
Старый 29.08.2015, 20:11   #2581
Boomer186

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

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

Помогите со скриптом на спаун моба без разницы какого если есть у кого то шаблон скиньте плиз буду очень благодарен
Ответить с цитированием
Страница 65 из 65 « Первая 15555859606162636465


Здесь присутствуют: 5 (пользователей: 0 , гостей: 5)
 

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

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


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

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

AGFC: Valley of Gothic © 2004-2022

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