AGFC
Страница 3 из 65 123 456789101353 Последняя »

AGFC (http://agfc.ru/index.php)
-   AGFC: Valley of Gothic (http://agfc.ru/forumdisplay.php?f=46)
-   -   М: Скриптинг в Готике (http://agfc.ru/showthread.php?t=1105030050)

Killer-XXX 17.01.2005 00:23

Re: Скриптинг в Готике
 
2Pa:<br>
Цитата:

Я еще более смешную вещь готовлю к 1.04...
<br>Интересно, интересно... может намекнешь хотя бы? :)

17.01.2005 02:12

Re: Скриптинг в Готике
 
2Pa:
Цитата:

Тогда завяжи проверку условия обучения на наличие амулета - все равно свойство регенерации это умение ГГ и в меню это явно видно - обучен или нет.
<br>ИМХО, не совсем верно!<br>То что видно в меню - это Умение. Если ГГ не обучен, умение равно 0.<br>Умение ГГ - это лишь зависимость устанавливающая количество прибавляемой жизни в ед. времени. А я эту зависимость вырезал начисто из функции описывающей регенерацию, определив явным образом количество прибавляемой жизни (урезанная версия скрипта приведена в пред. постах), отсюда следует, что ГГ даже с 0-евым умением т.е. необученный к регенерации в данном случае должен регенерировать жизнь при исп. амулета.<br>И функция описывающая регенерацию забита именно на амулет, а не на НПС.

17.01.2005 09:59

Re: Скриптинг в Готике
 
B Wolf:<br>
Цитата:

И функция описывающая регенерацию забита именно на амулет, а не на НПС.
<br><br>Предлагаю функцию регенерации повесить на npc, а активировать ее только тогда, когда одет амулет, должно сработать. &nbsp;:)

17.01.2005 16:46

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

18.01.2005 04:28

Re: Скриптинг в Готике
 
Ура, товарищи! &nbsp;;D<br>Два дня &quot;битья&quot; над регенерацией не прошли даром!<br>Пробовал создать амулет регенерации разными способами, но в конце концов получилось только при использовании исходников мода Mana Reload.<br><br>Короче, описываю алгоритм действий для создания амулета регенерации маны, который будет прибавлять +1 к мане каждую секунду.<br><br><br>В папке AI\Human\TA_Human создаем файл ZS_Recharger.d<br><br>Вот его содержимое(взято из Mana Reload и немного подправлено):<br><br><br>func void ZS_Recharger()<br>{<br> &nbsp; &nbsp; &nbsp;B_ResetAll (self);<br> &nbsp; &nbsp; &nbsp;B_ClearPerceptions (self);<br>};<br><br>func int ZS_Recharger_loop()<br>{<br> &nbsp; &nbsp; &nbsp;if (Npc_GetStateTime(self) &gt; 3)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Npc_SetStateTime (self, 0);<br><br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if (hero.attribute[ATR_MANA] &lt; hero.attribute[ATR_MANA_MAX])<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hero.attribute[ATR_MANA]=hero.attribute[ATR_MANA]+1;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;};<br><br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Teleport (self, Npc_GetNearestWP (hero));<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br> &nbsp; &nbsp; &nbsp;};<br><br> &nbsp; &nbsp; &nbsp;return LOOP_CONTINUE;<br>};<br><br>func void ZS_Recharger_end()<br>{<br> &nbsp; &nbsp; &nbsp;AI_PlayAni (self,&quot;T_LGUARD_2_STAND&quot;); &nbsp; &nbsp; &nbsp;<br>};<br><br><br><br>Далее в файле TA.d дописываем следующую строчку:<br><br><br>func void TA_Recharger &nbsp; &nbsp; &nbsp;(var int start_h, var int start_m, var int stop_h, var int stop_m, VAR string waypoint) &nbsp; &nbsp; &nbsp;{TA_Min &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(self, &nbsp; &nbsp; &nbsp;start_h,start_m, stop_h, stop_m, ZS_Recharger, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;waypoint);};<br><br><br>Теперь создаем НПС, который будет отвечать за нашу регенерацию.<br><br>В папку Story\NPC вставляем файл None_999_Recharger.d, следующего содержания:<br><br><br>instance None_999_Recharger (Npc_Default) &nbsp;<br>{<br> &nbsp;name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = &quot;&quot;;<br> &nbsp;guild &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= GIL_NONE;<br> &nbsp;npctype &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= NPCTYPE_AMBIENT;<br> &nbsp;flags &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= NPC_FLAG_IMMORTAL|NPC_FLAG_GHOST;<br> &nbsp;level &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= 999;<br> &nbsp;voice &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= 0;<br> &nbsp;id &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = 999;<br> &nbsp;noFocus &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= 1;<br> &nbsp;bodyStateInterruptableOverride &nbsp; &nbsp; &nbsp; = 1;<br><br> &nbsp;damagetype &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= DAM_EDGE;<br> &nbsp;damage [DAM_INDEX_EDGE] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= 0;<br><br><br> &nbsp;//-------- visuals --------<br> &nbsp;B_SetNpcVisual (self, MALE, &quot;Hum_Head_Fatbald&quot;, 0, 0, ITAR_MIL_M); <br> &nbsp;Mdl_SetModelScale (self, 0.01, 0.01, 0.01);<br><br><br> &nbsp;//-------- talents --------<br> &nbsp;B_SetFightSkills (self, 0); &nbsp;<br><br><br> &nbsp;//------------- ai -------------<br> &nbsp;fight_tactic &nbsp; &nbsp;= FAI_HUMAN_COWARD;<br><br><br> &nbsp;daily_routine &nbsp; &nbsp;= Rtn_start_999;<br>};<br><br><br>func void Rtn_Regeneration_999 ()<br>{<br> &nbsp; TA_Recharger (0,00,13,00, Npc_GetNearestWP (hero));<br> &nbsp; TA_Recharger (13,00,0,00, Npc_GetNearestWP (hero));<br>};<br><br>func void Rtn_start_999 ()<br>{<br> &nbsp; TA_Stand_WP (0,00,13,00, Npc_GetNearestWP (hero));<br> &nbsp; TA_Stand_WP (13,00,0,00, Npc_GetNearestWP (hero));<br>};<br><br><br><br>Обратите внимание, что НПС почти невидим!<br><br>Прописываем нового НПС в стартапе:<br><br><br>Wld_InsertNpc &nbsp; &nbsp; &nbsp;(None_999_Recharger,Npc_GetNearestWP (hero)); <br><br><br><br><br>Ну и в конце-концов вставляем в файле It_Amulette.d следующее:<br><br><br> &nbsp; &nbsp; &nbsp;INSTANCE &nbsp;ItAm_Mana_Regener(C_Item)<br>{<br> &nbsp; &nbsp; &nbsp;name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp; &nbsp; &nbsp;NAME_Amulett;<br><br> &nbsp; &nbsp; &nbsp;mainflag &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp; &nbsp; &nbsp;ITEM_KAT_MAGIC;<br> &nbsp; &nbsp; &nbsp;flags &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp; &nbsp; &nbsp;ITEM_AMULET;<br><br> &nbsp; &nbsp; &nbsp;value &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp; &nbsp; &nbsp;Value_Mana_Regener;<br><br> &nbsp; &nbsp; &nbsp;visual &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp; &nbsp; &nbsp;&quot;ItAm_Strg_01.3ds&quot;;<br><br> &nbsp; &nbsp; &nbsp;visual_skin &nbsp; &nbsp; &nbsp; = &nbsp; &nbsp; &nbsp;0;<br> &nbsp; &nbsp; &nbsp;material &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = &nbsp; &nbsp; &nbsp;MAT_METAL;<br> &nbsp; &nbsp; &nbsp;on_equip &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= &nbsp; &nbsp; &nbsp;Equip_ItAm_Mana_Regener;<br> &nbsp; &nbsp; &nbsp;on_unequip &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= &nbsp; &nbsp; &nbsp;UnEquip_ItAm_Mana_Regener;<br><br> &nbsp; &nbsp; &nbsp;wear &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= &nbsp; &nbsp; &nbsp; WEAR_EFFECT;<br> &nbsp; &nbsp; &nbsp;effect &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= &nbsp; &nbsp; &nbsp;&quot;SPELLFX_ITEMGLIMMER&quot;; <br><br> &nbsp; &nbsp; &nbsp;description &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= &quot;Амулет регенерации маны&quot;;<br> &nbsp; &nbsp; &nbsp;<br> &nbsp; &nbsp; &nbsp;<br> &nbsp; &nbsp; &nbsp;TEXT[5] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= NAME_Value;<br> &nbsp; &nbsp; &nbsp;COUNT[5] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= value;<br><br> &nbsp; &nbsp; &nbsp;INV_ZBIAS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= INVCAM_ENTF_AMULETTE_STANDARD;<br> &nbsp; &nbsp; &nbsp;<br>};<br><br>FUNC VOID Equip_ItAm_Mana_Regener()<br>{<br> &nbsp; &nbsp; &nbsp;Npc_ExchangeRoutine &nbsp; &nbsp; &nbsp;(None_999_Recharger,&quot;Regeneration&quot; );<br>};<br><br>FUNC VOID UnEquip_ItAm_Mana_Regener()<br>{<br> &nbsp; &nbsp; &nbsp;Npc_ExchangeRoutine &nbsp; &nbsp; &nbsp;(None_999_Recharger,&quot;Start&quot;);<br>} ;<br><br><br><br><br>Вот, собственно говоря и все. Амулет работает. Единственное, если пользоваться F8 для перелетов на большие расстояния, амулет перестает работать. Чтобы он снова заработал, его надо снять и снова одеть. Этот баг появляется из-за того, что наш речаджер не успевает за нами, т.к. не умеет пользоваться &quot;марвином&quot;! :D<br>Но, в принципе, тем кто пользуется F8 регенерация маны ни к чему! &nbsp;:lol:<br><br>2Dagot_Ur: Если будешь читать этот топик, расскажи, плз, свой способ создания предмета с регенерирующими способностями.

18.01.2005 05:15

Re: Скриптинг в Готике
 
2Vam:
Цитата:

Предлагаю функцию регенерации повесить на npc, а активировать ее только тогда, когда одет амулет, должно сработать. &nbsp;
<br>2Pa:
Цитата:

Тогда завяжи проверку условия обучения на наличие амулета - все равно свойство регенерации это умение ГГ и в меню это явно видно - обучен или нет.
<br>Одно и тоже, только разными словами... Ээээ... немножко топорно, амулет получается именной и на других действовать не будет, если у всех остальных НПС это не прописывать... :)<br><br>2finch:
Цитата:

