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

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

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.816
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 577
Последнее редактирование модератором:

Magmatic Imperius

Участник форума
Регистрация
21 Апр 2009
Сообщения
85
Благодарности
10
Баллы
160
Когда мир компилишь галочку убери с надписи Edit Mod (кажись так зовется, там только одно окошешко и есть), тогда можно сохрянять в зене.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
MEG@VOLT написал(а):
redleha, мда, хорош вопрос, тока он не для скриптов... ну да ладно, но сначала хочу сказать:
СКОЛЬКО РАЗ ГОВОРИТЬ - ПРОВЕРЯТЬ САМОМУ, А ПОТОМ СПРАШИВАТЬ!!!

кроме этих двух файлов ничего не нужно.

ЗЫ. ты вроде толковый модостроитель, а впервые вижу как ты такое говоришь, я аж в шоке.
МЕГА ты не прав нужны также файлы *.DLS колекции и файлы стиля *.STY
 
Последнее редактирование модератором:

Kirald

Участник форума
Регистрация
11 Окт 2009
Сообщения
8
Благодарности
0
Баллы
145
Еще маленький вопрос.. Нужно зделать так, чтобы когда подбираешь предмет (с улицы или с тела) происходила определенная функция. Ну тоесть нужна проверка. Это нужно для Квеста, что бы когда герой поднимал предмет создовалась запись в журнале.. Вот только как это сделать не наю. Так как незнаю где есть скрипт постоянной проверки, ну скажем каждые 10 секунд происходит скрипт или что в этом духе.

В общем прошу помочь с этим вопросом. Заранее Спасибо!
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Это можно реализовать через триггер-скрипт, который нужно добавлять в ZEN локации.
Подробно я расписывал здесь Re: Вопросы по скриптингу
 

lee

Участник форума
Регистрация
25 Окт 2009
Сообщения
106
Благодарности
0
Баллы
165
:( народ как компилировать скрипты
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
lee написал(а):
:( народ как компилировать скрипты
Верху есть кнопочка "Компилирывать"жмешь и дожидаешься пока скомпилит, может быть что буит немеренно ошибок.
 
Последнее редактирование модератором:

mAnster

Забанен
Регистрация
21 Май 2008
Сообщения
1.232
Благодарности
19
Баллы
205
Ей самую. Здесь подробное руковоство по использованию. Всё есть, немного потрудись и прочти :)
http://mod.worldofgothic.ru/programs/gothic-sourcer/manual

Ред
Может у кого-то и найдётся время "по конкреней". Жди :)
 
Последнее редактирование модератором:

lee

Участник форума
Регистрация
25 Окт 2009
Сообщения
106
Благодарности
0
Баллы
165
А по конкретней можно

Наглая рожаКлево, че?! Последнее устное предупреждение, один пред тебе уже поставили и довольно не плохой. еще один подобный пост увижу, будет еще один пред только уже не с +40, а с +60...
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
lee написал(а):
А по конкретней можно

Я очень вспыльчивый и могу прямо сейчас сказать все, что я думаю. Но я не буду этого делать, потому что во-первых: в бан неохота за нецензуру, все-таки здесь много знатоков модмейкерства, во-вторых: не люблю досаждать админам и модераторам. Тебе mAnster ссылку дал, все что от тебя требуется это просто почитать, неужели так сложно? Мой тебе совет: либо бросай модмейкерство и не парь нам всем мозги, либо начинай реально все это дело изучать.

Такое дело: хочу реализовать тренировку стрельбы из лука. Типа тренировки с мечем (вымахивание мечем), только чтобы НПС стрелял из лука в мишень. Создал Файл ZS_Practice_Bow, записал туда скрипт (скопировал скрипт тренировки с мечем, заменив MeleeWeapon на RangedWeapon и название анимации) и прописал весь этот процесс в файле TA.d. Теперь вопрос: какую анимацию (название) нужно прописать для того, чтобы НПС именно стрелял из лука, брал следующую стрелу и опять стрелял столько времени, столько я ему в расписании на это отвел? У меня он просто вытягивает стрелу, закладает и стоит как статуя.
 
