The following warnings occurred:
Warning [2] Use of undefined constant SAPI_NAME - assumed 'SAPI_NAME' (this will throw an Error in a future version of PHP) - Line: 3388 - File: inc/functions.php PHP 7.4.33-nmm7 (Linux)
File Line Function
/inc/functions.php 3388 errorHandler->error
/showthread.php 116 build_archive_link
Warning [2] Use of undefined constant IN_ARCHIVE - assumed 'IN_ARCHIVE' (this will throw an Error in a future version of PHP) - Line: 3331 - File: inc/functions.php PHP 7.4.33-nmm7 (Linux)
File Line Function
/inc/functions.php 3331 errorHandler->error
/inc/functions.php 3324 build_forum_breadcrumb
/showthread.php 195 build_forum_breadcrumb
Warning [2] Use of undefined constant IN_ARCHIVE - assumed 'IN_ARCHIVE' (this will throw an Error in a future version of PHP) - Line: 3331 - File: inc/functions.php PHP 7.4.33-nmm7 (Linux)
File Line Function
/inc/functions.php 3331 errorHandler->error
/showthread.php 195 build_forum_breadcrumb






Post Reply 
 
Thread Rating:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Aura Spell
Author Message
Seron
Apprentice
*

Posts: 11
Likes Given: 0
Likes Received: 1 in 1 posts
Joined: Jan 2013
Reputation: 0

Motoi

Post: #1
Aura Spell
Greetings,

I have recently tried to make a Aura kind of spell (Think Paladin from Diablo 2). An area of effect around a character which buffs players as long as they stay inside of the area. Also it should move with the caster.

I decided to try this using multiregion:

Code:
[SPELL 425]
DEFNAME=s_siegesrausch
NAME=Siegesrausch
SOUND=044b
RUNES=
CAST_TIME=0.5
RESOURCES=
RUNE_ITEM=5578
SCROLL_ITEM=I_SCROLL_X_RED
FLAGS=SPELLFLAG_GOOD
EFFECT_ID=0
EFFECT=0
DURATION=0
MANAUSE=5
SKILLREQ=Magery 1.0
INTERRUPT=0.0,0.0

ON=@Start
if (<restest 1 i_rune_kaiserbanner>)
consume i_rune_kaiserbanner
endif

if (<restest 1 i_rune_siegesrausch>)
consume i_rune_siegesrausch
return 1
endif

ON=@Success
NEWITEM i_rune_siegesrausch
EQUIP <ACT.UID>

SERV.NEWITEM i_siegesrausch
NEW.P=<P>
NEW.LINK=<UID>
NEW.REGION.EVENTS +r_siegesrausch
NEW.TIMERF 1,REGION.FLAGS=0
REF1=<NEW.UID>
ACT.LINK=<NEW.UID>
RETURN 0

[ITEMDEF i_rune_siegesrausch]
ID=8323
TYPE=t_eq_script
NAME=Rune_siegesrausch

ON=@equip
timer=1

ON=@timer
timer=1
link.p=<cont.p>
cont.effect 3,14202,1,21
return 1

ON=@unequip
SRC.SYSMESSAGE @0481,,1 Du beendest Siegesrausch.
LINK.REMOVE

[ITEMDEF i_siegesrausch]
ID=i_memory
NAME=Siegesrausch
TYPE=T_MULTI
VALUE=1
MULTIREGION=-4,-4,5,5

ON=@CREATE
ATTR=08010|attr_decay
TIMER=60

[REGIONTYPE r_siegesrausch]
ON=@Enter
IF (<SRC.ISPLAYER>) && !(<SRC.ISGM>)
SRC.SYSMESSAGE @0481,,1 Du stehst unter dem Effekt von 'Siegesrausch'
src.effect 3,i_fx_bless_effect,1,16,0,0,2
src.events +e_siegesrausch
endif

ON=@EXIT
IF (<SRC.ISPLAYER>) && !(<SRC.ISGM>)
SRC.SYSMESSAGE @0481,,1 Der Effekt von 'Siegesrausch' lässt nach...
src.events -e_siegesrausch
endif

This works more or less as intended. However it inteferes with events from existing region. Not just @enter or @exit events but also antimagic flags.

My question would be: Is there a way to nest a region inside a region so that they do not interefere with each other? Or maybe a better way to do the whole 'aura' thing (hopefully without lots of timer and forchars)?

I was thinking about ROOMDEF but apparently you can not use @Enter/@Exit Trigger on that one.
03-20-2014 07:21 PM
Visit this user's website Find all posts by this user Like Post Quote this message in a reply
Alaric
Journeyman
*

Posts: 227
Likes Given: 7
Likes Received: 9 in 4 posts
Joined: Oct 2012
Reputation: 7



