Originally Coded By: NexSteve and Da Undead
Originally For: Elysium Debugged
Converted to Mirage By: Da Undead
//\\PART 1//\\
Difficulty: 1/10 (C & P)
Description: Adds a spell option to where you sacrifice hp for mp.
.::Client Side::.
modTypes
Find:
Code:
Public Const SPELL_TYPE_SUBSP = 5
After, add:
Code:
Public Const SPELL_TYPE_SACRIFICE = 6
Done with modTypes
Done with Client-Side
.::Server Side::.
modTypes
Find:
Code:
Public Const SPELL_TYPE_SUBSP = 5
After Add:
Code:
Public Const SPELL_TYPE_SACRIFICE = 6
Very bottom of modTypes, add:
Code:
Public Function Rand(ByVal Low As Long, ByVal High As Long) As Long
Rand = Low + ((Rnd * (High - Low)) \ 1)
End Function
Done with modTypes
Open modGameLogic
Find:
Code:
If Player(index).TargetType = TARGET_TYPE_PLAYER Then
If IsPlaying(n) Then
If GetPlayerHP(n) > 0 And GetPlayerMap(index) = GetPlayerMap(n) And GetPlayerLevel(index) >= 10 And GetPlayerLevel(n) >= 10 And Map(GetPlayerMap(index)).Moral = MAP_MORAL_NONE And GetPlayerAccess(index) <= 0 And GetPlayerAccess(n) <= 0 Then
' If GetPlayerLevel(n) + 5 >= GetPlayerLevel(Index) Then
' If GetPlayerLevel(n) - 5 <= GetPlayerLevel(Index) Then
Call MapMsg(GetPlayerMap(index), GetPlayerName(index) & " casts " & Trim(Spell(SpellNum).Name) & " on " & GetPlayerName(n) & ".", BrightBlue)
Select Case Spell(SpellNum).Type
Case SPELL_TYPE_SUBHP
Damage = (GetPlayerMAGI(index) / \) + Spell(SpellNum).Data1) - GetPlayerProtection(n)
If Damage > 0 Then
Call AttackPlayer(index, n, Damage)
Else
Call PlayerMsg(index, "The spell was to weak to hurt " & GetPlayerName(n) & "!", BrightRed)
End If
Case SPELL_TYPE_SUBMP
Call SetPlayerMP(n, GetPlayerMP(n) - Spell(SpellNum).Data1)
Call SendMP(n)
Case SPELL_TYPE_SUBSP
Call SetPlayerSP(n, GetPlayerSP(n) - Spell(SpellNum).Data1)
Call SendSP(n)
After that and before end select, add:
Code:
Case SPELL_TYPE_SACRIFICE
DamageDelt = Rand(5, 1)
If GetPlayerHP(index) < 40 Then
Call PlayerMsg(index, "Your health is so low you can't take anymore!", BrightRed)
Exit Sub
End If
Select Case DamageDelt
Case 0
Call SetPlayerHP(index, GetPlayerHP(index) - 14)
Damage = 14
Call AttackNpc(index, n, Damage)
Case 1
Call SetPlayerHP(index, GetPlayerHP(index) - 27)
Damage = 27
Call AttackNpc(index, n, Damage)
Case 2
Call SetPlayerHP(index, GetPlayerHP(index) - 4)
Damage = 4
Call AttackNpc(index, n, Damage)
Case 3
Call SetPlayerHP(index, GetPlayerHP(index) - 18)
Damage = 18
Call AttackNpc(index, n, Damage)
Case 4
Call SetPlayerHP(index, GetPlayerHP(index) - 37)
Damage = 37
Call AttackNpc(index, n, Damage)
Case 5
Call PlayerMsg(index, "You body's power can't stand to lose more blood.", BrightRed)
End Select
Find:
Code:
If Npc(MapNpc(GetPlayerMap(index), n).Num).Behavior <> NPC_BEHAVIOR_FRIENDLY And Npc(MapNpc(GetPlayerMap(index), n).Num).Behavior <> NPC_BEHAVIOR_SHOPKEEPER Then
Call MapMsg(GetPlayerMap(index), GetPlayerName(index) & " casts " & Trim(Spell(SpellNum).Name) & " on a " & Trim(Npc(MapNpc(GetPlayerMap(index), n).Num).Name) & ".", BrightBlue)
Select Case Spell(SpellNum).Type
Case SPELL_TYPE_ADDHP
MapNpc(GetPlayerMap(index), n).HP = MapNpc(GetPlayerMap(index), n).HP + Spell(SpellNum).Data1
Case SPELL_TYPE_SUBHP
Damage = (GetPlayerMAGI(index) \ 4) + Spell(SpellNum).Data1) - (Npc(MapNpc(GetPlayerMap(index), n).Num).DEF \ 2)
If Damage > 0 Then
Call AttackNpc(index, n, Damage)
Else
Call PlayerMsg(index, "The spell was to weak to hurt " & Trim(Npc(MapNpc(GetPlayerMap(index), n).Num).Name) & "!", BrightRed)
End If
Case SPELL_TYPE_ADDMP
MapNpc(GetPlayerMap(index), n).MP = MapNpc(GetPlayerMap(index), n).MP + Spell(SpellNum).Data1
Case SPELL_TYPE_SUBMP
MapNpc(GetPlayerMap(index), n).MP = MapNpc(GetPlayerMap(index), n).MP - Spell(SpellNum).Data1
Case SPELL_TYPE_ADDSP
MapNpc(GetPlayerMap(index), n).SP = MapNpc(GetPlayerMap(index), n).SP + Spell(SpellNum).Data1
Case SPELL_TYPE_SUBSP
MapNpc(GetPlayerMap(index), n).SP = MapNpc(GetPlayerMap(index), n).SP - Spell(SpellNum).Data1
After, before end select, add:
Code:
Case SPELL_TYPE_SACRIFICE
DamageDelt = Rand(1, 5)
If GetPlayerHP(index) < 40 Then
Call PlayerMsg(index, "Your health is so low you can't take anymore!", BrightRed)
Exit Sub
End If
Select Case DamageDelt
Case 0
Call SetPlayerHP(index, GetPlayerHP(index) - 14)
Damage = 14
Call AttackNpc(index, n, Damage)
Case 1
Call SetPlayerHP(index, GetPlayerHP(index) - 27)
Damage = 27
Call AttackNpc(index, n, Damage)
Case 2
Call SetPlayerHP(index, GetPlayerHP(index) - 4)
Damage = 4
Call AttackNpc(index, n, Damage)
Case 3
Call SetPlayerHP(index, GetPlayerHP(index) - 18)
Damage = 18
Call AttackNpc(index, n, Damage)
Case 4
Call SetPlayerHP(index, GetPlayerHP(index) - 37)
Damage = 37
Call AttackNpc(index, n, Damage)
Case 5
Call PlayerMsg(index, "You body's power can't stand to lose more blood.", BrightRed)
End Select
Find:
Code:
Sub CastSpell(ByVal index As Long, ByVal SpellSlot As Long)
Dim SpellNum As Long, MPReq As Long, i As Long, n As Long, Damage As Long
After Damage As Long, add:
Code:
, DamageDelt As Integer
End of modGameLogic.
End of Server-Side
-------------------------------------------------------------------------------------
//\\PART 2//\\Description: Spends SP for MP.
Add this both client and server side for modTypes after the 'SPELL_TYPE_SACRIFICE = 8' :
Code:
Public Const SPELL_TYPE_SPFORMP = 7
And this goes after/before the sacrifice cases on modGameLogic(SERVER) on both places :
Code:
Case SPELL_TYPE_SPFORMP
Dim Minus As Long
If GetPlayerSP(index) < 10 Then
Call PlayerMsg(index, "You can't take anymore SP away because you dont have enough!"
Exit Sub
End if
Minus = Rand(100, 1)
Call SetPlayerSP(index, GetPlayerSP(index) - Minus)
Call SetPlayerMP(index, GetPlayerMP(index) + Minus)
-----------------------------------------
Any problems or questions, post here

.