Board index
Programs with AI or Rules Enforcement
Magic: The Gathering - Duels of the Planeswalkers
New MTG Cards and Decks (2010, 2012, 2013, 2014, 2015, Magic Duels)
2013




Help with restoration angel
Moderator: CCGHQ Admins
27 posts
• Page 2 of 2 • 1, 2
Re: Help with restoration angel
by pcastellazzi » 26 Nov 2012, 23:53
The only strange thing i notice is the use of EffectDC():Get_Targets(0):Get_NthCardPtr(0) instead of EffectDC():Get_Targets(0):Get_CardPtr(0). I think that particular line of code should be:
As a side note, in lua the expression "a and b" is equal to b when a and b are not null. This allow the resolution code to be reduced to:
- Code: Select all
local target = EffectDC():Get_Targets(0) and EffectDC():Get_Targets(0):Get_CardPtr(0)
As a side note, in lua the expression "a and b" is equal to b when a and b are not null. This allow the resolution code to be reduced to:
- Code: Select all
<RESOLUTION_TIME_ACTION>
local target = EffectDC():Get_Targets(0) and EffectDC():Get_Targets(0):Get_CardPtr(0)
if target then
EffectDC():Get_Targets(0):Protect_CardPtr(0)
target:RemoveFromGame()
end
</RESOLUTION_TIME_ACTION>
<RESOLUTION_TIME_ACTION>
local target = EffectDC():Get_Targets(0) and EffectDC():Get_Targets(0):Get_CardPtr(0)
if target then
target:PutIntoPlay( EffectController() )
end
</RESOLUTION_TIME_ACTION>
The lights then came up and the crowd erupted in applause, because that's what the crowd does after it watches destruction on a large screen.
— Ben Kuchera, Mordern Warfare 3 review.
— Ben Kuchera, Mordern Warfare 3 review.
-
pcastellazzi - Posts: 184
- Joined: 25 Apr 2012, 00:40
- Location: Montevideo, Uruguay
- Has thanked: 11 times
- Been thanked: 30 times
Re: Help with restoration angel
by thefiremind » 27 Nov 2012, 00:01
I always thought that Get_CardPtr and Get_NthCardPtr were synonims, with the latter remaining for compatibility with DotP2012 syntax, just as MTG():ObjectDataChest() which still works even if the new syntax is ObjectDC(). And that thing about checking the existance of the data chest still doesn't convince me, as it wasn't convincing me with that bug with Phyrexian Metamorph + Birthing Pod... there are tons of cards that don't check the existance of the data chest, and since the query is always presented in this case, EffectDC():Make_Targets(0) should always be executed, initialising the chest.
...That said, I'm willing to try everything at this point.
EDIT: As I predicted, nothing changed with your code. But you gave me another idea that I'm going to try immediately.
...That said, I'm willing to try everything at this point.

EDIT: As I predicted, nothing changed with your code. But you gave me another idea that I'm going to try immediately.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 722 times
Re: Help with restoration angel
by kpruss » 27 Nov 2012, 00:10
I will try this once I can just get over doing the side fix with the 0/1. After all the terrible things, I'm convincing myself that a slightly bigger germ isn't so bad, then at that moment I saw that Thrun could not swing into batterskull even with regen mana up efficiently. That kinda made me sad.
Re: Help with restoration angel
by thefiremind » 27 Nov 2012, 00:18
...and guess what? With this last idea I MADE IT!!! The advice from pcastellazzi wasn't working, but he made me think about the AI not liking a lost pointer, and so I had this idea: if Restoration Angel targets a token, do we really have to protect the pointer? A token disappears anyway when changing zone.thefiremind wrote:But you gave me another idea that I'm going to try immediately.
Make the following changes to the first RESOLUTION_TIME_ACTION of Restoration Angel:
- Code: Select all
<RESOLUTION_TIME_ACTION>
local target = EffectDC():Get_Targets(0) and EffectDC():Get_Targets(0):Get_CardPtr(0)
if target ~= nil then
if target:IsToken() == 0 then
EffectDC():Get_Targets(0):Protect_CardPtr(0)
end
target:RemoveFromGame()
end
</RESOLUTION_TIME_ACTION>

