|
|
25.08.2005, 09:01
|
#805
|
|
Re: Скриптинг в Готике
Цитата:
Сообщение от Finsternis link=board=gothic&t=1105030050&start=800#802 date=08/24/05, в 22:40:01
2TSYLin: Кто-то когда-то говорил, что размерность массива задается в экзешнике, так-что, ИМХО, глюки будут и еще какие! Но попытка не пытка - попробуй, авось что-нибудь да и получится! Если получится - сообщи!
|
В экзешнике жестко заданы размеры классов, а про размеры массивов никто не писал, поэтому есть два пути: 1) анализ декомпилированного кода экзешника ( это для крутых программистов ); 2) проверка на практике. Если задать размер больше, чем нужно, то ничего страшного не произойдет если размер не задается в экзешнике. P.S. Декомпилированный экзешник изучал Vam, когда создавал свою чудо-программу. Он, по-моему, и писал о размерах классов. Может быть он, или кто-то еще из хороших программистов, просветит всех остальных и насчет размеров массивов?
|
|
|
25.08.2005, 09:38
|
#806
|
|
Re: Скриптинг в Готике
2WindWW:
Декомпилированный экзешник изучал Vam, когда создавал свою чудо-программу. Он, по-моему, и писал о размерах классов. Может быть он, или кто-то еще из хороших программистов, просветит всех остальных и насчет размеров массивов?
|
Предел размера любого массива 255, но в скриптах можно изменять не все массивы, размеры массивов, которые используются внутри любых классов трогать нельзя, остальные можно. Пример: GIL_MAX = 66, изменять нельзя, задет размер массивов класса C_GILVALUES, а MAX_WEAPONS = 13 изменять можно, задает размер массива изготавливаемого ГГ оружия. Использовать индексацию массива более заданного размера категорически нельзя, последствия непредсказуемы ("слом" проги, вылет Готики, зависание компа и т.д.). Также нельзя использовать в качестве индекса сам размер массива - последствия те же. 2Bog-Dan:
я хочу чтобы мой НПС после диалога Атаковал другого НПС но я хочу чтобы он его протыкал!!что прописать!!
|
Используй функцию AI_FinishingMove. Все функции рассмотрены в Уроках скриптологии - читай!!!
|
|
|
25.08.2005, 11:19
|
#807
|
|
Re: Скриптинг в Готике
2Vendiga:
Так я всё-таки не пойму - можно новые спецы создавать в готе или нет? И к рунам их прикреплять. Или за это всё-такии экзешник отвечает?
|
Очень много заклинаний физически прописано в exe-шнике. Новые заклинания превращения, например не создашь - можно только заменить существующее. Пирокинез тоже имеет привязки, ну и.т.п. Боевые можно, но только похожие на те, которые есть. Сделать что-то в принципе другое попробовать можно, но сложно. А, вот, телепорты - запросто и в любом количестве.
|
|
|
26.08.2005, 17:44
|
#810
|
|
|
|
|
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
|
|
|
|
|
|
Re: Скриптинг в Готике
2TSYLin: В скрипте твоего оружия пишешь строки: on_equip = Equip_MyBow; on_unequip = UnEquip_MyBow;
Ниже объявляешь эти функции: func void Equip_MyBow() { if(Npc_IsPlayer(self)) * * *{ * * * * * *B_AddFightSkill(self,NPC_TALENT_BOW,30); * * *}; };
func void UnEquip_MyBow() { if(Npc_IsPlayer(self)) * * *{ * * * * * *B_AddFightSkill(self,NPC_TALENT_BOW,-30); * * *}; }; Для арбалета то же самое, только навык поменяешь на NPC_TALENT_CROSSBOW. Ну и на сколько увеличивать тоже разберешься. Удачи!
|
|
|
26.08.2005, 23:32
|
#814
|
|
Re: Скриптинг в Готике
2Bog-Dan:
Ответьте Плиз на мой выше вопрос!!!!!
|
Вызови эту функцию - // ************************************************** ****** // Функция переводящая НПС в состояние атаки // ************************************************** ****** * * // ====================================== // Аргументы: // -------------------------------------- // slf * * * * * * *- атакующий НПС (далее - агрессор) // oth * * * * * * *- атакуемый НПС (далее - жертва) // attack_reason * *- причина атаки // wait * * * * * * - время выжидания перед атакой // ====================================== func void B_Attack(var C_NPC slf,var C_NPC oth,var int attack_reason,var int wait); аргумент attack_reason должен иметь значение AR_KILL, остальные аргументы понятны из описания. *;)
|
|
|
27.08.2005, 00:00
|
#817
|
|
Re: Скриптинг в Готике
2TSYLin: Ты забыл в инстанции твоего меча описать функции on_equip и on_unequip. Просто после строки visual = "ItMw_055_1h_sword_long_05.3DS"; напиши вот что: on_equip = Equip_ITMW_SEK_1H_03; on_unequip = UnEquip_ITMW_SEK_1H_03;
Т.е. при одевании твоего меча будет вызываться функция Equip_ITMW_SEK_1H_03, добавляющая ману, а при снятии - UnEquip_ITMW_SEK_1H_03, возвращающая исходные значения маны.
А с регенерацией маны я тоже долго мучался, когда кольцо делал. У меня получилось только тогда, когда бонус регенерации был равен 1. Проверь, чтобы ITRI_MANAREGENERATE_BONUS было равно единице, может тогда заработает.
2SATANIZMatik: Ты не написал что бонус ГГ идёт Да, так бонус будет идти ТОЛЬКО ГГ, а если так, как в оригинале бонус будет идти всем. ИМХО, эти строки не обязательны, но и не повлекут никакой ошибки! Все зависит от того, что автор хотел сделать.
|
|
|
27.08.2005, 00:11
|
#818
|
|
Re: Скриптинг в Готике
2Finsternis: Не подскажешь где надо поглядеть что бы
ITRI_MANAREGENERATE_BONUS было равно единице
|
|
|
|
27.08.2005, 14:01
|
#821
|
|
|
|
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
|
|
|
|
Re: Скриптинг в Готике
2TSYLin:
Я конечно видел описание создание меча finch'a, но шаг 3 мне не понятен, если у кого есть этот мануал, то прошу обьяснить именно с 3 шага, а именно с создания 2 файлов в папке Gothic II\_work\data\Scripts\Content\Story\B_Content
|
Так ты привел бы здесь этот мануал, мы бы тебе может объяснили, а то искать его лень ::)
|
|
|
27.08.2005, 14:11
|
#822
|
|
Re: Скриптинг в Готике
Хорошо, вот мануал, полностью (что бы понятно было):
Меч (мануалка для второй Готики)
Шаг 1. В папке Gothic II\_work\data\Scripts\Content\Items создаем файл IT_MyWeapon.d В этом файле мы описываем, как наш меч будет выглядеть. Мы можем использовать модели из самой Готики(как, например, делаю я) либо что-нибудь свое. Вот внутренности моего файла:
INSTANCE ItMw_MySword (C_Item) { name = "Мой меч"; //название меча
mainflag = ITEM_KAT_NF; flags = ITEM_2HD_SWD; material = MAT_METAL;
value = Value_MySword;// стоимость нашего меча
damageTotal = Damage_MySword;// повреждение damagetype = DAM_EDGE; range = Range_MySword; // радиус действия wear = WEAR_EFFECT; effect = "SPELLFX_FIREBOW";//наш меч будет гореть
cond_atr[2] = ATR_STRENGTH;// требуется сила cond_value[2] = Condition_MySword;// сколько требуется силы visual = "ItMw_060_2h_sword_01.3DS";//модель меча
description = name; TEXT[2] = NAME_Damage; COUNT[2] = damageTotal; TEXT[3] = NAME_Str_needed; COUNT[3] = cond_value[2]; TEXT[4] = NAME_TwoHanded; TEXT[5] = NAME_Value; COUNT[5] = value; }; Здесь все понятно. Проблем возникнуть не должно.
Шаг 2. В папке Gothic II\_work\data\Scripts\Content\ находим файл Tuning_Melee_Weapons.d и дописываем следующие строчки:
const int Damage_MySword = 120; const int Condition_MySword = 100; const int Range_MySword = 120; const int Value_MySword = 100000; Что это такое описано выше.
Шаг 3. В папке Gothic II\_work\data\Scripts\Content\Story\B_Content создаем файл B_ScHasMyWeapon.d с такой начинкой:
func int C_ScHasMyWeapon () { if (Npc_HasItems (hero, ItMw_MySword)) { return TRUE; }; return FALSE; //DEFAULT };
func int C_IsItemMyWeapon(var C_ITEM Wea) { if (Hlp_IsItem(Wea, ItMw_MySword) == TRUE) { return TRUE; };
return FALSE; //DEFAULT }; func int C_ScHasReadiedMyWeapon () { var C_ITEM ReadyWea; ReadyWea = Npc_GetReadiedWeapon(hero); if (C_IsItemMyWeapon(ReadyWea)) { return TRUE; }; return FALSE; //DEFAULT };
func int C_ScHasEquippedMyWeapon () { var C_ITEM EquipWea; EquipWea = Npc_GetEquippedMeleeWeapon(hero); if (C_IsItemMyWeapon(EquipWea)) { return TRUE; }; return FALSE; //DEFAULT };
func void B_ClearMyWeapon () { Npc_RemoveInvItems (hero , ItMw_MySword, Npc_HasItems (hero, ItMw_MySword));
};
Что здесь к чему, объяснять не буду. Кому интересно – спрашивайте в личные или сами разбирайтесь. Здесь не так уж и сложно.
Теперь в той же папке создаем файл B_MyWeaponSpecialDamage.d и вписываем в него следующее:
func void B_MyWeaponSpecialDamage (var C_NPC oth, var C_NPC slf) { if (C_ScHasReadiedMyWeapon()) && (Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))//Вот этой строки не хватало! { Wld_PlayEffect("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE ); Npc_ClearAIQueue (self); AI_StartState (self, ZS_MagicFreeze, 0, ""); return; }; }; Строчка Wld_PlayEffect("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE ); означает, что при каждом ударе нашего меча противник будет загораться.
VOB_MAGICBURN – непосредственно эффект горения. Названия других эффектов можно посмотреть в файле VisualFx.dat в папке Gothic II\_work\data\Scripts\_compiled. Для просмотра dat-файлов рекомендую редактор bred.
Далее в файлах B_AssessDamage.d и B_MM_AssessDamage.d после строки B_BeliarsWeaponSpecialDamage (other, self); вставляем: B_MyWeaponSpecialDamage (other, self); Это означает, что наш меч будет поджигать людей и монстров соответственно.
|
|
|
27.08.2005, 14:32
|
#823
|
|
Re: Скриптинг в Готике
2Bog-Dan:
Будь добор, скажи для Готики 1.
|
В Готике 1, чтобы НПС добил другого НПС из цикла атаки ZS_Attack необходимо выполнение следующего условия: // если отношения между НПС враждебные или (причина атаки AIV_AR_INTRUDER и НПС знает новости NEWS_DEFEAT) if((Npc_GetPermAttitude(self,other) == ATT_HOSTILE) ¦¦ ((C_GetAttackReason(self) == AIV_AR_INTRUDER) && Npc_HasNews(self,NEWS_DEFEAT,self,other))) т.е. надо задать враждебные отношения между НПС или установить соответствующую причину атаки и зафиксировать новость.
|
|
|
27.08.2005, 15:22
|
#824
|
|
|
|
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
|
|
|
|
Re: Скриптинг в Готике
2TSYLin: Так чего не понятно? Делай как там написано, и все.
Не уже ли, на каждый такой меч нужно создавать 2 файла?
|
Ну да, хотя в принципе можно по-разному делать, но если неохота ничего переделывать в этом коде, то да.
|
|
|
27.08.2005, 20:02
|
#827
|
|
|
|
|
Регистрация: 19.06.2004
Адрес: г. Белая Калитва.
Сообщений: 204
|
|
|
|
|
|
Re: Скриптинг в Готике
2TSYLin: Если по русски, то скажи, тебе надо чтобы был эффект или тебе надо именно нанесение урона магией? Если просто урон магический и от меча, вот так попробуй. damagetype = DAM_EDGE && DAM_MAGIC;
Или еще можно пробовать, но на счет этого крайне не уверен: damagetype = DAM_EDGE l DAM_MAGIC;
А если важен сам эффект, то делай как по тутору.
|
|
|
27.08.2005, 20:08
|
#828
|
|
Re: Скриптинг в Готике
2TSYLin:
Вот один из способов создать огненно – магический меч.
Вот инстанция меча: instance ITMW_Fire_Magic_Sword(C_Item) { name = "Огненно - магический меч"; mainflag = ITEM_KAT_NF; flags = ITEM_2HD_SWD; material = MAT_METAL; value = 5000; wear = WEAR_EFFECT; effect = "SPELLFX_FIREARROW"; damageTotal = 200; damagetype = DAM_EDGE; range = 120; cond_atr[2] = ATR_STRENGTH; cond_value[2] = 100; visual = "ItMw_025_2h_Sword_old_01.3DS"; description = name; };
Вот функция специального повреждения: func void B_FireMagicSwordSpecialDamage(var C_Npc oth,var C_Npc slf) { var C_Item ReadyWeap; ReadyWeap = Npc_GetReadiedWeapon (oth); var int hlp_haotic_damage; if (Hlp_IsItem (ReadyWeap, ITMW_Fire_Magic_Sword) == TRUE) { hlp_haotic_damage = Hlp_Random (100); if (hlp_haotic_damage < 50) { Wld_PlayEffect ("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE); } else if (hlp_haotic_damage >= 50) { Wld_PlayEffect ("spellFX_BELIARSRAGE", self, self, 0, 0, 0, FALSE); }; }; };
Далее в скриптах AI\Human\B_Human\B_AssessDamage.d AI\Monster\B_Monster\B_MM_AssessDamage.d после B_BeliarsWeaponSpecialDamage (other, self); напиши B_FireMagicSwordSpecialDamage(other, self);
Откомпилируй и все.
Сори за краткость, спешу! Если не поймешь, скажи. Вечером обьясню!
|
|
|
27.08.2005, 21:23
|
#829
|
|
Re: Скриптинг в Готике
2Killer-XXX: Мне надо что бы
damagetype = DAM_EDGE && DAM_MAGIC;
|
, но так что бы каждый пункт (дамага), обазночался отдельно, и каждый удар наносил не одинаковое код-во повреждения от оружия и магии. 2Finsternis: Скорее всего меч будет бить молнией, и наносить такое же магическое повреждение как Коготь Балиара, а мне надо что бы оружие наносило повреждение и от магии, и от огня, и от оруждия.
|
|
|
28.08.2005, 00:48
|
#830
|
|
Re: Скриптинг в Готике
2TSYLin: Меч не будет наносить повреждения от магии и от огня. Этот меч наносит повреждение только от оружия. Я привел тебе пример, как визуально отобразить повреждение от магии и от огня. Это просто болванка. ::) Далее, чтобы наносился урон от огня, магии и оружия в инстанции твоего меча должно быть вот что: * * * * * *damagetype = DAM_MAGIC | DAM_FIRE | DAM_EDGE; * * *damage[DAM_INDEX_MAGIC] = damage_magic_FireMagicSword; * * *damage[DAM_INDEX_FIRE] = damage_fire_FireMagicSword; * * *damage[DAM_INDEX_EDGE] = damage_edge_FireMagicSword;
Поясняю:
damagetype = DAM_MAGIC | DAM_FIRE | DAM_EDGE; - это означает, что твой меч будет наносить уроны магией, огнем и просто острием.
damage[DAM_INDEX_MAGIC] = damage_magic_FireMagicSword; – показывает, сколько будет наноситься урона магией, естественно, что константа damage_magic_FireMagicSword должна быть описана заранее.
damage[DAM_INDEX_FIRE] = damage_fire_FireMagicSword; damage[DAM_INDEX_EDGE] = damage_edge_FireMagicSword; – соответственно урон огнем и "ребром", т.е. острием (так дословно будет EDGE).
Далее, помогу тебе создать твой меч: ;D 1. В файле Items\IT_Melee_weapons.d напиши вот что:
Const int damage_magic_FireMagicSword = 130; Const int damage_fire_FireMagicSword = 130; Const int damage_edge_FireMagicSword = 30; Const int value_ FireMagicSword = 5000; Const int Condition_ FireMagicSword = 100; Const int Range_ FireMagicSword = 120;
instance ITMW_Fire_Magic_Sword(C_Item) { * * *name = "Огненно - магический меч"; * * *mainflag = ITEM_KAT_NF; * * *flags = ITEM_2HD_SWD; * * *material = MAT_METAL; * * *value = value_ FireMagicSword; * * *wear = WEAR_EFFECT; * * *effect = "SPELLFX_FIREARROW"; * * *damagetype = DAM_MAGIC | DAM_FIRE | DAM_EDGE; * * *damage[DAM_INDEX_MAGIC] = damage_magic_FireMagicSword; * * *damage[DAM_INDEX_FIRE] = damage_fire_FireMagicSword; * * *damage[DAM_INDEX_EDGE] = damage_edge_FireMagicSword; * * *range = Range_ FireMagicSword; * * *cond_atr[2] = ATR_STRENGTH; * * *cond_value[2] = Condition_ FireMagicSword; * * *visual = "ItMw_025_2h_Sword_old_01.3DS"; * * *description = name; * * *text[1] = "Повреждение огнем"; * * *count[1] = damage_fire_FireMagicSword; * * *text[2] = "Повреждение магией"; * * *count[2] = damage_magic_FireMagicSword; * * *text[3] = "Требуемая сила"; * * *count[3] = Condition_ FireMagicSword; * * *text[5] = NAME_Value; * * *count[5] = value; };
2. Все, теперь твой меч действительно будет наносить урон магией, огнем и острием. Жертва будет загораться в любом случае. Но теперь нам надо показать, что урон наносится также и магией. Для этого пишем вот какую функцию: Создаем файл Story\B_Content\ B_FireMagicSwordSpecialDamage.d со следующим содержанием:
func void B_FireMagicSwordSpecialDamage(var C_Npc oth,var C_Npc slf) { * * *var C_Item ReadyWeap; //переменная типа C_Item для получения текущего оружия * * *ReadyWeap = Npc_GetReadiedWeapon (oth); // присваиваем переменной ReadyWeap значение текущего оружия, находящегося в состоянии боевой готовности, т.е. ГГ держит его в руке * * *var int hlp_haotic_damage; // переменная для определения "случайного случая" * * *// Если предмет ReadyWeap это наш меч то if (Hlp_IsItem (ReadyWeap, ITMW_Fire_Magic_Sword) == TRUE) * * *{ * * * * * *hlp_haotic_damage = *Hlp_Random (100); // генерируем псевдослучайное число // если число меньше 50 то * * * * * *if (hlp_haotic_damage < 50) * * * * * *{ * * * * * * * * *Wld_PlayEffect ("VOB_MAGICBURN", slf, slf, 0, 0, 0, FALSE); // проиграть эффект горения на жертве * * * * * *} // Иначе * * * * * *else if (hlp_haotic_damage >= 50) * * * * * *{ * * * * * * * * *Wld_PlayEffect ("spellFX_BELIARSRAGE", self, self, 0, 0, 0, FALSE); // Эффект повреждения магией * * * * * *}; * * * * * * * * * * * *}; };
3. Далее нам нужно, чтобы при каждом ударе по человеку или животному запускался наш спецэффект, для этого *в файлах AI\Human\B_Human\B_AssessDamage.d AI\Monster\B_Monster\B_MM_AssessDamage.d после B_BeliarsWeaponSpecialDamage (other, self); напиши B_FireMagicSwordSpecialDamage(other, self);
4. В файле gothic.src после строки Story\B_Content\C_ArtefaktValues.d напиши вот что Story\B_Content\ B_FireMagicSwordSpecialDamage.d .
5. Окомпилируй *и посмотри, что получилось. По идее, должно работать. Сообщи, получилось или нет, и удачи… ;)
Теперь к тебе вопрос: У тебя получилась фишка с регенерацией манны?
|
|
|
28.08.2005, 11:21
|
#831
|
|
Re: Скриптинг в Готике
2Finsternis: Огромнеший респект. Ну и на последок ещё вопрос ;D ,какой скрипт отвечает за смену анимации вбою, после 30, 60 процентами владения? Добавление от 08/28/05, в 10:41:57
Теперь к тебе вопрос: У тебя получилась фишка с регенерацией манны?
|
Да всё получилось, но в Npc_ChangeAttribute(self,ATR_REGENERATEMANA,1); надо писать не менее 200, иначе ты эфект не у видишь, и в день будет прибавляться где-то 1 мана. То есть: Npc_ChangeAttribute(self,ATR_REGENERATEMANA,200); (при одевании) Npc_ChangeAttribute(self,ATR_REGENERATEMANA,-200); (при снятии соответственно)
|
|
|
28.08.2005, 12:26
|
#832
|
|
Re: Скриптинг в Готике
Решил я тут попрактиковаться и создать НПС. Давно не делал. Провожу Декомпиляцию в C:\*\_work\data\Scripts\_decompiled\Story\NPС Создаю файл None_8000_Name
Содержание instance None_8000_Name(Npc_Default) { name[0] = Name; guild = GIL_None; id = 8000; voice = 6; flags = 0; npcType = npctype_main; level = 100; attribute[ATR_STRENGTH] = 300; attribute[ATR_DEXTERITY] = 300; attribute[ATR_MANA] = 1000; attribute[ATR_MANA_MAX] = 2000; attribute[ATR_HITPOINTS] = 2000; attribute[ATR_HITPOINTS_MAX] = 2000; fight_tactic = FAI_HUMAN_MASTER; EquipItem(self,ItMw_2h_Sld_Axe); B_CreateAmbientInv(self); B_SetNpcVisual(self,MALE,"Hum_Head_FatBald",Face_ B_Tough_Silas,BodyTex_B,ITAR_Prisoner); Mdl_SetModelFatness(self,0); Mdl_ApplyOverlayMds(self,"Humans_Arrogance.md s"); B_GiveNpcTalents(self); B_SetFightSkills(self,100); daily_routine = Rtn_Start_8000; };
func void Rtn_Start_8000() { TA_Pray_Innos(7,0,8,0,"name_place_1"); TA_Practice_Sword(8,0,16,0,"name_place_2"); TA_Pray_Innos(16,0,18,0,"name_place_1"); TA_Practice_Sword(18,0,23,0,"name_place_2"); TA_Stand_Guarding(23,0,7,0,"name_place_3"); };
Всё вроде правильно иду в файл Npc_Globals. НПС стоит возле Ковалорна. Поэтому дело так:
Cavalorn = Hlp_GetNpc(BAU_4300_Addon_Cavalorn); Name = Hlp_GetNpc(None_8000_Name);
И
var C_Npc Cavalorn; var C_Npc Name;
В Startup тоже прописываю.
Wld_InsertNpc(BAU_4300_Addon_Cavalorn,"NW_XARDAS_S TART"); Wld_InsertNpc(None_8000_Name,"NW_XARDAS_START"); - тут не уверен что писать.
В итоге провожу Компиляцию. Выдаётся ошибка Fatal:-1 U: PAR: STORY\NPC_GLOBALS.D: Unknown identifier : NONE_8000_Name .... <zParser.cpp,#599> ЧТо я не там прописал?
|
|
|
28.08.2005, 13:29
|
#836
|
|
Re: Скриптинг в Готике
2SATANIZMatik:
В итоге провожу Компиляцию. Выдаётся ошибка Fatal:-1 U: PAR: STORY\NPC_GLOBALS.D: Unknown identifier : NONE_8000_Name .... <zParser.cpp,#599> ЧТо я не там прописал?
|
Ты свой файл с НПС не записал в src файл.
|
|
|
28.08.2005, 14:00
|
#837
|
|
|
|
|
Регистрация: 15.04.2004
Адрес: Санкт-Петербург
Сообщений: 372
|
|
|
|
|
|
Re: Скриптинг в Готике
2Bog-Dan:2SATANIZMatik:
var C_Npc Name; Cavalorn = Hlp_GetNpc(BAU_4300_Addon_Cavalorn); Name = Hlp_GetNpc(None_8000_Name);
|
Повторяю 1001 раз: писать все это необязательно. Вообще необязательно лезть в файл Npc_Globals.d И вообще, даже если и прописывать туда, то СОВЕРШЕННО НЕВАЖНО куда, место прописывания имеет значение только в файле Startup.d, потому что он весь разбит на функции, и поэтому НПС, стоящего рядом с Кавалорном надо вписать в ту же функцию -
Код:
STARTUP_NewWorld_Part_Xardas_01
|
|
|
Здесь присутствуют: 25 (пользователей: 0 , гостей: 25)
|
|
Опции темы |
Поиск в этой теме |
|
|
Ваши права в разделе
|
|
|
|
Текущее время: 04:25. Часовой пояс GMT +4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|