[Beta] D&D style combat duelling system

By Afterburn1000 on Jun 09, 2015

-EDITED- Current Version: Beta 1.5

This is a Duelling system I am working on. It is still a work in progress so there may be some unforeseen issues and may not be properly balanced. I have written this with the intention of it being used on Twitch, however it could also be used in IRC, however may require some editing

This System was written to use Twitch whispers (to cut down on chat spam).

The system is separated into phases for the different actions.

Challenge Phase: From when one user challenges another until that user accepts the challenge or 5 minutes passes (automatic decay)
!challenge [nick of someone in chat] - challenges that user to a duel
!duel accept/refuse - accepts or refuses the duel challenge (after having been challenged)

Equipment Phase: From the acceptance of a challenge until both users equip a class, weapon and set of armour before ready up for combat
!equipment - displays all currently available equipment
!equip weapon/armour/class [identifier] - equips the specified weapon/armour/class set. (must equip 1 class, 1 weapon and 1 armour set)
!ready - confirms your equipment and if both users are ready progresses to the combat phase
!status - displays your current Health, class, weapon, armour set and your stats (as determined by your equipment)

"DuelSystem.ini","Weapons.ini", "Classes.ini", "BasicMagic.ini" and "Armour.ini" files are used to store class, weapon and armour information.
Placeholder files are available at https://www.dropbox.com/sh/qzou4k4lgrxdq53/AADsGt5FvXYb7x8W8xIhaCAaa?dl=0. Follow a similar format to create your own equipment.

Combat Phase: From both users readying themselves until one user's health reaches 0 or surrenders.
!Attack - attacks your opponent for damage dependent on your weapon
!defend - reduces incoming damage by double your maximum armour value (Only works when you move before your opponent)
!magic - casts a magical attack at your opponent (magic depends on weapon equipped, damage dependent on equipment)
!surrender - Your opponent wins

Below is the script for the entire system so far (with some placeholder values). This includes an experience and leveling system I am currently working on. Eventually this will dictate what equipment and abilities are available to you.

You can check your own experience using "!Experience" and the experience of another user using "!Experience [Target]" (if moderator)

If you wish to test the execution of the script at all it is being run on my Twitch chat bot which you can access at Twitch.tv/Burn_bot (This requires 2 users)

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
================================================= Challenge Phase ========================================================================
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

on *:text:!Challenge*:#:{
    if ($($+(%,floodchallenge.,$nick,.,$chan),3)) { return }
  If ($($+(%,Challenge.,$nick,.,$chan),3)) || ($($+(%,Duel.,$nick,.,$chan),3)) {
    msg $chan /w $nick You have already been challenged or are in a duel on $right($chan,-1) $+ 's channel. Please deny any duel requests or finish your current duel before challenging someone.
    set -u10 %floodchallenge. $+ $nick $+ . $+ $chan On
    Halt
  }
  If ($2 ison $chan) {
    if ($nick == $2) {
      msg $chan /w $nick You cannot challenge yourself to a duel, please challenge someone else
      set -u10 %floodchallenge. $+ $nick $+ . $+ $chan On
      halt
    }
    If ($($+(%,Challenge.,$2,.,$chan),3)) || ($($+(%,Duel.,$2,.,$chan),3)) {  
      msg $chan /w $nick $2 has already been challenged or is currently in a duel on $right($chan,-1) $+ 's channel, please wait until they are finished before challenging them.
      Halt
    }
    set -u120 %floodchallenge. $+ $nick $+ . $+ $chan On
    set -u300 %challenge. $+ $nick $+ . $+ $chan on
    set -u300 %challenge. $+ $2 $+ . $+ $chan on
    set -u300 %challenged. $+ $2 $+ . $+ $chan on
    writeini -n DuelSystem.ini $chan $+ . $+ $nick Opponent $2
    writeini -n DuelSystem.ini $chan $+ . $+ $2 Opponent $nick
    msg $chan /w $nick you have challenged $2 to a duel on $right($chan,-1) $+ 's channel. $2 must use "!Duel Accept/Decline"  to respond to the challenge.
    msg $chan /w $2 You have been challenged by $nick on $right($chan,-1) $+ 's channel. You must use "!Duel Accept/Decline" to respond to this challenge.
    halt
  }
  msg $chan /w $nick I do not recognise anyone by that name in $right($chan,-1) $+ 's channel, please check your spelling and try again.
  set -u5 %floodchallenge. $+ $nick $+ . $+ $chan On
  halt
}

on *:text:!Duel*:#:{
    if ($($+(%,floodduel.,$nick,.,$chan),3)) { return }
  If ($($+(%,Challenge.,$nick,.,$chan),3)) && ($($+(%,Challenged.,$nick,.,$chan),3)) {
    if ($2 == accept) {
      set %duel. $+ $nick $+ . $+ $chan on
      set %duel. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan on
      set -u30 %floodduel. $+ $nick $+ . $+ $chan On
      set %equip.phase. $+ $nick $+ . $+ $chan on
      set %equip.phase. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan on
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Health 100
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats Health 100
      unset %challenge. $+ $nick $+ . $+ $chan
      unset %challenge. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan
      unset %challenged. $+ $nick $+ . $+ $chan
      ;Timers for automatic decay of duel due to inactive user
      timer $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ duel1 1 180 /msg $chan /w $nick You have not readied for combat for your duel against $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) on $right($chan,-1) $+ 's channel. The Duel will end in 2 minutes if you don't "!Ready" up. 
      timer $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ duel2 1 300 /msg $chan /w $nick Your duel against $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) on $right($chan,-1) $+ 's channel has been closed due to inaction. 
      timer $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ end.duel 1 300 End.Duel
      timer $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ duel1 1 180 /msg $chan /w $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) You have not readied for combat in your duel against $nick on $right($chan,-1) $+ 's channel. The Duel will end in 2 minutes if you don't "!Ready" up.
      timer $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ duel2 1 300 /msg $chan /w $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) Your duel against $nick on $right($chan,-1) $+ 's channel has been closed due to inaction.
      timer $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ end.duel 1 300 End.Duel 
      msg $chan /me $nick has accepted $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ 's duel. 
      msg $chan /w $nick Progressing to the Equipment phase, please "!Equip" your desired "!Classes" and then "!Equipment"
      msg $chan /w $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) Progressing to the Equipment phase, please "!Equip" your desired "!Classes" and then "!Equipment"       
      halt
    }
    if ($2 = $null) {
      msg $chan /w $nick you must specify whether you Accept or Refuse the challenge in $right($chan,-1) $+ 's channel.
      halt
    }
    if ($2 == decline) {
      unset %challenge. $+ $nick $+ . $+ $chan
      unset %challenge. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan

      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ 's challenge has been refused.
      unset %challenged. $+ $nick $+ . $+ $chan
      halt
    }
    else {
      msg $chan /w $nick You have not specified whether you would like to Accept or Refuse the challenge correctly. Please use "!Duel Accept" or "!Duel Decline".
      halt
    }
  }
  msg $chan /w $nick You have not been challenged or the challenge has expired on $right($chan,-1) $+ 's channel, try challenging your desired opponent.
  set -u30 %floodduel. $+ $nick $+ . $+ $chan On
  halt
}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
================================================= Equipment Phase ========================================================================
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

