Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
2 Spell Additions
#1
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 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 Smile.
Reply
#2
Heres a new Rand for you because that one makes me cry:

Code:
Public Function Rand(ByVal Low As Long, ByVal High As Long) As Long

    Rand = Low + ((Rnd * (High - Low)) \ 1)

End Function

- Don't need Randomize
- You're working with and returning a variant
- You're making a loop and constantly "hoping it hits", which would freeze for hours if you specify high values with small gaps
- It will go into an infinite loop if you specify the low as higher than the high
- I ran the code Rand(2000000000, 1999999999) compiled with all optimizations ticked... and about 10 minutes later, its still running :lol:

Also, just want to add, stuff like this:

Code:
(Int(GetPlayerMAGI(index) / 4)

Can be written:

Code:
(GetPlayerMAGI(index) \ 4)

Its faster since what you're doing is taking the extra processing to do floating-point division, then to remove that floating point with the Int(), so \ 4 just does straight integer division (much faster).
Reply
#3
Thankyou spodi, updated tut Smile
Reply
#4
You also need to update.
Code:
DamageDelt = Rand(5, 1)
To:
Code:
DamageDelt = Rand(1, 5)
Reply
#5
What that for?
Reply
#6
Well the random function states that it starts with Low and ends with High. So the most obviouse way to write it would be 1, 5.
Reply
#7
My bad, the one I gave you went Low/High, while your original was High/Low.
Reply
#8
Oh, it's spelt Sacrifice btw.
Reply
#9
Spodi Wrote:My bad, the one I gave you went Low/High, while your original was High/Low.

Oh well, i updated it to 5, 1 Smile.

and spelling doesn't matter :p
Reply
#10
UPDATED TUT!

Added SP for MP in //\\PART 2//\\ (BOTTOM) of first post.
Reply
#11
Da Undead Wrote:
Spodi Wrote:and spelling doesn't matter :p

Actually, it should...

Because you defined the spell in your server as:
Code:
Public Const SPELL_TYPE_SACRIFISE = 6


And in the CastSpell sub, you're looking for this:
Code:
Case SPELL_TYPE_SACRIFICE



Correct me if I'm wrong of course.
Reply
#12
Oh nice catch, updated Smile.
Reply
#13
Also, you forgot to mention that you have to add stuff in the client side spell editor as well Wink The max of the spellbox has to be changed to 7 or 8 depending on how many spells you've got. (actually you just have to add "Sacrifice health" and "Sacrifice SP" to the combo box)
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)