Ура, товарищи! &nbsp;<br>Два дня &quot;битья&quot; над регенерацией не прошли даром!<br>Пробовал создать амулет регенерации разными способами, но в конце концов получилось только при использовании исходников мода Mana Reload.<br><br>Короче, описываю алгоритм действий для создания амулета регенерации маны, который будет прибавлять +1 к мане каждую секунду.<br><br><br>В папке AI\Human\TA_Human создаем файл ZS_Recharger.d<br><br>Вот его содержимое(взято из Mana Reload и немного подправлено):
<br>Ну а эта... уже реальная тема. finch, большое спасибо за оперативное решение и полное разъяснение работы скрипта.<br>Хы... намано придумали... Летающий подзарядник, активирующийся при одетом амулете :))))

18.01.2005 05:44

Re: Скриптинг в Готике
 
2B Wolf: Нема за цо! ;D<br><br>закралась ошибка...<br>
Цитата:

амулета регенерации маны, который будет прибавлять +1 к мане каждую секунду.
<br>Не каждую секунду, а каждые три секунды... Очепятался... &nbsp;;D

18.01.2005 05:59

Re: Скриптинг в Готике
 
2finch:
Цитата:

закралась ошибка...<br>амулета регенерации маны, который будет прибавлять +1 к мане каждую секунду.<br>Не каждую секунду, а каждые три секунды... Очепятался... &nbsp;
<br>Как я понял, это можно установить здесь: if (Npc_GetStateTime(self) &gt; 3)