on *:text:!Equipment:#:{
    if ($($+(%,floodequipment.,$nick,.,$chan),3)) { return }
  if ($($+(%,equip.phase.,$nick,.,$chan),3)) {
    if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class) = $null) {
      msg $chan /w $nick Your available Classes are: $readini(DuelSystem.ini,n,Equipables,Classes) $iif($nick isop $chan,. As a mod you can also use $readini(DuelSystem.ini,n,Equipables,ModClasses) $+ !,)
      set -u30 %floodClasses. $+ $nick $+ . $+ $chan On       
      halt
    }
    msg $chan /w $nick Your available weapons are: $readini(Classes.ini,n,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Weapons) $iif($nick isop $chan,As a mod you can also use $readini(DuelSystem.ini,n,Equipables,ModWeapons) $+ !,) Your available armours are: $readini(Classes.ini,n,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Armour)
    set -u30 %floodequipment. $+ $nick $+ . $+ $chan On  
    halt
  }
  msg $chan /w $nick You are not in the Equip Phase on $right($chan,-1) $+ 's channel and cannot access your equipment at the moment.
  set -u30 %floodequipment. $+ $nick $+ . $+ $chan On
  halt
}

on *:text:!Equip*:#:{
    if ($($+(%,floodequip.,$nick,.,$chan),3)) { return }
  if ($($+(%,equip.phase.,$nick,.,$chan),3)) {
    if ($2 == Class) {
      if ($readini(Classes.ini,$3,Weapons) != $null) {
        if ($3 isin $readini(DuelSystem.ini,Equipables,ModClasses)) {
          ;if trying to equip mod only class          
          if ($nick isop #) {
            writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Equipment Class $3
            msg $chan /w $nick You equip $3 as your class, make sure you equip an armour set and a weapon and then "!Ready" up!
            halt
          }
          ;if not a mod
          msg $chan /w $nick You cannot equip $3 as your class, as you are not a moderator on $right($chan,-1) $+ 's channel.
          Halt
        }
        ;if not equipping mod only class
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Equipment Class $3
        msg $chan /w $nick You equip $3 as your class, make sure you equip an armour set and a weapon and then "!Ready" up!
        halt
      }
      goto IdentifierIssue
    }
    if ($2 == Weapon) || ($2 == Armour) || ($2 == Armor) {
      if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class) != $null) {
        if ($readini(Weapons.ini,$3,Damage) != $null) || ($readini(Armour.ini,$3,Defense) != $null) {
          if ($2 == Weapon) { 
            if ($3 isin $readini(DuelSystem.ini,Equipables,ModWeapons)) {
              ;if trying to equip mod only weapon          
              if ($nick isop #) {
                writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Equipment Weapon $3
                msg $chan /w $nick You equip $3 as your Weapon, make sure you equip an armour set and then "!Ready" up!
                halt
              }
              ;if not a mod
              msg $chan /w $nick You cannot equip $3 as your weapon, as you are not a moderator on $right($chan,-1) $+ 's channel.
              Halt
            }           
            if ($3 isin $readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Weapons)) {            
              writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Equipment Weapon $3
              msg $chan /w $nick You equip $3 as your weapon, make sure you equip an armour set and then "!Ready" up!
              halt
            }
            msg $chan /w $nick You cannot equip $3 as your weapon as the class you have equipped cannot use that weapon, either equip a different class or equip a different weapon!
            halt
          }
          if ($2 == Armour) || ($2 == Armor) {
            if ($3 isin $readini(DuelSystem.ini,Equipables,ModArmour)) {
              ;if trying to equip mod only weapon          
              if ($nick isop #) {
                writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Equipment Armour $3
                msg $chan /w $nick You equip $3 as your Armour set, make sure you equip a Weapon and then "!Ready" up!
                halt
              }
              ;if not a mod
              msg $chan /w $nick You cannot equip $3 as your armour, as you are not a moderator on $right($chan,-1) $+ 's channel.
              Halt
            }               
            if ($3 isin $readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Armour)) {            
              writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Equipment Armour $3
              msg $chan /w $nick You equip $3 as your armour set, make sure you equip a weapon and then "!Ready" up!
              halt
            }
            msg $chan /w $nick You cannot equip $3 as your armour as the class you have equipped cannot use that armour, either equip a different class or equip a different armour!
            halt
          }
        }
        :IdentifierIssue
        msg $chan /w $nick Something is wrong with your identifier! Please check your spelling and try again.
        halt
      }
      :NoClass
      msg $chan /w $nick You have not yet chosen a class to equip for this duel, type "!Classes" to see those available to you.
      halt
    }
    msg $chan /w $nick Something is wrong with your command! Please use "!Equip (Weapon/Class/Armour) [Item Identifier]"
    halt
  }
  msg $chan /w $nick You are not currently in the equipment phase on $right($chan,-1) $+ 's channel! You can only choose your equipment whilst in the equipment phase.
  set -u30 %floodequip. $+ $nick $+ . $+ $chan On
  halt
}

