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

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

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

MaGoth

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

Вложения

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

zauron

Участник форума
Регистрация
26 Янв 2010
Сообщения
36
Благодарности
0
Баллы
150
Да ладно жути нагонять, уже чесно-говоря надоела эта заезженная отмазка про движек. При желании всю логику можно и на скриптах написать, да и с выводом на экран тоже не проблема.

Вот это верно, крестики-нолики как то неготично :) Но вот "кости" или "очко" в кабаке, думаю в самый раз.

уже делаю "кости" :) только не в кабаке (он и так в возвращении забит), а в таверне у Корагона (место нашел свободное)
Будет Регис в кости играть :D как самый бесполезный непись
 

zauron

Участник форума
Регистрация
26 Янв 2010
Сообщения
36
Благодарности
0
Баллы
150
Уважаемые готомодеры,
Выложите плиз скрипты колечек скорости и левитации от Возвращения
(очень нужны)
инстанции и функции одел-снял
заранее спасибо
 

Myxomop

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

Кольцо левитации
instance ITRI_LEVIATAN(C_Item)
{
name = NAME_Ring;
mainflag = ITEM_KAT_MAGIC;
flags = ITEM_RING;
value = 1500;
visual = "ItRi_Prot_Fire_01.3ds";
visual_skin = 0;
material = MAT_METAL;
on_equip = equip_itri_leviatan;
on_unequip = unequip_itri_leviatan;
wear = WEAR_EFFECT;
effect = "SPELLFX_ITEMGLIMMER";
description = "Кольцо левитации";
text[2] = "На кольце выгравирован знак в виде крыла...";
text[5] = NAME_Value;
count[5] = value;
inv_zbias = INVCAM_ENTF_RING_STANDARD;
inv_rotz = INVCAM_Z_RING_STANDARD;
inv_rotx = INVCAM_X_RING_STANDARD;
};


func void equip_itri_leviatan()
{
Mdl_ApplyOverlayMds(self,"humans_skeleton_fly.mds");
};

func void unequip_itri_leviatan()
{
Mdl_RemoveOverlayMds(self,"humans_skeleton_fly.mds");
};


Кольцо ускорения
instance ITRI_SPEED(C_Item)
{
name = NAME_Ring;
mainflag = ITEM_KAT_MAGIC;
flags = ITEM_RING;
value = 5000;
visual = "ItRi_Prot_Total_02.3ds";
visual_skin = 0;
material = MAT_METAL;
on_equip = equip_itri_speed;
on_unequip = unequip_itri_speed;
wear = WEAR_EFFECT;
effect = "SPELLFX_ITEMGLIMMER";
description = "Кольцо ускорения";
text[1] = "Увеличивает скорость передвижения...";
text[5] = NAME_Value;
count[5] = value;
inv_zbias = INVCAM_ENTF_RING_STANDARD;
inv_rotz = INVCAM_Z_RING_STANDARD;
inv_rotx = INVCAM_X_RING_STANDARD;
};


func void equip_itri_speed()
{
Mdl_ApplyOverlayMds(self,"HUMANS_SPRINT.MDS");
};

func void unequip_itri_speed()
{
Mdl_RemoveOverlayMds(self,"HUMANS_SPRINT.MDS");
};
 

zauron

Участник форума
Регистрация
26 Янв 2010
Сообщения
36
Благодарности
0
Баллы
150
zauron
Держи. Но, я бы не увлекался подобной бижутерией в модах, т.к. предметы явно читерские.
У меня по сюжету прыжок не идет (только с ними и прокатит) мод пока черновой, да и соло работать долго

ukur, кстати сделал пилу, норм жужжит и даже без правки зена обошелся
 

Bragi

Участник форума
Регистрация
5 Окт 2009
Сообщения
59
Благодарности
0
Баллы
155
меня интересует функция Mdl_ApplyOverlayMds, а именно, можно ли применить определённый оверлей не только, скажем, при надевании вещи, но и в зависимости от некоторых характеристик.

Приведу пример: здоровье ГГ падает ниже 20%, и при этом к нему применяется определённый оверлей, как только здоровье ГГ повышается и становится больше 20% - оверлей снимается.

Возможно ли сделать подобным образом? Из похожего, кажется оверлеи различных уровней владения оружием применяются после достижения определённого процента навыка. Каким образом это реализовано? Или применение оверлея акробатики в Ночи Ворона на определённом количестве ловкости...
 

zauron

Участник форума
Регистрация
26 Янв 2010
Сообщения
36
Благодарности
0
Баллы
150
Bragi, знаю точно что в диалоге обучения просто дополнительно учится акробатика при достижении опреденного уровня ловкости.

Навыки владения оружием влияют (имеют 3 значения новичок, боец и мастер)
(читами качал hitchance до 300% а анимация так на новичке и осталась - весьма интересно наблюдать)

Оверлеи вроде не причем тут(могу ошибаться)

Сделать можно все, только вот зачем...
 

Bragi

Участник форума
Регистрация
5 Окт 2009
Сообщения
59
Благодарности
0
Баллы
155
Bragi, знаю точно что в диалоге обучения просто дополнительно учится акробатика при достижении опреденного уровня ловкости.

Навыки владения оружием влияют (имеют 3 значения новичок, боец и мастер)
(читами качал hitchance до 300% а анимация так на новичке и осталась - весьма интересно наблюдать)

Оверлеи вроде не причем тут(могу ошибаться)

Сделать можно все, только вот зачем...


ну, навык акробатики подразумевает применение оверлея акробатики к персонажу. Иначе бы новая анимация не появлялась. Вопрос каким способом... Может конкретно Mdl_ApplyOverlayMds тут и не при чём, но каким то образом этот оверлей всё таки применяется.

ну, зачем... вообще для того, чтобы ГГ, который находится при смерти, не прыгал бодренько как зайчик, а медленно плёлся, держась рукой за бок, и оружием махал более вяло. Вообще это на стадии задумки, и обьём в реализации довольно большой (много анимаций прийдётся в оверлей новых прописывать), по этому принципиально узнать, возможно ли это сделать вообще, чтоб оверлей надевался и снимался в зависимости от количества здоровья.

Если это возможно - то ещё не факт что получится так как надо =) но по крайней мере можно будет начинать пробовать.

Ну а если нет, то и заморачиваться не стоит.
 

zauron

Участник форума
Регистрация
26 Янв 2010
Сообщения
36
Благодарности
0
Баллы
150
Bragi, надо тогда что-нибудь вроде условия
если здоровье меньше нормы то оверлей (Humans_Tired - уставший рудокоп)
если выше то обычный оверлей (Humans - стандартный)
и задать промежуток между значениями
еще надо учитывать оверлеи походки зависящие от класса игрока (у мага своя, у ополченца своя...)
сложно, но можно
 

Bragi

Участник форума
Регистрация
5 Окт 2009
Сообщения
59
Благодарности
0
Баллы
155
Bragi, надо тогда что-нибудь вроде условия
если здоровье меньше нормы то оверлей (Humans_Tired - уставший рудокоп)
если выше то обычный оверлей (Humans - стандартный)
и задать промежуток между значениями
еще надо учитывать оверлеи походки зависящие от класса игрока (у мага своя, у ополченца своя...)
сложно, но можно

ага, условие, вопрос в том, где это условие ставить?. И как оно практически может выглядеть. мне, как человеку в скриптах тёмному, это придумать сложно, потому сюда и написал.

А насчёт того, какие именно оверлеи подставлять, это другое дело. Из имеющихся на данный момент в Готе, мне ни один полностью не подходит. Так что создаваться и анимироваться они будут отдельно, специально для этой ситуации (или не будут, если метод подстановки не найдётся).
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
ну, зачем... вообще для того, чтобы ГГ, который находится при смерти, не прыгал бодренько как зайчик, а медленно плёлся, держась рукой за бок, и оружием махал более вяло. Вообще это на стадии задумки, и обьём в реализации довольно большой (много анимаций прийдётся в оверлей новых прописывать), по этому принципиально узнать, возможно ли это сделать вообще, чтоб оверлей надевался и снимался в зависимости от количества здоровья.

