[G2 NK] Runa multiteleportacji nie zużywa many + problem z użyciem 4041 11

O temacie

Autor Graveir

Zaczęty 9.04.2014 roku

Wyświetleń 4041

Odpowiedzi 11

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Mam problem tak jak w temacie. Otóż postanowiłem zrobić nową runę na bazie Świętego Pocisku, która zadaje mniejszy dmg i wymaga mniej many. Jednak po ustawieniu kosztu many w skrypcie nowego czaru na 5 punktów użycie zabiera mi 60 punktów many(tak jak Święty pocisk). Gdzie jest błąd? Podaję skrypty.
1)Skrypt czaru(nazwa Spell_LightDoom.d):
// ***************
// SPL_LightDoom
// ***************

const int SPL_Cost_LightDoom = 5;
const int SPL_Damage_LightDoom = 40;

INSTANCE Spell_LightDoom (C_Spell_Proto)
{
time_per_mana = 0; //Spell wirkt Instant
damage_per_level = SPL_Damage_LightDoom; //+
};

func int Spell_Logic_LightDoom (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_LightDoom)
{
return SPL_SENDCAST;
}
else //nicht genug Mana
{
return SPL_SENDSTOP;
};
};

func void Spell_Cast_LightDoom()
{
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_LightDoom;
};

self.aivar[AIV_SelectSpell] += 1;
};
2)Wpis do Spell_ProcessMana:
if (activeSpell == SPL_LightDoom ) { return  Spell_Logic_LightDoom (manaInvested); };
3)Skrypt runy:
INSTANCE ItRu_LightDoom (C_Item)
{
name = "Kula";

mainflag = ITEM_KAT_RUNE;
flags = 0;

value = 100;

visual = "ItRu_MasterOfDesaster.3DS";
material = MAT_STONE;

spell = SPL_LightDoom;

wear = WEAR_EFFECT;
effect = "SPELLFX_WEAKGLIMMER_RED";

description = name;

TEXT [0] = NAME_Manakosten;
COUNT [0] = SPL_COST_LightDoom;

TEXT [2] = NAME_Dam_Magic;
COUNT [2] = SPL_DAMAGE_LightDoom;

TEXT [5] = NAME_Value;
COUNT [5] = value;
};
4)Wpisy do Constants.d:
const int SPL_LightDoom = 90;
oraz
"MasterOfDisaster", // 90 SPL_Reserved_90
a na koniec
"FIB",  // 90 SPL_Reserved_90
5)Wpis do Text.d:
"Świetlisty pocisk zagłady", // 90 SPL_Reserved_90
Gdzie tu jest błąd, że zamiast 5 punktów many zabiera mi aż 60?
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
Zmień to:
"MasterOfDisaster",            // 90   SPL_Reserved_90Na jakiś inny i zobacz co się działo. Kiedyś chyba musiałem robić nowego pfx'a, ale nie wiem czy o to chodzi.
PS: A obrażenia zadaję dobre?
 

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
No niestety nie. Koszt many i obrażenia są takie same jak przy świętym pocisku.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

adamoloxD

adamoloxD

Użytkownicy
posty2
Propsy1
ProfesjaSkrypter
  • Użytkownicy
Witaj, jeśli wkleisz ten kod do VisualFxInst.d/////////////////////////////////////////////
 //LIGHTDOOOM                              //
 ////////////////////////////////////////////
 INSTANCE spellFX_LightDoom    (CFx_Base_Proto)
{

         visname_S                 = "MFX_LightDoom_INIT";

         emtrjmode_s             = "FIXED";
        emTrjOriginNode         = "ZS_RIGHTHAND";
         emtrjtargetnode         = "BIP01 FIRE";
         emtrjloopmode_s         = "NONE";
         emtrjeasefunc_s         = "LINEAR";
         emActionCollStat_S        = "COLLIDE CREATE";
         emActionCollDyn_S         = "COLLIDE CREATEONCE";
        emFXCollStat_S               = "spellFX_LightDoom_COLLIDE";
        emFXCollDyn_S             = "spellFX_LightDoom_COLLIDEDYNFX";
        emTrjTargetRange         = 20;
        emTrjTargetElev         = 0;
        emTrjDynUpdateDelay        = 20000;
        };

        INSTANCE spellFX_LightDoom_KEY_INIT (C_ParticleFXEmitKey)
        {
                //visname_S             = "MFX_DestroyUndead_INIT";
        };

        INSTANCE spellFX_LightDoom_KEY_CAST (C_ParticleFXEmitKey)
        {
                //visname_S                 = "MFX_RepelEvil_CAST";
                emtrjmode_s             = "TARGET";
                 emtrjeasevel             = 2500.;
                 sfxid                    = "MFX_DestroyUndead_Cast";
                 sfxisambient            = 1;
                emCheckCollision         = 1;
};

instance spellFX_LightDoom_TRAIL        (CFx_Base_Proto)
{
        emtrjeasevel     = 800.;
        visname_S         = "MFX_LightDoom_TRAIL";
        visAlpha        = 1;
        emtrjmode_s     = "TARGET";
        emCheckCollision         = 1;
        emActionCollStat_S        = "COLLIDE";
         emActionCollDyn_S         = "COLLIDE";
        };

        INSTANCE spellFX_LightDoom_TRAIL_COLLIDE (C_ParticleFXEmitKey)
        {
                 emtrjeasevel             = 0.000001;
};


INSTANCE spellFX_LightDoom_COLLIDE        (CFx_Base_Proto)
{
    emTrjOriginNode     = "BIP01";
    visname_S             = "MFX_LightDoom_COLLIDE";
    emtrjmode_s         = "FIXED";
    emtrjdynupdatedelay = 0.;
    lightpresetname        = "AURA";
    sfxid                = "MFX_DESTROYUNDEAD_COLLIDE";
    sfxisambient        = 1;
};

INSTANCE spellFX_LightDoom_COLLIDEDYNFX(CFx_Base_Proto)
{
    emTrjOriginNode     = "BIP01";
    visname_S             = "MFX_LightDoom_COLLIDE";
    emtrjmode_s         = "FIXED";
    emtrjdynupdatedelay = 0.;
    lightpresetname        = "AURA";
    sfxid                = "MFX_DESTROYUNDEAD_COLLIDE";
    sfxisambient        = 1;
};
//////////////////////////////////////////////////// 
oraz ten kod do PfxInstMagic.d : ///    XXXXXXXXXXXXXXXXXXXXXXXX
///    XX  L I G H T D O O M XX
///    XXXXXXXXXXXXXXXXXXXXXXXX


INSTANCE MFX_LIGHTDOOM_INIT (C_PARTICLEFX)
{
     ppsvalue = 5;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 2;
     shptype_s = "POINT";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpisvolume = 1;
     shpdim_s = "100";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2;
     dirmode_s = "RAND";
     dirfor_s = "OBJECT";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180;
     dirangleelev = -90;
     velavg = 0.00100000005;
     lsppartavg = 2000;
     lsppartvar = 500;
     flygravity_s = "0 -0.0000001 0";
     visname_s = "mfx_masterofdisaster_aura_16bit.tga";
     visorientation_s = "VELO";
     vistexisquadpoly = 1;
     vistexanifps = 18;
     vistexaniislooping = 2;
     vistexcolorstart_s = "255 255 200";
     vistexcolorend_s = "255 200 200";
     vissizestart_s = "100 100";
     vissizeendscale = 3;
     visalphafunc_s = "ADD";
     visalphastart = 255;
     useemittersfor = 1;
};

INSTANCE MFX_LightDoom_CAST (C_PARTICLEFX)
{
     ppsvalue = 40;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 2;
     shptype_s = "POINT";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpisvolume = 1;
     shpdim_s = "100";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2;
     dirmode_s = "RAND";
     dirfor_s = "OBJECT";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180;
     dirangleelev = -90;
     velavg = 0.00100000005;
     lsppartavg = 4000;
     lsppartvar = 1000;
     flygravity_s = "0 -0.0000001 0";
     visname_s = "HEAVENLIGHT.TGA";
     visorientation_s = "VELO";
     vistexisquadpoly = 1;
     vistexanifps = 18;
     vistexaniislooping = 1;
     vistexcolorstart_s = "255 255 255";
     vistexcolorend_s = "225 0 255";
     vissizestart_s = "1 50";
     vissizeendscale = 10;
     visalphafunc_s = "ADD";
     visalphastart = 255;
     useemittersfor = 1;
};