on *:text:!Ready:#:{
    if ($($+(%,floodready.,$nick,.,$chan),3)) { return }
  if (($($+(%,Ready.,$nick,.,$chan),3))) {
    msg $chan /w $nick You are already ready for combat on $right($chan,-1) $+ 's channel... if you're not, you had better be quickly!
    set -u60 %floodready. $+ $nick $+ . $+ $chan On
    halt
  } 
  if ($($+(%,combat.phase.,$nick,.,$chan),3)) {
    msg $chan /w $nick You are already in combat on $right($chan,-1) $+ 's channel! What do you mean you weren't ready until now!?
    halt
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon) != $null) && ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour) != $null) && ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class) != $null) {
    ;set $nick as Ready   
    set %Ready. $+ $nick $+ . $+ $chan on
    ;Stop Duel Auto Decay for inaction
    timer $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ * off
    ;if Opponent is ready
    if (($($+(%,Ready.,$readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),.,$chan),3))) {
      unset %equip.phase. $+ $nick $+ . $+ $chan 
      unset %equip.phase. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan 
      unset %Ready. $+ $nick $+ . $+ $chan 
      unset %Ready. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan 
      set %combat.phase. $+ $nick $+ . $+ $chan on
      set %combat.phase. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan on
      writeini DuelSystem.ini $chan $+ . $+ $nick round 1
      writeini DuelSystem.ini $chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) round 1
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Damage $readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Damage)
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats Damage $readini(Weapons.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Weapon),Damage)
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Intelligence $calc($readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Intelligence) + ($readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Intelligence) + ($readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Intelligence))))
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats Intelligence $calc($readini(Armour.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Armour),Intelligence) + ($readini(Weapons.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Weapon),Intelligence) + ($readini(Classes.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Class),Intelligence))))
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats MaxMana $readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Mana)
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats MaxMana $readini(Classes.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Class),Mana)
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Mana $readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Mana)
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats Mana $readini(Classes.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Class),Mana)
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Critical $readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Critical)
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats Critical $readini(Weapons.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Weapon),Critical)
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Defense $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Defense)
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats Defense $readini(Armour.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Armour),Defense)
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Dodge $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Dodge)
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats Dodge $readini(Armour.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Armour),Dodge)
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Speed $calc($readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Speed) + $readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Speed))
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats Speed $calc($readini(Armour.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Armour),Speed) + $readini(Weapons.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Weapon),Speed))
      msg $chan /w $nick Continuing to the combat phase. Please select whether you would like to "!Attack", "!Defend" or cast "!Magic" this round.
      msg $chan /w $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) Continuing to the combat phase. Please select whether you would like to "!Attack", "!Defend" or cast "!Magic" this round.       
      halt
      set -u120 %floodready. $+ $nick $+ . $+ $chan On
    }
    msg $chan /w $nick You are now ready to begin combat!
    msg $chan /w $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $nick is now ready to begin combat, "!Ready" yourself to begin combat!           
    set -u120 %floodready. $+ $nick $+ . $+ $chan On
    halt
  }
  msg $chan /w $nick You do not have a weapon, class or set of armour equipped, please check your "!Status" and "!equip" a weapon, class and set of armour before you "!Ready" up!
  set -u10 %floodequip. $+ $nick $+ . $+ $chan On
  halt
}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
================================================= Combat Phase ========================================================================
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Alias -l Combat { 
  if ($rand(1,2) = 1) {
    ;$nick attacks first!
    UserAction
    UserReport
    OpponentAction
    OpponentReport
    EndRound    
  }    
  ;Opponent attacks first
  OpponentAction
  OpponentReport
  UserAction
  UserReport
  EndRound
}

Alias -l UserAction { 
  ;What action did $nick choose?
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == attack) {
    UserAttack
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == defend) {
    return
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == magic) {
    UserMagic
  }
}

Alias -l UserAttack { 
  If ($rand(1,100) > 10) {
    ;Attack hits
    if ($rand(1,100) > $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Dodge)) {
      ;Attack is not dodged
      if ($rand(1,100) < $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Critical)) {
        ;Attack is a critical hit 2x Dmg
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) Critical
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Attack Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) $calc($rand($calc($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Damage) - 5),$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Damage)) + $rand($calc($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Damage) - 5),$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Damage)))
      }
      else {
        ;Attack is not a critical hit  1x Dmg       
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) Hit
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Attack Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) $rand($calc($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Damage) - 5),$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Damage))
      }      
      ;Damage absorbed by armour
      ;if Opponent defended      
      if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Defend) {
        writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Defense Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) $calc(2 * $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Defense))
      }
      else { 
        writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Defense Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) $rand(1,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Defense))
      }  
      ;Write health loss
      if ($calc($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) - $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round))) >= 1) {
        ;if damage is more than defense
        writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats Health $calc($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health) - $calc($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) - $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round))))
      }
      ;if defense is more than damage -> no damage taken
    }
    else { 
      ;Attack dodged
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) Dodge
    }
  }
  Else { 
    ;Attack misses
    writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) Miss
  }
}

Alias -l UserMagic {
  If ($rand(1,100) > 70) {
    ;Attack hits
    if ($rand(1,100) > $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Dodge)) {
      ;Attack is not dodged
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) Hit
      ;Damage absorbed by armour
      ;if Opponent defended      
      if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Defend) {
        writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Defense Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) $calc(2 * $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Defense))
      }
      else { 
        writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Defense Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) $rand(1,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Defense))
      }  
      ;write health loss
      if ($calc($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Intelligence) - $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round))) >= 1) {
        ;if damage is more than defense
        writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Stats Health $calc($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health) - $calc($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Intelligence) - $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round))))
      }
      ;if defense is more than damage -> no damage taken
    }
    else { 
      ;Attack dodged
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) Dodge
    }
  }
  Else { 
    ;Attack misses
    writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) Miss
  }
}

Alias -l OpponentAction { 
  if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == attack) {
    OpponentAttack  
  }
  if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == defend) {
    return
  }
  if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == magic) {
    OpponentMagic  
  }
}

Alias -l OpponentAttack { 
  If ($rand(1,100) > 10) {
    ;Attack hits
    if ($rand(1,100) > $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Dodge)) {
      ;Attack is not dodged
      if ($rand(1,100) < $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Critical)) {
        ;Attack is a critical hit 2x Dmg
        writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) Critical
        writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Attack Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) $calc($rand($calc($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Damage) - 5),$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Damage)) + $rand($calc($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Damage) - 5),$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Damage)))
      }
      else {
        ;Attack is not a critical hit  1x Dmg       
        writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) Hit
        writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Attack Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round) $rand($calc($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Damage) - 5),$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Damage))
      }     
      ;Damage absorbed by armour
      ;if $nick defended      
      if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) == Defend) {
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Defense Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) $calc(2 * $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Defense))
      }
      else { 
        ;if $nick didn't defend
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Defense Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) $rand(1,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Defense))
      }     
      ;Write health after attack (damage reduced by armour)
      if ($calc($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) - $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round))) >=1) {
        ;if damage = more than defense    
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Health $calc($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) - $calc($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) - $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round))))
      }
      ;if defense = or more than damage -> take no damage
    }
    else { 
      ;Attack dodged
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) Dodge
    }
  }
  Else { 
    ;Attack misses
    writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) Miss
  }
}