18.01.2005 09:39

Re: Скриптинг в Готике
 
2B Wolf:
Цитата:

Как я понял, это можно установить здесь: if (Npc_GetStateTime(self) &gt; 3)
Да. <br><br>
Цитата:

hero.attribute[ATR_MANA]=hero.attribute[ATR_MANA]+1;
<br>А здесь, сколько маны будет прибавляться в этот промежуток времени...<br><br>Ну да это и так понятно...

TycoooN 18.01.2005 11:26

Re: Скриптинг в Готике
 
2finch: <br>
Цитата:

AI_Teleport (self, Npc_GetNearestWP (hero));
<br>А это зачем? ::)<br><br>Способ у тебя, конечно, хитрый, но не оптимальный...<br>Надо будет тоже попробовать :)

19.01.2005 00:31

Re: Скриптинг в Готике
 
2TycoooN:
Цитата:

А это зачем?
<br>Чтобы речарджер постоянно &quot;догонял&quot; ГГ. Эту строчку можно было бы не прописывать, если бы ГГ во время регенерации постоянно стоял на месте.<br><br>
Цитата:

Надо будет тоже попробовать
<br>А вот это ОБЯЗАТЕЛЬНО! :)

19.01.2005 01:16

Re: Скриптинг в Готике
 
Пару слов об амулете восстановления...<br><br>Попробовал я таки ввести ентот амулет в модификацию Бумшака.<br>Заметил несколько особенностей:<br><br>Хорошие:<br>1) Амулет работает :)<br><br>Нехорошие:<br>1) Иногда орки, звери и пр. существа начинают нападать на невидимку-реченджера (нужно гильдии смотреть).<br>2) Иногда невидимка-реченджер получает от меня оружием во время боя, т.к. все время путается под ногами.<br><br>А вообщем неплохо :)

19.01.2005 09:25

Re: Скриптинг в Готике
 
2B Wolf:<br>А разве нельзя сделать регенерацию аналогично драконьей, только сначала проверять на наличие амулета, и никаких невидимок не надо?<br>

19.01.2005 13:05

Re: Скриптинг в Готике
 
