Browse Source

Add spell casting for NPCs

KeyMasterOfGozer 4 years ago
parent
commit
f8059a66c7
3 changed files with 50 additions and 3 deletions
  1. 1 0
      glife.qproj
  2. 46 0
      locations/castSpellNPC.qsrc
  3. 3 3
      locations/fight.qsrc

+ 1 - 0
glife.qproj

@@ -1129,6 +1129,7 @@
 	<Location name="BanSexType"/>
 	<Folder name="Magic">
 		<Location name="castSpell"/>
+		<Location name="castSpellNPC"/>
 		<Location name="spellList"/>
 		<Location name="spellBook"/>
 		<Location name="spellTimer"/>

+ 46 - 0
locations/castSpellNPC.qsrc

@@ -0,0 +1,46 @@
+# castSpellNPC
+! Used for NPCs to cast a spell.
+!
+!    ARGS[0] is the spell being cast
+!	$ARGS[1] = Target Type ('opp','pcs')
+!	 ARGS[2] = Target party member number
+!	$ARGS[3] = Caster Type ('opp','pcs')
+!	 ARGS[4] = Caster party member number
+! ARGS[5-n] are any parameters that need to be passed to the Spell
+!
+!	Example:
+!		gs 'castSpell', 'teleport', 'CentralPark'
+
+gs 'spellList'
+
+spellSuccess = 0
+
+$SpellID = $ARGS[0]
+$SpellArgs = ""
+i=5
+:ArgLoopNPC
+if i < arrsize('$ARGS'):
+	i += 1
+	$SpellArgs = $SpellArgs + ", '<<$ARGS[i - 1]>>'"
+	jump 'ArgLoopNPC'
+end
+killvar 'i'
+
+manaCost = spellMana[$SpellID]
+casterMana = dyneval('result=<<$AGS[3]>>_mana[<<ARGS[4]>>]')
+if casterMana <= manaCost:
+	dynamic '<<$AGS[3]>>_mana[<<ARGS[4]>>] -= <<manaCost>>'
+	$SpellExec = "gs 'spell', '<<$SpellID>>', '<<spellSuccess>>', '<<$ARGS[1]>>', <<ARGS[2]>>, <<ARGS[4]>><<$SpellArgs>>"
+	dynamic $SpellExec
+else
+	'Not enough mana to cast the spell.'
+end
+
+
+killvar '$SpellID'
+killvar '$SpellExec'
+killvar 'spellSuccess'
+killvar 'manaCost'
+killvar 'casterMana'
+
+--- castSpellNPC ---------------------------------

+ 3 - 3
locations/fight.qsrc

@@ -494,9 +494,9 @@ if $ARGS[0] = 'player':
 		TargetNumber = 2
 	end
 		
-!!	if pcs_magik > 0:
-!!		act 'Cast a Spell': gs 'fight', 'spellcast'
-!!	end
+	if pcs_magik > 0:
+		act 'Cast a Spell': gs 'fight', 'spellcast'
+	end
 	if opp_health[0] > 0:
 		act 'Kick <<$opp_name[0]>>':
 			gs 'fight', 'Attack', 'Kick', 'opp', 0, 0