INSTANCE MFX_LIGHTDOOM_TRAIL (C_PARTICLEFX)
{
     ppsvalue = 20;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 2;
     shptype_s = "POINT";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "5";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2;
     dirmode_s = "RAND";
     dirfor_s = "OBJECT";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180;
     dirangleelev = -90;
     velavg = 0.0199999996;
     velvar = 0.00999999978;
     lsppartavg = 2000;
     flygravity_s = "0 0 0";
     visname_s = "HEAVENLIGHT.TGA";
     visorientation_s = "VELO";
     vistexisquadpoly = 1;
     vistexanifps = 18;
     vistexaniislooping = 1;
     vistexcolorstart_s = "100";
     vistexcolorend_s = "255 255 255";
     vissizestart_s = "1 15";
     vissizeendscale = 50;
     visalphafunc_s = "ADD";
     visalphastart = 255;
     useemittersfor = 1;
};

INSTANCE MFX_LIGHTDOOM_COLLIDE (C_PARTICLEFX)
{
     ppsvalue = 30;
     ppsscalekeys_s = "1";
     ppsissmooth = 1;
     ppsfps = 1;
     shptype_s = "POINT";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpisvolume = 1;
     shpdim_s = "100";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2;
     dirmode_s = "RAND";
     dirfor_s = "OBJECT";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180;
     dirangleelev = -90;
     velavg = 0.00100000005;
     lsppartavg = 4000;
     lsppartvar = 1000;
     flygravity_s = "0 -0.0000001 0";
     visname_s = "mfx_masterofdisaster_aura_16bit.tga";
     visorientation_s = "VELO";
     vistexisquadpoly = 1;
     vistexanifps = 18;
     vistexaniislooping = 2;
     vistexcolorstart_s = "255 255 200";
     vistexcolorend_s = "255 0 0 ";
     vissizestart_s = "50 50";
     vissizeendscale = 5;
     visalphafunc_s = "ADD";
     visalphastart = 255;
     useemittersfor = 1;
};                       
to powinno wsio działać  :lol:

@edit: Zapomniałbym ..  :facepalm: w Constants.d musisz dać "LightDoom", // 90 SPL_Reserved_90 zamiast tego "MasterOfDisaster".

@Down: od wczoraj z tym walczyłem, sprawdzałem kilka razy - zabiera 5 many i 40 HP więc powinno być git :D
 

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
Właśnie, zrób tak jak pokazuje kolega wyżej. (Nie wiem czy tam wszystko jest Ok, ale na pierwszy rzut oka tak wygląda) Z tego co rozumiem, to "MasterOfDisaster" w Constants.d  jest nie tylko nazwą pfx'a ale i nazwą zaklęcia.
 

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
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.

 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Robiłem na bazie kryształu teleportacji z MT, więc nie wiem skąd się wziął ten MOBUSE.

Hmm... poprawnie to powinno być tak:
Skopiowałem kryształ teleportacji z MT, więc nie wiem skąd się wziął ten MOBUSE.

Po co w ogóle zabierasz się za coś, czego nie rozumiesz?
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
Prawdopodobnie przyczyną są te dwie linijki
Cytuj
        teleportacja();
        AI_PlayAni        (self, "T_HEASHOOT_2_STAND" );
A mianowicie powinny być one w zwykłej funkcji czaru a nie w logicu. Wystarczy popatrzeć na oryginalne skrypty teleportów.
 

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Dobra, teraz działa. Dzięki za pomoc Xardas.
@BZ - a po cholerę się odzywasz, jeśli nie masz zamiaru pomóc?
Temat do zamknięcia.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry