Advertisement
Guest User

Error [mod0000_mergedfiles]game\gameplay\items\spells\axiien

a guest
Mar 31st, 2020
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 73.72 KB | None | 0 0
  1. /***********************************************************************/
  2. /** © 2015 CD PROJEKT S.A. All rights reserved.
  3. /** THE WITCHER® is a trademark of CD PROJEKT S. A.
  4. /** The Witcher game is based on the prose of Andrzej Sapkowski.
  5. /***********************************************************************/
  6. struct SAxiiEffects
  7. {
  8. editable var castEffect : name;
  9. editable var throwEffect : name;
  10. }
  11.  
  12. statemachine class W3AxiiEntity extends W3SignEntity
  13. {
  14. editable var effects : array< SAxiiEffects >;
  15. editable var projTemplate : CEntityTemplate;
  16. editable var distance : float;
  17. editable var projSpeed : float;
  18.  
  19. default skillEnum = S_Magic_5;
  20.  
  21. protected var targets : array<CActor>;
  22. protected var orientationTarget : CActor;
  23.  
  24. //addTomes
  25. private var collisionGroups : array<name>;
  26. editable var meteorResourceName : name;
  27. private var meteorEntityTemplate : CEntityTemplate;
  28. var elactors : array<CActor>;
  29. var elnbr : float;
  30. var spadtomes : SAbilityAttributeValue;
  31. var firepois,test : CEntity;
  32. //addTomes
  33.  
  34. public function GetSignType() : ESignType
  35. {
  36. return ST_Axii;
  37. }
  38.  
  39. function Init( inOwner : W3SignOwner, prevInstance : W3SignEntity, optional skipCastingAnimation : bool, optional notPlayerCast : bool ) : bool
  40. {
  41. var ownerActor : CActor;
  42. var prevSign : W3SignEntity;
  43.  
  44. ownerActor = inOwner.GetActor();
  45.  
  46. //addTomes
  47. if( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome') )
  48. { theSound.SoundLoadBank( "qu_nml_108.bnk", false ); }
  49. if( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('neverwinter_tome') )
  50. { theSound.SoundLoadBank( "ep2_mutations_06.bnk", false ); }
  51. //addTomes
  52.  
  53. if( (CPlayer)ownerActor )
  54. {
  55. prevSign = GetWitcherPlayer().GetSignEntity(ST_Axii);
  56. if(prevSign)
  57. prevSign.OnSignAborted(true);
  58. }
  59.  
  60. ownerActor.SetBehaviorVariable( 'bStopSign', 0.f );
  61. if ( inOwner.CanUseSkill(S_Magic_s17) && inOwner.GetSkillLevel(S_Magic_s17) > 1)
  62. ownerActor.SetBehaviorVariable( 'bSignUpgrade', 1.f );
  63. else
  64. ownerActor.SetBehaviorVariable( 'bSignUpgrade', 0.f );
  65.  
  66. return super.Init( inOwner, prevInstance, skipCastingAnimation );
  67. }
  68.  
  69. event OnProcessSignEvent( eventName : name )
  70. {
  71. if ( eventName == 'axii_ready' )
  72. {
  73.  
  74. //addTomes
  75. if((GetWitcherPlayer().GetInventory().GetItemId( 'fireyrden_tome' ) == GetWitcherPlayer().GetSelectedItemId()
  76. && GetWitcherPlayer().IsItemEquippedByName( 'fireyrden_tome' ))
  77. && !IsAlternateCast())
  78. {
  79. test = theGame.CreateEntity( (CEntityTemplate) LoadResource( "dlc\adtomes\poisonyrden\pc_axii.w2ent",true ), GetWorldPosition(), GetWorldRotation() );
  80. test.CreateAttachment( GetWitcherPlayer(),'l_weapon');
  81. test.PlayEffect( 'axii_ready' );
  82. test.PlayEffect( 'axii_ready2' );
  83. test.StopAllEffectsAfter(0.7);
  84. test.DestroyAfter(3);
  85. }
  86. else if((GetWitcherPlayer().GetInventory().GetItemId( 'permafrost_tome' ) == GetWitcherPlayer().GetSelectedItemId()
  87. && GetWitcherPlayer().IsItemEquippedByName( 'permafrost_tome' ))
  88. && !IsAlternateCast())
  89. {
  90. test = theGame.CreateEntity( (CEntityTemplate) LoadResource( "dlc\adtomes\poisonyrden\pc_axii.w2ent",true ), GetWorldPosition(), GetWorldRotation() );
  91. test.CreateAttachment( GetWitcherPlayer(),'l_weapon');
  92. test.PlayEffect( 'axii_ready_blue' );
  93. test.PlayEffect( 'axii_ready2_blue' );
  94. test.StopAllEffectsAfter(0.7);
  95. test.DestroyAfter(3);
  96. }
  97. else if((GetWitcherPlayer().GetInventory().GetItemId( 'poisonyrden_tome' ) == GetWitcherPlayer().GetSelectedItemId()
  98. && GetWitcherPlayer().IsItemEquippedByName( 'poisonyrden_tome' ))
  99. && !IsAlternateCast())
  100. {
  101. test = theGame.CreateEntity( (CEntityTemplate) LoadResource( "dlc\adtomes\poisonyrden\pc_axii.w2ent",true ), GetWorldPosition(), GetWorldRotation() );
  102. test.CreateAttachment( GetWitcherPlayer(),'l_weapon');
  103. test.PlayEffect( 'axii_ready_green' );
  104. test.PlayEffect( 'axii_ready2_green' );
  105. test.StopAllEffectsAfter(0.7);
  106. test.DestroyAfter(3);
  107. }
  108. else if( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('gwin_tome')
  109. && IsAlternateCast() )
  110. {
  111. test = theGame.CreateEntity( (CEntityTemplate) LoadResource( "dlc\adtomes\poisonyrden\pc_axii.w2ent",true ), GetWorldPosition(), GetWorldRotation() );
  112. test.CreateAttachment( GetWitcherPlayer(),'l_weapon');
  113. test.PlayEffect( 'axii_ready_bolt' );
  114. test.PlayEffect( 'axii_ready2_bolt' );
  115. test.StopAllEffectsAfter(0.7);
  116. test.DestroyAfter(3);
  117. } else
  118. if( (!GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' ) ||
  119. (GetWitcherPlayer().GetInventory().GetItemId( 'elaxii_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' )))
  120. && (!GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' ) ||
  121. (GetWitcherPlayer().GetInventory().GetItemId( 'teleport_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' )))
  122. && (!GetWitcherPlayer().IsItemEquippedByName( 'ghost_tome' ) ||
  123. (GetWitcherPlayer().GetInventory().GetItemId( 'ghost_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'ghost_tome' )))
  124. && (!GetWitcherPlayer().IsItemEquippedByName( 'witch_tome' ) ||
  125. (GetWitcherPlayer().GetInventory().GetItemId( 'witch_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'witch_tome' )))
  126. && (!GetWitcherPlayer().IsItemEquippedByName( 'black_tome' ) ||
  127. (GetWitcherPlayer().GetInventory().GetItemId( 'black_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'black_tome' )))
  128. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome')
  129. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome')
  130. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('iceblast_tome')
  131. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('vampire_tome')
  132. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('fire2_tome')
  133. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('neverwinter_tome')
  134. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome')
  135. )
  136. //addTomes
  137. PlayEffect( effects[fireMode].throwEffect );
  138. }
  139. else if ( eventName == 'horse_cast_begin' )
  140. {
  141. OnHorseStarted();
  142. }
  143. else
  144. {
  145. return super.OnProcessSignEvent( eventName );
  146. }
  147.  
  148. return true;
  149. }
  150.  
  151. event OnStarted()
  152. {
  153. var player : CR4Player;
  154. var i : int;
  155.  
  156. //#tomes
  157. var axiiSP : SAbilityAttributeValue;
  158. var witchfireDuration : float;
  159. var params : SCustomEffectParams;
  160. //#tomes
  161.  
  162. SelectTargets();
  163.  
  164. for(i=0; i<targets.Size(); i+=1)
  165. {
  166. AddMagic17Effect(targets[i]);
  167. }
  168.  
  169. Attach(true);
  170.  
  171. player = (CR4Player)owner.GetActor();
  172. if(player)
  173. {
  174. GetWitcherPlayer().FailFundamentalsFirstAchievementCondition();
  175. player.AddTimer('ResetPadBacklightColorTimer', 2);
  176. }
  177.  
  178. //addTomes
  179. if(GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' ) &&
  180. GetWitcherPlayer().GetInventory().GetItemId( 'elaxii_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  181. { thePlayer.PlayEffect('free_cast');
  182. thePlayer.PlayEffect('free_cast');
  183. thePlayer.PlayEffect('free_cast');
  184. thePlayer.PlayEffect('free_cast'); thePlayer.StopEffect('free_cast');}
  185. for(i=0; i<targets.Size(); i+=1)
  186. {
  187. targ = (CNewNPC)targets[i];
  188. }
  189. if( (!GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' ) ||
  190. (GetWitcherPlayer().GetInventory().GetItemId( 'elaxii_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' )))
  191. && (!GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' ) ||
  192. (GetWitcherPlayer().GetInventory().GetItemId( 'teleport_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' )))
  193. && (!GetWitcherPlayer().IsItemEquippedByName( 'permafrost_tome' ) ||
  194. (GetWitcherPlayer().GetInventory().GetItemId( 'permafrost_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'permafrost_tome' )))
  195. && (!GetWitcherPlayer().IsItemEquippedByName( 'ghost_tome' ) ||
  196. (GetWitcherPlayer().GetInventory().GetItemId( 'ghost_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'ghost_tome' )))
  197. && (!GetWitcherPlayer().IsItemEquippedByName( 'witch_tome' ) ||
  198. (GetWitcherPlayer().GetInventory().GetItemId( 'witch_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'witch_tome' )))
  199. && (!GetWitcherPlayer().IsItemEquippedByName( 'black_tome' ) ||
  200. (GetWitcherPlayer().GetInventory().GetItemId( 'black_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'black_tome' )))
  201. && (!GetWitcherPlayer().IsItemEquippedByName( 'fireyrden_tome' ) ||
  202. (GetWitcherPlayer().GetInventory().GetItemId( 'fireyrden_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'fireyrden_tome' )))
  203. && (!GetWitcherPlayer().IsItemEquippedByName( 'poisonyrden_tome' ) ||
  204. (GetWitcherPlayer().GetInventory().GetItemId( 'poisonyrden_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'poisonyrden_tome' )))
  205. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome')
  206. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome')
  207. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('iceblast_tome')
  208. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('vampire_tome')
  209. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('fire2_tome')
  210. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('neverwinter_tome')
  211. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome')
  212. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('gwin_tome')
  213. )
  214. {
  215. //addTomes
  216.  
  217. PlayEffect( effects[fireMode].castEffect );
  218.  
  219. //addTomes
  220. }
  221. //addTomes
  222.  
  223. {
  224. axiiSP = GetWitcherPlayer().GetTotalSignSpellPower(S_Magic_5);
  225. witchfireDuration = 30 * axiiSP.valueMultiplicative;
  226.  
  227. owner.GetActor().RemoveBuff(EET_Inferno);
  228. owner.GetActor().RemoveBuff(EET_Vortex);
  229. owner.GetActor().RemoveBuff(EET_Rimefrost);
  230.  
  231. owner.GetActor().PlayEffect('mutation_1_igni_power');
  232. owner.GetActor().AddTimer('Runeword1DisableFireFX', 3);
  233. owner.GetActor().PlayEffect('critical_burning');
  234.  
  235. params.effectType = EET_Witchfire;
  236. params.creator = owner.GetActor();
  237. params.duration = witchfireDuration;
  238. owner.GetActor().AddEffectCustom(params);
  239.  
  240. if( !GetWitcherPlayer().HasBuff(EET_GryphonSetBonus) )
  241. {
  242. if( GetWitcherPlayer().CanUseSkill(S_Perk_09) && GetWitcherPlayer().GetStat(BCS_Focus) >= 1 && GetWitcherPlayer().GetStat(BCS_Stamina, true) < 100 )
  243. {
  244. GetWitcherPlayer().DrainFocus(1);
  245. }
  246. else
  247. {
  248. GetWitcherPlayer().DrainStamina( ESAT_FixedValue, 100, 0.5 );
  249.  
  250. if( GetWitcherPlayer().IsSetBonusActive( EISB_Gryphon_1 ) )
  251. GetWitcherPlayer().AddEffectDefault( EET_GryphonSetBonus, NULL, "gryphonSetBonus" );
  252. }
  253. }
  254. else
  255. {
  256. GetWitcherPlayer().RemoveBuff( EET_GryphonSetBonus, false, "gryphonSetBonus" );
  257. }
  258. }
  259. else
  260. {
  261. GetWitcherPlayer().SoundEvent("gui_no_stamina");
  262. }
  263. }
  264. else if ( owner.IsPlayer() && GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('scorch_tome') && !owner.ChangeAspect( this, S_Magic_s05 ) )
  265. {
  266. GotoState( 'AxiiCast' );
  267. }
  268. //if ( owner.ChangeAspect( this, S_Magic_s05 ) )
  269. else if ( owner.ChangeAspect( this, S_Magic_s05 ) )
  270. //#tomes
  271. {
  272. CacheActionBuffsFromSkill();
  273.  
  274. //addTomes
  275. if( (GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome')
  276. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome')
  277. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('iceblast_tome')
  278. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('fire2_tome')
  279. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('neverwinter_tome')
  280. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome')
  281. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('gwin_tome')
  282. || ( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('vampire_tome')
  283. && VecDistance(GetWitcherPlayer().GetWorldPosition(),targ.GetWorldPosition())<=4))
  284. && IsAlternateCast())
  285. {
  286. GotoState( 'AxiiCast' );
  287. }
  288. else
  289. //addTomes
  290.  
  291. GotoState( 'AxiiChanneled' );
  292. }
  293. else
  294. {
  295. GotoState( 'AxiiCast' );
  296. }
  297. }
  298.  
  299.  
  300. //addTomes
  301. event OnSpawned( spawnData : SEntitySpawnData )
  302. {
  303. if( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome') )
  304. {
  305. meteorResourceName = 'ciri_meteor';
  306. }
  307. else if( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome') )
  308. {
  309. meteorResourceName = 'eredin_meteorite';
  310. }
  311. super.OnSpawned(spawnData);
  312. meteorEntityTemplate = (CEntityTemplate)LoadResource(meteorResourceName);
  313.  
  314. collisionGroups.PushBack('Terrain');
  315. collisionGroups.PushBack('Static');
  316. }
  317. //addTomes
  318.  
  319. function OnHorseStarted()
  320. {
  321. Attach(true);
  322. PlayEffect( effects[fireMode].castEffect );
  323. }
  324.  
  325.  
  326. private final function IsTargetValid(actor : CActor, isAdditionalTarget : bool) : bool
  327. {
  328. var npc : CNewNPC;
  329. var horse : W3HorseComponent;
  330. var attitude : EAIAttitude;
  331.  
  332. if(!actor)
  333. return false;
  334.  
  335. if(!actor.IsAlive())
  336. return false;
  337.  
  338.  
  339. attitude = GetAttitudeBetween(owner.GetActor(), actor);
  340.  
  341.  
  342. if(isAdditionalTarget && attitude != AIA_Hostile)
  343. return false;
  344.  
  345. npc = (CNewNPC)actor;
  346.  
  347.  
  348. if(attitude == AIA_Friendly)
  349. {
  350.  
  351. if(npc.GetNPCType() == ENGT_Quest && !actor.HasTag(theGame.params.TAG_AXIIABLE_LOWER_CASE) && !actor.HasTag(theGame.params.TAG_AXIIABLE))
  352. return false;
  353. }
  354.  
  355.  
  356. if(npc)
  357. {
  358. horse = npc.GetHorseComponent();
  359. if(horse && !horse.IsDismounted())
  360. {
  361. if(horse.GetCurrentUser() != owner.GetActor())
  362. return false;
  363. }
  364. }
  365.  
  366. return true;
  367. }
  368.  
  369. private function SelectTargets()
  370. {
  371. var projCount, i, j : int;
  372. var actors, finalActors : array<CActor>;
  373. var ownerPos : Vector;
  374. var ownerActor : CActor;
  375. var actor : CActor;
  376.  
  377. if(owner.CanUseSkill(S_Magic_s19))
  378. projCount = 2;
  379. else
  380. projCount = 1;
  381.  
  382. targets.Clear();
  383. actor = (CActor)thePlayer.slideTarget;
  384.  
  385. if(actor && IsTargetValid(actor, false))
  386. {
  387. targets.PushBack(actor);
  388. projCount -= 1;
  389.  
  390. if(projCount == 0)
  391. return;
  392. }
  393.  
  394. ownerActor = owner.GetActor();
  395. ownerPos = ownerActor.GetWorldPosition();
  396.  
  397.  
  398. actors = ownerActor.GetNPCsAndPlayersInCone(15, VecHeading(ownerActor.GetHeadingVector()), 120, 20, , FLAG_OnlyAliveActors + FLAG_TestLineOfSight);
  399.  
  400.  
  401. for(i=actors.Size()-1; i>=0; i-=1)
  402. {
  403.  
  404. if(ownerActor == actors[i] || actor == actors[i] || !IsTargetValid(actors[i], true))
  405. actors.Erase(i);
  406. }
  407.  
  408.  
  409. if(actors.Size() > 0)
  410. finalActors.PushBack(actors[0]);
  411.  
  412. for(i=1; i<actors.Size(); i+=1)
  413. {
  414. for(j=0; j<finalActors.Size(); j+=1)
  415. {
  416. if(VecDistance(ownerPos, actors[i].GetWorldPosition()) < VecDistance(ownerPos, finalActors[j].GetWorldPosition()))
  417. {
  418. finalActors.Insert(j, actors[i]);
  419. break;
  420. }
  421. }
  422.  
  423.  
  424. if(j == finalActors.Size())
  425. finalActors.PushBack(actors[i]);
  426. }
  427.  
  428.  
  429. if(finalActors.Size() > 0)
  430. {
  431. for(i=0; i<projCount; i+=1)
  432. {
  433. if(finalActors[i])
  434. targets.PushBack(finalActors[i]);
  435. else
  436. break;
  437. }
  438. }
  439. }
  440.  
  441. protected function ProcessThrow()
  442. {
  443. var proj : W3AxiiProjectile;
  444. var i : int;
  445. var spawnPos : Vector;
  446. var spawnRot : EulerAngles;
  447.  
  448. //addTomes
  449. var entityTemplate : CEntityTemplate;
  450. var fireball : W3FireballProjectile;
  451. var iceball,bolt : W3IceSpearProjectile;
  452. var poisonball : PoisonProjectile;
  453. var firetrail : W3TraceGroundProjectile;
  454. var icetrail : W3TraceGroundProjectile;
  455. var root : W3WitchBoilingWaterObstacle;
  456. var victimtoroot : array<CActor>;
  457. var rootarg : CNewNPC;
  458. var rooteff : SCustomEffectParams;
  459. var r : int;
  460. var rootw : W3DamageAction;
  461. var rootdmg :float;
  462. //addTomes
  463.  
  464. spawnPos = GetWorldPosition();
  465. spawnRot = GetWorldRotation();
  466.  
  467. StopEffect( effects[fireMode].castEffect );
  468. PlayEffect('axii_sign_push');
  469.  
  470. for(i=0; i<targets.Size(); i+=1)
  471. {
  472. //addTomes
  473. if( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('gwin_tome')
  474. && IsAlternateCast())
  475. {
  476. entityTemplate = (CEntityTemplate)LoadResource( "dlc\adtomes\poisonyrden\soceress_arcane_missile.w2ent",true );
  477. bolt = (W3IceSpearProjectile)theGame.CreateEntity( entityTemplate, spawnPos, spawnRot );
  478. if(targets[i].GetComponent('torso3effect'))
  479. bolt.ShootProjectileAtNode(0, projSpeed, targets[i].GetComponent('torso3effect'));
  480. else
  481. bolt.ShootProjectileAtNode(0, projSpeed, targets[i]);
  482. bolt.PlayEffect( bolt.initFxName );
  483. bolt.PlayEffect( 'fire_fx2' );bolt.PlayEffect( 'fire_fx2' );
  484. FactsAdd("bolt_lightning");
  485. thePlayer.SoundEvent("sign_yrden_shock_activate");
  486. }
  487. else if((GetWitcherPlayer().GetInventory().GetItemId( 'fireyrden_tome' ) == GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'fireyrden_tome' ))
  488. && !IsAlternateCast())
  489. {
  490. entityTemplate = (CEntityTemplate)LoadResource( 'sorceress_fireball' );
  491. fireball = (W3FireballProjectile)theGame.CreateEntity( entityTemplate, spawnPos, spawnRot );
  492. if(targets[i].GetComponent('torso3effect'))
  493. fireball.ShootProjectileAtNode(0, projSpeed, targets[i].GetComponent('torso3effect'));
  494. else
  495. fireball.ShootProjectileAtNode(0, projSpeed, targets[i]);
  496. fireball.PlayEffect( fireball.initFxName );
  497. FactsAdd("fireball");
  498. }
  499. else if((GetWitcherPlayer().GetInventory().GetItemId( 'permafrost_tome' ) == GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'permafrost_tome' ))
  500. && !IsAlternateCast())
  501. {
  502. entityTemplate = (CEntityTemplate)LoadResource( 'ice_spear' );
  503. iceball = (W3IceSpearProjectile)theGame.CreateEntity( entityTemplate, spawnPos, spawnRot );
  504. if(targets[i].GetComponent('torso3effect'))
  505. iceball.ShootProjectileAtNode(0, projSpeed, targets[i].GetComponent('torso3effect'));
  506. else
  507. iceball.ShootProjectileAtNode(0, projSpeed, targets[i]);
  508. iceball.PlayEffect( iceball.initFxName );
  509. FactsAdd("iceball");
  510. }
  511. else if((GetWitcherPlayer().GetInventory().GetItemId( 'poisonyrden_tome' ) == GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'poisonyrden_tome' ))
  512. && !IsAlternateCast())
  513. {
  514. entityTemplate = (CEntityTemplate)LoadResource( 'scolopendromorph_venom' );
  515. poisonball = (PoisonProjectile)theGame.CreateEntity( entityTemplate, spawnPos, spawnRot );
  516. poisonball.Init(NULL);
  517. if(targets[i].GetComponent('torso3effect'))
  518. poisonball.ShootProjectileAtNode(0, projSpeed, targets[i].GetComponent('torso3effect'));
  519. else
  520. poisonball.ShootProjectileAtNode(0, projSpeed, targets[i]);
  521. poisonball.PlayEffect( poisonball.initFxName );
  522. FactsAdd("poisonball");
  523. }
  524. else if((GetWitcherPlayer().GetInventory().GetItemId( 'fgolem_tome' ) == GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'fgolem_tome' ))
  525. && !IsAlternateCast())
  526. {
  527. entityTemplate = (CEntityTemplate)LoadResource( 'ifryt_proj' );
  528. firetrail = (W3TraceGroundProjectile)theGame.CreateEntity( entityTemplate, spawnPos, spawnRot );
  529. firetrail.Init(NULL);
  530. if(targets[i].GetComponent('torso3effect'))
  531. firetrail.ShootProjectileAtNode(0, projSpeed, targets[i].GetComponent('torso3effect'));
  532. else
  533. firetrail.ShootProjectileAtNode(0, projSpeed, targets[i]);
  534. FactsAdd("firetrail");
  535. }
  536. else if((GetWitcherPlayer().GetInventory().GetItemId( 'igolem_tome' ) == GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'igolem_tome' ))
  537. && !IsAlternateCast())
  538. {
  539. entityTemplate = (CEntityTemplate)LoadResource( 'ice_golem_proj' );
  540. icetrail = (W3TraceGroundProjectile)theGame.CreateEntity( entityTemplate, spawnPos, spawnRot );
  541. icetrail.Init(NULL);
  542. if(targets[i].GetComponent('torso3effect'))
  543. icetrail.ShootProjectileAtNode(0, projSpeed, targets[i].GetComponent('torso3effect'));
  544. else
  545. icetrail.ShootProjectileAtNode(0, projSpeed, targets[i]);
  546. FactsAdd("icetrail");
  547. }
  548. else if((GetWitcherPlayer().GetInventory().GetItemId( 'necro_tome' ) == GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'necro_tome' ))
  549. && !IsAlternateCast())
  550. {
  551. entityTemplate = (CEntityTemplate)LoadResource( 'dao_proj' );
  552. icetrail = (W3TraceGroundProjectile)theGame.CreateEntity( entityTemplate, spawnPos, spawnRot );
  553. icetrail.Init(NULL);
  554. if(targets[i].GetComponent('torso3effect'))
  555. icetrail.ShootProjectileAtNode(0, projSpeed, targets[i].GetComponent('torso3effect'));
  556. else
  557. icetrail.ShootProjectileAtNode(0, projSpeed, targets[i]);
  558. FactsAdd("stonetrail");
  559. }
  560. else if((GetWitcherPlayer().GetInventory().GetItemId( 'witch_tome' ) == GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'witch_tome' ))
  561. && !IsAlternateCast())
  562. {
  563. entityTemplate = (CEntityTemplate)LoadResource("dlc\adtomes\poisonyrden\root.w2ent",true);
  564. root = (W3WitchBoilingWaterObstacle)theGame.CreateEntity( entityTemplate, TraceFloor(targets[i].GetWorldPosition()), targets[i].GetWorldRotation() );
  565. thePlayer.PlayEffectSingle('runeword_10_stamina');
  566. victimtoroot = targets[i].GetNPCsAndPlayersInRange(3, 20, ,FLAG_ExcludePlayer + FLAG_OnlyAliveActors);
  567.  
  568. for( r = 0; r < victimtoroot.Size(); r += 1 )
  569. {
  570. rootarg = (CNewNPC)victimtoroot[r];
  571. rootw = new W3DamageAction in this;
  572. rootw.Initialize(thePlayer,rootarg,this,thePlayer.GetName()+"_sign",EHRT_Heavy,CPS_Undefined,false, false, true, false );
  573. spadtomes = thePlayer.GetTotalSignSpellPower(skillEnum);
  574. //rootdmg = (spadtomes.valueMultiplicative-1)*0.5*thePlayer.GetLevel()*19;
  575. //rootdmg *= RandRangeF(1.1, 0.8);
  576. rootdmg = thePlayer.GetLevel()*19;
  577. rootdmg += rootdmg*((spadtomes.valueMultiplicative-1)*0.4);
  578. if( !rootarg.IsHuman() && !rootarg.IsAnimal() )
  579. { rootdmg *= 1.6; }
  580. rootw.AddDamage( theGame.params.DAMAGE_NAME_ELEMENTAL, rootdmg );
  581. rootw.AddEffectInfo( EET_LongStagger );
  582. rootw.AddEffectInfo( EET_Bleeding, 2*spadtomes.valueMultiplicative );
  583. rootw.SetHitAnimationPlayType(EAHA_ForceYes);
  584. rootw.SetProcessBuffsIfNoDamage(true);
  585. rootw.SetForceExplosionDismemberment();
  586. theGame.damageMgr.ProcessAction( rootw );
  587. delete rootw;
  588. //theGame.witcherLog.AddMessage("rootdmg: " + rootdmg);
  589. //theGame.witcherLog.AddMessage("2*spadtomes.valueMultiplicative: " + 2*spadtomes.valueMultiplicative);
  590. }
  591. }
  592. else
  593. if( (!GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' ) ||
  594. (GetWitcherPlayer().GetInventory().GetItemId( 'elaxii_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' )))
  595. && (!GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' ) ||
  596. (GetWitcherPlayer().GetInventory().GetItemId( 'teleport_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' )))
  597. && (!GetWitcherPlayer().IsItemEquippedByName( 'black_tome' ) ||
  598. (GetWitcherPlayer().GetInventory().GetItemId( 'black_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'black_tome' )))
  599. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome')
  600. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome')
  601. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('iceblast_tome')
  602. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('vampire_tome')
  603. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('fire2_tome')
  604. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('neverwinter_tome')
  605. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome')
  606. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('gwin_tome')
  607. )
  608. {
  609. //addTomes
  610.  
  611. proj = (W3AxiiProjectile)theGame.CreateEntity( projTemplate, spawnPos, spawnRot );
  612. proj.PreloadEffect( proj.projData.flyEffect );
  613. proj.ExtInit( owner, skillEnum, this );
  614. proj.PlayEffect(proj.projData.flyEffect );
  615. proj.ShootProjectileAtNode(0, projSpeed, targets[i]);
  616.  
  617. //addTomes
  618. }
  619. //addTomes
  620. }
  621. }
  622.  
  623. event OnEnded(optional isEnd : bool)
  624. {
  625. var buff : EEffectInteract;
  626. var conf : W3ConfuseEffect;
  627. var i : int;
  628. var duration, durationAnimal : SAbilityAttributeValue;
  629. var casterActor : CActor;
  630. var dur, durAnimals : float;
  631. var params, staggerParams : SCustomEffectParams;
  632. var npcTarget : CNewNPC;
  633. var jobTreeType : EJobTreeType;
  634.  
  635. //addTomes
  636. var meteorPosition : Vector;
  637. var targetPosition, heading : Vector;
  638. var targetRotation : EulerAngles;
  639. var meteorEntity : W3MeteorProjectile;
  640. var g : int;
  641. var nbr: float;
  642. var plus : int;
  643.  
  644. var blastemplate : CEntityTemplate;
  645. var randYaw : float;
  646. var blastentity : CEntity;
  647. var blast : W3EredinIceSpike;
  648. var spikesent: CEntity;
  649. var spikestemplate : CEntityTemplate;
  650. var fxEntity,redsmoke : CEntity;
  651. var knockdur: float;
  652. var eldmg : W3DamageAction;
  653. var elecdmg : float;
  654. var entityToCreate : CEntityTemplate;
  655. var portal : W3OnSpawnPortal;
  656. var vampslowCustomEffect,assassin_curseCustomEffect : SCustomEffectParams;
  657. var vampdmg : float;
  658. var vamp : W3DamageAction;
  659. var bloodExplode : CEntityTemplate;
  660. var bloodEntity : CEntity;var factors : array<CActor>;
  661. var victimtofire : array<CActor>;
  662. var minimeteor : W3DracolizardFireball;
  663. var metportpos : Vector;
  664. var metportrot : EulerAngles;
  665. var newPos : Vector;
  666. var boneRotation : EulerAngles; var effecttest: CEntity;
  667. var bonePosition : Vector; var npcTarget2 : CNewNPC; var ftarget : CNewNPC;
  668. //addTomes
  669.  
  670. casterActor = owner.GetActor();
  671. ProcessThrow();
  672. StopEffect(effects[fireMode].throwEffect);
  673.  
  674. for(i=0; i<targets.Size(); i+=1)
  675. {
  676. RemoveMagic17Effect(targets[i]);
  677. }
  678.  
  679.  
  680. RemoveMagic17Effect(orientationTarget);
  681.  
  682. if(IsAlternateCast())
  683. {
  684. thePlayer.LockToTarget( false );
  685. thePlayer.EnableManualCameraControl( true, 'AxiiEntity' );
  686. }
  687.  
  688. if (targets.Size() > 0 )
  689. {
  690.  
  691. duration = thePlayer.GetSkillAttributeValue(skillEnum, 'duration', false, true);
  692. durationAnimal = thePlayer.GetSkillAttributeValue(skillEnum, 'duration_animals', false, true);
  693.  
  694. duration.valueMultiplicative = 1.0f;
  695. durationAnimal.valueMultiplicative = 1.0f;
  696.  
  697. if(owner.CanUseSkill(S_Magic_s19))
  698. {
  699. duration -= owner.GetSkillAttributeValue(S_Magic_s19, 'duration', false, true) * (3 - owner.GetSkillLevel(S_Magic_s19));
  700. durationAnimal -= owner.GetSkillAttributeValue(S_Magic_s19, 'duration', false, true) * (3 - owner.GetSkillLevel(S_Magic_s19));
  701. }
  702.  
  703.  
  704. dur = CalculateAttributeValue(duration);
  705. durAnimals = CalculateAttributeValue(durationAnimal);
  706.  
  707. params.creator = casterActor;
  708. params.sourceName = "axii_" + skillEnum;
  709. params.customPowerStatValue = casterActor.GetTotalSignSpellPower(skillEnum);
  710. params.isSignEffect = true;
  711.  
  712. for(i=0; i<targets.Size(); i+=1)
  713. {
  714. npcTarget = (CNewNPC)targets[i];
  715.  
  716. //addTomes
  717. if (GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' ) &&
  718. GetWitcherPlayer().GetInventory().GetItemId( 'teleport_tome' ) == GetWitcherPlayer().GetSelectedItemId() && !IsAlternateCast() )
  719. {
  720. targetPosition = npcTarget.GetWorldPosition();
  721. targetRotation=npcTarget.GetWorldRotation();
  722. heading = casterActor.GetHeadingVector();
  723. randYaw = RandRangeF( 180.0, -180.0 );
  724. targetRotation.Yaw = randYaw;
  725. entityToCreate = (CEntityTemplate)LoadResource( "portal_04" );
  726.  
  727. //if(!IsAlternateCast())
  728. if(VecDistance(casterActor.GetWorldPosition(),npcTarget.GetWorldPosition())<=5)
  729. {
  730. if(!theGame.GetWorld().NavigationFindSafeSpot( TraceFloor(targetPosition + heading * 10), 1, 1, newPos ))
  731. {theGame.GetGuiManager().ShowNotification( GetLocStringByKeyExt( "menu_cannot_perform_action_here" ),, true );}
  732. else
  733. {
  734. portal = (W3OnSpawnPortal)theGame.CreateEntity( entityToCreate, targetPosition, targetRotation );
  735. portal.DestroyAfter( 0.5 );
  736. npcTarget.TeleportWithRotation(TraceFloor(targetPosition + heading * 10), targetRotation);
  737. portal = (W3OnSpawnPortal)theGame.CreateEntity( entityToCreate, targetPosition + heading * 10, targetRotation );
  738. portal.DestroyAfter( 1 );
  739. }
  740. }
  741. /*else if(IsAlternateCast() && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome')
  742. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome')
  743. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('iceblast_tome')
  744. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('vampire_tome'))*/
  745. else if(VecDistance(casterActor.GetWorldPosition(),npcTarget.GetWorldPosition())>5)
  746. {
  747. if(!theGame.GetWorld().NavigationFindSafeSpot( GetWorldPosition() + heading*0.2, -1, 1, newPos ))
  748. {theGame.GetGuiManager().ShowNotification( GetLocStringByKeyExt( "menu_cannot_perform_action_here" ),, true );}
  749. else
  750. {
  751. portal = (W3OnSpawnPortal)theGame.CreateEntity( entityToCreate, targetPosition, targetRotation );
  752. portal.DestroyAfter( 0.5 );
  753. npcTarget.TeleportWithRotation(GetWorldPosition() + heading*0.2, targetRotation);
  754. portal = (W3OnSpawnPortal)theGame.CreateEntity( entityToCreate, GetWorldPosition() + heading, targetRotation );
  755. portal.DestroyAfter( 0.5 );
  756. }
  757. }
  758. }
  759. if (GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' ) &&
  760. GetWitcherPlayer().GetInventory().GetItemId( 'elaxii_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  761. {
  762. spadtomes = casterActor.GetTotalSignSpellPower(skillEnum);
  763. thePlayer.SoundEvent("sign_yrden_shock_activate");
  764. //elecdmg = thePlayer.GetLevel()*32;
  765. //elecdmg += elecdmg*((spadtomes.valueMultiplicative-1)*0.4);
  766. //if( !npcTarget.IsHuman() && !npcTarget.IsAnimal() )
  767. // { elecdmg *= 1.6; }
  768. if(!IsAlternateCast())
  769. {
  770. entityToCreate = (CEntityTemplate)LoadResource("dlc\adtomes\poisonyrden\energy.w2ent",true);
  771. newPos= GetWorldPosition();
  772. newPos -= casterActor.GetHeadingVector()*0.45;
  773. newPos.Z -= 0.3;
  774. fxEntity = theGame.CreateEntity( entityToCreate, newPos, GetWorldRotation() );
  775. fxEntity.CreateAttachmentAtBoneWS( casterActor, 'l_weapon', newPos, GetWorldRotation() );
  776. if(npcTarget.GetComponent('torso3effect'))
  777. fxEntity.PlayEffect('yrden_shock_activate', npcTarget.GetComponent('torso3effect'));
  778. else
  779. fxEntity.PlayEffect('yrden_shock_activate',npcTarget);
  780. //theGame.witcherLog.AddMessage("chance: " + (spadtomes.valueMultiplicative-1)*0.2);
  781. if( RandF() >= (spadtomes.valueMultiplicative-1)*0.2)
  782. {
  783. effecttest = npcTarget.CreateFXEntityAtPelvis( 'energy_shock', true );
  784. effecttest.PlayEffectSingle('collision_fx2');
  785. effecttest.StopAllEffects();
  786. effecttest.DestroyAfter(1);
  787. //elecdmg *= RandRangeF(1.2, 0.9);
  788. eldmg = new W3DamageAction in this;
  789. elecdmg = thePlayer.GetLevel()*22;
  790. elecdmg += elecdmg*((spadtomes.valueMultiplicative-1)*0.4);
  791. if( !npcTarget.IsHuman() && !npcTarget.IsAnimal() )
  792. { elecdmg *= 1.6; }
  793. eldmg.Initialize(casterActor,npcTarget,this,casterActor.GetName()+"_sign",EHRT_Heavy,CPS_Undefined,false, false, true, false );
  794. eldmg.SetHitAnimationPlayType(EAHA_ForceYes);
  795. eldmg.SetForceExplosionDismemberment();
  796. eldmg.AddDamage( theGame.params.DAMAGE_NAME_DIRECT, elecdmg );
  797. theGame.damageMgr.ProcessAction( eldmg );
  798. if(npcTarget.GetCurrentHealth()<elecdmg*0.5)
  799. {
  800. npcTarget.PlayEffect('hit_electric');
  801. }
  802. delete eldmg;
  803. }
  804. else{
  805. elactors = casterActor.GetNPCsAndPlayersInRange(20, 20, ,FLAG_ExcludePlayer + FLAG_OnlyAliveActors+FLAG_Attitude_Hostile);
  806. for (i=0; i<elactors.Size(); i+=1)
  807. {
  808. npcTarget = (CNewNPC)elactors[i-1];
  809. bonePosition = npcTarget.GetWorldPosition();
  810. boneRotation = npcTarget.GetWorldRotation();
  811. bonePosition.Z += 1;
  812. npcTarget2 = (CNewNPC)elactors[i];
  813. fxEntity = theGame.CreateEntity( entityToCreate,bonePosition,boneRotation );
  814. if(npcTarget2.GetComponent('torso3effect'))
  815. fxEntity.PlayEffect('yrden_shock_activate', npcTarget2.GetComponent('torso3effect'));
  816. else
  817. fxEntity.PlayEffect('yrden_shock_activate',npcTarget2);
  818. effecttest = npcTarget.CreateFXEntityAtPelvis( 'energy_shock', true );
  819. effecttest.PlayEffectSingle('collision_fx2');
  820. effecttest.StopAllEffects();
  821. effecttest.DestroyAfter(1);
  822. //elecdmg *= RandRangeF(1.2, 0.9);
  823. eldmg = new W3DamageAction in this;
  824. eldmg.Initialize(casterActor,elactors[i],this,casterActor.GetName()+"_sign",EHRT_Heavy,CPS_Undefined,false, false, true, false );
  825. eldmg.SetHitAnimationPlayType(EAHA_ForceYes);
  826. eldmg.SetForceExplosionDismemberment();
  827. elecdmg = thePlayer.GetLevel()*22;
  828. elecdmg += elecdmg*((spadtomes.valueMultiplicative-1)*0.4);
  829. if( !npcTarget.IsHuman() && !npcTarget.IsAnimal() )
  830. { elecdmg *= 1.6; }
  831. eldmg.AddDamage( theGame.params.DAMAGE_NAME_DIRECT, elecdmg );
  832. theGame.damageMgr.ProcessAction( eldmg );
  833. if(elactors[i].GetCurrentHealth()<elecdmg*0.5)
  834. {
  835. elactors[i].PlayEffect('hit_electric');
  836. }
  837. //theGame.witcherLog.AddMessage("elecdmg: " + elecdmg);
  838. delete eldmg;
  839. }}
  840. }
  841. else if(IsAlternateCast() && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome')
  842. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome')
  843. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('iceblast_tome')
  844. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('vampire_tome')
  845. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('fire2_tome')
  846. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('neverwinter_tome')
  847. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome')
  848. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('gwin_tome')
  849. )
  850. {
  851. entityToCreate = (CEntityTemplate)LoadResource("dlc\adtomes\poisonyrden\energy.w2ent",true);
  852. newPos= GetWorldPosition();
  853. newPos -= casterActor.GetHeadingVector()*0.45;
  854. newPos.Z -= 0.3;
  855. fxEntity = theGame.CreateEntity( entityToCreate, newPos, GetWorldRotation() );
  856. fxEntity.CreateAttachmentAtBoneWS( casterActor, 'l_weapon', newPos, GetWorldRotation() );
  857. if(npcTarget.GetComponent('torso3effect')){
  858. fxEntity.PlayEffect('yrden_shock_activate', npcTarget.GetComponent('torso3effect'));
  859. fxEntity.PlayEffect('yrden_shock_activate', npcTarget.GetComponent('torso3effect'));
  860. fxEntity.PlayEffect('yrden_shock_activate', npcTarget.GetComponent('torso3effect'));}
  861. else{
  862. fxEntity.PlayEffect('yrden_shock_activate',npcTarget);
  863. fxEntity.PlayEffect('yrden_shock_activate',npcTarget);
  864. fxEntity.PlayEffect('yrden_shock_activate',npcTarget);}
  865. elecdmg = thePlayer.GetLevel()*22;
  866. elecdmg += elecdmg*((spadtomes.valueMultiplicative-1)*0.4);
  867. if( !npcTarget.IsHuman() && !npcTarget.IsAnimal() )
  868. { elecdmg *= 1.6; }
  869. elecdmg *= 1.633;
  870. elactors = casterActor.GetNPCsAndPlayersInRange(20, 20, ,FLAG_ExcludePlayer + FLAG_OnlyAliveActors+FLAG_Attitude_Hostile);
  871. for (i=0; i<elactors.Size(); i+=1)
  872. {
  873. npcTarget = (CNewNPC)elactors[i-1];
  874. bonePosition = npcTarget.GetWorldPosition();
  875. boneRotation = npcTarget.GetWorldRotation();
  876. bonePosition.Z += 1;
  877. npcTarget2 = (CNewNPC)elactors[i];
  878. fxEntity = theGame.CreateEntity( entityToCreate,bonePosition,boneRotation );
  879. if(npcTarget2.GetComponent('torso3effect'))
  880. fxEntity.PlayEffect('yrden_shock_activate', npcTarget2.GetComponent('torso3effect'));
  881. else
  882. fxEntity.PlayEffect('yrden_shock_activate',npcTarget2);
  883. //elecdmg *= RandRangeF(1.2, 0.9);
  884. eldmg = new W3DamageAction in this;
  885. eldmg.Initialize(casterActor,elactors[i],this,casterActor.GetName()+"_sign",EHRT_Heavy,CPS_Undefined,false, false, true, false );
  886. eldmg.SetHitAnimationPlayType(EAHA_ForceYes);
  887. eldmg.SetForceExplosionDismemberment();
  888. eldmg.AddDamage( theGame.params.DAMAGE_NAME_DIRECT, elecdmg );
  889. theGame.damageMgr.ProcessAction( eldmg );
  890. effecttest = npcTarget.CreateFXEntityAtPelvis( 'energy_shock', true );
  891. effecttest.PlayEffectSingle('collision_fx2');
  892. effecttest.StopAllEffects();
  893. effecttest.DestroyAfter(1);
  894. params.effectType = EET_LongStagger;
  895. if(elactors[i].GetCurrentHealth()<elecdmg*0.5)
  896. {
  897. elactors[i].PlayEffect('hit_electric');
  898. }
  899. //theGame.witcherLog.AddMessage("elecdmg: " + elecdmg);
  900. delete eldmg;
  901. }
  902. GetWitcherPlayer().DrainStamina( ESAT_FixedValue, 100 );
  903. }thePlayer.StopEffect('free_cast');
  904. }
  905. if (GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('iceblast_tome') && IsAlternateCast())
  906. {
  907. blastemplate = (CEntityTemplate)LoadResource( 'eredin_ice_spike' );
  908. targetPosition = npcTarget.GetWorldPosition();
  909. targetPosition.Z+=2;
  910. randYaw = RandRangeF( 180.0, -180.0 );
  911. targetRotation.Yaw = randYaw;
  912. blastentity = theGame.CreateEntity( blastemplate, targetPosition, targetRotation );
  913. blast = (W3EredinIceSpike)blastentity;
  914. blast.Appear();
  915.  
  916. spikestemplate = (CEntityTemplate)LoadResource( 'ice_spikes_large' );
  917. targetRotation=npcTarget.GetWorldRotation();
  918. spikesent = theGame.CreateEntity( spikestemplate, TraceFloor(targetPosition), targetRotation );
  919. FactsAdd("iceblast",,7);
  920. }
  921. if ( (GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome') ||
  922. GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome')) && IsAlternateCast())
  923. {
  924. if ( npcTarget.IsInInterior() )
  925. {
  926. theGame.GetGuiManager().ShowNotification( GetLocStringByKeyExt( "menu_cannot_perform_action_here" ),, true );
  927. }
  928. else
  929. {
  930. FactsAdd("meteor",,7);
  931. spadtomes = casterActor.GetTotalSignSpellPower(skillEnum);
  932. nbr = ClampF(MaxF(1,(RoundMath((spadtomes.valueMultiplicative-1)*100)/50)),1,6);
  933. for (g=0;g<nbr;g+=1)
  934. {
  935. plus = RandRange(0,100);
  936. targetRotation = npcTarget.GetWorldRotation();
  937.  
  938. if (g==0)
  939. {
  940. targetPosition = npcTarget.GetWorldPosition();
  941. }
  942. else if (g!=0)
  943. {
  944. targetPosition = npcTarget.GetWorldPosition();
  945. if(plus>50)
  946. {
  947. targetPosition.X += RandRange(5);
  948. targetPosition.Y += RandRange(5);
  949. }
  950. else if(plus<50)
  951. {
  952. targetPosition.X -= 1;
  953. targetPosition.Y -= 1;
  954. }
  955. }
  956.  
  957. meteorPosition = targetPosition;
  958. meteorPosition.Z += 30;
  959.  
  960. meteorEntity = (W3MeteorProjectile)theGame.CreateEntity(meteorEntityTemplate, meteorPosition, targetRotation);
  961. meteorEntity.Init(NULL);
  962. if (g==0)
  963. {
  964. meteorEntity.projSpeed = 20;
  965. }
  966. else if(g!=0)
  967. {
  968. meteorEntity.projSpeed = 10+RandRange(20);
  969. }
  970. meteorEntity.ShootProjectileAtPosition( meteorEntity.projAngle, meteorEntity.projSpeed, targetPosition, 500, collisionGroups );
  971. }
  972. }
  973. }
  974.  
  975. if ( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('fire2_tome') && IsAlternateCast() )
  976. {
  977. if ( npcTarget.IsInInterior() )
  978. {
  979. theGame.GetGuiManager().ShowNotification( GetLocStringByKeyExt( "menu_cannot_perform_action_here" ),, true );
  980. }
  981. else
  982. {
  983. spadtomes = casterActor.GetTotalSignSpellPower(skillEnum);
  984.  
  985. metportpos = npcTarget.GetWorldPosition();
  986. metportrot = npcTarget.GetWorldRotation();
  987. randYaw = RandRangeF( 180.0, -180.0 );
  988. metportrot.Yaw = randYaw;
  989. //metportpos+=casterActor.GetHeadingVector()*2;
  990. metportpos.Z+=3.5; //4 6+RandRange(1,5)
  991. entityToCreate = (CEntityTemplate)LoadResource( "portal_04" );
  992. portal = (W3OnSpawnPortal)theGame.CreateEntity( entityToCreate, metportpos, metportrot );
  993. portal.DestroyAfter( 2 );
  994. FactsAdd("minimeteor",10);
  995.  
  996. victimtofire = thePlayer.GetNPCsAndPlayersInRange(30, 20, ,FLAG_ExcludePlayer + FLAG_OnlyAliveActors+ FLAG_Attitude_Hostile);
  997.  
  998. for( i = 0; i < victimtofire.Size(); i += 1 )
  999. {
  1000. targetPosition = victimtofire[i].PredictWorldPosition( 0.7 );
  1001.  
  1002. minimeteor = (W3DracolizardFireball)theGame.CreateEntity( (CEntityTemplate)LoadResource( 'dracolizard_fire_projectile' ), metportpos, metportrot );
  1003. minimeteor.Init(NULL);
  1004. minimeteor.ShootProjectileAtPosition(20,4.5+RandRange(1,5), targetPosition,500,collisionGroups);
  1005. minimeteor.PlayEffect( minimeteor.initFxName );
  1006. }
  1007. }
  1008. }
  1009. //addTomes
  1010.  
  1011.  
  1012. if( targets[i].IsAnimal() || npcTarget.IsHorse() )
  1013. {
  1014. params.duration = durAnimals;
  1015. }
  1016. else
  1017. {
  1018. params.duration = dur;
  1019. }
  1020.  
  1021. jobTreeType = npcTarget.GetCurrentJTType();
  1022.  
  1023. if ( jobTreeType == EJTT_InfantInHand )
  1024. {
  1025. params.effectType = EET_AxiiGuardMe;
  1026. }
  1027.  
  1028. //addTomes
  1029. if (GetWitcherPlayer().IsItemEquippedByName( 'knockdown_tome' ) &&
  1030. GetWitcherPlayer().GetInventory().GetItemId( 'knockdown_tome' ) == GetWitcherPlayer().GetSelectedItemId() && !IsAlternateCast())
  1031. {
  1032. spadtomes = casterActor.GetTotalSignSpellPower(skillEnum);
  1033. knockdur = (spadtomes.valueMultiplicative-1)*2.5;
  1034. params.creator = casterActor;
  1035. params.duration = knockdur;
  1036. if( RandF() <= (spadtomes.valueMultiplicative)*0.25)
  1037. {params.effectType = EET_Knockdown;} else {params.effectType = EET_LongStagger;}
  1038. //npcTarget.AddEffectCustom(params);
  1039. fxEntity = npcTarget.CreateFXEntityAtPelvis( 'mutation2_critical', true );
  1040. fxEntity.PlayEffect( 'critical_aard' );
  1041. }
  1042. else if( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome')
  1043. && VecDistance(casterActor.GetWorldPosition(),npcTarget.GetWorldPosition())<=4
  1044. && IsAlternateCast())
  1045. {
  1046. spadtomes = casterActor.GetTotalSignSpellPower(skillEnum);
  1047. knockdur = (spadtomes.valueMultiplicative)*6;
  1048. knockdur *= RandRangeF(1.2, 0.8);
  1049. assassin_curseCustomEffect.creator = casterActor;
  1050. assassin_curseCustomEffect.duration = knockdur;
  1051. assassin_curseCustomEffect.effectType = EET_Assassincurse;
  1052. npcTarget.AddEffectCustom(assassin_curseCustomEffect);
  1053. vampslowCustomEffect.creator = casterActor;
  1054. vampslowCustomEffect.duration = knockdur;
  1055. vampslowCustomEffect.effectType = EET_Vampslow;
  1056. npcTarget.AddEffectCustom(vampslowCustomEffect);
  1057. params.effectType = EET_Stagger;
  1058. npcTarget.PlayEffect( 'demonic_possession' );
  1059. npcTarget.SoundEvent('qu_nml_108_distance_wraith');
  1060. }
  1061. else if (GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('vampire_tome') && IsAlternateCast()
  1062. && VecDistance(casterActor.GetWorldPosition(),npcTarget.GetWorldPosition())<=4 )
  1063. {
  1064. spadtomes = casterActor.GetTotalSignSpellPower(skillEnum);
  1065. knockdur = (spadtomes.valueMultiplicative)*6;
  1066. knockdur *= RandRangeF(1.2, 0.8);
  1067. vampslowCustomEffect.creator = casterActor;
  1068. vampslowCustomEffect.duration = knockdur;
  1069. vampslowCustomEffect.effectType = EET_Vampslow;
  1070. npcTarget.AddEffectCustom(vampslowCustomEffect);
  1071. params.effectType = EET_Stagger;
  1072. npcTarget.CreateFXEntityAtPelvis( 'runeword_4', true );
  1073. casterActor.PlayEffect( 'drain_energy_fx1' );
  1074. casterActor.StopEffect( 'drain_energy_fx1' );
  1075. if ( !casterActor.IsEffectActive('mutation_7_baff') )
  1076. {
  1077. casterActor.PlayEffect( 'mutation_7_baff' );
  1078. casterActor.StopEffect( 'mutation_7_baff' );
  1079. }
  1080.  
  1081. effecttest = theGame.CreateEntity( (CEntityTemplate)LoadResource("dlc\adtomes\poisonyrden\energytest2.w2ent",true), npcTarget.GetWorldPosition(),npcTarget.GetWorldRotation() );
  1082. effecttest.CreateAttachment(npcTarget);
  1083. effecttest.PlayEffect('drain_energy_fx1',thePlayer.GetComponent('torso3effect'));
  1084. effecttest.StopAllEffectsAfter(1);
  1085. effecttest.DestroyAfter(2);
  1086.  
  1087. //theGame.witcherLog.AddMessage("duration: " + knockdur);
  1088.  
  1089. redsmoke = theGame.CreateEntity( (CEntityTemplate)LoadResource( "dlc\adtomes\poisonyrden\energytest.w2ent", true ),
  1090. npcTarget.GetWorldPosition(),npcTarget.GetWorldRotation());
  1091. redsmoke.PlayEffect('countered_dash');
  1092. redsmoke.CreateAttachment( npcTarget, 'pelvis' );
  1093. redsmoke.StopAllEffectsAfter(2);
  1094. redsmoke.DestroyAfter(5);
  1095.  
  1096. vamp = new W3DamageAction in this;
  1097. vamp.Initialize(casterActor,npcTarget,this,casterActor.GetName()+"_sign",EHRT_Heavy,CPS_Undefined,false, false, true, false );
  1098. //vampdmg = npcTarget.GetMaxHealth()*(spadtomes.valueMultiplicative-1)*0.2;
  1099. //vampdmg *= RandRangeF(1.2, 0.8);
  1100. vampdmg = MaxF(npcTarget.GetMaxHealth()*0.10,npcTarget.GetMaxHealth()*(spadtomes.valueMultiplicative-1)*0.2);
  1101. vampdmg = ClampF ( vampdmg, npcTarget.GetMaxHealth()*0.10, npcTarget.GetMaxHealth()*0.20 );
  1102. vampdmg *= RandRangeF(1.05, 0.95);
  1103. vamp.AddDamage( theGame.params.DAMAGE_NAME_DIRECT, vampdmg );
  1104. vamp.SetHitAnimationPlayType(EAHA_ForceYes);
  1105. vamp.SetProcessBuffsIfNoDamage(true);
  1106. vamp.SetForceExplosionDismemberment();
  1107. if( npcTarget.GetCurrentHealth()<vampdmg && !npcTarget.UsesEssence() )
  1108. {
  1109. bloodExplode = (CEntityTemplate)LoadResource('blood_explode');
  1110. meteorPosition = npcTarget.GetWorldPosition();
  1111. meteorPosition.Z += 0.5;
  1112. bloodEntity = theGame.CreateEntity(bloodExplode,meteorPosition);
  1113. bloodEntity.PlayEffect('blood_explode');
  1114. bloodEntity.DestroyAfter(5.0);
  1115. }
  1116. theGame.damageMgr.ProcessAction( vamp );
  1117. delete vamp;
  1118. GetWitcherPlayer().GainStat( BCS_Vitality, ClampF ( vampdmg, 0, GetWitcherPlayer().GetMaxHealth()*0.15 ) );
  1119. //theGame.witcherLog.AddMessage("spadtomes.valueMultiplicative-1: " + (spadtomes.valueMultiplicative-1));
  1120. //theGame.witcherLog.AddMessage("spadtomes.valueMultiplicative-1 * 16: " + vampdmg);
  1121. }
  1122.  
  1123. else if(((GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome') ||
  1124. GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome') ||
  1125. GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('iceblast_tome') ||
  1126. GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('fire2_tome') ) && IsAlternateCast())
  1127. || ( GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' ) &&
  1128. GetWitcherPlayer().GetInventory().GetItemId( 'teleport_tome' ) == GetWitcherPlayer().GetSelectedItemId() )
  1129. )
  1130. {
  1131. params.effectType = EET_Stagger;
  1132. }
  1133. else if( ((GetWitcherPlayer().IsItemEquippedByName( 'permafrost_tome' ) &&
  1134. GetWitcherPlayer().GetInventory().GetItemId( 'permafrost_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1135. || (GetWitcherPlayer().IsItemEquippedByName( 'fireyrden_tome' ) &&
  1136. GetWitcherPlayer().GetInventory().GetItemId( 'fireyrden_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1137. || (GetWitcherPlayer().IsItemEquippedByName( 'poisonyrden_tome' ) &&
  1138. GetWitcherPlayer().GetInventory().GetItemId( 'poisonyrden_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1139. || (GetWitcherPlayer().IsItemEquippedByName( 'fgolem_tome' ) &&
  1140. GetWitcherPlayer().GetInventory().GetItemId( 'fgolem_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1141. || (GetWitcherPlayer().IsItemEquippedByName( 'igolem_tome' ) &&
  1142. GetWitcherPlayer().GetInventory().GetItemId( 'igolem_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1143. || (GetWitcherPlayer().IsItemEquippedByName( 'necro_tome' ) &&
  1144. GetWitcherPlayer().GetInventory().GetItemId( 'necro_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1145. || (GetWitcherPlayer().IsItemEquippedByName( 'ghost_tome' ) &&
  1146. GetWitcherPlayer().GetInventory().GetItemId( 'ghost_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1147. || (GetWitcherPlayer().IsItemEquippedByName( 'witch_tome' ) &&
  1148. GetWitcherPlayer().GetInventory().GetItemId( 'witch_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1149. || (GetWitcherPlayer().IsItemEquippedByName( 'black_tome' ) &&
  1150. GetWitcherPlayer().GetInventory().GetItemId( 'black_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1151. )&& !IsAlternateCast())
  1152. {
  1153. params.effectType = EET_Undefined;
  1154. }
  1155. else if( (GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' ) &&
  1156. GetWitcherPlayer().GetInventory().GetItemId( 'elaxii_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1157. || (GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('neverwinter_tome') && IsAlternateCast())
  1158. || (GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome') && IsAlternateCast())
  1159. || (GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('gwin_tome') && IsAlternateCast())
  1160. )
  1161. {
  1162. params.effectType = EET_Undefined;
  1163. }
  1164. //addTomes
  1165.  
  1166. else if(IsAlternateCast() && owner.GetActor() == thePlayer && GetAttitudeBetween(targets[i], owner.GetActor()) == AIA_Friendly)
  1167. {
  1168. params.effectType = EET_Confusion;
  1169. }
  1170. else
  1171. {
  1172. params.effectType = actionBuffs[0].effectType;
  1173. }
  1174.  
  1175. //#tomes
  1176. if( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('scorch_tome') )
  1177. {
  1178. scorchSP = GetWitcherPlayer().GetTotalSignSpellPower(S_Magic_2);
  1179. dmgVal = 75 * (scorchSP.valueMultiplicative * scorchSP.valueMultiplicative);
  1180. scorchChance = MinF(0.15 * scorchSP.valueMultiplicative, 0.5);
  1181. scorchDamage = 40 * scorchSP.valueMultiplicative;
  1182. scorchDuration = 3 * scorchSP.valueMultiplicative;
  1183.  
  1184. if(FactsQuerySum("NewGamePlus") > 0)
  1185. {
  1186. dmgVal = MinF(dmgVal, 5000.0f);
  1187. }
  1188. else
  1189. {
  1190. dmgVal = MinF(dmgVal, 3000.0f);
  1191. }
  1192.  
  1193. dmgVal *= RandRangeF(1.1, 0.9);
  1194.  
  1195. if(IsAlternateCast())
  1196. {
  1197. dmgVal *= 1.5;
  1198. scorchChance = 1;
  1199. scorchDamage *= 1.5;
  1200. }
  1201.  
  1202. action = new W3DamageAction in theGame.damageMgr;
  1203. action.Initialize( casterActor, (CGameplayEntity)targets[i], this, casterActor.GetName()+"_sign", EHRT_Light, CPS_Undefined, false, false, true, false);
  1204. action.AddDamage( theGame.params.DAMAGE_NAME_FIRE, dmgVal );
  1205. action.SetHitAnimationPlayType(EAHA_ForceNo);
  1206. action.SetProcessBuffsIfNoDamage(true);
  1207.  
  1208. if(IsAlternateCast())
  1209. action.AddEffectInfo(EET_LongStagger);
  1210.  
  1211. if(dmgVal >= targets[i].GetCurrentHealth())
  1212. {
  1213. targets[i].StopAllEffects();
  1214. targets[i].AddTimer('Runeword1DisableFireFX', 7.5);
  1215. targets[i].PlayEffect('critical_burning');
  1216.  
  1217. theGame.damageMgr.ProcessAction( action );
  1218. }
  1219. else
  1220. {
  1221. targets[i].PlayEffect('fire_hit');
  1222.  
  1223. theGame.damageMgr.ProcessAction( action );
  1224.  
  1225. if(RandF() <= scorchChance)
  1226. {
  1227. scorchCustomEffect.effectType = EET_Burning;
  1228. scorchCustomEffect.creator = casterActor;
  1229. scorchCustomEffect.duration = scorchDuration;
  1230. scorchCustomEffect.effectValue.valueAdditive = scorchDamage;
  1231. targets[i].AddEffectCustom(scorchCustomEffect);
  1232. }
  1233. }
  1234. }
  1235. //#tomes
  1236.  
  1237. //#tomes
  1238. if( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('hex_tome') && !IsAlternateCast())
  1239. {
  1240. hexSP = GetWitcherPlayer().GetTotalSignSpellPower(S_Magic_5);
  1241. hexDuration = 6 * hexSP.valueMultiplicative;
  1242.  
  1243. targets[i].RemoveBuff(EET_Hex);
  1244.  
  1245. hexCustomEffect.effectType = EET_Hex;
  1246. hexCustomEffect.creator = casterActor;
  1247. hexCustomEffect.duration = hexDuration;
  1248. targets[i].AddEffectCustom(hexCustomEffect);
  1249.  
  1250. }
  1251. //#tomes
  1252.  
  1253. //#tomes
  1254. if( GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('consumevitality_tome') )
  1255. {
  1256. consumeSP = GetWitcherPlayer().GetTotalSignSpellPower(S_Magic_5);
  1257. consumeDamage = 50 * (consumeSP.valueMultiplicative * consumeSP.valueMultiplicative);
  1258.  
  1259. if(FactsQuerySum("NewGamePlus") > 0)
  1260. {
  1261. consumeDamage = MinF(consumeDamage, 3500.0f);
  1262. }
  1263. else
  1264. {
  1265. consumeDamage = MinF(consumeDamage, 2000.0f);
  1266. }
  1267.  
  1268. consumeDamage *= RandRangeF(1.1, 0.9);
  1269.  
  1270. consumeHeal = MinF( (consumeDamage * MinF(0.1 * consumeSP.valueMultiplicative, 0.5)), owner.GetActor().GetMaxHealth() * 0.05);
  1271.  
  1272. if(IsAlternateCast())
  1273. {
  1274. consumeDamage *= 1.5;
  1275. consumeHeal *= 1.5;
  1276. }
  1277.  
  1278. if(GetAttitudeBetween(targets[i], owner.GetActor()) != AIA_Friendly)
  1279. {
  1280. hexCustomEffect.effectType = EET_Hex;
  1281. hexCustomEffect.creator = casterActor;
  1282. hexCustomEffect.duration = 0.5;
  1283. targets[i].AddEffectCustom(hexCustomEffect);
  1284.  
  1285. owner.GetActor().PlayEffect('ability_gryphon_start');
  1286. owner.GetActor().Heal(consumeHeal);
  1287.  
  1288. action = new W3DamageAction in theGame.damageMgr;
  1289. action.Initialize( casterActor, (CGameplayEntity)targets[i], this, casterActor.GetName()+"_sign", EHRT_Light, CPS_Undefined, false, false, true, false);
  1290. action.AddDamage( theGame.params.DAMAGE_NAME_DIRECT, consumeDamage );
  1291. action.SetHitAnimationPlayType(EAHA_ForceNo);
  1292. action.SetProcessBuffsIfNoDamage(true);
  1293. theGame.damageMgr.ProcessAction( action );
  1294. }
  1295. else
  1296. {
  1297. hexCustomEffect.effectType = EET_Stagger;
  1298. hexCustomEffect.creator = casterActor;
  1299. targets[i].AddEffectCustom(hexCustomEffect);
  1300. }
  1301.  
  1302. }
  1303. //#tomes
  1304.  
  1305. RemoveMagic17Effect(targets[i]);
  1306.  
  1307. buff = targets[i].AddEffectCustom(params);
  1308. if( buff == EI_Pass || buff == EI_Override || buff == EI_Cumulate )
  1309. {
  1310. targets[i].OnAxiied( casterActor );
  1311.  
  1312. if(owner.CanUseSkill(S_Magic_s18))
  1313. {
  1314. conf = (W3ConfuseEffect)(targets[i].GetBuff(params.effectType, "axii_" + skillEnum));
  1315. conf.SetDrainStaminaOnExit();
  1316. }
  1317. }
  1318. else
  1319. {
  1320. //#tomes
  1321. if(!(owner.IsPlayer() && (owner.GetPlayer().GetHorseManager().IsItemEquippedByName('scorch_tome') || owner.GetPlayer().GetHorseManager().IsItemEquippedByName('hex_tome') || owner.GetPlayer().GetHorseManager().IsItemEquippedByName('consumevitality_tome'))))
  1322. {
  1323. if(owner.CanUseSkill(S_Magic_s17) && owner.GetSkillLevel(S_Magic_s17) == 3)
  1324. {
  1325. staggerParams = params;
  1326. staggerParams.effectType = EET_Stagger;
  1327. params.duration = 0;
  1328. targets[i].AddEffectCustom(staggerParams);
  1329. }
  1330. else
  1331. {
  1332. //addTomes
  1333. if ((!GetWitcherPlayer().IsItemEquippedByName( 'permafrost_tome' ) ||
  1334. (GetWitcherPlayer().GetInventory().GetItemId( 'permafrost_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'permafrost_tome' )))
  1335. && (!GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' ) ||
  1336. (GetWitcherPlayer().GetInventory().GetItemId( 'elaxii_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' )))
  1337. && (!GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' ) ||
  1338. (GetWitcherPlayer().GetInventory().GetItemId( 'teleport_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' )))
  1339. && (!GetWitcherPlayer().IsItemEquippedByName( 'fireyrden_tome' ) ||
  1340. (GetWitcherPlayer().GetInventory().GetItemId( 'fireyrden_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'fireyrden_tome' )))
  1341. && (!GetWitcherPlayer().IsItemEquippedByName( 'poisonyrden_tome' ) ||
  1342. (GetWitcherPlayer().GetInventory().GetItemId( 'poisonyrden_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'poisonyrden_tome' )))
  1343. && (!GetWitcherPlayer().IsItemEquippedByName( 'fgolem_tome' ) ||
  1344. (GetWitcherPlayer().GetInventory().GetItemId( 'fgolem_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'fgolem_tome' )))
  1345. && (!GetWitcherPlayer().IsItemEquippedByName( 'igolem_tome' ) ||
  1346. (GetWitcherPlayer().GetInventory().GetItemId( 'igolem_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'igolem_tome' )))
  1347. && (!GetWitcherPlayer().IsItemEquippedByName( 'necro_tome' ) ||
  1348. (GetWitcherPlayer().GetInventory().GetItemId( 'necro_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'necro_tome' )))
  1349. && (!GetWitcherPlayer().IsItemEquippedByName( 'ghost_tome' ) ||
  1350. (GetWitcherPlayer().GetInventory().GetItemId( 'ghost_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'ghost_tome' )))
  1351. && (!GetWitcherPlayer().IsItemEquippedByName( 'witch_tome' ) ||
  1352. (GetWitcherPlayer().GetInventory().GetItemId( 'witch_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'witch_tome' )))
  1353. && (!GetWitcherPlayer().IsItemEquippedByName( 'black_tome' ) ||
  1354. (GetWitcherPlayer().GetInventory().GetItemId( 'black_tome' ) != GetWitcherPlayer().GetSelectedItemId() && GetWitcherPlayer().IsItemEquippedByName( 'black_tome' )))
  1355. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome')
  1356. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome')
  1357. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('iceblast_tome')
  1358. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('vampire_tome')
  1359. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('fire2_tome')
  1360. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('neverwinter_tome')
  1361. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome')
  1362. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('gwin_tome')
  1363. )
  1364. //addTomes
  1365. owner.GetActor().SetBehaviorVariable( 'axiiResisted', 1.f );
  1366. }
  1367. }
  1368. //#tomes
  1369. }
  1370. }
  1371. }
  1372.  
  1373. casterActor.OnSignCastPerformed(ST_Axii, fireMode);
  1374.  
  1375. super.OnEnded();
  1376. }
  1377.  
  1378. event OnSignAborted( optional force : bool )
  1379. {
  1380. HAXX_AXII_ABORTED();
  1381. super.OnSignAborted(force);
  1382. }
  1383.  
  1384.  
  1385. public function HAXX_AXII_ABORTED()
  1386. {
  1387. var i : int;
  1388.  
  1389. for(i=0; i<targets.Size(); i+=1)
  1390. {
  1391. RemoveMagic17Effect(targets[i]);
  1392. }
  1393. RemoveMagic17Effect(orientationTarget);
  1394. }
  1395.  
  1396.  
  1397. public function OnDisplayTargetChange(newTarget : CActor)
  1398. {
  1399. var buffParams : SCustomEffectParams;
  1400.  
  1401.  
  1402. if(!owner.CanUseSkill(S_Magic_s17) || owner.GetSkillLevel(S_Magic_s17) == 0)
  1403. return;
  1404.  
  1405. if(newTarget == orientationTarget)
  1406. return;
  1407.  
  1408. RemoveMagic17Effect(orientationTarget);
  1409. orientationTarget = newTarget;
  1410.  
  1411. AddMagic17Effect(orientationTarget);
  1412. }
  1413.  
  1414. private function AddMagic17Effect(target : CActor)
  1415. {
  1416. var buffParams : SCustomEffectParams;
  1417.  
  1418. if(!target || owner.GetActor() != GetWitcherPlayer() || !GetWitcherPlayer().CanUseSkill(S_Magic_s17))
  1419. return;
  1420.  
  1421. //#tomes
  1422. if( owner.GetActor() == GetWitcherPlayer() && GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('scorch_tome') )
  1423. return;
  1424. //#tomes
  1425.  
  1426. buffParams.effectType = EET_SlowdownAxii;
  1427. buffParams.creator = this;
  1428. buffParams.sourceName = "axii_immobilize";
  1429. buffParams.duration = 10;
  1430. buffParams.effectValue.valueAdditive = 0.999f;
  1431. buffParams.isSignEffect = true;
  1432.  
  1433. target.AddEffectCustom(buffParams);
  1434. }
  1435.  
  1436. private function RemoveMagic17Effect(target : CActor)
  1437. {
  1438. if(target)
  1439. target.RemoveBuff(EET_SlowdownAxii, true, "axii_immobilize");
  1440. }
  1441. }
  1442.  
  1443. state AxiiCast in W3AxiiEntity extends NormalCast
  1444. {
  1445. event OnEnded(optional isEnd : bool)
  1446. {
  1447. var player : CR4Player;
  1448.  
  1449. //addTomes
  1450.  
  1451. var ghfire : W3DamageAction;
  1452. var ghfiredmg :float;
  1453. var ghactors : array<CActor>;
  1454. var o,z : int;
  1455. var gheff: CEntity;
  1456. var ghtarget: CNewNPC; var ghpois, icefleff,burn : SCustomEffectParams;
  1457. var blowpos : Vector; var rot : EulerAngles; var targettest : CNode;
  1458. var entities : array<CGameplayEntity>; var entity : CGameplayEntity;
  1459.  
  1460. if(GetWitcherPlayer().IsItemEquippedByName( 'ghost_tome' ) &&
  1461. GetWitcherPlayer().GetInventory().GetItemId( 'ghost_tome' ) == GetWitcherPlayer().GetSelectedItemId() && !parent.IsAlternateCast())
  1462. {
  1463. rot = thePlayer.GetWorldRotation();
  1464. rot.Yaw += 90.f;
  1465. blowpos = parent.GetWorldPosition();
  1466. blowpos.Z += 0.3;
  1467. parent.firepois = (CEntity)theGame.CreateEntity( (CEntityTemplate)LoadResource("dlc\adtomes\poisonyrden\igni_blackaxii.w2ent" ,true ), blowpos, rot );
  1468. parent.firepois.PlayEffect('cone_poison');
  1469. parent.firepois.DestroyAfter(10);
  1470. thePlayer.SoundEvent('sign_igni_charge_begin');
  1471.  
  1472. ghactors = thePlayer.GetNPCsAndPlayersInCone(5, VecHeading(thePlayer.GetHeadingVector()), 80, 20, , FLAG_Attitude_Hostile + FLAG_OnlyAliveActors);
  1473.  
  1474. for( o = 0; o < ghactors.Size(); o += 1 )
  1475. {
  1476. ghtarget = (CNewNPC)ghactors[o];
  1477. ghfire = new W3DamageAction in this;
  1478. ghfire.Initialize(thePlayer,ghtarget,this,thePlayer.GetName()+"_sign",EHRT_Heavy,CPS_Undefined,false, false, true, false );
  1479. parent.spadtomes = GetWitcherPlayer().GetTotalSignSpellPower(parent.skillEnum);
  1480. //ghfiredmg = (parent.spadtomes.valueMultiplicative*0.4)*thePlayer.GetLevel()*30;
  1481. ghfiredmg = thePlayer.GetLevel()*13;
  1482. ghfiredmg += ghfiredmg*((parent.spadtomes.valueMultiplicative-1)*0.4);
  1483. if( !ghtarget.IsHuman() && !ghtarget.IsAnimal() )
  1484. { ghfiredmg *= 1.6; }
  1485. //ghfiredmg *= RandRangeF(1.2, 0.8);
  1486. ghfire.AddDamage( theGame.params.DAMAGE_NAME_FIRE, ghfiredmg*0.65);
  1487. ghfire.AddDamage( theGame.params.DAMAGE_NAME_POISON, ghfiredmg*0.65);
  1488. ghfire.SetHitReactionType(EHRT_Heavy);
  1489. ghfire.SetHitAnimationPlayType(EAHA_ForceYes);
  1490. ghfire.SetProcessBuffsIfNoDamage(true);
  1491. ghfire.AddEffectInfo( EET_Stagger );
  1492. gheff = ghtarget.CreateFXEntityAtPelvis( 'mutation2addtomes', true );
  1493. gheff.PlayEffect( 'critical_quenaddtomes' );gheff.PlayEffect( 'critical_quenaddtomes' );gheff.PlayEffect( 'critical_quenaddtomes' );
  1494. theGame.damageMgr.ProcessAction( ghfire );
  1495. delete ghfire;
  1496.  
  1497. if(RandF() <= (parent.spadtomes.valueMultiplicative)*0.2)
  1498. {
  1499. ghpois.effectType = EET_Poison;
  1500. ghpois.creator = thePlayer;
  1501. ghpois.sourceName = thePlayer.GetName();
  1502. ghpois.duration = parent.spadtomes.valueMultiplicative*3;
  1503. ghtarget.AddEffectCustom(ghpois);
  1504. }
  1505. //theGame.witcherLog.AddMessage("dur: " + parent.spadtomes.valueMultiplicative*2);
  1506. }
  1507. }
  1508. if(GetWitcherPlayer().IsItemEquippedByName( 'black_tome' ) &&
  1509. GetWitcherPlayer().GetInventory().GetItemId( 'black_tome' ) == GetWitcherPlayer().GetSelectedItemId() && !parent.IsAlternateCast())
  1510. {
  1511. rot = thePlayer.GetWorldRotation();
  1512. rot.Yaw += 90.f;
  1513. blowpos = parent.GetWorldPosition();
  1514. blowpos.Z += 0.3;
  1515. parent.firepois = (CEntity)theGame.CreateEntity( (CEntityTemplate)LoadResource("dlc\adtomes\poisonyrden\igni_blackaxii.w2ent" ,true ), blowpos, rot );
  1516. parent.firepois.PlayEffect('cone');
  1517. parent.firepois.DestroyAfter(10);
  1518. thePlayer.SoundEvent('sign_igni_charge_begin');
  1519.  
  1520. ghactors = thePlayer.GetNPCsAndPlayersInCone(5, VecHeading(thePlayer.GetHeadingVector()), 80, 20, , FLAG_Attitude_Hostile + FLAG_OnlyAliveActors);
  1521.  
  1522. for( o = 0; o < ghactors.Size(); o += 1 )
  1523. {
  1524. ghtarget = (CNewNPC)ghactors[o];
  1525. ghfire = new W3DamageAction in this;
  1526. ghfire.Initialize(thePlayer,ghtarget,this,thePlayer.GetName()+"_sign",EHRT_Heavy,CPS_Undefined,false, false, true, false );
  1527. parent.spadtomes = GetWitcherPlayer().GetTotalSignSpellPower(parent.skillEnum);
  1528. //ghfiredmg = (parent.spadtomes.valueMultiplicative*0.4)*thePlayer.GetLevel()*30;
  1529. ghfiredmg = thePlayer.GetLevel()*13;
  1530. ghfiredmg += ghfiredmg*((parent.spadtomes.valueMultiplicative-1)*0.4);
  1531. if( !ghtarget.IsHuman() && !ghtarget.IsAnimal() )
  1532. { ghfiredmg *= 1.6; }
  1533. //ghfiredmg *= RandRangeF(1.2, 0.8);
  1534. ghfire.AddDamage( theGame.params.DAMAGE_NAME_FIRE, ghfiredmg*0.65 );
  1535. ghfire.AddDamage( theGame.params.DAMAGE_NAME_ELEMENTAL, ghfiredmg*0.65 );
  1536. ghfire.SetHitReactionType(EHRT_Heavy);
  1537. ghfire.SetHitAnimationPlayType(EAHA_ForceYes);
  1538. ghfire.SetProcessBuffsIfNoDamage(true);
  1539. ghfire.AddEffectInfo( EET_Stagger );
  1540. gheff = ghtarget.CreateFXEntityAtPelvis( 'mutation3black', true );
  1541. gheff.PlayEffect( 'quenblack2' );
  1542. theGame.damageMgr.ProcessAction( ghfire );
  1543. delete ghfire;
  1544. ghpois.effectType = EET_Vampslow;
  1545. ghpois.creator = thePlayer;
  1546. ghpois.sourceName = thePlayer.GetName();
  1547. ghpois.duration = parent.spadtomes.valueMultiplicative*6;
  1548. ghtarget.AddEffectCustom(ghpois);
  1549. }
  1550. }
  1551. if(GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('neverwinter_tome') && parent.IsAlternateCast())
  1552. {
  1553. rot = thePlayer.GetWorldRotation();
  1554. rot.Yaw += 90.f;
  1555. blowpos = parent.GetWorldPosition();
  1556. blowpos.Z += 0.3;
  1557. parent.firepois = (CEntity)theGame.CreateEntity( (CEntityTemplate)LoadResource("dlc\adtomes\poisonyrden\igni_blackaxii.w2ent" ,true ), blowpos, rot );
  1558. parent.firepois.PlayEffect('cone_frost');
  1559. parent.firepois.DestroyAfter(10);
  1560. thePlayer.SoundEvent('sign_igni_charge_begin');
  1561. thePlayer.SoundEvent('ep2_mutations_06_frosty_aard');
  1562.  
  1563. ghactors = thePlayer.GetNPCsAndPlayersInCone(5, VecHeading(thePlayer.GetHeadingVector()), 80, 20, , FLAG_Attitude_Hostile + FLAG_OnlyAliveActors);
  1564.  
  1565. for( o = 0; o < ghactors.Size(); o += 1 )
  1566. {
  1567. ghtarget = (CNewNPC)ghactors[o];
  1568. ghfire = new W3DamageAction in this;
  1569. ghfire.Initialize(thePlayer,ghtarget,this,thePlayer.GetName()+"_sign",EHRT_Heavy,CPS_Undefined,false, false, true, false );
  1570. parent.spadtomes = GetWitcherPlayer().GetTotalSignSpellPower(parent.skillEnum);
  1571. //ghfiredmg = (parent.spadtomes.valueMultiplicative*0.4)*thePlayer.GetLevel()*30;
  1572. ghfiredmg = thePlayer.GetLevel()*13;
  1573. ghfiredmg += ghfiredmg*((parent.spadtomes.valueMultiplicative-1)*0.4);
  1574. if( !ghtarget.IsHuman() && !ghtarget.IsAnimal() )
  1575. { ghfiredmg *= 1.6; }
  1576. //ghfiredmg *= RandRangeF(1.2, 0.8);
  1577. ghfire.AddDamage( theGame.params.DAMAGE_NAME_FROST, ghfiredmg );
  1578. ghfire.SetHitReactionType(EHRT_Heavy);
  1579. ghfire.SetHitAnimationPlayType(EAHA_ForceYes);
  1580. ghfire.SetProcessBuffsIfNoDamage(true);
  1581. ghfire.AddEffectInfo( EET_Stagger );
  1582. gheff = ghtarget.CreateFXEntityAtPelvis( 'mutation2addtomes', true );
  1583. gheff.PlayEffect( 'critical_axiiaddtomes' );
  1584. theGame.damageMgr.ProcessAction( ghfire );
  1585. delete ghfire;
  1586.  
  1587. if( RandF() <= (parent.spadtomes.valueMultiplicative-1)*0.2)
  1588. {
  1589. icefleff.effectType = EET_Frozen;
  1590. }
  1591. else
  1592. {
  1593. icefleff.effectType = EET_SlowdownFrost;
  1594. }
  1595. icefleff.creator = thePlayer;
  1596. icefleff.sourceName = thePlayer.GetName();
  1597. icefleff.duration = parent.spadtomes.valueMultiplicative*3;
  1598. ghtarget.AddEffectCustom(icefleff);
  1599. //theGame.witcherLog.AddMessage("ghfiredmg: " + ghfiredmg);
  1600. //theGame.witcherLog.AddMessage("add: " + ghfiredmg*((parent.spadtomes.valueMultiplicative-1)*0.5));
  1601. }
  1602.  
  1603. FindGameplayEntitiesInCone(entities, GetWitcherPlayer().GetWorldPosition(), VecHeading(caster.GetPlayer().GetHeadingVector()), 80, 5, 100);
  1604. for( z = 0; z < entities.Size(); z += 1 )
  1605. {
  1606. entity = entities[z];
  1607. entity.OnAardHit( NULL );
  1608. }
  1609. }
  1610.  
  1611.  
  1612.  
  1613. if( ( (GetWitcherPlayer().IsItemEquippedByName( 'teleport_tome' ) &&
  1614. GetWitcherPlayer().GetInventory().GetItemId( 'teleport_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1615. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorfire_tome')
  1616. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('meteorice_tome')
  1617. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('iceblast_tome')
  1618. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('vampire_tome')
  1619. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('fire2_tome')
  1620. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('neverwinter_tome')
  1621. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome')
  1622. || GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('gwin_tome')
  1623. )
  1624. && parent.IsAlternateCast() )
  1625. {
  1626. GetWitcherPlayer().DrainStamina( ESAT_FixedValue, 100 );
  1627. }
  1628. //addTomes
  1629.  
  1630. parent.OnEnded(isEnd);
  1631. super.OnEnded(isEnd);
  1632.  
  1633. player = caster.GetPlayer();
  1634.  
  1635. if( player )
  1636. {
  1637. parent.ManagePlayerStamina();
  1638. parent.ManageGryphonSetBonusBuff();
  1639. }
  1640. else
  1641. {
  1642. caster.GetActor().DrainStamina( ESAT_Ability, 0, 0, SkillEnumToName( parent.skillEnum ) );
  1643. }
  1644. }
  1645.  
  1646. event OnEnterState( prevStateName : name )
  1647. {
  1648.  
  1649. //addTomes
  1650. var o : int;
  1651. var targettest : CNode;
  1652. if(GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('assassin_tome') && parent.IsAlternateCast()
  1653. && VecDistance(GetWitcherPlayer().GetWorldPosition(),parent.targets[o].GetWorldPosition())<=4)
  1654. {
  1655. parent.firepois = (CEntity)theGame.CreateEntity( (CEntityTemplate)LoadResource("dlc\adtomes\poisonyrden\energytest2.w2ent" ,true ), parent.GetWorldPosition(), parent.GetWorldRotation() );
  1656. parent.firepois.CreateAttachment( thePlayer, 'l_weapon' );
  1657. targettest = parent.targets[o];
  1658. if(parent.targets[o].GetComponent('torso3effect'))
  1659. parent.firepois.PlayEffect('drain_energy_fx3',parent.targets[o].GetComponent('torso3effect'));
  1660. else
  1661. parent.firepois.PlayEffect('drain_energy_fx3',targettest);
  1662. parent.firepois.StopAllEffectsAfter(0.2);
  1663. parent.firepois.DestroyAfter(3);
  1664. thePlayer.PlayEffect('mutation_1_quen_power');
  1665. }
  1666. //addTomes
  1667.  
  1668. super.OnEnterState( prevStateName );
  1669. parent.owner.GetActor().SetBehaviorVariable( 'axiiResisted', 0.f );
  1670. }
  1671.  
  1672. event OnThrowing()
  1673. {
  1674. if( super.OnThrowing() )
  1675. {
  1676.  
  1677. caster.GetActor().SetBehaviorVariable( 'bStopSign', 1.f );
  1678. }
  1679. }
  1680.  
  1681. event OnSignAborted( optional force : bool )
  1682. {
  1683. parent.HAXX_AXII_ABORTED();
  1684. parent.StopEffect( parent.effects[parent.fireMode].throwEffect );
  1685. parent.StopEffect( parent.effects[parent.fireMode].castEffect );
  1686.  
  1687. //addTomes
  1688. if (GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' ) &&
  1689. GetWitcherPlayer().GetInventory().GetItemId( 'elaxii_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1690. {thePlayer.StopEffect('free_cast');}
  1691. //addTomes
  1692.  
  1693. super.OnSignAborted(force);
  1694. }
  1695. }
  1696.  
  1697. state AxiiChanneled in W3AxiiEntity extends Channeling
  1698. {
  1699.  
  1700. //addTomes
  1701. var i:int;
  1702. var n:float;
  1703. //addTomes
  1704.  
  1705. event OnEnded(optional isEnd : bool)
  1706. {
  1707. parent.OnEnded(isEnd);
  1708. super.OnEnded(isEnd);
  1709. }
  1710.  
  1711. event OnEnterState( prevStateName : name )
  1712. {
  1713. super.OnEnterState( prevStateName );
  1714.  
  1715. parent.owner.GetActor().SetBehaviorVariable( 'axiiResisted', 0.f );
  1716. caster.OnDelayOrientationChange();
  1717. }
  1718.  
  1719. event OnProcessSignEvent( eventName : name )
  1720. {
  1721. if( eventName == 'axii_alternate_ready' )
  1722. {
  1723.  
  1724.  
  1725. }
  1726. else
  1727. {
  1728. return parent.OnProcessSignEvent( eventName );
  1729. }
  1730.  
  1731. return true;
  1732. }
  1733.  
  1734. event OnThrowing()
  1735. {
  1736. if( super.OnThrowing() )
  1737. ChannelAxii();
  1738. }
  1739.  
  1740. event OnSignAborted( optional force : bool )
  1741. {
  1742. parent.HAXX_AXII_ABORTED();
  1743. parent.StopEffect( parent.effects[parent.fireMode].throwEffect );
  1744. parent.StopEffect( parent.effects[parent.fireMode].castEffect );
  1745.  
  1746. //addTomes
  1747. if (GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' ) &&
  1748. GetWitcherPlayer().GetInventory().GetItemId( 'elaxii_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1749. {thePlayer.StopEffect('free_cast');}
  1750. //addTomes
  1751.  
  1752. if ( caster.IsPlayer() )
  1753. {
  1754. caster.GetPlayer().LockToTarget( false );
  1755. }
  1756.  
  1757. super.OnSignAborted( force );
  1758. }
  1759.  
  1760. entry function ChannelAxii()
  1761. {
  1762. //addTomes
  1763. var effecttest : CEntity;
  1764. n = 0.61;
  1765. //addTomes
  1766.  
  1767. while( Update() )
  1768. {
  1769. //addTomes
  1770. if( (GetWitcherPlayer().IsItemEquippedByName( 'elaxii_tome' ) &&
  1771. GetWitcherPlayer().GetInventory().GetItemId( 'elaxii_tome' ) == GetWitcherPlayer().GetSelectedItemId())
  1772. && !GetWitcherPlayer().GetHorseManager().IsItemEquippedByName('vampire_tome'))
  1773. {
  1774. effecttest = parent.targets[i].CreateFXEntityAtPelvis( 'energy_shock', true );
  1775. effecttest.PlayEffectSingle('collision_fx2');
  1776. effecttest.StopAllEffects();
  1777. effecttest.DestroyAfter(1);
  1778.  
  1779. parent.targets[i].SoundEvent('sign_yrden_shock_activate');
  1780.  
  1781. thePlayer.PlayEffect('free_cast');
  1782. thePlayer.PlayEffect('free_cast');
  1783. thePlayer.PlayEffect('free_cast');
  1784. thePlayer.PlayEffect('free_cast');thePlayer.StopEffect('free_cast');
  1785. Sleep( n );
  1786. n -= 0.1;
  1787. }
  1788. else
  1789. //addTomes
  1790.  
  1791. Sleep( 0.0001f );
  1792. }
  1793. }
  1794. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement