|
|
#1 |
|
master of fugue
Join Date: Jun 2007
Posts: 2,558
![]() ![]() ![]() ![]()
|
Necrotic Rune:
__________________Hero that picks up this rune gains temporarily: Increased HP regen, Increased Armor, Spell immunity, Double damage. Hero avatar is also doubled in size. Play some nasty necro sound on pickup. |
|
|
|
| Sponsored Links - Login to hide this ad! |
|
|
|
|
#2 |
|
User
Join Date: Mar 2013
Posts: 49
|
Are you gonna be using some system like Bonus? If not, how many levels should the dummy spells have (regen/armour)?
|
|
|
|
|
|
#3 |
|
master of fugue
Join Date: Jun 2007
Posts: 2,558
![]() ![]() ![]() ![]()
|
The dummy abilities for this item will have 1 level.
__________________Try using the Dummy system in game, it is really easy, it just creates dummies for heroes. After creating the dummy you do the casting with standard functions like IssuePointOrder or IssueUnitOrder. Also note there is an OID library in game with all wc3 order ids. We will not use Bonus system, it is not needed. The hero leveling will be "shallow". That means that max level heroes will be only 2-3 times stronger than level 1 heroes. The mechanics of combat will have focus on using spells and item abilities, not on maxing the hero stats. This is both simpler to make and easier to balance. I have seen countless maps with "mega advanced systems" fail. In game the only thing that counts is fun, if you don't provide it no one gives a shit about how many cool libraries you have. Last edited by cohadar : 03-07-2013 at 07:13 PM. |
|
|
|
|
|
#4 |
|
User
Join Date: Mar 2013
Posts: 49
|
Pfft, I got carried away and thought this is a normal spell.
Then I'd like to know if picking another rune stacks or resets the timer. |
|
|
|
|
|
#5 | |
|
master of fugue
Join Date: Jun 2007
Posts: 2,558
![]() ![]() ![]() ![]()
|
Quote:
All effects of this spells should be based on one normal buff. You will add bonuses when unit gets the buff, and you will remove bonuses when the buff expires. You must apply magic immunity before the buff or it will be dispelled. Make sure dummy buff spell has level req > 1 so it can target magic immune units. (Any spell with level req > 1 is automatically treated as ultimate by wc3 engine) |
|
|
|
|
|
|
#6 |
|
User
Join Date: Mar 2013
Posts: 49
|
Your Dummy system conflicts with AutoIndex because you manually change UnitUserData.
Also, I can't seem to make the dummy unit cast spells on magic immune units when level requirement is > 1. I changed the unit's Level in Object Editor to 6 and it still can't cast it. Remind me of one spell that applies % damage bonus and is target cast (not instant like Roar). Last edited by HerrStanev : 03-10-2013 at 08:14 PM. |
|
|
|
|
|
#7 |
|
master of fugue
Join Date: Jun 2007
Posts: 2,558
![]() ![]() ![]() ![]()
|
Dummy system does not collide with Autoindex because it sets the user data right after dummy creation, and Autoindex ignores units that already have ID set.
__________________from Autoindex: JASS:
private static method unitEntersMap takes unit u returns nothing
local integer index
local integer n = 0
if getIndex(u) != 0 then
return //Don't index a unit that already has an ID.
endif
As for casting on magic immune, you also have to check both vulnerable and invulnerable in targets allowed. The spell you are looking for is Inner Fire. |
|
|
|
|
|
#8 | |
|
default string
|
Quote:
|
|
|
|
|
|
|
#9 | |
|
User
Join Date: Mar 2013
Posts: 49
|
Quote:
This is what I came up with. Based in on the previous trick of pausing/resuming the timer when needed (cool concept btw). The thing is, it requires 2 buffs - one from Inner Fire and another from Bloodlust because Bloodlust can alter unit scales. Since there is no GetUnitScale() I thought this was the way to go about it, otherwise large units like the Skeleton King might end up very tiny... Code can be found in "Items" folder: EDIT: I forgot to add sound play, I'll mark this for after your review. Zinc://! zinc library NecroticRune requires Dummy, OID { // Raw code of the Bloodlust-based ability that changes unit scale: constant integer AID_SCALE_BUFF_SPELL = 'A001'; // Buff provided by the Bloodlust-based ability: constant integer BID_SCALE_BUFF_SPELL = 'B000'; // Order ID of the spell: constant integer OID_SCALE_BUFF_SPELL = OID_bloodlust; // The Inner Fire-based ability that provides damage, // armour and life regeneration: constant integer AID_DAMAGE_BUFF_SPELL = 'A006'; // Buff provided by the spell: constant integer BID_DAMAGE_BUFF_SPELL = 'B001'; // Order ID of the spell: constant integer OID_DAMAGE_BUFF_SPELL = OID_innerfire; // Raw code of a Runed Bracers-based ability that provides spell immunity: public constant integer AID_RUNE_BONUS_IMMUNITY = 'A002'; // Raw code of the Necrotic Rune: public constant integer IID_NECROTIC_RUNE = 'I001'; public { constant real NecroticRune_TIMER_PERIOD = 1.; // The timer periodically checks buffed units so it can // remove Spell Immunity once unbuffed. timer NecroticRune_TIMER = CreateTimer(); // Counter of buffed units; used to determine when to pause/start the timer. integer NecroticRune_BUFFED_UNITS = 0; // The group tracks buffed units. group NecroticRune_GROUP = CreateGroup(); } // Buffs a unit with the Bloodlust & Inner Fire spells. public function NecroticRune_BuffUnit(unit whichUnit) { IssueTargetOrderById(Dummy_Create(whichUnit, AID_SCALE_BUFF_SPELL, 1), /* */ OID_SCALE_BUFF_SPELL, whichUnit); IssueTargetOrderById(Dummy_Create(whichUnit, AID_DAMAGE_BUFF_SPELL, 1), /* */ OID_DAMAGE_BUFF_SPELL, whichUnit); } public function NecroticRune_TimerCallback() { ForGroup(NecroticRune_GROUP, function() { unit enum = GetEnumUnit(); // Check both buffs, not either, if the map uses // Spell Steal in the future... if ( GetUnitAbilityLevel(enum, BID_SCALE_BUFF_SPELL) == 0 || /* */ GetUnitAbilityLevel(enum, BID_DAMAGE_BUFF_SPELL) == 0 ) { GroupRemoveUnit(NecroticRune_GROUP, enum); UnitRemoveAbility(enum, AID_RUNE_BONUS_IMMUNITY); // Pause the timer if no units currently have Necrotic Rune's buffs. NecroticRune_BUFFED_UNITS -= 1; if ( NecroticRune_BUFFED_UNITS == 0 ) PauseTimer(NecroticRune_TIMER); } enum = null; }); // End of ForGroup anonymous function } // End of TimerCallback function } //! endzinc Zinc://! zinc library NecroticRunePick requires NecroticRune, Trig { function Conditions() -> boolean { return ( GetItemTypeId(GetManipulatedItem()) == IID_NECROTIC_RUNE ); } function Actions() { unit picker = GetTriggerUnit(); // Resets the buffs' durations NecroticRune_BuffUnit(picker); // Did the unit already have these buffs? if ( !IsUnitInGroup(picker, NecroticRune_GROUP) ) { GroupAddUnit(NecroticRune_GROUP, picker); UnitAddAbility(picker, AID_RUNE_BONUS_IMMUNITY); // Start the timer if it were previously paused: NecroticRune_BUFFED_UNITS += 1; if ( NecroticRune_BUFFED_UNITS == 1 ) TimerStart(NecroticRune_TIMER, NecroticRune_TIMER_PERIOD, /* */ true, function NecroticRune_TimerCallback); } picker = null; } function onInit() { Trig_DropItem(function Conditions, function Actions); } } //! endzinc Last edited by HerrStanev : 03-10-2013 at 11:11 PM. |
|
|
|
|
|
|
#10 | ||
|
Procrastination Incarnate
Development Director
|
Quote:
Not that that's an issue since you can always make AutoIndex ignore dummy units. Quote:
Last edited by Anitarf : 03-10-2013 at 11:12 PM. |
||
|
|
|
|
|
#11 |
|
master of fugue
Join Date: Jun 2007
Posts: 2,558
![]() ![]() ![]() ![]()
|
Use channel ability for item spell.
__________________Use dummy casted bloodlust for buff. Add other stat modifications with triggers. |
|
|
|
![]() |
| Thread Tools | Search this Thread |
|
|
|
Donate |