Последнее редактирование модератором:

Skip

Участник форума
Регистрация
26 Май 2008
Сообщения
88
Благодарности
1
Баллы
155
Создание Мира

Приветствую!
нашёл темы по созданию локации,я не особо разбираюсь в Максе но всё таки думаю что создание маленькой локации и мира это разные вещи.Вы можете рассказать и дать пару советов по созданию ммм мира,если это уже где-то было то извиняюсь,дайте ссылочку :)
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.879
Благодарности
6.762
Баллы
1.625
Пост перенес, а по теме - это одно и тоже просто в разных масштабах, вот и все. А http://mod.worldofgothic.ru/ тут есть куча чего, но думаю ты это уже почитал.
 

LD3O

Участник форума
Регистрация
16 Янв 2009
Сообщения
63
Благодарности
0
Баллы
170
Попробуй поставить тригерр, и заставь непися его атаковать(если возможно).
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
LD3O написал(а):
Попробуй поставить тригерр, и заставь непися его атаковать(если возможно).
Может, прежде чем пороть ерунду, нужно вначале проверить?

Мільтен
Я тоже пробовал делать подобную функцию, собсно, чтобы НПЦ именно стрелял при тренировке, а не делал вид, нужно использовать скриптовую функцию.
void AI_ShootAt (c_npc attacker, c_npc target); - НПС attacker стреляет из оружия дальнего радиуса поражения в НПС target.
В качестве цели можно например использовать бессмертного, невидимого жука рядом с мишенью. Но, могут возникнуть непредвиденные ситуации, если на линии огня окажется другой НПЦ, атакованный может обидеться на стреляющего :D

Другая версия, чисто имитация выстрела, без вылета самой стрелы, цель тоже не требуется.
AI_PlayAni(self,"T_BOWWALK_2_BOWAIM"); //Прицеливание
AI_PlayAni(self,"T_BOWAIM_2_BOWSHOOT"); //Имитация выстрела
AI_Wait(self,3); //Пауза 3 сек.
AI_PlayAni(self,"T_BOWRELOAD"); //Перезарядка
AI_Wait(self,2); //Пауза две секнды
AI_PlayAni(self,"T_BOWAIM_2_BOWWALK"); //Прекращение прицеливания
 
Последнее редактирование модератором:

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
ukur написал(а):
LD3O написал(а):
Попробуй поставить тригерр, и заставь непися его атаковать(если возможно).
Может, прежде чем пороть ерунду, нужно вначале проверить?

Мільтен
Я тоже пробовал делать подобную функцию, собсно, чтобы НПЦ именно стрелял при тренировке, а не делал вид, нужно использовать скриптовую функцию.
void AI_ShootAt (c_npc attacker, c_npc target); - НПС attacker стреляет из оружия дальнего радиуса поражения в НПС target.
В качестве цели можно например использовать бессмертного, невидимого жука рядом с мишенью. Но, могут возникнуть непредвиденные ситуации, если на линии огня окажется другой НПЦ, атакованный может обидеться на стреляющего :D

Другая версия, чисто имитация выстрела, без вылета самой стрелы, цель тоже не требуется.
AI_PlayAni(self,"T_BOWWALK_2_BOWAIM"); //Прицеливание
AI_PlayAni(self,"T_BOWAIM_2_BOWSHOOT"); //Имитация выстрела
AI_Wait(self,3); //Пауза 3 сек.
AI_PlayAni(self,"T_BOWRELOAD"); //Перезарядка
AI_Wait(self,2); //Пауза две секнды
AI_PlayAni(self,"T_BOWAIM_2_BOWWALK"); //Прекращение прицеливания

Большое спс, все работает. Есть правда пару приколов:
1 - НПС стреляет в противоположную мишени сторону (хотя его веипоинт направлен на мишень). Он начинает стрелять по мишени когда я подхожу.
2 - НПС натягивает тетиву по-разному: раз нормально, второй раз у него рука в голову пролазит.
3 - сделал по примеру тренировку арбалета. Заменил только само название процесса и анимации. Но у меня НПС упорно стреляет не из арбалета, а из меча. Хотя я же заменил EquipBestMeleeWeapon на EquipBestRangedWeapon. На всякий случай прописал ему арбалет, который наносит больший урон, чем меч. Ничего не изменилось.
 
Последнее редактирование модератором:

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Мільтен написал(а):
Большое спс, все работает. Есть правда пару приколов:
1 - НПС стреляет в противоположную мишени сторону (хотя его веипоинт направлен на мишень). Он начинает стрелять по мишени когда я подхожу.
Вероятно сбивается цель в скриптовой функции AI_ShootAt.

Мільтен написал(а):
2 - НПС натягивает тетиву по-разному: раз нормально, второй раз у него рука в голову пролазит.
Ну, перед использованием AI_ShootAt в скрипте, можно попробовать подставить дополнительные анимации из "второго варианта"
Мільтен написал(а):
3 - сделал по примеру тренировку арбалета. Заменил только само название процесса и анимации. Но у меня НПС упорно стреляет не из арбалета, а из меча. Хотя я же заменил EquipBestMeleeWeapon на EquipBestRangedWeapon. На всякий случай прописал ему арбалет, который наносит больший урон, чем меч. Ничего не изменилось.
Нужно не только одеть, арбалет\лук, но еще и скрипово его достать, у меня например такая связка.

if(!Npc_HasRangedWeaponWithAmmo(self)) \\Если НПЦ не имеет дистанционного оружия с боеприпасами
{
CreateInvItem(self,ItRw_Arrow);
CreateInvItem(self,ItRw_Bow_L_01);
AI_EquipBestRangedWeapon(self);
};
if(!Npc_HasReadiedRangedWeapon(self)) \\Если НПЦ не удерживает в руках дистанционное оружие
{
AI_ReadyRangedWeapon(self); \\Достать дистанционное оружие.
};
 
Последнее редактирование модератором:

Lancelot

Участник форума
Регистрация
20 Фев 2008
Сообщения
54
Благодарности
16
Баллы
175
Такая проблема, фунrция TA_Practice_Magic, напрочь отказывается работать или работает через раз. И это очень странно потому ,что анимации, использующиеся в ней все работают на ура. В файле ZS_Practice_Magic, не делал не каких изменений. Кто нибудь может разъяснить мне в чем тут дело?
Заранее благодарен ;)
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
2Ukur:
Да я "второй вариант"и использую.
У меня есть эта связка, только не совсем такая.
Код:
func void ZS_Practice_Bow()
{
	Perception_Set_Normal();
	B_ResetAll(self);
	AI_SetWalkMode(self,NPC_WALK);
	if(Npc_GetDistToWP(self,self.wp) >TA_DIST_SELFWP_MAX)
	{
		AI_GotoWP(self,self.wp);
		AI_AlignToWP(self);
	};
	AI_EquipBestRangedWeapon(self);
	self.aivar[AIV_TAPOSITION] = NOTINPOS;
};

func int ZS_Practice_Bow_Loop()
{
	if(self.aivar[AIV_TAPOSITION] == NOTINPOS)
	{
		if(!Npc_HasEquippedRangedWeapon(self))
		{
		CreateInvItems(self,ItRw_Bow_L_01,1);
		AI_EquipBestRangedWeapon(self);
		};
		AI_ReadyRangedWeapon(self);
		self.aivar[AIV_TAPOSITION] = ISINPOS;
	};
	
	AI_PlayAni(self,"T_BOWWALK_2_BOWAIM");
	AI_PlayAni(self,"T_BOWAIM_2_BOWSHOOT");
	AI_Wait(self,1);
	AI_PlayAni(self,"T_BOWRELOAD");
	AI_Wait(self,1);
	AI_PlayAni(self,"T_BOWAIM_2_BOWWALK");
	AI_GotoWP(self,self.wp);
	AI_AlignToWP(self);
	return LOOP_CONTINUE;
};