Если это возможно - то ещё не факт что получится так как надо =) но по крайней мере можно будет начинать пробовать.
Это можно реализовать, если я правильно понимаю, то в твоем случае у монстра или Нпс их параметры здоровья будет изменяться динамически, например. А в зависимости от их числовой характеристики будет накладываться или сниматься тот или иной оверлей, верно!?
Если это так, то тебе поможет только жучок, вешай на него наблюдение за Нпс и через его восприятие, слежение за характеристиками Нпс/Монстра, запускай или отключай тот или иной оверлей.
Так должно работать... :)
 

Myxomop

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

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
меня интересует функция Mdl_ApplyOverlayMds, а именно, можно ли применить определённый оверлей не только, скажем, при надевании вещи, но и в зависимости от некоторых характеристик.
Можно пихать, где вздумается, главное самому потом не запутаться.
Приведу пример: здоровье ГГ падает ниже 20%, и при этом к нему применяется определённый оверлей, как только здоровье ГГ повышается и становится больше 20% - оверлей снимается.
Реально, однако тут есть один момент. Придётся писать скрипт на всю боёвку, лук, арбалет, бег, ходьбу, подкрадывание, плавание. По сути переделать процентов 50 humans.mds. Учесть также оверлей от факела, ускорялок и.т.п. Само слежение за состоянием, как уже было сказано, делать через зацикленный триггер.
Я думал одно время сделать "пьяный стиль", но быстро забил, т.к. объём работ соизмерим с созданием нового монстра или человека. Я лучше это время потрачу на создание, скажем, детей =(
Возможно ли сделать подобным образом? Из похожего, кажется оверлеи различных уровней владения оружием применяются после достижения определённого процента навыка. Каким образом это реализовано? Или применение оверлея акробатики в Ночи Ворона на определённом количестве ловкости...
Реализовано через скриптовую функцию (GetTalentSkill). Оверлей по ходу применяется через движок и явно не задаётся. Это для мечей. Для акробатики в Г2 скорее всего аналогично. Работают эти функции только для моделей, построенных на базе humans.mds.
 

Myxomop

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

Оверлей по ходу применяется через движок и явно не задаётся. Это для мечей.
Вообщем-да, причем не сразу :)
Поэтому в Г2а до первого сейв-лоада ВСЕ НПЦ сражаются как необученные, лечиться в скриптах дублированием к присвоению таланта наложения оверлея. А вообще, если будет постоянный контроль\восстановление оверлея через триггер-скрипт, то даже и навык не нужен (который полезен только отображением в меню), а только его значения HitChance. Например скелетам навыки не присваиваются, а сразу оверлеи т.к. у них тогда вместо костей кровь при ударах польется :)

func void B_SetVisuals_Skeleton()
{
Mdl_SetVisual(self,"HumanS.mds");
Mdl_ApplyOverlayMds(self,"humans_1hST1.mds");
Mdl_ApplyOverlayMds(self,"humans_2hST2.mds");
Mdl_ApplyOverlayMds(self,"humans_BowT1.mds");
Mdl_ApplyOverlayMds(self,"humans_CBowT1.mds");
Mdl_ApplyOverlayMds(self,"humans_skeleton.mds");
Mdl_SetVisualBody(self,"Ske_Body2",DEFAULT,DEFAULT,"",DEFAULT,DEFAULT,-1);
};


Для акробатики в Г2 скорее всего аналогично. Работают эти функции только для моделей, построенных на базе humans.mds.
Мне кажется это от гильдии зависит, а не от модели. Т.е. же скелеты, если вынут меч, уже назад не могут зачехлить, да и лук с арбалетом не обучены юзать.. А вот если им поменять гильдию...
Я на орков шаманов Г2а успешно вешал оверлеи шаманов из Г1, чтобы с посохом файрболами пулялись.
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
Цифру навыка можно задавать функцией Npc_SetTalentValue. И гонять оверлеи в зависимости от процента владения (Npc_GetTalentValue). В меню конечно надпись меняться не будет, но можно просто строку переименовать в одно универсальное наименование "обучен". Npc_SetTalentSkill это конечно хорошо, но ограничивает нас тремя ивалидными навыками.

