Показать сообщение отдельно
Старый 23.08.2005, 22:27   #793
dixie

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

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

2Finsternis:
Сорри за оффтоп, и назойливость, но не мог бы ты научить меня создавать заклинания? Мне нужны 2 заклинания телепортации.
Конкретно по телепортации:
1. Выбираешь свободный номер заклинания в Constants.d. Например 99.
const int SPL_TeleportOWCoastBase = 99;
2. там же, чуть ниже в массиве spellFxInstanceNames прописываешь этому номеру нужный визуальный эффект из VisualFX. Т.е. вместо "Light" в 99 позиции пишешь "Teleport".
3. ещё в одном массиве прямо под ним spellFxAniLetters - пишешь в той же 99 позиции "HEA". Это анимация человека, как я понимаю. Т.е. подъем рук вверх.
4. в Text.d в массиве TXT_SPELLS в той же 99 позиции пишешь, например "Телепорт в лесной лагерь"
5. в Spell_ProcessMana.d вставляешь
[pre]
 if (activeSpell == SPL_TeleportOWCoastBase) {
   return Spell_Logic_TeleportOWCoastBase (manaInvested);
 };
[/pre]
6. В Spell_Teleport_Alle.d, где прописаны все телепорты:
[pre]
func int Spell_Logic_TeleportOWCoastBase(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_Teleport) {
   return SPL_SENDCAST;
 };
 return SPL_NEXTLEVEL;
};

func void Spell_Cast_TeleportOWCoastBase () {
 B_PrintTeleportTooFarAway (OldWorld_Zen);
 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_Teleport;
 };
 AI_Teleport (self, "WP_COAST_FOREST_59"); // точка назначения
 AI_PlayAni (self, "T_HEASHOOT_2_STAND");
};
[/pre]
7. и там же в функцию Spell_Cast_Teleport():
[pre]
 if (Npc_GetActiveSpell (self) == SPL_TeleportOWCoastBase) {
   Spell_Cast_TeleportOWCoastBase ();
 };
[/pre]
8. Создаешь руну:
[pre]
const int Value_Ru_TeleportOWCoastBase = 500;

instance ItRu_TeleportOWCoastBase(C_Item)
{
 name = NAME_Rune;
 mainflag = ITEM_KAT_RUNE;
 flags = 0;
 value = Value_Ru_TeleportOWCoastBase;
 visual = "ItRu_Water16.3DS";
 material = MAT_STONE;
 spell = SPL_TeleportOWCoastBase;
 wear = WEAR_EFFECT;
 effect = "SPELLFX_WEAKGLIMMER";
 description = "Телепорт в лесной лагерь";
 text[1] = NAME_Manakosten;
 count[1] = SPL_Cost_Teleport;
 text[5] = NAME_Value;
 count[5] = value;
};
[/pre]
По поводу visual. Либо бери картинку от любой другой руны, либо неиспользованные руны воды/Белиара. В последнем случае надо править текстуру.
Вот и все ;)
Ответить с цитированием