func void ZS_Practice_Bow_End()
{
	AI_Standup(self);
	AI_RemoveWeapon(self);
};

Lancelot написал(а):
Такая проблема, фунrция TA_Practice_Magic, напрочь отказывается работать или работает через раз. И это очень странно потому ,что анимации, использующиеся в ней все работают на ура. В файле ZS_Practice_Magic, не делал не каких изменений. Кто нибудь может разъяснить мне в чем тут дело?
Заранее благодарен ;)

Да у меня тоже не работает. В уроке DEDROIT'a он написал что она "не используется", вероятно не рабочая.
 
Последнее редактирование модератором:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Мільтен написал(а):
2Ukur:
Да я "второй вариант"и использую.
У меня есть эта связка, только не совсем такая.
Код:
func void ZS_Practice_Bow()
{
	Perception_Set_Normal();
	B_ResetAll(self);
	AI_SetWalkMode(self,NPC_WALK);
	if(Npc_GetDistToWP(self,self.wp) >TA_DIST_SELFWP_MAX)
	{
		AI_GotoWP(self,self.wp);
		AI_AlignToWP(self);
	};
	AI_EquipBestRangedWeapon(self);
	self.aivar[AIV_TAPOSITION] = NOTINPOS;
};

func int ZS_Practice_Bow_Loop()
{
	if(self.aivar[AIV_TAPOSITION] == NOTINPOS)
	{
		if(!Npc_HasEquippedRangedWeapon(self))
		{
		CreateInvItems(self,ItRw_Bow_L_01,1);
		AI_EquipBestRangedWeapon(self);
		};
		AI_ReadyRangedWeapon(self);
		self.aivar[AIV_TAPOSITION] = ISINPOS;
	};
	
	AI_PlayAni(self,"T_BOWWALK_2_BOWAIM");
	AI_PlayAni(self,"T_BOWAIM_2_BOWSHOOT");
	AI_Wait(self,1);
	AI_PlayAni(self,"T_BOWRELOAD");
	AI_Wait(self,1);
	AI_PlayAni(self,"T_BOWAIM_2_BOWWALK");
	AI_GotoWP(self,self.wp);
	AI_AlignToWP(self);
	return LOOP_CONTINUE;
};

func void ZS_Practice_Bow_End()
{
	AI_Standup(self);
	AI_RemoveWeapon(self);
};

Lancelot написал(а):
Такая проблема, фунrция TA_Practice_Magic, напрочь отказывается работать или работает через раз. И это очень странно потому ,что анимации, использующиеся в ней все работают на ура. В файле ZS_Practice_Magic, не делал не каких изменений. Кто нибудь может разъяснить мне в чем тут дело?
Заранее благодарен ;)

Да у меня тоже не работает. В уроке DEDROIT'a он написал что она "не используется", вероятно не рабочая.
Вы че гоните?! Не используется.. конечно!
Все она пашед тока нада ставить гг на вейпоинт рядом с которым стоит фри поинт со словом _STAND_ и все буит пахать!
 
Последнее редактирование модератором:

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
По поводу ZS_Practice_Magic, рассмотрим подробнее...

func void ZS_Practice_Magic()
{
Perception_Set_Normal();
B_ResetAll(self);
AI_SetWalkMode(self,NPC_WALK);
if(Npc_GetDistToWP(self,self.wp) >TA_DIST_SELFWP_MAX)
{
AI_GotoWP(self,self.wp);
};
};