Мне кажется это от гильдии зависит, а не от модели
Npc_SetTalentSkill вяжет оверлеи для humans.mds. Для любой другой модели он будет разрушителен, вплоть до вылета игры. Тем и плох.=(

Как бы там ни было, в нашем случае никаких ограничений двига нет.:D
Но овчинка не стоит выделки, имхо.
 

Wallerstein

Участник форума
Регистрация
26 Апр 2009
Сообщения
965
Благодарности
24
Баллы
195
Напомните мне, есть ли реализация анимации копания (лопатой) в оригинальной игре, либо в каком-либо из модов для Г2НВ
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Ни в оригинале игры, ни в вышедших модах этой анимации нет, но она планируется в трех модах которые в разработке...
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.169
Благодарности
395
Баллы
285
Помогите разобраться с заклинанием.
Нужно вызвать белого волка, вместо обычного, и добавить соответствующий свиток.

Вот сам закл – файл Spell_SummonIceWolf (копия Spell_SummonWolf)
const int SPL_Cost_SummonIceWolf = 40;

instance Spell_SummonIceWolf(C_Spell_Proto)
{
time_per_mana = 0;
targetCollectAlgo = TARGET_COLLECT_NONE;
};


func int Spell_Logic_SummonIceWolf(var int manaInvested)
{
if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
{
return SPL_SENDCAST;
}
else if(self.attribute[ATR_MANA] >= SPL_Cost_SummonIceWolf)
{
return SPL_SENDCAST;
}
else
{
return SPL_SENDSTOP;
};
};

func void Spell_Cast_SummonIceWolf()
{
if(Npc_GetActiveSpellIsScroll(self))
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll;
}
else
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_SummonIceWolf;
};
if(Npc_IsPlayer(self))
{
Wld_SpawnNpcRange(self,Summoned_IceWolf,1,500);
}
else
{
Wld_SpawnNpcRange(self,Icewolf,1,500);
};
self.aivar[AIV_SelectSpell] += 1;
};
Вот добавленный свиток (руну я не создавал):
instance ItSc_SumIceWolf(C_Item)
{
name = NAME_Spruchrolle;
mainflag = ITEM_KAT_RUNE;
flags = ITEM_MULTI;
value = Value_Sc_SumWolf;
visual = "ItSc_SumWolf.3DS";
material = MAT_LEATHER;
spell = SPL_SummonIceWolf;
cond_atr[2] = ATR_MANA_MAX;
cond_value[2] = SPL_Cost_Scroll;
wear = WEAR_EFFECT;
effect = "SPELLFX_WEAKGLIMMER";
description = NAME_SPL_SummonIceWolf;
text[0] = NAME_MageScroll;
text[1] = NAME_Mana_needed;
count[1] = SPL_Cost_Scroll;
text[5] = NAME_Value;
count[5] = value;
};
Затем в «константах»
const int SPL_SummonIceWolf = 69;

const string spellFxInstanceNames[100] =
{

"SummonIceWolf", // ice wolf

};


const string spellFxAniLetters[100] =
{

"SUM", // ice wolf
};
В «тексте».
NAME_SPL_SummonIceWolf = "Вызов ледяного волка";

const string TXT_SPELLS[100] =
{

"Вызов ледяного волка",

}
Затем декомпелировал VisualFX
И добавил, по аналогии с вызовом волка в файл VisualFxInst:
instance SPELLFX_SUMMONICEWOLF(CFX_BASE_PROTO)
{
visname_s = "MFX_ArmyOfDarkness_INIT";
visalpha = 1;
emtrjmode_s = "FIXED";
emtrjoriginnode = "ZS_RIGHTHAND";
lightpresetname = "REDAMBIENCE";
};

instance SPELLFX_SUMMONICEWOLF_KEY_OPEN(C_PARTICLEFXEMITKEY)
{
lightrange = 0.01;
};

instance SPELLFX_SUMMONICEWOLF_KEY_INIT(C_PARTICLEFXEMITKEY)
{
lightrange = 0.01;
};