При создании миссий,надо ли что-нибудь писать в файл Story globals?<br>И вообше что содердится в этом файле? &nbsp;

19.01.2005 13:27

Re: Скриптинг в Готике
 
2francisc:<br>
Цитата:

При создании миссий,надо ли что-нибудь писать в файл Story globals?<br>И вообше что содердится в этом файле? &nbsp;
<br><br>Файл содержит объявления нескольких констант и кучи переменных для скриптов папки globals.<br>А писать, или не писать - все зависит от тебя; будешь заводить переменные или нет; запишешь их в файл миссий или нет; обязательного в этом файле ничего нет!<br>

19.01.2005 19:26

Re: Скриптинг в Готике
 
Как сделать так, чтобы после разговора с НПС у другого НПС добавлялась новая тема типа &quot;Кто-то говорил...&quot; ??? :-/

TycoooN 19.01.2005 19:51

Re: Скриптинг в Готике
 
2Vam: <br>
Цитата:

Файл содержит объявления нескольких констант и кучи переменных для скриптов папки globals.
<br>Не знаю такой папки. Может, ты имел в виду папку dialoge?<br><br>2francisc: <br>Я туда прописывал только переменыые MIS_*** для новых миссий ::)<br><br><br>2aleks999: <br>
Цитата:

Как сделать так, чтобы после разговора с НПС у другого НПС добавлялась новая тема типа &quot;Кто-то говорил...&quot; ???
<br>Для этого нужно прописать в Condition второго диалога условие. Например, <br><br>if (Npc_KnowsInfo (other, &lt;твой C_Info&gt;))<br>

19.01.2005 20:37

Re: Скриптинг в Готике
 
2TycoooN:<br>
Цитата:

Не знаю такой папки. Может, ты имел в виду папку dialoge?
<br>Пардон, я имел в виду папку Story. &nbsp;:-[

19.01.2005 22:42

Re: Скриптинг в Готике
 
Вопрос: какая функция создает в инвентаре НПС предмет?

TycoooN 19.01.2005 22:51

Re: Скриптинг в Готике
 
2Mitrich: <br>
Цитата:

Вопрос: какая функция создает в инвентаре НПС предмет?
<br>Из туторов Vam'a:<br><br>void CreateInvItem(c_npc n0,int n1); - создает в инвентаре npc n0 предмет с ID n1.<br>void CreateInvItems(c_npc n0,int n1,int n2); - создает в инвентаре npc n0 предметы с ID n1 количеством n2.<br><br>Пример: CreateInvItems (self, ItMi_Gold, 10);<br>

19.01.2005 23:21

Re: Скриптинг в Готике
 
Цитата:

void CreateInvItem(c_npc n0,int n1); - создает в инвентаре npc n0 предмет с ID n1.<br>void CreateInvItems(c_npc n0,int n1,int n2); - создает в инвентаре npc n0 предметы с ID n1 количеством n2.
<br>А еще есть что игра сама в произвольном порядке создает предметы.<br>Вопрос,как сделать,что бы после передачи предмета,оружия неписю,он его одевал на себя?

TycoooN 20.01.2005 00:14

Re: Скриптинг в Готике
 
2francisc: <br>
Цитата:

Вопрос,как сделать,что бы после передачи предмета,оружия неписю,он его одевал на себя?
<br>Для этого есть такая функция:<br><br>void EquipItem(c_npc n0,int n1); - экипировать npc n0 предметом с ID n1.<br><br>Пример: EquipItem(self,ItMw_1h_Bau_Axe);

20.01.2005 01:02

Re: Скриптинг в Готике
 
Хмм... Тогда попробуем зайти с другого конца. Это код ТА &quot;пилить&quot;<br>// ****************************<br>// NSC benutzt Sдge Mobsi <br>// ****************************<br><br>FUNC VOID ZS_Saw ()<br>{<br> &nbsp; &nbsp; &nbsp;Perception_Set_Normal();<br> &nbsp; &nbsp; &nbsp;<br> &nbsp; &nbsp; &nbsp;B_ResetAll (self);<br><br> &nbsp; &nbsp; &nbsp;AI_SetWalkmode &nbsp; &nbsp; &nbsp;(self, NPC_WALK); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br> &nbsp; &nbsp; &nbsp;<br> &nbsp; &nbsp; &nbsp;if (Hlp_StrCmp (Npc_GetNearestWP(self), self.wp) == FALSE)<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_GotoWP &nbsp; &nbsp; &nbsp;(self, self.wp);<br> &nbsp; &nbsp; &nbsp;};<br>};<br><br>FUNC int ZS_Saw_Loop ()<br>{<br> &nbsp; &nbsp; &nbsp;// ------ Saegen ------<br> &nbsp; &nbsp; &nbsp;if (!C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT))<br> &nbsp; &nbsp; &nbsp;&amp;&amp; (Wld_IsMobAvailable(self,&quot;BAUMSAEGE&quot;))<b r> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_UseMob (self, &quot;BAUMSAEGE&quot;, 1);<br> &nbsp; &nbsp; &nbsp;};<br><br> &nbsp; &nbsp; &nbsp;// ------ Random-Ani beim Hдmmern ------<br> &nbsp; &nbsp; &nbsp;if (Npc_GetStateTime(self) &gt; 15)<br> &nbsp; &nbsp; &nbsp;&amp;&amp; (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT))<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp;Npc_SetStateTime (self, 0);<br> &nbsp; &nbsp;};<br><br> &nbsp; &nbsp; &nbsp;return LOOP_CONTINUE;<br>};<br><br>FUNC VOID ZS_Saw_End ()<br>{<br> &nbsp; &nbsp; &nbsp;AI_UseMob (self, &quot;BAUMSAEGE&quot;, -1);<br>};<br><br>Что выполняет данный блок?<br>// ------ Random-Ani beim Hдmmern ------<br> &nbsp; &nbsp; &nbsp;if (Npc_GetStateTime(self) &gt; 15)<br> &nbsp; &nbsp; &nbsp;&amp;&amp; (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT))<br> &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp;Npc_SetStateTime (self, 0);<br> &nbsp; &nbsp;};<br><br>Особенно интересует /C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT/ в условии. Что это?

20.01.2005 01:05

Re: Скриптинг в Готике
 
2TycoooN: <br>Это в скрипте нпс надо писать,как я понял.Или в тексте миссии нужно?<br>Вот следуюшй вопрос,как сделать так что бы нпс бежал на какое-то место с оружеем и нападал на кого-нибудь?(бандитов например)

20.01.2005 08:58

Re: Скриптинг в Готике
 
2francisc:
Цитата:

Вот следуюшй вопрос,как сделать так что бы нпс бежал на какое-то место с оружеем и нападал на кого-нибудь?(
<br>Из темы &quot;уроки скриптологии&quot;:<br>
Цитата:

void AI_SetWalkmode(c_npc n,int n0); - установить режим передвижения n0 для npc n. Определены следующие режимы: NPC_RUN – бег, NPC_WALK – ходьба шагом, NPC_SNEAK – подкрадывание, NPC_RUN_WEAPON – бег с оружием, NPC_WALK_WEAPON – ходьба с оружием, NPC_SNEAK_WEAPON – подкрадывание с оружием.<br>
<br>
Цитата:

void AI_Attack(c_npc self); - npc self начинает сражение (эта функция должна вызываться внутри ZS_Attack_Loop). Атакуется внутренняя цель, которая была задана функцией Npc_SetTarget или Npc_GetNextTarget.
<br><br>
Цитата:

int Wld_IsRaining(); – возвращает 1, если идет дождь, иначе – 0.
<br>Ура! Я ее нашел в дополнительных функциях второй Готики! :) Vam, ты гений, только об этом пока не догадываешься. (отпирался, что не знает) ;)

