Dobra, dzięki za pomoc, czar już działa normalnie xD Ale może jeszcze uda wam mi się pomóc z drobnym problemem przy runie multiteleportacji? Problem jest taki, że po teleportacji nie zużywa many i w zależności od napisanego skryptu inaczej "aktywuje" menu wyboru teleportacji. W wypadku takiego skryptu:
// ********************
// Multi teleport
// ********************
const int SPL_Cost_MultiTeleport = 15;
func int Spell_Logic_Multi (var int manaInvested)
{
if (self.attribute[ATR_MANA] >= SPL_Cost_MultiTeleport)
{
teleportacja();
AI_PlayAni (self, "T_HEASHOOT_2_STAND" );
return SPL_SENDCAST;
};
return SPL_NEXTLEVEL;
};
jeśli nie mam 15 punktów many to animacja teleportacji może trwać w nieskończoność, co jest prawie poprawne(prawie, bo powinien po prostu wzruszać ramionami w przypadku posiadania mniejszej ilości many od 15)i nie wyskakuje opcja związana z wyborem miejsca teleportacji(do tego nie zużywa many), jednak jeśli mam wymaganą ilość to od razu po wybraniu czaru i naciśnięciu ctrl+strzałka do przodu pojawia mi się lista(nie ma animacji). Natomiast w przypadku drugiego skryptu:
const int SPL_Cost_MultiTeleport = 15;
func int Spell_Logic_Multi (var int manaInvested)
{
if (manaInvested>= 1)
{
teleportacja();
AI_PlayAni (self, "T_HEASHOOT_2_STAND" );
return SPL_SENDCAST;
};
return SPL_NEXTLEVEL;
};
wybór miejsca do teleportacji pojawia się dopiero po zakończeniu animacji, jednak jak w przypadku pierwszego skryptu nie zużywa many i niezależnie od tego, ile mamy many możemy używać teleportacji. Nie wiem, czy jest potrzebny skrypt, w którym są umieszczone miejsca do teleportacji, ale na wszelki wypadek podam w spoilerze.
Spoiler
var int teleport_place;
var int MOBUSE;
func void MultiTeleport()
{
if(TELEPORT_PLACE == 1)
{
self.aivar[AIV_INVINCIBLE] = FALSE;
AI_Teleport(hero,"NW_BIGFARM_HOUSE_UP1_04");
MOBUSE = 0;
TELEPORT_PLACE = 0;
PrintScreen("Teleportowałeś się w inne miejsce!",-1,-1,"font_old_20_white.tga",3);
}
else if(TELEPORT_PLACE == 2)
{
self.aivar[AIV_INVINCIBLE] = FALSE;
AI_Teleport(hero,"NW_CITY_PALCAMP_15");
MOBUSE = 0;
TELEPORT_PLACE = 0;
PrintScreen("Teleportowałeś się w inne miejsce!",-1,-1,"font_old_20_white.tga",3);
};
};
func void teleportacja()
{
MobUse = TeleportRune_Used;
var C_Npc him;
var C_Npc rocker;
him = Hlp_GetNpc(PC_Hero);
rocker = Hlp_GetNpc(PC_Rockefeller);
if((Hlp_GetInstanceID(self) == Hlp_GetInstanceID(him)) || (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(rocker)))
{
AI_ProcessInfos(him);
};
};
instance NOTELEPORT(C_Info)
{
npc = PC_Hero;
nr = 999;
condition = noteleport_condition;
information = noteleport_info;
important = 0;
permanent = 1;
description = DIALOG_ENDE;
};
func int noteleport_condition()
{
if(MOBUSE == TELEPORTRUNE_USED)
{
return 1;
};
};
func void noteleport_info()
{
AI_StopProcessInfos(hero);
MOBUSE = 0;
TELEPORT_PLACE = 0;
};
instance TOONAR(C_Info)
{
npc = PC_Hero;
condition = toonar_condition;
information = toonar_info;
important = 0;
permanent = 1;
description = "Onar";
};
func int toonar_condition()
{
if(MOBUSE == TELEPORTRUNE_USED)
{
return 1;
};
};
func void toonar_info()
{
AI_StopProcessInfos(hero);
TELEPORT_PLACE = 1;
MultiTeleport();
};
instance TOMARTIN(C_Info)
{
npc = PC_Hero;
condition = tomartin_condition;
information = tomartin_info;
important = 0;
permanent = 1;
description = "Martin";
};
func int tomartin_condition()
{
if(MOBUSE == TELEPORTRUNE_USED)
{
return 1;
};
};
func void tomartin_info()
{
AI_StopProcessInfos(hero);
TELEPORT_PLACE = 2;
MultiTeleport();
};
Robiłem na bazie kryształu teleportacji z MT, więc nie wiem skąd się wziął ten MOBUSE.