instance SPELLFX_SUMMONICEWOLF_KEY_INVEST_1(C_PARTICLEFXEMITKEY)
{
lightrange = 200;
emcreatefxid = "FX_EarthQuake";
};

instance SPELLFX_SUMMONICEWOLF_KEY_CAST(C_PARTICLEFXEMITKEY)
{
emcreatefxid = "spellFX_SummonCreature_ORIGIN";
pfx_ppsisloopingchg = 1;
};
Подправил файлы
Spell_ProcessMana.d
if(activeSpell == SPL_SummonIceWolf)
{
return Spell_Logic_SummonIceWolf(manaInvested);
};

И вроде все как бы содрано честно, да вот бяда: ГГ вызывает нужного волка с пассами, но в руке стандартного фиолетового шара нет – спецэффекты не включаются, даже землятресения не происходит. Да, и вместо «шара» в руке у ГГ в районе ягодиц появляется «мини юбка» из свитка.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Помогите разобраться с заклинанием.
Нужно вызвать белого волка, вместо обычного, и добавить соответствующий свиток.

Вот сам закл – файл Spell_SummonIceWolf (копия Spell_SummonWolf)
const int SPL_Cost_SummonIceWolf = 40;

instance Spell_SummonIceWolf(C_Spell_Proto)
{
time_per_mana = 0;
targetCollectAlgo = TARGET_COLLECT_NONE;
};


func int Spell_Logic_SummonIceWolf(var int manaInvested)
{
if(Npc_GetActiveSpellIsScroll(self) && (self.attribute[ATR_MANA] >= SPL_Cost_Scroll))
{
return SPL_SENDCAST;
}
else if(self.attribute[ATR_MANA] >= SPL_Cost_SummonIceWolf)
{
return SPL_SENDCAST;
}
else
{
return SPL_SENDSTOP;
};
};

func void Spell_Cast_SummonIceWolf()
{
if(Npc_GetActiveSpellIsScroll(self))
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll;
}
else
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_SummonIceWolf;
};
if(Npc_IsPlayer(self))
{
Wld_SpawnNpcRange(self,Summoned_IceWolf,1,500);
}
else
{
Wld_SpawnNpcRange(self,Icewolf,1,500);
};
self.aivar[AIV_SelectSpell] += 1;
};
Вот добавленный свиток (руну я не создавал):
instance ItSc_SumIceWolf(C_Item)
{
name = NAME_Spruchrolle;
mainflag = ITEM_KAT_RUNE;
flags = ITEM_MULTI;
value = Value_Sc_SumWolf;
visual = "ItSc_SumWolf.3DS";
material = MAT_LEATHER;
spell = SPL_SummonIceWolf;
cond_atr[2] = ATR_MANA_MAX;
cond_value[2] = SPL_Cost_Scroll;
wear = WEAR_EFFECT;
effect = "SPELLFX_WEAKGLIMMER";
description = NAME_SPL_SummonIceWolf;
text[0] = NAME_MageScroll;
text[1] = NAME_Mana_needed;
count[1] = SPL_Cost_Scroll;
text[5] = NAME_Value;
count[5] = value;
};
Затем в «константах»
const int SPL_SummonIceWolf = 69;

const string spellFxInstanceNames[100] =
{

"SummonIceWolf", // ice wolf

};


const string spellFxAniLetters[100] =
{

"SUM", // ice wolf
};
В «тексте».
NAME_SPL_SummonIceWolf = "Вызов ледяного волка";

const string TXT_SPELLS[100] =
{

"Вызов ледяного волка",

}
Затем декомпелировал VisualFX
И добавил, по аналогии с вызовом волка в файл VisualFxInst:
instance SPELLFX_SUMMONICEWOLF(CFX_BASE_PROTO)
{
visname_s = "MFX_ArmyOfDarkness_INIT";
visalpha = 1;
emtrjmode_s = "FIXED";
emtrjoriginnode = "ZS_RIGHTHAND";
lightpresetname = "REDAMBIENCE";
};

instance SPELLFX_SUMMONICEWOLF_KEY_OPEN(C_PARTICLEFXEMITKEY)
{
lightrange = 0.01;
};