20.01.2005 09:27

Re: Скриптинг в Готике
 
По-моему я неудачно зашел с другого конца. Предлагаю рассмотреть ТА ZS_Saw с моими комментариями в качестве примера. Передо мной стоит задача добавлять НПС при пилении каждые 15 секунд некий контрольный предмет. Но некоторые вещи мне непонятны. Кто сможет что-то разьяснить или поправить, буду очень благодарен.<br>Зеленым понятные вещи, красным неясности.<br><br>// ****************************<br>// NSC benutzt Sдge Mobsi <br>// ****************************<br><br>FUNC VOID ZS_Saw () //Объявление функции<br>{<br> * * *Perception_Set_Normal(); //Установка восприятия на нормальный уровень * * *<br> * * *B_ResetAll (self); //Сбрасывание какого-то паретра(ов)???<br> * * *AI_SetWalkmode ** * *(self, NPC_WALK); * * //Перевод НПС в режим ходьбы шагом * * * * * *<br> * * *if (Hlp_StrCmp (Npc_GetNearestWP(self), self.wp) == FALSE)<br> * *{<br> * * * * * *AI_GotoWP * * *(self, self.wp); // npc n0 перемещается в указанную WP s0.<br><br> * * *};<br>};<br><br>FUNC int ZS_Saw_Loop () * *//Начало функции использования МОВ{ * * *<br><br>// ------ Saegen ------<br> * * *if (!C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) //поверка на использование МОВ другим &quot;телом&quot;??? <br>* * *<br>&amp;&amp; (Wld_IsMobAvailable(self,&quot;BAUMSAEGE&quot;)) //подозреваю, что это условие непосредственной близости НПС с МОВ с именем &quot;BAUMSAEGE&quot; *<br> * *{<br> * * * * * *AI_UseMob (self, &quot;BAUMSAEGE&quot;, 1); ** * *//см сноску*<br> * * *};<br><br> * * *// ------ Random-Ani beim Hдmmern ------<br> * * *if (Npc_GetStateTime(self) &gt; 15) //если НПС находится в таком состоянии более 15 секунд * * *&amp;&amp; (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) //и ??? непонятное условие<br> * *{<br> * * * <br> * * *CreatInvItems (self, ItPo_Mana_01, 1); // ----Суть задачи всего примера: Добавление контрольного предмета каждые 15 сек---<br><br> * * *Npc_SetStateTime (self, 0); ** * * //обнулить время нахождения НПС в данном состоянии. Если убрать это действие НПС <br>}; * * * * * * * * * * * * * * *//будет дергаться возле бревна, но пилить так и не начнет. <br><br> * * *return LOOP_CONTINUE; //возврат к началу функции<br>};<br><br>FUNC VOID ZS_Saw_End () //функция завершения действия для НПС self над МОВ &quot;BAUMSAEGE&quot; <br>{<br> * * *AI_UseMob (self, &quot;BAUMSAEGE&quot;, -1); //прекратить использовать МОВ (установка флага функции AI_UseMob в -1<br><br>}; <br><br><br>//* *int AI_UseMob(c_npc self,string schemeName,int targetState); - npc self использует MOB с именем schemeName до указанного состояния targetState.<br>Если указанное состояние у MOBа уже имеется, npc self приближается к нему, но ничего не делает.<br>На мой взгляд, здесь требуется уточнение - 1 это флаг начала использования МОВ, а -1 окончание использования, а не проверка состояния МОВ.