Post: #2
RE: Aura Spell
and @regionenter trigger being constantly on player and checking whether it is the spell region doesn't work?

But I personally think that this is not that good idea. Well, it is good in theory, but totem with forcycle ticking every second, giving memory item and refreshing timer would be easier and cleaner.

Since with region you have to check more stuff. And if there are some shitty things - the region disappears, enter/exit triggers doesn't work always properly (just my experience, sometimes it fired, sometimes not and i had to check and check). With this temporary item ticking you don't have to check where you are, if you left the region and those shits. The only check would be "does memory item exist?" No? => create one, Yes? refresh timer/set it to 2.
If the totem item disappears, no worries, the memory item removes itself very soon. No additional checks and operations.

E: ticking every 2 seconds might be good too if you want to minimalize servers work. But no more. I would also set memory timer a bit higher than ticking time. It is actually you wanted to avoid, but this is the best way I know. No bugs, no stupid checks, short code, does what you want.
(This post was last modified: 03-21-2014 12:51 AM by Alaric.)
03-20-2014 11:00 PM
Find all posts by this user Like Post Quote this message in a reply
Shidhun
Journeyman
*

Posts: 59
Likes Given: 5
Likes Received: 3 in 3 posts
Joined: Jul 2012
Reputation: 1



Post: #3
RE: Aura Spell
Try it with something like this :
Code:
[Spell 425]
DEFNAME=s_siegesrausch
NAME=Siegesrausch
RUNES=
CAST_TIME=0.5
RESOURCES=i_reag_mandrake_root //Reagents ?
RUNE_ITEM=5578
SCROLL_ITEM=i_scroll_x_red
FLAGS=SPELLFLAG_SCRIPTED|SPELLFLAG_TARG_CHAR
EFFECT_ID=0
EFFECT=0
MANAUSE=5
SKILLREQ=MAGERY 50.0
INTERRUPT=100.0,1.0

ON=@SELECT
    ARGN1 42

ON=@EFFECT
CALL f_spell_siegesrausch
RETURN 0

[FUNCTION f_spell_siegesrausch]
IF (<ISITEM>)
    IF (<CONT>)
        RETURN 1
    ENDIF
ENDIF
IF (<SRC.ACTION>==Skill_Magery)&&(<ARGN1>==<SRC.ACTARG1>)
    IF (<SRC.FINDID(I_spelleffect_siegesrausch)>)
        SRC.FINDID(I_spelleffect_siegesrausch).remove
    ENDIF
ENDIF
LOCAL.Wirkung <EVAL (20*<ARGN2>)/1000> // Strength of the effect
SERV.NEWITEM I_spelleffect_siegesrausch
NEW.MORE2=<LOCAL.Wirkung>
NEW.MORE1=<EVAL <ARGN2>/100> // How often should the effect occur?
EQUIP <NEW.UID>

[ITEMDEF i_spelleffect_siegesrausch]
ID=i_rune_bless
LAYER=56
TYPE=t_eq_script

ON=@EQUIP
    ATTR=026
    TIMER=7
    
ON=@TIMER
    IF (<MORE1>)
        LOCAL.Wirkung <MORE2>
        SOUND snd_spell_bless
        MORE1 -= 1
        CONT.effect 3,i_fx_bless_effect,1,16,0,0,2
        LOCAL.UID = <CONT.UID>
        FORCHARS 4
            IF (<HITS> <= <MAXHITS>)&&!(<FLAGS>&02003)
                EFFECT 3,i_fx_heal_effect,0,28,0,2535,3
                SPELLEFFECT s_bless,<local.wirkung>
            ENDIF
        ENDFOR
        TIMER={8 13} // Intervall
    ELSE
        REMOVE
    ENDIF
    RETURN 1

It is only a part of one of our spells (other effect), and i haven't tested it. But it should give you an Idea how to create your spell[/php]
(This post was last modified: 03-20-2014 11:34 PM by Shidhun.)
03-20-2014 11:33 PM
Find all posts by this user Like Post Quote this message in a reply
Seron
Apprentice
*

Posts: 11
Likes Given: 0
Likes Received: 1 in 1 posts
Joined: Jan 2013
Reputation: 0

Motoi

Post: #4
RE: Aura Spell
@Alaric: Hmm might be the only valid solution. With a REGION it seemed to be more effective and smoother than memoryitems and timers but oh well...

@Shidhun: This might work for something like you did (a recurring effect) but i think it wouldnt work for something that is gets set when you enter the aura and removed when you leave the aura. Like raising resistances for example. You dont really want them to jump up and down all the time.
03-21-2014 05:37 AM
Visit this user's website Find all posts by this user Like Post Quote this message in a reply
Post Reply 


Forum Jump:


User(s) browsing this thread: 1 Guest(s)