Alias -l OpponentMagic {
  If ($rand(1,100) > 70) {
    ;Attack hits
    if ($rand(1,100) > $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Dodge)) {
      ;Attack is not dodged
      writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) Hit
      ;Damage absorbed by armour
      ;if $nick defended      
      if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) == Defend) {
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Defense Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) $calc(2 * $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Defense))
      }
      else { 
        ;if $nick didn't defend
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Defense Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) $rand(1,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Defense))
      }     
      ;Write health after attack (damage reduced by armour)
      if ($calc($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Intelligence) - $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round))) >= 1) {
        ;if defense is less than damage        
        writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Health $calc($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) - $calc($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Intelligence) - $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round))))
      }
      ;if defense is = or more than attack -> no damage taken
    }
  }   
  else { 
    ;Attack dodged
    writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) Dodge
  }
  Else { 
    ;Attack misses
    writeini Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini Hit Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) Miss
  }
}

Alias -l UserReport { 

  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == attack) {
    UserAttackReport
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == defend) {
    UserDefendReport
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == magic) {
    UserMagicReport
  }
}

Alias -l UserAttackReport { 
  If ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health) < 1) || (- isin $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health)) {
    ;if opponent Dies
    ;if opponent defended
    if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Defend) {
      msg $chan /me $nick attacks $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) for  $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) damage! They defend for $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) damage! Sadly it was not enough... $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) has died. $nick wins the duel!
      Duel.UserWon $nick $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent)   
      End.Duel
      halt  
    }    
    else {
      msg $chan /me $nick attacks $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) for  $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) damage! $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) has died. $nick wins the duel!
      Duel.UserWon $nick $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent)       
      End.Duel
      halt   
    }    
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Miss) {
    ;attack misses
    msg $chan /me $nick attacks $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) and misses.
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Dodge) {
    ;attack dodged
    msg $chan /me $nick attacks $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) who dodges the attack.
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Hit) {
    ;attack hits  
    ;if opponent defended
    if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Defend) {
      msg $chan /me $nick attacks $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) for  $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) damage! They defend for $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) damage! $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) has $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health) health remaining.
    }    
    else {
      msg $chan /me $nick attacks $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) for  $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) damage! $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) has $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health) health remaining.
    }
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Critical) {
    ;attack is a crit hit
    ;if opponent defended
    if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Defend) {
      msg $chan /me $nick attacks $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ 's weak spot for  $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) critical damage! They defend for $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) damage! $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) has $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health) health remaining.
    }    
    else {
      msg $chan /me $nick attacks $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ 's weak spot for  $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) critical damage! $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) has $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health) health remaining.
    }
  }
}

Alias -l UserDefendReport {
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Speed) > $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Speed)) { 
    msg $chan /me $nick defends in preparation for $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ 's attack.
  }
  else {
    msg $chan /me $nick tries to defend against $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ 's attack, but was too slow.
  }
}

Alias -l UserMagicReport {
  RNGMagicReport User
  ;Chooses random Magic report from list

  If ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health) < 1) || (- isin $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health)) {
    ;if opponent Dies
    ;if opponent defended
    if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Defend) {
      msg $chan /me $nick %RNGMagicReportUser $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) for $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Intelligence) damage! They defend for $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) damage! Sadly it was not enough... $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) has died. $nick wins the duel!
      Duel.UserWon $nick $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent)      
      End.Duel
      halt   
    }    
    else {
      msg $chan /me $nick %RNGMagicReportUser $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) for $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Intelligence) damage! $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) has died. $nick wins the duel!
      Duel.UserWon $nick $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) 
      End.Duel
      halt
    }
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Miss) {
    ;attack misses
    msg $chan /me $nick %RNGMagicReportUser $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) and misses.
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Dodge) {
    ;attack dodged
    msg $chan /me $nick %RNGMagicReportUser $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) who dodges the attack.
  }
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Hit) {
    ;attack hits  

    ;if opponent defended
    if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Defend) {
      msg $chan /me $nick %RNGMagicReportUser $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) for  $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Intelligence) damage! They defend for $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) damage! $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) has $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health) health remaining.
    }    
    else {
      msg $chan /me $nick %RNGMagicReportUser $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) for  $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Intelligence) damage! $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) has $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Health) health remaining.
    } 
  }
}

Alias -l OpponentReport { 

  ;Opponent's actions
  if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == attack) {
    OpponentAttackReport  
  }
  if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == defend) {
    OpponentDefendReport  
  }
  if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == magic) {
    OpponentMagicReport  
  }
}

Alias -l OpponentAttackReport { 
  If ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) < 1) || (- isin $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health)) {
    ;if $nick Dies
    ;if $nick defended
    if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) == Defend) {
      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) attacks $nick for  $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) damage! They defend for $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) damage! Sadly it was not enough... $nick has died. $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) wins the duel!
      Duel.OpponentWon $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $nick 
      End.Duel
      halt
    }    
    else {
      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) attacks $nick for  $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) damage! $nick has died. $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) wins the duel!
      Duel.OpponentWon $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $nick
      End.Duel
      halt   
    }    
  } 
  if ( $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Miss) {
    ;Attack misses
    msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) attacks $nick and misses!  
  }
  if ( $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Dodge) {
    ;attack is dodged
    msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) attacks $nick who dodges the attack!
  }
  if ( $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Hit) {
    ;Attack hits

    ;attack hits  
    ;if $nick defended
    if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) == Defend) {
      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) attacks $nick for $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) damage! They defend for $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) damage! $nick has $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health remaining.
    }    
    else {
      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) attacks $nick for $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) damage! $nick has $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health remaining.
    }
  }
  if ($readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) == Critical) {
    ;attack is a crit hit
    ;if opponent defended
    if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) == Defend) {
      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) attacks $nick $+ 's weak spot for  $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) critical damage! They defend for $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) damage! $nick has $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health remaining.
    }    
    else {
      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) attacks $nick $+ 's weak spot for  $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Attack,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) critical damage! $nick has $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health remaining.
    }
  }
}

Alias -l OpponentDefendReport {
  if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Speed) > $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Speed)) { 
    msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) tries to defend against $nick $+ 's attack, but was too slow.
  }
  else {
    msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) defends in preparation for $nick $+ 's attack.
  }
}

Alias -l OpponentMagicReport {
  RNGMagicReport Opponent
  ;Chooses random Magic report from list

  If ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) !>= 1) || (- isin $readini(Duel $+ . $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health)) {
    ;if $nick Dies
    ;if $nick defended
    if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) == Defend) {
      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) %RNGMagicReportOpponent $nick for  $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Intelligence) damage! They defend for $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) damage! Sadly it was not enough... $nick has died. $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) wins the duel!
      Duel.OpponentWon $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $nick 
      End.Duel
      return  
    }    
    else {
      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) %RNGMagicReportOpponent $nick for  $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Intelligence) damage! $nick has died. $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) wins the duel!
      Duel.OpponentWon $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $nick
      End.Duel
      return
    }
  } 
  if ( $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Miss) {
    ;Attack misses
    msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) %RNGMagicReportOpponent $nick and misses!  
  }
  if ( $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Dodge) {
    ;attack is dodged
    msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) %RNGMagicReportOpponent $nick who dodges the attack!
  }
  if ( $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Hit,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)) == Hit) {
    ;Attack hits

    if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Action,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) == Defend) {
      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) %RNGMagicReportOpponent $nick for  $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Intelligence) damage! They defend for $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Defense,Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round)) damage! $nick has $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health remaining!    
    }    
    else {
      msg $chan /me $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) %RNGMagicReportOpponent $nick for  $readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Stats,Intelligence) damage! $nick has $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health remaining!
    } 
  }
}

Alias -l EndRound { 
  unset %combat.round.action. $+ $nick $+ . $+ $chan
  unset %combat.round.action. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan
  writeini DuelSystem.ini $chan $+ . $+ $nick round $calc($readini(DuelSystem.ini,$chan $+ . $+ $nick,round) + 1)
  writeini DuelSystem.ini $chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) round $calc($readini(DuelSystem.ini,$chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),round) + 1)
  halt
}

Alias -l End.Duel {
  unset %combat.round.action. $+ $nick $+ . $+ $chan
  unset %combat.round.action. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan
  unset %combat.phase. $+ $nick $+ . $+ $chan
  unset %combat.phase. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan
  unset %duel. $+ $nick $+ . $+ $chan
  unset %duel. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan
  remove Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini
  remove Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini
  remini DuelSystem.ini $chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) 
  remini DuelSystem.ini $chan $+ . $+ $nick 
}

on *:text:!Attack*:#:{
    if ($($+(%,floodattack.,$nick,.,$chan),3)) { return } 
  if ($($+(%,combat.phase.,$nick,.,$chan),3)) {
    ;if $nick is in the Combat Phase
    ;Stop Duel Auto Decay for inaction
    timer $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ * off
    if ($($+(%,combat.round.action.,$nick,.,$chan),3)) {
      ;if $nick has already performed !attack, !defend or !magic
      msg $chan /w $nick You have already committed to your action on $right($chan,-1) $+ 's channel this round, please wait until the next round!
      set -u10 %floodattack. $+ $nick $+ . $+ $chan On
      halt
    }
    else {
      ;if $nick has not already performed !attack, !defend or magic
      set %combat.round.action. $+ $nick $+ . $+ $chan on
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Action Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)  $right($1,-1)
      ;sets attack,defend or magic as the action performed by $nick

      if ($($+(%,combat.round.action.,$readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),.,$chan),3)) {
        ;if opponent has already chosen their action
        ;perform round actions.
        Combat
      }
      else {
        msg $chan /w $nick You have chosen to $right($1,-1) this round!
        msg $chan /w $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $nick has chosen to $right($1,-1) this round!        
        halt
      }  
    }
  }
  else { msg $chan /w $nick You are not in combat on $right($chan,-1) $+ 's channel! You cannot attack outside of a duel's combat phase!
    set -u30 %floodattack. $+ $nick $+ . $+ $chan On    
    halt
  }
}

on *:text:!Defend*:#:{
    if ($($+(%,flooddefend.,$nick,.,$chan),3)) { return }  
  if ($($+(%,combat.phase.,$nick,.,$chan),3)) {
    ;if $nick is in the Combat Phase
    ;Stop Duel Auto Decay for inaction
    timer $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ * off
    if ($($+(%,combat.round.action.,$nick,.,$chan),3)) {
      ;if $nick has already performed !attack, !defend or !magic
      msg $chan /w $nick You have already committed to your action on $right($chan,-1) $+ 's channel this round, please wait until the next round!
      set -u10 %flooddefend. $+ $nick $+ . $+ $chan On      
      halt
    }
    else {
      ;if $nick has not already performed !attack, !defend or magic
      set %combat.round.action. $+ $nick $+ . $+ $chan on
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Action Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)  $right($1,-1)
      ;sets attack,defend or magic as the action performed by $nick

      if ($($+(%,combat.round.action.,$readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),.,$chan),3)) {
        ;if opponent has already chosen their action
        ;perform round actions.
        Combat
      }
      else {
        msg $chan /w $nick You have chosen to $right($1,-1) this round!
        msg $chan /w $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $nick has chosen to $right($1,-1) this round!        
        halt
      }  
    }
  }
  else { msg $chan /w $nick You are not in combat on $right($chan,-1) $+ 's channel! You cannot defend outside of a duel's combat phase!
    set -u30 %flooddefend. $+ $nick $+ . $+ $chan On   
    halt
  }
}

on *:text:!Magic*:#:{
   if ($($+(%,floodmagic.,$nick,.,$chan),3)) { return }
  if ($($+(%,combat.phase.,$nick,.,$chan),3)) {
    ;if $nick is in the Combat Phase
    ;Stop Duel Auto Decay for inaction
    timer $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ * off
    if ($($+(%,combat.round.action.,$nick,.,$chan),3)) {
      ;if $nick has already performed !attack, !defend or !magic
      msg $chan /w $nick You have already committed to your action on $right($chan,-1) $+ 's channel this round, please wait until the next round!
      set -u10 %floodmagic. $+ $nick $+ . $+ $chan On      
      halt
    }
    else {
      ;if $nick has not already performed !attack, !defend or magic
      If ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Mana) < 25) {
        ;if user doesn't have enough mana 
        msg $chan /w $nick You do not have enough mana to cast $right($1,-1) this round, please choose another action!
        halt
      }     
      set %combat.round.action. $+ $nick $+ . $+ $chan on
      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Action Round $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,round)  magic
      ;sets attack,defend or magic as the action performed by $nick

      writeini Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini Stats Mana $calc($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Mana) - 25)
      ;removal of mana for spell cast

      if ($($+(%,combat.round.action.,$readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent),.,$chan),3)) {
        ;if opponent has already chosen their action
        ;perform round actions.
        Combat
      }
      else {
        msg $chan /w $nick You have chosen to cast $right($1,-1) this round!
        msg $chan /w $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $nick has chosen to cast $right($1,-1) this round!        
        halt
      }  
    }
  }
  else { msg $chan /w $nick You are not in combat on $right($chan,-1) $+ 's channel! You cannot use magic outside of a duel's combat phase!
    set -u30 %floodmagic. $+ $nick $+ . $+ $chan On  
    halt
  }
}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
================================================= RNG Aliases ========================================================================
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Alias -l RNGMagicReport {
  if ($1 = user) {  
    set -0N %RNGMagicReportUser $readini(BasicMagic.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),$rand(1,2))
  }
  if ($1 = opponent) {
    set -0N %RNGMagicReportOpponent $readini(BasicMagic.ini,$readini(Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini,Equipment,Weapon),$rand(1,2))
  }
}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
================================================= Phase Independent ========================================================================
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