instance SPELLFX_SUMMONICEWOLF_KEY_INIT(C_PARTICLEFXEMITKEY)
{
lightrange = 0.01;
};

instance SPELLFX_SUMMONICEWOLF_KEY_INVEST_1(C_PARTICLEFXEMITKEY)
{
lightrange = 200;
emcreatefxid = "FX_EarthQuake";
};

instance SPELLFX_SUMMONICEWOLF_KEY_CAST(C_PARTICLEFXEMITKEY)
{
emcreatefxid = "spellFX_SummonCreature_ORIGIN";
pfx_ppsisloopingchg = 1;
};
Подправил файлы
Spell_ProcessMana.d
if(activeSpell == SPL_SummonIceWolf)
{
return Spell_Logic_SummonIceWolf(manaInvested);
};

И вроде все как бы содрано честно, да вот бяда: ГГ вызывает нужного волка с пассами, но в руке стандартного фиолетового шара нет – спецэффекты не включаются, даже землятресения не происходит. Да, и вместо «шара» в руке у ГГ в районе ягодиц появляется «мини юбка» из свитка.
Видять чтото не то с VFXe сделал, тк это проблема именно из него. Карочь долго говорить не буду, а дам VFX который по идеи должен запахать.
instance spellFX_SUMMONICEWOLF_ORIGIN (CFx_Base_Proto)
{
visname_S = "MFX_ArmyOfDarkness_Origin";
emtrjmode_s = "FIXED";
emtrjoriginnode = "BIP01";
emtrjdynupdatedelay = 0;
sfxid = "MFX_Transform_Cast";
sfxisambient = 1;
emFXCreate_S = "FX_EarthQuake";

};
instance spellFX_SUMMONICEWOLF (CFx_Base_Proto)
{
visname_S = "MFX_ArmyOfDarkness_INIT";
visAlpha = 1;

emtrjmode_s = "FIXED";
emTrjOriginNode = "ZS_RIGHTHAND";
LightPresetname = "REDAMBIENCE";

};

instance spellFX_SUMMONICEWOLF_KEY_OPEN (C_ParticleFXEmitKey)
{
LightRange = 0.01;
};

instance spellFX_SUMMONICEWOLF_KEY_INIT (C_ParticleFXEmitKey)
{
LightRange = 0.01;
};

instance spellFX_SUMMONICEWOLF_KEY_INVEST_1 (C_ParticleFXEmitKey)
{
LightRange = 200;
emCreateFXID = "FX_EarthQuake";
};
instance spellFX_SUMMONICEWOLF_KEY_CAST (C_ParticleFXEmitKey)
{
emCreateFXID = "spellFX_SUMMONICEWOLF_ORIGIN";
pfx_ppsisloopingchg = 1;
};
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.169
Благодарности
395
Баллы
285
Спасибо, но что-то не вышло. Какой-то гал.

Я даже из VFXа удалил нафиг все, что связано с:
instance SPELLFX_SUMMONWOLF(CFX_BASE_PROTO)
(то бишь все, что связано с визуалом обычного волка)
Откомпилировал - запихал поверх оригинального VISUALFX.DAT
и нифига - визуальные эффекты при вызове обычного волка остались на месте. :-\

Подскажите, что кроме _compiled\VISUALFX.DAT нужно заменить?*Headwall*
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Спасибо, но что-то не вышло. Какой-то гал.

Я даже из VFXа удалил нафиг все, что связано с:
instance SPELLFX_SUMMONWOLF(CFX_BASE_PROTO)
(то бишь все, что связано с визуалом обычного волка)
Откомпилировал - запихал поверх оригинального VISUALFX.DAT
и нифига - визуальные эффекты при вызове обычного волка остались на месте. :-\

Подскажите, что кроме _compiled\VISUALFX.DAT нужно заменить?*Headwall*
Погодика, как понять на месте? На bip01 что-ли?
9поясница нпс)Если да, то тогда тут вфх не причем, скорее всего чтото в самом спеле.
выложи сюда свой файл constants.d весь! походу там косяк дето.
 
Сверху Снизу