20.01.2005 09:28

Re: Скриптинг в Готике
 
2Mitrich:
Цитата:

Что выполняет данный блок?<br>// ------ Random-Ani beim Hдmmern ------<br> &nbsp; &nbsp; if (Npc_GetStateTime(self) &gt; 15)<br> &nbsp; &nbsp; &amp;&amp; (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT))<br> &nbsp; {<br> &nbsp; &nbsp; Npc_SetStateTime (self, 0);<br> &nbsp; };
<br>Если прошло &gt; 15 секунд и состояние тела (положение) НПС self соответствует BS_MOBINTERACT_INTERRUPT (какая-то фаза выполняемых действий с MOBом (MoveObject) завершена [в моем понимании анимационная фаза движения]), то время сбрасывается в 0 (начинается новый цикл работы в LOOP функции или работа заканчивается в END функции).<br>

20.01.2005 10:05

Re: Скриптинг в Готике
 
2Mitrich: <br>хммм... вот смотри что получается - получаетя сначала идет проверка &quot;если НЕ завершена фаза анимации (в твоем варианте) и достигнута непосредственная близость&quot;:<br>
Цитата:

// ------ Saegen ------<br> &nbsp; &nbsp; if (!C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) &nbsp; &nbsp; &nbsp;<br>&amp;&amp; (Wld_IsMobAvailable(self,&quot;BAUMSAEGE&quot;)) &nbsp;
<br><br>а во втором случае &quot;если находится в состоянии &gt; 15 сек и фаза анимации закончилась&quot;:<br>
Цитата:

if (Npc_GetStateTime(self) &gt; 15) //если НПС находится в таком состоянии более 15 секунд &nbsp; &nbsp; &nbsp;&amp;&amp; (C_BodyStateContains(self, BS_MOBINTERACT_INTERRUPT)) //и ??? непонятное условие
<br>На мой взгляд в первом случае логика немного странная. Может все-таки тут что-то иное?

20.01.2005 10:11

Re: Скриптинг в Готике
 
2Mitrich:
Цитата:

На мой взгляд в первом случае логика немного странная. Может все-таки тут что-то иное?
<br>Необходимо функцию C_BodyStateContains рассмотреть подробно, там проверяются и другие параметры а не только аргумент &quot;состояние тела&quot;.

PA 20.01.2005 15:00

Re: Скриптинг в Готике
 
2Mitrich:<br>
Цитата:

По-моему я неудачно зашел с другого конца. Предлагаю рассмотреть ТА ZS_Saw с моими комментариями в качестве примера. Передо мной стоит задача добавлять НПС при пилении каждые 15 секунд некий контрольный предмет. Но некоторые вещи мне непонятны.
<br><br>Очень советую тебе и всем вскрыть МОД Dunkle Brut Demo v0.73 <br>http://www.worldofgothic.de/dl/index.php?go=downloads&amp;release_id=107<br>Там много новых умений разложено по полочкам (правда заточено на Г1).<br>Еще раз спрашиваю - Нет ли желающих его перевести - очень интересный МОД!<br><br>

20.01.2005 15:57

Re: Скриптинг в Готике
 