on *:text:!status:#:{
    if ($($+(%,floodstatus.,$nick,.,$chan),3)) { return } 
  if ($($+(%,Duel.,$nick,.,$chan),3)) {
    if ($($+(%,equip.phase.,$nick,.,$chan),3)) {
      if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon) != $null) && ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour) != $null) && ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class) != $null) {
        ;if class, weapon and armour equipped
        msg $chan /w $nick $nick for your duel on $right($chan,-1) $+ 's channel you currently have $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health and $readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Mana) Mana. You are a $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Class) and have a $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon) and $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour) armour equipped. You're current stats are $readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Damage) Damage, $readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Critical) Critical chance, $calc($readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Intelligence) + ($readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Intelligence) + ($readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Intelligence)))) Intelligence, $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Defense) Defense, $calc($readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),speed) + $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Speed)) Speed and a $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Dodge) Dodge chance. If you are happy with your equipment be sure to !Ready up!
        set -u20 %floodstatus. $+ $nick $+ . $+ $chan On       
        halt
      }
      if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon) = $null) && ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour) != $null) {
        ;if armour equipped (no weapon)    
        msg $chan /w $nick $nick for your duel on $right($chan,-1) $+ 's channel you currently have $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health, are a $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Class) and are wearing $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Armour) armour and do not have a weapon equipped. You're current equipment gives you the following stats $calc($readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Intelligence) + ($readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Intelligence))) Intelligence, $readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Mana) Mana, $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Armour),Defense) Defense, $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Armour),Speed) Speed and a $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Armour),Dodge) Dodge chance
        set -u20 %floodstatus. $+ $nick $+ . $+ $chan On        
        halt
      }
      if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon) != $null) && ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour) = $null) {
        ;if weapon equipped (no armour)     
        msg $chan /w $nick $nick for your duel on $right($chan,-1) $+ 's channel you currently have $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health and are a $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Class) with a $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Weapon) as your weapon and do not have any armour equipped. You're current equipment gives you the following stats $readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Weapon),Damage) Damage, $readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Weapon),Critical) Critical chance, $calc($readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Intelligence) + ($readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Intelligence))) Intelligence, $readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Mana) Mana, $readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Weapon),speed)
        set -u20 %floodstatus. $+ $nick $+ . $+ $chan On
        halt     
      }
      if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon) = $null) && ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour) = $null) && ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class) != $null) {
        ;if only class equipped       
        msg $chan /w $nick $nick for your duel on $right($chan,-1) $+ 's channel you currently have $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health, are a $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class) and do not have any armour or weapons equipped. Your Class gives you $readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Intelligence) Intelligence and $readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Mana) Mana. 
        set -u20 %floodstatus. $+ $nick $+ . $+ $chan On
        halt
      }
      if ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon) = $null) && ($readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour) = $null) {
        ;if nothing equipped       
        msg $chan /w $nick $nick for your duel on $right($chan,-1) $+ 's channel you currently have $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health and do not have a class or any armour or weapons equipped.
        set -u20 %floodstatus. $+ $nick $+ . $+ $chan On
        halt
      }    
    }
    if ($($+(%,combat.phase.,$nick,.,$chan),3)) {
      msg $chan /w $nick $nick for your duel on $right($chan,-1) $+ 's channel you currently have $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Health) health and $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Stats,Mana) Mana. You are a $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini, Equipment,Class) and have a $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon) and $readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour) armour equipped. You're current stats are $readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Damage) Damage, $readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Critical) Critical chance, $calc($readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Intelligence) + ($readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),Intelligence) + ($readini(Classes.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Class),Intelligence)))) Intelligence, $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Defense) Defense, $calc($readini(Weapons.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Weapon),speed) + $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Speed)) Speed and a $readini(Armour.ini,$readini(Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini,Equipment,Armour),Dodge) Dodge chance.
      set -u20 %floodstatus. $+ $nick $+ . $+ $chan On
      halt
    }
  }
  msg $chan /w $nick You are not currently in a duel on $right($chan,-1) $+ 's channel, "!Challenge" someone if you would like to duel them!
  set -u20 %floodstatus. $+ $nick $+ . $+ $chan On
  halt
}

on *:Text:!surrender:#:{
    if ($($+(%,floodsurrender.,$nick,.,$chan),3)) { return }
  if ($($+(%,Duel.,$nick,.,$chan),3)) {  
    msg $chan /me $nick Surrenders to $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ ! $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) wins the duel!
    unset %combat.round.action. $+ $nick $+ . $+ $chan
    unset %combat.round.action. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan
    unset %combat.phase. $+ $nick $+ . $+ $chan
    unset %combat.phase. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan
    unset %duel. $+ $nick $+ . $+ $chan
    unset %duel. $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $chan
    remove Duel $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ . $+ $nick $+ .ini
    remove Duel $+ . $+ $nick $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) $+ .ini
    remini DuelSystem.ini $chan $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $nick,Opponent) Opponent
    remini DuelSystem.ini $chan $+ . $+ $nick Opponent
    set -u60 %floodsurrender. $+ $nick $+ . $+ $chan On 
    halt
  }
  else {
    msg $chan /w $nick You are not currently in a duel on  $right($chan,-1) $+ 's channel, "!Challenge" someone if you would like to duel them!
    set -u20 %floodsurrender. $+ $nick $+ . $+ $chan On
    halt
  }
}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
================================================= Experience System Interactions ========================================================================
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

alias -l Duel.UserWon {
  ; $1 = User $2 = Opponent     
  ;User's Winnings 
  EXP.rand5-15 winnings $1
  add.EXP $1 $readini(Duel $+ . $+ $1 $+ . $+ $2 $+ .ini,Experience,winnings)
  ;Opponent's Losings
  EXP.rand2-8 loss $2
  rem.EXP $2 $readini(Duel $+ . $+ $2 $+ . $+ $1 $+ .ini,Experience,loss)
  ;Report
  msg $chan /me $1 gains $readini(Duel $+ . $+ $1 $+ . $+ $2 $+ .ini,Experience,winnings) Experience for defeating $2 $+ , who loses $readini(Duel $+ . $+ $2 $+ . $+ $1 $+ .ini,Experience,loss) Experience.
}

alias -l Duel.OpponentWon {
  ; $1 = Opponent $2 = User
  ;Opponent's Winnings 
  EXP.rand5-15 winnings $1
  add.EXP $1 $readini(Duel $+ . $+ $1 $+ . $+ $2 $+ .ini,Experience,winnings)
  ;User's Losings
  EXP.rand2-8 loss $2
  rem.EXP $2 $readini(Duel $+ . $+ $2 $+ . $+ $1 $+ .ini,Experience,loss)
  ;Report
  msg $chan /me $1 gains $readini(Duel $+ . $+ $1 $+ . $+ $2 $+ .ini,Experience,winnings) Experience for defeating $2 $+ , who loses $readini(Duel $+ . $+ $2 $+ . $+ $1 $+ .ini,Experience,loss) Experience.
}

alias -l EXP.rand5-15 {
  if ($readini(Experience.ini,. $+ $2,Experience) = $null) {
    if ($readini(TransientExperience.ini,. $+ $2,Experience) = $null) {
      if ($readini(VariableExperience.ini,. $+ $2,Experience) = $null) {  
        writeini Duel $+ . $+ $2 $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $2,Opponent) $+ .ini Experience $1 100
        return
      }
      if ($readini(VariableExperience.ini,. $+ $2,Experience) < 150 ) {
        writeini Duel $+ . $+ $2 $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $2,Opponent) $+ .ini Experience $1 $round($calc($rand(5,15)* $calc(($readini(VariableExperience.ini,. $+ $2,Experience)/100)+20)),0)
        return
      }
      writeini Duel $+ . $+ $2 $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $2,Opponent) $+ .ini Experience $1 $round($calc($rand(5,15)* $calc($readini(VariableExperience.ini,. $+ $2,Experience)/100)),0)
      return
    }
    writeini Duel $+ . $+ $2 $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $2,Opponent) $+ .ini Experience $1 $round($calc($rand(5,15)* $calc($readini(TransientExperience.ini,$+ . $2,Experience)/100)),0)
    return  
  }
  if ($readini(Experience.ini,. $+ $2,Experience) != $null) {
    writeini Duel $+ . $+ $2 $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $2,Opponent) $+ .ini Experience $1 $round($calc($rand(5,15)* $calc($readini(Experience.ini,. $+ $2,Experience)/100)),0)
    return  
  }
}

alias -l EXP.rand2-8 {
  if ($readini(Experience.ini,. $+ $2,Experience) = $null) {
    if ($readini(TransientExperience.ini,. $+ $2,Experience) = $null) {
      if ($readini(VariableExperience.ini,. $+ $2,Experience) = $null) {  
        writeini Duel $+ . $+ $2 $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $2,Opponent) $+ .ini Experience $1 0
        return
      }
      writeini Duel $+ . $+ $2 $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $2,Opponent) $+ .ini Experience $1 $round($calc($rand(5,15)* $calc($readini(VariableExperience.ini,. $+ $2,Experience)/100)),0)
      return
    }
    writeini Duel $+ . $+ $2 $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $2,Opponent) $+ .ini Experience $1 $round($calc($rand(5,15)* $calc($readini(TransientExperience.ini,$+ . $2,Experience)/100)),0)
    return  
  }
  if ($readini(Experience.ini,. $+ $2,Experience) != $null) {
    writeini Duel $+ . $+ $2 $+ . $+ $readini(DuelSystem.ini,$chan $+ . $+ $2,Opponent) $+ .ini Experience $1 $round($calc($rand(5,15)* $calc($readini(Experience.ini,. $+ $2,Experience)/100)),0)
    return  
  }
}

alias -l add.EXP {
  if ($readini(Experience.ini,. $+ $1,Experience) = $null) {
    if ($readini(TransientExperience.ini,. $+ $1,Experience) = $null) {
      if ($readini(VariableExperience.ini,. $+ $1,Experience) = $null) {  
        writeini -n VariableExperience.ini . $+ $1 Experience $2
        return
      }
      if ($readini(VariableExperience.ini,. $+ $1,Experience) < 500) {
        writeini -n VariableExperience.ini . $+ $1 Experience $calc($readini(VariableExperience.ini,. $+ $1,Experience) + $2)
        return
      }
      if ($readini(VariableExperience.ini,. $+ $1,Experience) >= 500) {
        Writeini -n TransientExperience.ini . $+ $1 Experience $calc($readini(VariableExperience.ini,. $+ $1,Experience) + $2)
        writeini -n DNDLevel.ini . $+ $1 SkillPoints $calc($readini(DNDLevel.ini,. $+ $1, SkillPoints) + 1)       
        remini VariableExperience.ini . $+ $1
        return
      }
    }
    if ($readini(TransientExperience.ini,. $+ $1,Experience) < 1000) {
      writeini -n TransientExperience.ini . $+ $1 Experience $calc($readini(TransientExperience.ini,. $+ $1,Experience) + $2)
      return
    }
    if ($readini(TransientExperience.ini,. $+ $1,Experience) >= 1000) {
      Writeini -n Experience.ini . $+ $1 Experience $calc($readini(TransientExperience.ini,. $+ $1,Experience) + $2)    
      writeini -n DNDLevel.ini . $+ $1 SkillPoints $calc($readini(DNDLevel.ini,. $+ $1, SkillPoints) + 1)            
      writeini -n DNDLevel.ini . $+ $1 GeneralLevel $calc($readini(DNDLevel.ini,. $+ $1, GeneralLevel) + 1)            
      remini TransientExperience.ini . $+ $1
      return
    }
  }
  if ($readini(Experience.ini,. $+ $1,Experience) != $null) {
    writeini -n Experience.ini . $+ $1 Experience $calc($readini(Experience.ini,. $+ $1,Experience) + $2)
    if ($calc($readini(Experience.ini,. $+ $1,Experience) - calc($readini(DNDLevel.ini,. $+ $1, GeneralLevel)* 1000)) >= 1000) {
      writeini -n DNDLevel.ini . $+ $1 SkillPoints $calc($readini(DNDLevel.ini,. $+ $1, SkillPoints) + 1)            
      writeini -n DNDLevel.ini . $+ $1 GeneralLevel $calc($readini(DNDLevel.ini,. $+ $1, GeneralLevel) + 1)            
    }    
    return
  }
}

alias -l rem.EXP {
  if ($readini(Experience.ini,. $+ $1,Experience) = $null) {
    if ($readini(TransientExperience.ini,. $+ $1,Experience) = $null) {
      if ($readini(VariableExperience.ini,. $+ $1,Experience) = $null) {  
        writeini -n VariableExperience.ini . $+ $1 Experience - $+ $2
        return
      }
      if ($readini(VariableExperience.ini,. $+ $1,Experience) < 500) {
        writeini -n VariableExperience.ini . $+ $1 Experience $calc($readini(VariableExperience.ini,. $+ $1,Experience) - $2)
        return
      }
      if ($readini(VariableExperience.ini,. $+ $1,Experience) >= 500) {
        Writeini -n TransientExperience.ini . $+ $1 Experience $calc($readini(VariableExperience.ini,. $+ $1,Experience) - $2)
        remini VariableExperience.ini . $+ $1
        return
      }
    }
    if ($readini(TransientExperience.ini,. $+ $1,Experience) < 1000) {
      writeini -n TransientExperience.ini . $+ $1 Experience $calc($readini(TransientExperience.ini,. $+ $1,Experience) - $2)
      return
    }
    if ($readini(TransientExperience.ini,. $+ $1,Experience) >= 1000) {
      Writeini -n Experience.ini . $+ $1 Experience $calc($readini(TransientExperience.ini,. $+ $1,Experience) - $2)    
      remini TransientExperience.ini . $+ $1
      return
    }
  }
  if ($readini(Experience.ini,. $+ $1,Experience) != $null) {
    writeini -n Experience.ini . $+ $1 Experience $calc($readini(Experience.ini,. $+ $1,Experience) - $2)
    return
  }
}

on *:text:!Experience:#:{
   if ($($+(%,floodExperience.,$chan),2)) || ($($+(%,floodExperience.,$nick,.,$chan),3)) { return }
  set -u5 %floodExperience. $+ $chan On
  set -u60 %floodExperience. $+ $nick $+ . $+ $chan On
  if ($readini(Experience.ini,$+(,.,$nick),Experience) != $null) {
    msg # /me $nick has $readini(Experience.ini,$+(,.,$nick),Experience) Experience.
    halt
  }
  if ($readini(TransientExperience.ini,$+(,.,$nick),Experience) != $null) {
    msg # /me $nick has $readini(TransientExperience.ini,$+(,.,$nick),Experience) Experience.
    halt
  }
  if ($readini(VariableExperience.ini,$+(,.,$nick),Experience) != $null) {
    msg # /me $nick has $readini(VariableExperience.ini,$+(,.,$nick),Experience) Experience.
    halt
  }
}

on *:text:!Experience*:#:{
  if ($nick isop #) {
    if ($readini(Experience.ini,$+(,.,$2),Experience) != $null) {
      msg # /me $2 has $readini(Experience.ini,$+(,.,$2),Experience) Experience.
      halt
    }
    if ($readini(TransientExperience.ini,$+(,.,$2),Experience) != $null) {
      msg # /me $2 has $readini(TransientExperience.ini,$+(,.,$2),Experience) Experience.
      halt
    }
    if ($readini(VariableExperience.ini,$+(,.,$2),Experience) != $null) {
      msg # /me $2 has $readini(VariableExperience.ini,$+(,.,$2),Experience) Experience.
      halt
    }
    msg $chan /w $nick I do not recognise anyone by the name " $+  $2 $+ ", either they have no Experience or there is an error in your spelling, please try again.
    halt
  }
  msg $chan /w $nick You are not permitted to use the "!Experience [User]" command on $right($chan,-1) $+ 's channel as you are not a moderator.
}

Comments

Sign in to comment.
Afterburn1000   -  Jun 15, 2016

Updated to Beta 1.5

Classes, experience, leveling and randomised magical attacks added. Also added a dropbox download link for all associated files not automatically generated by the snippet.

 Respond  
DerekSlide   -  Sep 28, 2015

I run a loyalty point system based on Dragonball Z and I think my viewers would love this system. Is there a way we can discuss perhaps using your script but modified for DBZ? Please, feel free to message me on twitter or twitch, https://twitter.com/DerekSlide, https://www.facebook.com/DerekSlide.

Hope to hear from you soon, thank you!

Derek.

Afterburn1000  -  Oct 03, 2015

I'm sure we can work on a personalised version for you, I have tweeted you from @Burn_bot_tweets. Could you please specify what kind of changes you would want to make? Would they be functional or purely cosmetic (I.e. just changing the words and such used)

Also would you be looking to run this on your own bot? In which case to make any point system interactions I will need to know what system you are using and how and where its data is stored to interact with it.

DerekSlide  -  Oct 04, 2015

Thank you for getting back to me! I appreciate your time.

Essentially I want a tournament system that would pit everyone who enters the tourney against one another and have victors based on how much points they risk. The more they risk in comparison to others the more likely they win. Although they can still lose (I'd like the chance of loss to be no lower than 35%). Currently using the !hesit minigame with names changed and it's randomness needs to be curbed to really simulate an actual torunament with power levels(loyalty points) be taken into account.

Then a Duel command that would again take Power level into account, with a combat system that would allow for Melee, Ki-based attacks and Defend/Dodge.

THat's it in a nutshell. Currently using Ankhbot; I mistakenly thought you were the creator :/ That aside, I really like what you've done here for DND, and that's why I took the time to contact you. LEt me know if we can correspond more on this subject, at your convenience.

Thanks again o7,

Derek Slide.

(PS: We can correspond privately on Twitter should you desire!)

Afterburn1000  -  Oct 04, 2015

Apologies for half this conversation taking place on Twitter and half taking place here. So you are currently using Ankhbot which is where your points system is based? I'm afraid that I currently don't really know anything about Ankhbot, including how it stores its information. This is vital for interactions with a points system. I will do some research but the easiest way for me to implement this system would be to script it for one of Burn_bot's points system.

Before I get too far into discussing how things should be implemented have you tested my duel system on Twitch.tv/Burn_bot (requires more than one person to test)? As it seems you expect/wish for duels to be very short and mostly determined by starting stats (or your "power levels" in your case) which you essentially pay for, in something that in my head resembles a "Pay-to-Win" model. Whereas my system is (at least currently) more long-winded and has a large element of randomness (similar to D'n'D) with series of Die rolls. I still have a lot of balancing and such to do before the system is complete though (hence beta) I would suggest you see how the system currently works to give you an idea what I have achieved.

Also when you say Tourney do you wish for something similar to a series of !heist commands, where each "round" is completed very quickly by a random number generator (in your case also influenced by points "risked") or something more like a traditional tournament, in this case being a series of duels based off my above script where people fight each other so the winner can progress to duel the winner of another fight and so on?

Apologies for all this, I just want to be sure I understand what it is you want to achieve and how you wish to achieve it.

Please feel free to email me at burnbot.contact@gmail.com with any further information, requests or the like.

Afterburn

(P.S. While it is nice being compared to AnkhHeart please understand that I am just a self-taught amateur that wanted to make their own bot. And I still have a hell of a lot to learn! :P)

Sign in to comment

Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.