Pokażę wam jak robić runę teleportu więc bez zbędnych ceregieli:
Potrzebne pliki:
1.Constants.d
2.IT_Runen.d
3.Spell_ProcessMana.d
4.Spell_Teleport_Alle.d
5.Text.d
Teraz w pliku Constants.d
Zmieniamy jedną ze stałych np:
const int SPL_Reserved_98 = 98;
Nie możemy dodawać nowych ale możemy edytować wszystkie Reserved
Ja zmieniłem ją na
const int SPL_TeleportBrothel = 98;
bo robiłem teleport do Czerwonej Latarni
Teraz animacja odgrywana przy użyciu. Jeżeli używacie tej stałęj co ja odszukajcie
"XXX" //98 SPL_Reserved_98
I zamienicie na
"HEA", // 98 SPL_TeleportBrothel
Jeżeli nie to poszukajcie tej z swoim numerkiem (później już tego nie będę pisał więc pamiętajcie)
HEA odpowiada za animację odgrywaną przy użyciu i nie musi być to HEA może to być jedna z poniższych:
"SLE", // Runa świtała paladyna
"HEA", // Teleporty i uleczenia
"FBT", // święty Pocisk
"FIB", // Zniszczenie zła
reszty poszukajcie sobie sami bo ja jestem zbyt leniwy.
Ok z Constats.d to chyba wszystko
2. It_Runen.d
Na początku pliku dajta stałą na cenę runy.
const int Value_Ru_Brothel = 500;
to oczywiście tylko przykład.
Najłatwiej jest skopiować i wkleić jedną z gotowych run teleportu i ją przerobic
INSTANCE ItRu_TeleportSeaport (C_Item) //Instancja itemu
{
name = NAME_Rune; //Nazwa Name_Rune po polsku wyświetli "Runa"
mainflag = ITEM_KAT_RUNE; // To tylo mówi ze jest to Runa
flags = 0; // Flaga ( nie wiem po co runie flaga ale nie narzekam)
value = Value_Ru_TeleportSeaport; // Stała ceny
visual = "ItRu_TeleportSeaport.3ds"; //Wygląd
material = MAT_STONE; //Z czego to jest zrobione żeby ustalić jak będzie wydawać przy udeżeniu o ziemię
spell = SPL_TeleportSeaport; //Jakie to zaklęcie
wear = WEAR_EFFECT; //Nie wymaga chyba tłumaczenia
effect = "SPELLFX_WEAKGLIMMER"; //Effek
description = NAME_SPL_TeleportSeaport; // Opis może
// Dalej jest jak w każdym iteamie.
TEXT [1] = NAME_Manakosten;
COUNT [1] = SPL_COST_TELEPORT;
TEXT [5] = NAME_Value;
COUNT [5] = value;
};
3. SpellProcesMana.d
Dodajemy pomiędzy innymi ifami
if (activeSpell == SPL_TeleportBrothel ) { return Spell_Logic_TeleportBrothel (manaInvested); };
)znowu tylko przrykład.
4. Spell_Teleport_Alle.d
Dodajemy
// ------ Czerwona Latarnia------
func int Spell_Logic_TeleportBrothel (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_TeleportBrothel()
{
B_PrintTeleportTooFarAway (NEWWORLD_ZEN); // W jakim świecie nie pokaże "Za Daleko"
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; //Ile many zużyjemy (SPL_cost_Teleport jest na początku pliku jak chcecie własną wartość to dodajcie jedną :D
};
AI_Teleport (self, "NW_CITY_HABOUR_PUFF_NADJA"); //To jest gdzie się teleporujemy
AI_PlayAni (self, "T_HEASHOOT_2_STAND" ); //A to jakej animacji użyjemy
};
I na dole jeszcze pomiędzy skryptami
if (Npc_GetActiveSpell(self) == SPL_TeleportBrothel ) { Spell_Cast_TeleportBrothel (); };
Tego nie będę tłumaczył bo nie wiem jak to w słowa ująć ale jak zwykle to tylko przykład

5.Text
Teksty jakie się nam pokażą np przy wybieraniu czaru na górze.
Odnajdujemy linijki swoich Reserved
w moim wypadku 98
"TXT_SPL_RESERVED_98", /*co wyświetli*/ // 98 /*Numer Zaklęcia*/ SPL_Reserved_98 /* Instancja zaklęcia*/
Ja zmieniłęm to tak
"Teleport do Czerwonej Latarni", // 98 SPL_TeleportBrothel
teraz jeszcze mała podmiana
//To
const string NAME_SPL_Reserved_98 = "NAME_SPL_RESERVED_98";
//Na To
const string NAME_SPL_TeleportBrothel = "Do Czerwonej Latarni";
Po zapisaniu wszystkiego jeżeli robiliście tak jak ja zostaniecie przeniesieni do czerwonej latarni.
Jak macie problemy czegoś zapomniałem albo czegoś nie zbyt dokładnie wytłumaczyłem lub coś w tym stylu piszcie.
A jak się przydało to tam jest taki fajny przycisk