Можно ли сделать так, что при убийстве каждого стажника начислялось 1 очко(как при поступлении в лагеря в Г1), а при наборе определенного кол-ва что-нибудь происходило?

20.01.2005 16:50

Re: Скриптинг в Готике
 
2Pa: <br>Это пока демо-мод,там всего прару НПС.Переводить,ну можно,если у кого жедание будет.<br>2aleks999:<br>Можно миссию написать с условием ,что бы она срабатывала при определенном уровне. А что вообше теребуется?

20.01.2005 18:00

Re: Скриптинг в Готике
 
2francisc: <br><br>Ну нужно мочить стражников, за убийство каждого дают +1 очко.<br>Когда набирается определенное кол-во этих очков, срабатывает скрипт... наподобие такого...<br><br>func void Info_Diego_JoinAnalyze_Info()<br>{<br> &nbsp; &nbsp; &nbsp;AI_Output(hero,self,&quot;Info_Diego_JoinAna lyze_15_00&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_11_01&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;AI_Output(hero,self,&quot;Info_Diego_JoinAna lyze_15_02&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;Points_OC = 0;<br> &nbsp; &nbsp; &nbsp;if(Scatty_ChargeKirgo == LOG_SUCCESS)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Scatty_11_01&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC + 2;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Scatty_ChargeKirgo == LOG_FAILED)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Scatty_11_02&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC - 1;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Scatty_ChargeKirgo == LOG_RUNNING)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Scatty_11_03&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp;if(Scatty_ChargeKharim == LOG_FAILED)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Scatty_11_04&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC + 2;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Scatty_ChargeKharim == LOG_SUCCESS)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Scatty_11_05&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC + 5;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Scatty_ChargeKharim == LOG_RUNNING)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Scatty_11_06&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp;if(Whistler_BuyMySword == LOG_SUCCESS)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Whistler_11_01&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC + 3;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if((Whistler_BuyMySword == LOG_FAILED) || ((Whistler_BuyMySword == LOG_RUNNING) &amp;&amp; (Whistler_BuyMySword_Day &lt;= (Wld_GetDay() - 2))))<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Whistler_11_02&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC + 2;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Whistler_BuyMySword == LOG_RUNNING)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Whistler_11_03&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp;if(Sly_LostNek == LOG_SUCCESS)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Sly_11_01&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC + 4;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Sly_LostNek == LOG_RUNNING)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Sly_11_02&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp;if(Fingers_Learnt == LOG_RUNNING)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Fingers_11_01&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Fingers_Learnt == LOG_SUCCESS)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Fingers_11_02&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC + 3;<br> &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp;if(Dexter_GetKalomsRecipe == LOG_RUNNING)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Dexter_11_01&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Dexter_11_02&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Dexter_GetKalomsRecipe == LOG_SUCCESS)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Dexter_11_03&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC + 5;<br> &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp;if(Thorus_MordragKo == LOG_RUNNING)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Thorus_11_01&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Thorus_MordragKo == LOG_SUCCESS)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Thorus_11_02&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC + 5;<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(Thorus_MordragKo == LOG_FAILED)<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Thorus_11_03&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC - 5;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(Fisk_GetNewHehler == LOG_SUCCESS)<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Fisk_11_01&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Points_OC = Points_OC + 5;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if((MordragKO_HauAb == TRUE) || (MordragKO_StayAtNC == TRUE))<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_JoinAna lyze_Fisk_11_02&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp;if(Points_OC &gt; 15)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_Points_ 11_00&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(hero.level &gt;= 5)<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(Diego_BringList == LOG_SUCCESS)<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_Points_ 11_01&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Diego_GomezAudience = TRUE;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Log_SetTopicStatus(CH1_JoinOC,LOG_SUCCESS);< br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;B_LogEntry(CH1_JoinOC,&quot;Диего сказал, что я могу встретиться с Гомезом. Теперь я смогу стать одним из людей Гомеза и войти в замок. Нужно лишь поговорить с Торусом.&quot;);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_Points_ 11_02&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;B_PrintGuildCondition(5);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;};<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Points_OC &gt; 10)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_Points_ 11_10&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;}<br> &nbsp; &nbsp; &nbsp;else if(Points_OC &gt;= 0)<br> &nbsp; &nbsp; &nbsp;{<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AI_Output(self,hero,&quot;Info_Diego_Points_ 11_20&quot;); &nbsp; &nbsp; &nbsp;//<br> &nbsp; &nbsp; &nbsp;};<br>};<br><br><br>Только надо с убийством стражников сделать. Я пробовал, че то не получается...

20.01.2005 18:10

Re: Скриптинг в Готике
 
2Pa: <br>
Цитата:

Очень советую тебе и всем вскрыть МОД Dunkle Brut Demo v0.73 <br>http://www.worldofgothic.de/dl/index.php?go=downloads&amp;release_id=107<br>Там много новых умений разложено по полочкам (правда заточено на Г1).<br>Еще раз спрашиваю - Нет ли желающих его перевести - очень интересный МОД!
<br><br>Сейчас докачаю, посмотрю, а там и переведу... &nbsp;:)