func int ZS_Practice_Magic_Loop()
{
var int zufall;
\\ 1 условие
if(Npc_IsOnFP(self,"STAND")) \\Если НПЦ стоит на фрипоинте STAND
{
AI_AlignToFP(self);
if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
{
self.aivar[AIV_TAPOSITION] = NOTINPOS;
};
}
\\ 2 условие
else if(Wld_IsFPAvailable(self,"STAND")) \\Иначе, если доступен (свободен) фрипоинт STAND
{
AI_GotoFP(self,"STAND");
AI_Standup(self);
AI_AlignToFP(self);
self.aivar[AIV_TAPOSITION] = NOTINPOS_WALK;
}
\\ 3 условие
else \\Иначе выровняться по вейпоинту.
{
AI_AlignToWP(self);
if(self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK)
{
self.aivar[AIV_TAPOSITION] = NOTINPOS;
};
};
if((Npc_GetStateTime(self) >7) && (self.aivar[AIV_TAPOSITION] == NOTINPOS)) \\Собсно скрипт анимации начинают воспроизводиться, если эти два условия выполнены.
{
zufall = Hlp_Random(100);
if(zufall <= 25)
{
AI_PlayAni(self,"T_PRACTICEMAGIC");
}
else if(zufall <= 50)
{
AI_PlayAni(self,"T_PRACTICEMAGIC2");
}
else if(zufall <= 70)
{
AI_PlayAni(self,"T_PRACTICEMAGIC3");
}
else if(zufall <= 90)
{
AI_PlayAni(self,"T_PRACTICEMAGIC4");
}
else
{
AI_PlayAni(self,"R_SCRATCHHEAD");
};
Npc_SetStateTime(self,0);
};
return LOOP_CONTINUE;
};

func void ZS_Practice_Magic_End()
{
};


Собсно, отсюда видно, что анимация начнет работать, только тогда, когда self.aivar[AIV_TAPOSITION] == NOTINPOS и (Npc_GetStateTime(self) >7.
С Npc_GetStateTime(self) >7 проблем быть не должно, а вот с self.aivar[AIV_TAPOSITION] == NOTINPOS может быть некоторый геморой.

self.aivar[AIV_TAPOSITION] == NOTINPOS, может установиться только в 1 и 3 условии, если уже self.aivar[AIV_TAPOSITION] == NOTINPOS_WALK

В то же время self.aivar[AIV_TAPOSITION] = NOTINPOS_WALK может установиться только во 2 условии, т.е. если для НПЦ доступен фрипоинт STAND

Отсюда следует, если НПЦ не будет доступен фрипоинт STAND, AIV_TAPOSITION не установиться в NOTINPOS_WALK и далее в NOTINPOS. Значит делаем вывод, что НПЦ не может получить доступ к фрипоинту.

Можно либо добавить в спейсере нужные фрипоинты, либо в скриптах упростить условия.
 
Последнее редактирование модератором:

Стражник

Участник форума
Регистрация
14 Фев 2009
Сообщения
675
Благодарности
101
Баллы
220
Всем привет. При попытке создания НПС и внесения его в игру при завершении компиляции возникли ошибки количеством 26 штук. Меня интересует следующее:

1)Имеет ли значение от какого локализатора Диск Готика2 НВ при начале работы с программами модостроения.
2)Какие программы необходимы для новичка в программировании Г2. Скачал Gothic Surser 3.14. А также есть g2mdk- 2.6.
3)Где в папке решения(проекта) искать файлы Gothin.dat и OU.bin для последующей замены ими оригинальных файлов.
4)Если возможно дайте посмотреть готовый скрипт нового НПС для внесения его в игру. Читал статью о создании НПС от DEDROITA, но вследствии вывода сообщения об ошибках не знаю, что делать с этим дальше.
5) С чего лучше всего начать знакомство с процессом модостроения.
Заранее спасибо за ответ.
 
Сверху Снизу