As soon as I can gather a lot of patience, I'll browse through my cards and add this condition of not protecting the pointer wherever it could be a token.
EDIT: Now that I think about it, time ago I had a crash when using Boggart Mob, but I couldn't reproduce it anymore so I gave up finding the reason. This was probably the reason: the AI was evaluating the possibility of championing a token. A great finding!
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 722 times
Re: Help with restoration angel
by kpruss » 27 Nov 2012, 07:18
You are my hero firemind, and i appreciate all the tips on cleaner code. When you mod so much junk, you need all the help to prevent the little crashes too.
Do you guys know anything about the AI values they put on the cards? From all the cards I've seen, I thought the trend was for higher value = meant this card was higher up on the AI to play list. I found a sakura-tribe elder file, and it had AI value at like -450, which kinda threw me for a loop. The comp actually dislikes playing this card a lot, like it will always play nature's lore or rampant growth, which have zero ai value, (actually i think those cards don't even have that listed) but it would rather leave mana open to regenerate a troll 3 times than play this dude. I'm going to try him out at 450 AI value instead.
And just messing with some lands, i took some stuff from cathedral of war, because it is similar, to make my version of treetop village. I have no idea what the AI value means but the lands are very similar in that they come into play tapped and produce one color of mana, so I tried using that on treetop. This is of course if you wanted it for the AI because you can prolly find/make a treetop village easily, but the AI are confused on how to use mana abilities that get put on the stack, which are already something I have to deal with on dual colored lands. Seeing as cathedral of war works fine for man, this code will work to however extent an AI values using mana or manning up, which I have no idea about for now.
Do you guys know anything about the AI values they put on the cards? From all the cards I've seen, I thought the trend was for higher value = meant this card was higher up on the AI to play list. I found a sakura-tribe elder file, and it had AI value at like -450, which kinda threw me for a loop. The comp actually dislikes playing this card a lot, like it will always play nature's lore or rampant growth, which have zero ai value, (actually i think those cards don't even have that listed) but it would rather leave mana open to regenerate a troll 3 times than play this dude. I'm going to try him out at 450 AI value instead.
And just messing with some lands, i took some stuff from cathedral of war, because it is similar, to make my version of treetop village. I have no idea what the AI value means but the lands are very similar in that they come into play tapped and produce one color of mana, so I tried using that on treetop. This is of course if you wanted it for the AI because you can prolly find/make a treetop village easily, but the AI are confused on how to use mana abilities that get put on the stack, which are already something I have to deal with on dual colored lands. Seeing as cathedral of war works fine for man, this code will work to however extent an AI values using mana or manning up, which I have no idea about for now.
- Code: Select all
<?xml version='1.0'?>
<CARD_V2>
<FILENAME text="TREETOP_VILLAGE_624329" />
<CARDNAME text="TREETOP_VILLAGE" />
<TITLE>
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Treetop Village]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Treetop Village]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Treetop Village]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Treetop Village]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Treetop Village]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Treetop Village]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Treetop Village]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Treetop Village]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Treetop Village]]></LOCALISED_TEXT>
</TITLE>
<MULTIVERSEID value="624329" />
<ARTID value="624329" />
<ARTIST name="Rob Alexander" />
<CASTING_COST cost="" />
<TYPE metaname="Land" />
<EXPANSION value="DPG" />
<RARITY metaname="U" />
<TRIGGERED_ABILITY internal="1" filter_zone="ZONE_IN_PLAY">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[Treetop Village enters the battlefield tapped.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[Treetop Village enters the battlefield tapped.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[Treetop Village enters the battlefield tapped.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[Treetop Village enters the battlefield tapped.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[Treetop Village enters the battlefield tapped.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[Treetop Village enters the battlefield tapped.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[Treetop Village enters the battlefield tapped.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[Treetop Village enters the battlefield tapped.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[Treetop Village enters the battlefield tapped.]]></LOCALISED_TEXT>
<TRIGGER value="ZONECHANGE_END" simple_qualifier="self" to_zone="ZONE_IN_PLAY" />
<RESOLUTION_TIME_ACTION>
if TriggerObject() ~= nil then
TriggerObject():ComesIntoPlayTapped()
end
</RESOLUTION_TIME_ACTION>
</TRIGGERED_ABILITY>
<MANA_ABILITY filter_zone="ZONE_IN_PLAY">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{T}: Add {G} to your mana pool.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[{T}: Ajoutez {G} à votre réserve.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[{T}: Agrega {G} a tu reserva de maná.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[{T}: Erhöhe deinen Manavorrat um {G}.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[{T}: Aggiungi {G} alla tua riserva di mana.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[{T}:あなたのマナ・プールに{G}を加える。]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[{T}: {G}를 당신의 마나풀에 담는다.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[{T}: добавьте {G} в ваше хранилище маны.]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[{T}: Adicione {G} à sua reserva de mana.]]></LOCALISED_TEXT>
<COST type="TapSelf" />
<PRODUCES amount="{G}" />
</MANA_ABILITY>
<AI_BASE_SCORE score="600" zone="ZONE_IN_PLAY" />
<ACTIVATED_ABILITY filter_zone="ZONE_IN_PLAY">
<LOCALISED_TEXT LanguageCode="en-US"><![CDATA[{1}{G}: Treetop Village becomes a 3/3 green Ape creature with trample until end of turn. It’s still a land. |(If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)|]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="fr-FR"><![CDATA[{1}{G}: Treetop Village becomes a 3/3 green Ape creature with trample until end of turn. It’s still a land. |(If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)|]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="es-ES"><![CDATA[{1}{G}: Treetop Village becomes a 3/3 green Ape creature with trample until end of turn. It’s still a land. |(If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)|]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="de-DE"><![CDATA[{1}{G}: Treetop Village becomes a 3/3 green Ape creature with trample until end of turn. It’s still a land. |(If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)|]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="it-IT"><![CDATA[{1}{G}: Treetop Village becomes a 3/3 green Ape creature with trample until end of turn. It’s still a land. |(If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)|]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="jp-JA"><![CDATA[{1}{G}: Treetop Village becomes a 3/3 green Ape creature with trample until end of turn. It’s still a land. |(If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)|]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ko-KR"><![CDATA[{1}{G}: Treetop Village becomes a 3/3 green Ape creature with trample until end of turn. It’s still a land. |(If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)|]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="ru-RU"><![CDATA[{1}{G}: Treetop Village becomes a 3/3 green Ape creature with trample until end of turn. It’s still a land. |(If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)|]]></LOCALISED_TEXT>
<LOCALISED_TEXT LanguageCode="pt-BR"><![CDATA[{1}{G}: Treetop Village becomes a 3/3 green Ape creature with trample until end of turn. It’s still a land. |(If it would assign enough damage to its blockers to destroy them, you may have it assign the rest of its damage to defending player or planeswalker.)|]]></LOCALISED_TEXT>
<COST type="Mana" cost="{1}{G}" />
<CONTINUOUS_ACTION layer="4">
if Object() ~= nil then
Object():GetCurrentCharacteristics():CardType_GetWritable(Object()):Add( CARD_TYPE_CREATURE, Object() )
end
</CONTINUOUS_ACTION>
<CONTINUOUS_ACTION layer="4">
if Object() ~= nil then
local characteristics = Object():GetCurrentCharacteristics()
characteristics:SubType_GetWritable(Object()):Add( CREATURE_TYPE_APE , Object() )
end
</CONTINUOUS_ACTION>
<CONTINUOUS_ACTION layer="5">
if Object() ~= nil then
local characteristics = Object():GetCurrentCharacteristics()
characteristics:Colour_Get():Add( COLOUR_GREEN )
end
</CONTINUOUS_ACTION>
<CONTINUOUS_ACTION layer="7B">
if Object() ~= nil then
local characteristics = Object():GetCurrentCharacteristics()
characteristics:Power_Set( 3 )
characteristics:Toughness_Set( 3 )
end
</CONTINUOUS_ACTION>
<CONTINUOUS_ACTION layer="6">
if Object() ~= nil then
local characteristics = Object():GetCurrentCharacteristics()
characteristics:Characteristic_Set( CHARACTERISTIC_TRAMPLE, 1 )
end
</CONTINUOUS_ACTION>
<DURATION simple_duration="UntilEOT" />
<AI_AVAILABILITY type="in_response" />
<AI_AVAILABILITY step="main_1" turn="my_turn" />
<AI_AVAILABILITY step="main_2" turn="my_turn" />
<AI_AVAILABILITY step="begin_combat" turn="my_turn" />
<AI_AVAILABILITY step="declare_attackers" turn="their_turn" />
<AI_AVAILABILITY behaviour="MakeCreature" />
</ACTIVATED_ABILITY>
<TOKEN_REGISTRATION reservation="1" type="_TOKEN_G_624998" />
<HELP title="MORE_INFO_BADGE_TITLE_1" body="MORE_INFO_BADGE_BODY_1" zone="ZONE_ANY" />
<SFX text="COMBAT_BLUNT_LARGE_ATTACK" power_boundary_min="4" power_boundary_max="-1" />
<SFX text="COMBAT_BLUNT_SMALL_ATTACK" power_boundary_min="1" power_boundary_max="3" />
</CARD_V2>
Re: Help with restoration angel
by thefiremind » 27 Nov 2012, 09:38
I'll tell you what I know by looking at other cards.kpruss wrote:Do you guys know anything about the AI values they put on the cards?
First, some score is automatically added to the cards according to how much each "standard" ability (like flying, vigilance, etc.) is worth, and other things (you can find all the default scores in DATA_CORE\DATA_ALL_PLATFORMS\CONFIGS\DEFAULT_AI_SETTINGS.XML). That score adds to the AI_BASE_SCORE that we write on the card, and lets the AI take decisions about "trades" (is it good for me to block that creature with this one if both die?), about which card should be destroyed when there's the chance, and so on. This, of course, has a meaning if we talk about the score of a card in play. When you define an AI_BASE_SCORE for ZONE_HAND, you are basically giving a score to what happens when you play that card, in fact you can see that kind of score on instants and sorceries, but also on permanent cards that have enter-the-battlefield effects. I think this also influences decisions made by the AI when choosing what to discard with Duress or similar cards.
If you need to define a variable score, you can use AI_CUSTOM_SCORE (always defining the zone), make your math (for example you may want to raise the score of a card with threshold when you actually have threshold), and finally use Object():AddScore(...).
The -450 for Sakura-Tribe Elder has a meaning if it's for ZONE_IN_PLAY because it's a creature that you don't mind if it dies (you would always sacrifice it in response). Maybe -450 is a bit exaggerated, I would give -150. Try adding another score for ZONE_HAND and set it to 450.kpruss wrote:I found a sakura-tribe elder file, and it had AI value at like -450, which kinda threw me for a loop. The comp actually dislikes playing this card a lot, like it will always play nature's lore or rampant growth, which have zero ai value, (actually i think those cards don't even have that listed) but it would rather leave mana open to regenerate a troll 3 times than play this dude.
Your code for Treetop Village should be mostly OK. I'd just suggest some improvements:
- Use EffectSource() instead of Object() inside the CONTINUOUS_ACTIONs of the activated ability, otherwise if the land gets killed when it is a creature, it will keep the transformation inside the graveyard until the end of turn, which isn't pleasant to see. EffectSource() gets cleaned when the card changes zone, Object() doesn't (in fact it's pointless to check if Object() ~= nil because Object() is never nil, while EffectSource() can be).
- Make the layer of the first CONTINUOUS_ACTION equal to "3" instead of "4" (original cards use "3" for changing types and "4" for changing sub-types).
- Remove the TOKEN_REGISTRATION since you aren't using mana tokens here.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 722 times
Re: Help with restoration angel
by kpruss » 27 Nov 2012, 17:30
Thanks again for the tips!
Yeah, I definitely noticed the color change of the card when I manned it up but it wasn't too major, as it will turn back into a land and all the nonbasic lands sit on top together with your artifacts so it's not too bad for them all to be the same color.
Sakura-tribe elder only had one ai value, should I add another? Like I said, the computer dislikes playing the card, but would just lowering the zone in play value let him play it more?
Nature lore does not have a ai value at all listed, but gets played pretty aggressively.
Yeah, I definitely noticed the color change of the card when I manned it up but it wasn't too major, as it will turn back into a land and all the nonbasic lands sit on top together with your artifacts so it's not too bad for them all to be the same color.
Sakura-tribe elder only had one ai value, should I add another? Like I said, the computer dislikes playing the card, but would just lowering the zone in play value let him play it more?
Nature lore does not have a ai value at all listed, but gets played pretty aggressively.
Re: Help with restoration angel
by thefiremind » 27 Nov 2012, 17:51
I don't know, I guess that a low ZONE_IN_PLAY score (low meaning negative) without specifying a ZONE_HAND score makes the AI think that it's a useless card... try with a negative ZONE_IN_PLAY score and a positive ZONE_HAND score, and see what happens.kpruss wrote:Sakura-tribe elder only had one ai value, should I add another? Like I said, the computer dislikes playing the card, but would just lowering the zone in play value let him play it more?
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 722 times
Re: Help with restoration angel
by pcastellazzi » 27 Nov 2012, 22:25
Can you please try replacing the token test with EffectSource() ~= nil? I think it may work, and if it does it's a better representation of what we are trying to achieve.thefiremind wrote:and guess what? With this last idea I MADE IT!!! The advice from pcastellazzi wasn't working, but he made me think about the AI not liking a lost pointer, and so I had this idea: if Restoration Angel targets a token, do we really have to protect the pointer? A token disappears anyway when changing zone.
The lights then came up and the crowd erupted in applause, because that's what the crowd does after it watches destruction on a large screen.
— Ben Kuchera, Mordern Warfare 3 review.
— Ben Kuchera, Mordern Warfare 3 review.
-
pcastellazzi - Posts: 184
- Joined: 25 Apr 2012, 00:40
- Location: Montevideo, Uruguay
- Has thanked: 11 times
- Been thanked: 30 times
Re: Help with restoration angel
by thefiremind » 27 Nov 2012, 23:40
May I ask you what are we trying to achieve?pcastellazzi wrote:Can you please try replacing the token test with EffectSource() ~= nil? I think it may work, and if it does it's a better representation of what we are trying to achieve.


< Former DotP 2012/2013/2014 modder >
Currently busy with life...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 722 times
Re: Help with restoration angel
by pcastellazzi » 28 Nov 2012, 00:52
You work fast!thefiremind wrote:I'm sorry but I'd prefer leaving it as it is, mostly because I already applied the same fix to all the cards that needed it in my mod, plus some in the core-fixing WAD.

I dont think tokens are the only problem. If it's as i think, what's causing the crash is the pointer being invalidated, this happend when a card is removed from the game while being protected. ie: if you trigger an exile when a card is expected to be sent to the graveyard (Gruesome Encore comes to mind right now) you may face the same problem.
This is just a theory, i am not really sure if this will happend nor if the EffectSource() presence check i suggested before will actually fix it.
The lights then came up and the crowd erupted in applause, because that's what the crowd does after it watches destruction on a large screen.
— Ben Kuchera, Mordern Warfare 3 review.
— Ben Kuchera, Mordern Warfare 3 review.
-
pcastellazzi - Posts: 184
- Joined: 25 Apr 2012, 00:40
- Location: Montevideo, Uruguay
- Has thanked: 11 times
- Been thanked: 30 times
Re: Help with restoration angel
by thefiremind » 28 Nov 2012, 10:08
OK, now I understand. Well, if other crashes happen in the future, we'll still be in time for adding an EffectSource check. 
EDIT: Now that I think about it, the EffectSource check would be totally wrong: for example, if you kill Restoration Angel in response to its activation, EffectSource becomes nil because of the zone change, but the ability must resolve correctly anyway.

EDIT: Now that I think about it, the EffectSource check would be totally wrong: for example, if you kill Restoration Angel in response to its activation, EffectSource becomes nil because of the zone change, but the ability must resolve correctly anyway.
< Former DotP 2012/2013/2014 modder >
Currently busy with life...
Currently busy with life...
-
thefiremind - Programmer
- Posts: 3515
- Joined: 07 Nov 2011, 10:55
- Has thanked: 118 times
- Been thanked: 722 times
27 posts
• Page 2 of 2 • 1, 2
Who is online
Users browsing this forum: No registered users and 321 guests