• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Abillity on stats int Jass

Status
Not open for further replies.
Level 5
Joined
Jan 19, 2020
Messages
102
i got a code

// This is damage to target per level
// Default 1: 125
// Default 2: 260
// Default 3: 400
ELECTROLIX_ZAP_DAMAGE[01] = 125.;
ELECTROLIX_ZAP_DAMAGE[02] = 260.;
ELECTROLIX_ZAP_DAMAGE[03] = 400.;

i want add now int dmg like



// This is damage to target per level
// Default 1: 125+2*int
// Default 2: 260+2*int
// Default 3: 400+2*int
ELECTROLIX_ZAP_DAMAGE[01] = 125+2*int.;
ELECTROLIX_ZAP_DAMAGE[02] = 260+2*int.;
ELECTROLIX_ZAP_DAMAGE[03] = 400+2*int.;

how i do that?
 
Level 5
Joined
Jan 19, 2020
Messages
102
  1. //TESH.scrollpos=33
  2. //TESH.alwaysfold=0
  3. /*
  4. **********************************************************************************************************
  5. Installation:
  6. 1) Copy DD Library to your map
  7. 2) Copy ElectrolixZap abilities (hero and dummy versions) to your map
  8. 3) Export and Import 'thunder1.wav' sound from this map to yours
  9. 4) Export and Import 'Great Lightning.mdx' models from this map to yours
  10. 5) Copy this trigger to your map and modify it to your liking below
  11. 6) Made on Warcraft III v1.30
  12. **********************************************************************************************************
  13. */

  14. //! zinc
  15. library ElectrolixZap requires DDLib
  16. {

  17. // *******************************************************************************
  18. // * Ability Id found in object editor
  19. // Default: 'elfd'
  20. constant integer ABILITY_ELECTROLIX_ZAP = 'elfd';
  21. // * Sound file being played when spell is cast
  22. // Default: "Custom\\Ambient\\thunder1.wav"
  23. constant string SOUND_THUNDER = "Custom\\Ambient\\thunder1.wav";
  24. // Default: 100.
  25. constant real SOUND_THUNDER_VOL = 100.;
  26. // Default: 3500.
  27. constant real SOUND_MAX_DISTANCE = 3500.;
  28. // * Should camera shake when spell is cast
  29. constant boolean USE_CAMERA_NOISE = true;
  30. // Default: 2.5
  31. constant real CAMERA_NOISE_DURATION = 2.5;
  32. // * Should terrain deformation happen?
  33. constant boolean USE_TERRAIN_DEFORM = true;
  34. // Default: 200.
  35. constant real TERRAIN_DEFORM_DEPTH = 200.;
  36. // Default: 1.
  37. constant real TERRAIN_DEFORM_DURATION = 1.;
  38. // * Primary lightning strike effect created during initial spell cast
  39. // Default: "Lightning\\Great Lightning.mdl"
  40. constant string EFFECT_GREAT_LIGHTNING = "Lightning\\Great Lightning.mdx";
  41. constant real EFFECT_GREAT_LIGHTNING_SIZE = 1.2;
  42. constant real EFFECT_GREAT_LIGHTNING_ANIMATION_SPEED = 50.;
  43. // * Secondary lightning bolts created during initial spell cast
  44. // Default: "Doodads\\Cinematic\\Lightningbolt\\Lightningbolt.mdx"
  45. constant string EFFECT_LIGHTING_BOLT = "Doodads\\Cinematic\\Lightningbolt\\Lightningbolt.mdx";
  46. // Default: 1.
  47. constant real EFFECT_LIGHTING_BOLT_SIZE = 1.;
  48. // Default: 200.
  49. constant real EFFECT_LIGHTING_BOLT_ANIMATION_SPEED = 200.;
  50. // Default: 25
  51. constant integer NUMBER_OF_LIGHTINING_BOLTS = 25;
  52. // Default: 0.15 seconds
  53. constant real LIGHTNING_BOLT_STRIKE_INTERVAL = 0.15;
  54. // Default: "Doodads\\LordaeronSummer\\Props\\SmokeSmudge\\SmokeSmudge0.mdl"
  55. constant string EFFECT_LIGHTING_BOLT_SMOKE_MODEL_1 = "Doodads\\LordaeronSummer\\Props\\SmokeSmudge\\SmokeSmudge0.mdl";
  56. // Default: ""
  57. constant string EFFECT_LIGHTING_BOLT_SMOKE_MODEL_2 = "";//"Doodads\\LordaeronSummer\\Props\\SmokeSmudge\\SmokeSmudge1.mdl";
  58. // Default: ""
  59. constant string EFFECT_LIGHTING_BOLT_SMOKE_MODEL_3 = "";//"Doodads\\LordaeronSummer\\Props\\SmokeSmudge\\SmokeSmudge2.mdl";
  60. // Default: 1.2
  61. constant real EFFECT_LIGHTING_BOLT_SMOKE_MODEL_SIZE = 1.2;
  62. // Default: 20.
  63. constant real EFFECT_LIGHTING_BOLT_SMOKE_MODEL_Z_OFFSET = 20.;
  64. // Default: 15.
  65. constant real EFFECT_LIGHTING_BOLT_SMOKE_MODEL_DURATION = 15.;
  66. // * After initial primary and secondary bolts, wait for a while before damaging units
  67. constant real THUNDER_DAMAGE_DELAY = 0.6;
  68. // * Dealing damage and summon shield/lightning on targets
  69. // Default: "Abilities\\Spells\\Orc\\LightningShield\\LightningShieldTarget.mdx"
  70. constant string EFFECT_LIGHTNING_UNIT_ZAP = "Abilities\\Spells\\Orc\\LightningShield\\LightningShieldTarget.mdx";
  71. // * Load dummies and shock target with forked lightning, add thunder clap effect and purge
  72. // Default: 'efef'
  73. constant integer ABILITY_DUMMY_ELECTRIC_SHOCK = 'efef';
  74. // Default: 1000.
  75. constant real DUMMY_LIGHTNING_HEIGHT = 1000.;
  76. // Default: "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdx"
  77. constant string EFFECT_DUMMY_ELECTRIC_SHOCK = "Abilities\\Spells\\Human\\Thunderclap\\ThunderClapCaster.mdx";
  78. // Deafault: 'Apg2'
  79. constant integer ABILITY_DUMMY_PURGE = 'Apg2';
  80. // * Upon unit dying change its color and animation speed
  81. constant integer COLOR_LIGHTNING_BURN_RED = 00;
  82. constant integer COLOR_LIGHTNING_BURN_GREEN = 00;
  83. constant integer COLOR_LIGHTNING_BURN_BLUE = 00;
  84. constant real COLOR_LIGHTNING_BURN_FADE_DURATION = 5.;
  85. constant real LIGHTNING_BURN_ANIMATION_SPEED = .75;
  86. // * When unit gets burned, he gets 'ELECTRIFY_SFX' effect on him
  87. constant integer ELECTRIFY_COUNT = 4;
  88. constant real ELECTRIFY_INTERVAL = .66;
  89. constant string ELECTRIFY_SFX = "Abilities\\Weapons\\Bolt\\BoltImpact.mdx";
  90. // ==============================================================================================================================================
  91. // * Level data
  92. function InitElectrolixZapLevelData() {
  93. // * This is AOE (Area of Effect)/(radius) per level
  94. // Default 1: 610
  95. // Default 2: 660
  96. // Default 3: 705
  97. ELECTROLIX_ZAP_AOE[01] = 610.;
  98. ELECTROLIX_ZAP_AOE[02] = 660.;
  99. ELECTROLIX_ZAP_AOE[03] = 705.;
  100. // This is damage to target per level
  101. // Default 1: 125+2*int
  102. // Default 2: 260+2*int
  103. // Default 3: 400+2*int
  104. ELECTROLIX_ZAP_DAMAGE[01] = 125.;
  105. ELECTROLIX_ZAP_DAMAGE[02] = 260.;
  106. ELECTROLIX_ZAP_DAMAGE[03] = 750.;
  107. // This is the max damage spell can deal to all units
  108. // Default 1: 1000
  109. // Default 2: 2100
  110. // Default 3: 3250
  111. ELECTROLIX_ZAP_MAX_DAMAGE[01] = 1000.;
  112. ELECTROLIX_ZAP_MAX_DAMAGE[02] = 2100.;
  113. ELECTROLIX_ZAP_MAX_DAMAGE[03] = 3250.;
  114. }
  115. //***********************************************************************
  116. // Main Unit Group Filter
  117. function ElecutixZapGroupFilter(unit f, player caster) -> boolean {
  118. return !IsUnitType(f, UNIT_TYPE_DEAD) &&
  119. !IsUnitType(f, UNIT_TYPE_STRUCTURE) &&
  120. !IsUnitType(f, UNIT_TYPE_MAGIC_IMMUNE) &&
  121. !IsUnitType(f, UNIT_TYPE_MECHANICAL) &&
  122. IsUnitEnemy(f, caster) &&
  123. IsUnitVisible(f, caster) &&
  124. !DDIsUnitWard(f) &&
  125. !BlzIsUnitInvulnerable(f);
  126. }
  127. // *******************************************************************************
  128. // * Spell other variables (non-modifiable)
  129. // *******************************************************************************
  130. type smokecluster extends effect[NUMBER_OF_LIGHTINING_BOLTS];
  131. effect LastLigBolt = null;
  132. real ELECTROLIX_ZAP_AOE[];
  133. real ELECTROLIX_ZAP_DAMAGE[];
  134. real ELECTROLIX_ZAP_MAX_DAMAGE[];
  135. smokecluster pSmokeGroup[];
  136. struct ezdata {
  137. unit u;
  138. real aoe;
  139. player owner;
  140. real x, y;
  141. real mxDmg, dmg;
  142. effect e[64];
  143. integer i=00;
  144. group g, dg;
  145. static thistype Temp = p_null;
  146. }
  147. struct dmgdelay {
  148. unit u, f;
  149. real dmg;
  150. integer n;
  151. }
  152. struct unitfade {
  153. unit u;
  154. real r, g, b;
  155. real vr, vg, vb;
  156. boolean burn=false;
  157. static unitfade pUF[];
  158. }
  159. function RawDamage2Damage(unit u, real dmg) -> real {
  160. if (IsUnitType(u, UNIT_TYPE_HERO)) {
  161. if (UnitHasItemOfTypeBJ(u, 'brac'))
  162. return dmg*.5;
  163. return dmg*.75;
  164. }
  165. return dmg;
  166. }
  167. //===========================================================================
  168. // Main init electric field function
  169. function onInit() {
  170. //--------------------->
  171. //* Load init locals
  172. //<--------------------
  173. trigger t = CreateTrigger();
  174. // *** Initialize constants
  175. InitElectrolixZapLevelData();
  176. // ###############################################################
  177. TriggerRegisterAnyUnitEventBJ(t, EVENT_PLAYER_UNIT_SPELL_EFFECT);
  178. TriggerAddCondition(t, Condition(function() -> boolean {
  179. real x = GetSpellTargetX(), y = GetSpellTargetY();
  180. unit u = GetTriggerUnit();
  181. integer lvl = GetUnitAbilityLevel(u, GetSpellAbilityId());
  182. integer i;
  183. sound s;
  184. real d;
  185. p_real pr;
  186. effect e;
  187. ezdata ezd;
  188. if (GetSpellAbilityId() != ABILITY_ELECTROLIX_ZAP)
  189. return false;

  190. // Play sound and shake camera for players within spell cast range
  191. DDGenericSound(SOUND_THUNDER, SOUND_THUNDER_VOL, x, y, SOUND_MAX_DISTANCE, 1.);
  192. static if (USE_CAMERA_NOISE)
  193. DDCameraSetSourceNoiseForPlayers(x, y, 70., 1750., SOUND_MAX_DISTANCE, CAMERA_NOISE_DURATION);
  194. /*
  195. for (i=00; i < bj_MAX_PLAYERS; i+=01) {
  196. if (GetLocalPlayer() == Player(i)) {
  197. d = SquareRoot( Pw_2(GetCameraTargetPositionX()-x) + Pw_2(GetCameraTargetPositionY()-y) );
  198. if (d < SOUND_MAX_DISTANCE) {
  199. s = CreateSound(SOUND_THUNDER, false, false, false, 10, 10, "");
  200. SetSoundVolume(s, R2I(SOUND_THUNDER_VOL-d*(SOUND_THUNDER_VOL/SOUND_MAX_DISTANCE)));
  201. StartSound(s);
  202. KillSoundWhenDone(s);
  203. s = null;
  204. static if (USE_CAMERA_NOISE)
  205. CameraSetSourceNoise(70.-(d*(70./SOUND_MAX_DISTANCE)), 1750.-(d*(1750./SOUND_MAX_DISTANCE)));
  206. }
  207. }
  208. }
  209. static if (USE_CAMERA_NOISE)
  210. DDStartTim(CAMERA_NOISE_DURATION, false, p_null, function() {
  211. CameraSetSourceNoise(0., 0.);
  212. });
  213. */
  214. // * Terrain deformation crater action
  215. static if (USE_TERRAIN_DEFORM)
  216. TerrainDeformCrater(x, y, ELECTROLIX_ZAP_AOE[lvl], TERRAIN_DEFORM_DEPTH, R2I(TERRAIN_DEFORM_DURATION*1000.), false);
  217. // * Load main big thunder effect
  218. e = AddSpecialEffect(EFFECT_GREAT_LIGHTNING, x, y);
  219. BlzSetSpecialEffectScale(e, EFFECT_GREAT_LIGHTNING_SIZE);
  220. BlzSetSpecialEffectTimeScale(e, EFFECT_GREAT_LIGHTNING_ANIMATION_SPEED/100.);
  221. DestroyEffect(e); e = null;
  222. // * Load extra lightning effects
  223. if (NUMBER_OF_LIGHTINING_BOLTS > 00) {
  224. pr = p_real.create();
  225. pr[00] = Pow(ELECTROLIX_ZAP_AOE[lvl], 1.3333);//*ELECTROLIX_ZAP_AOE[lvl];
  226. pr[01] = x; pr[02] = y;
  227. pSmokeGroup[pr] = smokecluster.create();
  228. DDStartTim(EFFECT_LIGHTING_BOLT_SMOKE_MODEL_DURATION, false, pSmokeGroup[pr], function() {
  229. smokecluster sc = DDTimData();
  230. integer i;
  231. for(i=00; i < NUMBER_OF_LIGHTINING_BOLTS; i+=01) {
  232. DestroyEffect(sc); sc = null;
  233. }
  234. sc.destroy();
  235. DDQuitTim();
  236. });
  237. DDStartTim(LIGHTNING_BOLT_STRIKE_INTERVAL, true, pr, function() {
  238. p_real pr = DDTimData();
  239. real r = Pow( GetRandomReal(50., pr[00]), .75 );
  240. real rad = GetRandomReal(0., bj_PI*2.);
  241. effect smoke;
  242. integer smoke_rnd_n = 00;
  243. real x, y;
  244. DestroyEffect(LastLigBolt);
  245. if (DDTimTick() == NUMBER_OF_LIGHTINING_BOLTS) {
  246. LastLigBolt = null;
  247. pr.destroy();
  248. DDQuitTim();
  249. return;
  250. }
  251. if (EFFECT_LIGHTING_BOLT_SMOKE_MODEL_2 != "")
  252. smoke_rnd_n += 01;
  253. if (EFFECT_LIGHTING_BOLT_SMOKE_MODEL_3 != "")
  254. smoke_rnd_n += 01;
  255. smoke_rnd_n = GetRandomInt(00, smoke_rnd_n);
  256. x = pr[01] + r * Cos(rad); y = pr[02] + r * Sin(rad);
  257. LastLigBolt = AddSpecialEffect(EFFECT_LIGHTING_BOLT, x, y);
  258. BlzSetSpecialEffectScale(LastLigBolt, EFFECT_LIGHTING_BOLT_SIZE);
  259. BlzSetSpecialEffectTimeScale(LastLigBolt, EFFECT_LIGHTING_BOLT_ANIMATION_SPEED/100.);
  260. if (smoke_rnd_n == 00)
  261. smoke = AddSpecialEffect(EFFECT_LIGHTING_BOLT_SMOKE_MODEL_1, x, y);
  262. else if (smoke_rnd_n == 01)
  263. smoke = AddSpecialEffect(EFFECT_LIGHTING_BOLT_SMOKE_MODEL_2, x, y);
  264. else
  265. smoke = AddSpecialEffect(EFFECT_LIGHTING_BOLT_SMOKE_MODEL_3, x, y);
  266. BlzSetSpecialEffectScale(smoke, EFFECT_LIGHTING_BOLT_SMOKE_MODEL_SIZE);
  267. BlzSetSpecialEffectZ(smoke, DDTerrZ(x, y) + EFFECT_LIGHTING_BOLT_SMOKE_MODEL_Z_OFFSET);
  268. pSmokeGroup[pr][00] = smoke;
  269. pSmokeGroup[pr] += smokecluster(01);
  270. });
  271. }
  272. ezd = ezdata.create();
  273. ezd.u = u;
  274. ezd.aoe = ELECTROLIX_ZAP_AOE[lvl];
  275. ezd.owner = GetOwningPlayer(u);
  276. ezd.x = x; ezd.y = y;
  277. ezd.dmg = ELECTROLIX_ZAP_DAMAGE[lvl];
  278. ezd.mxDmg = ELECTROLIX_ZAP_MAX_DAMAGE[lvl];
  279. DDStartTim(THUNDER_DAMAGE_DELAY, false, ezd, function() {
  280. ezdata.Temp = DDTimData();
  281. ezdata.Temp.g = DDLoadGroup();
  282. GroupEnumUnitsInRange(ezdata.Temp.g, ezdata.Temp.x, ezdata.Temp.y, ezdata.Temp.aoe, Filter(function() -> boolean {
  283. ezdata ezd = ezdata.Temp;
  284. if ( ElecutixZapGroupFilter(GetFilterUnit(), ezd.owner) ) {
  285. // * Do pre-damage so taht creeps dont run away from invulnerable dummy units
  286. if (GetPlayerController(GetOwningPlayer(GetFilterUnit())) == MAP_CONTROL_CREEP)
  287. IssuePointOrder(GetFilterUnit(), "attack", GetUnitX(ezd.u), GetUnitY(ezd.u));
  288. ezd.e[ezd.i] = AddSpecialEffectTarget(EFFECT_LIGHTNING_UNIT_ZAP, GetFilterUnit(), "origin");
  289. ezd.i += 01;
  290. }
  291. return true;
  292. }));
  293. ezdata.Temp.dg = DDLoadGroup();
  294. DDStartTim(THUNDER_DAMAGE_DELAY, false, ezdata.Temp, function() {
  295. ezdata ezd = DDTimData();
  296. ezdata.Temp = ezd;
  297. ezd.dmg = RMinBJ(ezd.mxDmg/ezd.i, ezd.dmg);
  298. ForGroup(ezd.g, function() {
  299. ezdata ezd = ezdata.Temp;
  300. unit u = GetEnumUnit();
  301. real x = GetUnitX(u), y = GetUnitY(u);
  302. real rad = GetRandomReal(0., bj_PI*2);
  303. real dist = GetRandomReal(225., 375.);
  304. unit d = DDLoadSpellDummy(ezd.owner, x + dist * Cos(rad), y + dist * Sin(rad), ABILITY_DUMMY_ELECTRIC_SHOCK, 01);
  305. real dmg;
  306. dmgdelay dd;
  307. ezd.i -= 01;
  308. DestroyEffect(ezd.e[ezd.i]);
  309. ezd.e[ezd.i] = null;
  310. if (IsUnitEnemy(u, ezd.owner) && !IsUnitType(u, UNIT_TYPE_DEAD)) {
  311. SetUnitFlyHeight(d, DUMMY_LIGHTNING_HEIGHT, 0.);
  312. IssueTargetOrder(d, "chainlightning", u);
  313. DestroyEffect(AddSpecialEffectTarget(EFFECT_DUMMY_ELECTRIC_SHOCK, u, "origin"));
  314. }
  315. // * if unit dies, then dummy cant cast spell on that unit
  316. GroupAddUnit(ezd.dg, d);
  317. dmg = RawDamage2Damage(u, ezd.dmg);
  318. dd = dmgdelay.create();
  319. dd.u = ezd.u; dd.f = u;
  320. dd.dmg = dmg;
  321. dd.n = ELECTRIFY_COUNT;
  322. DDStartTim(.2, false, dd, function() {
  323. dmgdelay dd = DDTimData();
  324. unitfade uf;
  325. if (IsUnitEnemy(dd.f, GetOwningPlayer(dd.u)) && !IsUnitType(dd.f, UNIT_TYPE_DEAD)) {
  326. UnitDamageTarget(dd.u, dd.f, dd.dmg, true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_UNKNOWN, null);
  327. SetUnitVertexColor(dd.f, COLOR_LIGHTNING_BURN_RED, COLOR_LIGHTNING_BURN_GREEN, COLOR_LIGHTNING_BURN_BLUE, 255);
  328. SetUnitTimeScale(dd.f, LIGHTNING_BURN_ANIMATION_SPEED);
  329. DDStartTim(ELECTRIFY_INTERVAL, true, dd, function() {
  330. dmgdelay dd = DDTimData();
  331. DestroyEffect(AddSpecialEffectTarget(ELECTRIFY_SFX, dd.f, "origin"));
  332. dd.n -= 01;
  333. if (dd.n == 00) {
  334. dd.destroy();
  335. DDQuitTim();
  336. }
  337. });
  338. if (!IsUnitType(dd.f, UNIT_TYPE_DEAD)) {
  339. uf = unitfade.pUF[H2ID(dd.f)];
  340. if (uf == p_null) {
  341. uf = unitfade.create();
  342. uf.u = dd.f;
  343. unitfade.pUF[H2ID(dd.f)] = uf;
  344. DDStartTim(DD_INTERVAL, true, uf, function() {
  345. unitfade uf = DDTimData();
  346. uf.r += uf.vr;
  347. uf.g += uf.vg;
  348. uf.b += uf.vb;
  349. SetUnitVertexColor(uf.u, R2I(255.*Pw_2(uf.r)), R2I(255.*Pw_2(uf.g)), R2I(255.*Pw_2(uf.b)), 255);
  350. if (uf.r > 1. || uf.burn) {
  351. if (uf.burn)
  352. SetUnitVertexColor(uf.u, COLOR_LIGHTNING_BURN_RED, COLOR_LIGHTNING_BURN_GREEN, COLOR_LIGHTNING_BURN_BLUE, 255);
  353. else
  354. SetUnitTimeScale(uf.u, 1.);
  355. unitfade.pUF[H2ID(uf.u)] = p_null;
  356. uf.u = null;
  357. uf.destroy();
  358. DDQuitTim();
  359. }
  360. });
  361. }
  362. uf.r = COLOR_LIGHTNING_BURN_RED / 255.;
  363. uf.g = COLOR_LIGHTNING_BURN_GREEN / 255.;
  364. uf.b = COLOR_LIGHTNING_BURN_BLUE / 255.;
  365. uf.vr = DD_INTERVAL * (1.-uf.r) / COLOR_LIGHTNING_BURN_FADE_DURATION;
  366. uf.vg = DD_INTERVAL * (1.-uf.g) / COLOR_LIGHTNING_BURN_FADE_DURATION;
  367. uf.vb = DD_INTERVAL * (1.-uf.b) / COLOR_LIGHTNING_BURN_FADE_DURATION;
  368. } else if (IsUnitType(dd.f, UNIT_TYPE_HERO)) {
  369. SetUnitVertexColor(dd.f, 255, 255, 255, 255);
  370. } else if (unitfade.pUF[H2ID(dd.f)] != p_null)
  371. unitfade.pUF[H2ID(dd.f)].burn = true;
  372. } else
  373. dd.destroy();
  374. DDQuitTim();
  375. });
  376. d = null;
  377. u = null;
  378. });
  379. DDStartTim(.3, true, ezd, function() {
  380. ezdata.Temp = DDTimData();
  381. // First run, wait for 1 x .3 secs
  382. if (DDTimTick() == 01) {
  383. ForGroup(ezdata.Temp.dg, function() {
  384. unit e = GetEnumUnit(), t = FirstOfGroup(ezdata.Temp.g);
  385. UnitRemoveAbility(e, ABILITY_DUMMY_ELECTRIC_SHOCK);
  386. UnitAddAbility(e, ABILITY_DUMMY_PURGE);
  387. SetUnitX(e, GetUnitX(t)); SetUnitY(e, GetUnitY(t));
  388. IssueTargetOrder(e, "purge", t);
  389. GroupRemoveUnit(ezdata.Temp.g, t);
  390. e = null; t = null;
  391. });
  392. return;
  393. }
  394. // Second run, wait for 2 x .3 secs
  395. ForGroup(ezdata.Temp.dg, function() {
  396. UnitRemoveAbility(GetEnumUnit(), ABILITY_DUMMY_PURGE);
  397. DDRecycleDummy(GetEnumUnit());
  398. });
  399. DDRecycleGroup(ezdata.Temp.g);
  400. DDRecycleGroup(ezdata.Temp.dg);
  401. ezdata.Temp.destroy();
  402. DDQuitTim();
  403. });
  404. DDQuitTim();
  405. });
  406. DDQuitTim();
  407. });
  408. return false;
  409. }));
  410. t = null;
  411. }
  412. }
  413. //! endzinc
 
Last edited:

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,538
Look for this line:
vJASS:
UnitDamageTarget(dd.u, dd.f, dd.dmg, true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_UNKNOWN, null);
And change it to this:
vJASS:
UnitDamageTarget(dd.u, dd.f, dd.dmg + (2*GetHeroInt(dd.u, true)), true, false, ATTACK_TYPE_HERO, DAMAGE_TYPE_UNKNOWN, null);


Note:
The true in the line of code below determines whether or not Stat Bonuses are applied (like the bonus Intelligence from a Mantle of Intelligence). true = Use Bonuses, false = No Bonuses.
vJASS:
(2*GetHeroInt(dd.u, true))
 
Status
Not open for further replies.
Top