TycoooN 20.01.2005 18:20

Re: Скриптинг в Готике
 
2aleks999: <br>
Цитата:

Можно ли сделать так, что при убийстве каждого стажника начислялось 1 очко(как при поступлении в лагеря в Г1), а при наборе определенного кол-ва что-нибудь происходило?
<br>Можно. Для этого в файле AI/Human/ZS_Human/ZS_Dead.d пропиши такое условие:<br><br>if (self.guild == GIL_GRD) &amp;&amp; (Npc_IsPlayer(other))<br>{<br> *grd_counter += 1;<br>};<br><br>Соответственно, нужно прописать где-нибудь эту переменную:<br><br>var int grd_counter;<br><br>Ну и сделать миссию на основе этого счётчика :)<br>

20.01.2005 18:34

Re: Скриптинг в Готике
 
2TycoooN: <br>В Г1 файл ZS_Dead.d находится здесь: AI\ZS_Human *:) Еле нашел :)<br><br>if (self.guild == GIL_GRD) &amp;&amp; (Npc_IsPlayer(other))<br>{<br> grd_counter += 1; - я делаю мод для Г1, а там счетчик начисляется по-другому: grd_counter = grd_counter + 1;<br>};

20.01.2005 20:05

Re: Скриптинг в Готике
 
Идея для игры.<br>Вот то, что пока готово:<br><br>- Графические изменения<br> *- Интерфейс игры<br> *- Текстуры животных<br> * *- Мракорис<br> * *- Огненный ящер<br> * *- Ледяной голем<br> * *- Шныг<br> * *- Мясной жук<br> * *- Кротокрыс<br> * *- Орк-воин<br> * *- Падальщик<br> * *- Ящер<br> * *- ...<br> *- Текстуры людей<br> *- Текстуры брони (Легкие, средние, тяжелые)<br> * *- Стражник<br> * *- Маг огня<br> * *- Маг воды<br> * *- Послушник<br> * *- Вор<br> * *- Рудокоп<br> * *- Наемник<br> * *- Призрак<br> * *- Страж<br> *- Прочие текстуры<br> * *- Еда<br> * *- Некоторые предметы<br> * *- Оружие<br> * *- ...<br>- Игровой баланс<br> *- Действия<br> * *- Делать болотник<br> * *- Рубить деревья<br> * *- Добывать руду<br> * *- Готовить<br> * *- Ковать новое оружие<br> * *- ...<br> *- Руда подорожала, в обороте золото<br>- Новые предметы, оружие...<br>- И многое другое... (пока не знаю, что именно :) )

20.01.2005 21:26

Re: Скриптинг в Готике
 
2aleks999:<br>
Цитата:

grd_counter += 1; - я делаю мод для Г1, а там счетчик начисляется по-другому: grd_counter = grd_counter + 1;
<br>Для любых Готик оба варианта приемлемы и работают одинаково. &nbsp;:)

21.01.2005 02:19

Re: Скриптинг в Готике
 
2Vam: Обращаюсь в первую очередь к тебе, но может быть, кто-нить еще знает.<br>В журнале миссий слева внизу указан сегодняшний день и время. Также время регистрируется при сейвах. Отсюда вопрос: каким образом игра узнает настоящее время? &nbsp;Может есть какая-нить функция?

21.01.2005 09:39

Re: Скриптинг в Готике
 
2finch:<br>
Цитата:

В журнале миссий слева внизу указан сегодняшний день и время. Также время регистрируется при сейвах. Отсюда вопрос: каким образом игра узнает настоящее время? *Может есть какая-нить функция?
<br>Не понял вопроса - настоящее время это какое: игровое, или в котором мы живем? (Не помню что в журнале миссий указывается). В принципе без разницы, настоящее время берется с компа, а игровое время считается экзешником с начала новой игры, при сейвах оно сохраняется, при загрузке восстанавливается. *:)<br><br>Вот функции, оперирующие игровым временем:<br>int Wld_GetDay(); - получить текущий день, отсчет дней идет от дня старта (Gamestart) *= 0.<br>int Wld_IsTime(int hour1,int min1,int hour2,int min2); - возвращает 1, если текущее время находится между границами (hour1, min1 – нижняя граница, hour2, min2 – верхняя граница в часах и минутах), иначе возвращает 0.<br>void Wld_SetTime(int hour,int min); - установить текущее время в часах hour и минутах min. ***<br>


Текущее время: 22:31. Часовой пояс GMT +4.
Страница 3 из 65 123 456789101353 Последняя »

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

AGFC: Valley of Gothic © 2004-2022