alias _msg { 
  if (!%left) set %left 04,01(07(08 
  if (!%right) set %right 07)04) 
  var %msg = $iif($ini(ugs.ini,$$1,output),$readini(ugs.ini,$$1,output),msg)
  if ($readini(ugs.ini,$$1,NPC) == $true) var %msg = echo -a
  . $+ %msg $$1 %left $+ $$2- $+ %right 
}

alias bot_ban {
  if ($1 ischan) {
    if ($ini(ugs.ini,$2)) {
      if ($readini(ugs.ini,1,fighting) == yes) lfield $1 $2
      if ($3 == -u) && ($4 isnum) var %switch = -ku $+ $4,%msg = $5-,%ignore = $4
      else var %switch = -k,%msg = $3-,%ignore = 3
      .ignore -u $+ %ignore $address($$2,2)
      ban %switch $$1 $$2 2 %left $+ Enforced BotBan $iif(%msg,04[00 $+ %msg $+ 04]08) $+ %right
    }
    else return Error: No such user $qt($2)
  }
  else return Syntax: /bot_ban <#channel> <nickname> [[-u #][comment]]
}

on *:TEXT:*:#: {
  if (!$(%chan.flood. $+ $nick,2)) set -u10 $+(%,chan.flood.,$nick)
  inc -u5 %chan.flood. $+ $nick
  if ($($+(%,chan.flood.,$nick),2) >= 15) {
    if ($readini(ugs.ini,$nick,fighting) == yes) lfield $chan $nick
    _msg $nick FLOODING - 07508 minute BotBan 
    bot_ban $chan $nick -u 300 Flooding - 5 minutes
    unset %chan.flood. $+ $nick
    halt
  }
  if ($1 == !start) {
    if ($left($nick,2) != CS) && ($right($nick,-2) !isnum 1000-9999) {
      _msg $chan Welcome to SuperSmashBros Tournament v0.5 (Beta).
      _msg $chan Characters Syntax: !chr [character] to choose a character. 
      _msg $chan -> Characters Syntax cont'd: No character returns the list of chracters  
    }
    else _msg $nick Erroneous Nickname: CS[1000-9999] are reserved for AI players
  }
  if ($1 == !chr) { 
    if (!$2-) || (!$ini(ugc.ini,$2-)) { 
      var %all = $ini(ugc.ini,0),%char
      while (%all) {
        if ($readini(ugc.ini,$ini(ugc.ini,%all),playable)) {
          var %char = %char $iif(%char,-) $ini(ugc.ini,%all)
        }
        dec %all
      }
      _msg $nick $iif(%char,%char,none currently....)
    }
    else {
      writeini ugs.ini $nick chr $2-
      if (!$ini(ugs.ini,$nick,gen)) {  
        writeini ugs.ini $nick DMG 0
        writeini ugs.ini $nick EXP 0
        writeini ugs.ini $nick Fighting No
        writeini ugs.ini $nick output msg
        _msg $chan Okay. What is your gender? (!male/!female)
        .auser Gen $nick
      }
      writeini ugs.ini $nick ATK1 $readini(ugc.ini,$2-,ATK1)
      writeini ugs.ini $nick ATK2 $readini(ugc.ini,$2-,ATK2)
      writeini ugs.ini $nick ATK3 $readini(ugc.ini,$2-,ATK3)
    }
  }
  elseif ($1 == !set) {
    if ($ini(ugs.ini,$nick)) {
      if ($ini(ugs.ini,$nick,$2)) {
        if ($2 == output) {
          if ($istok(msg notice,$3,32)) {
            writeini ugs.ini $nick output $3
            _msg $nick Output method changed
          }
          else _msg $nick Invalid output method; MSG or NOTICE only
        }
      }
    }
  }
  elseif (!male == $1-) {
    if ($level($nick) == Gen) {
      _msg $chan Your gender has been set to: 'Male'
      writeini ugs.ini $nick Gender him
      _msg $chan You are now registered with the character: $readini(ugs.ini,$nick,chr) $+ . Type !fight to enter combat    
      .ruser $nick
    }
  }
  elseif (!Female == $1-) {
    if ($level($nick) == Gen) {
      _msg $chan Your gender has been set to: 'Female'
      writeini ugs.ini $nick Gender her
      _msg $chan You are now registered with the character: $readini(ugs.ini,$nick,chr) $+ . Type !fight to enter combat
      .ruser $nick 
    }
  }
  if ($1 == !stats) {
    var %temp.nick $iif($2 !ison $chan,$nick,$2)
    if (!$readini(ugs.ini,%temp.nick,CHR)) { _msg $nick You/They are not registered. Say: !Start | return }
    if (!$ini(ugs.ini,%temp.nick,EXP)) { _msg $nick Error - There is a problem with your/their stats. Say !start to re-register. | return }
    _msg $nick 04<08Character: $readini(ugs.ini,%temp.nick,CHR) $+ 04> <08Damage: $readini(ugs.ini,%temp.nick,DMG) $+ % $+ 04> <08EXP: $readini(ugs.ini,%temp.nick,EXP) $+ 04> <08Fighting: $readini(ugs.ini,%temp.nick,fighting) $+ 04>08 $iif($readini(ugs.ini,%temp.nick,lo),04<08Locked on to: $readini(ugs.ini,%temp.nick,lo) $+ 04>08)
    _msg $nick 04<08Attack 1: $readini(ugs.ini,%temp.nick,ATK1) $+ 04> <08Attack 2: $readini(ugs.ini,%temp.nick,ATK2) $+ 04> <08Attack 3: $readini(ugs.ini,%temp.nick,ATK3) $+ 04>08
  }
  elseif ($1 == !help) {
    if (!$2) {
      _msg $nick Topics: Battling - Registration - Stats - Adding more soon! | return
      _msg $nick Syntax: !Help <topic>
    }
    if ($2 == Battling) {
      _msg $nick !Fight brings you both in & out of combat
      _msg $nick - While in fighting, you may attack other users. This can be achieved two ways, locking on, and not.
      _msg $nick - To lock on type !lo <nick>. To attack, type !atk <1-3> [nick]. 
      _msg $nick - Locking on means you don't need to type the target and is more accurate
    }
    if ($2 == Registration) _msg $nick To register, type !start in $chan
    if ($2 == Stats) _msg $nick To view stats type !stats [nick] - *[nick] is optional
    if ($2 == Set) _msg $nick !Set is still an incomplete command. ONLY Syntax: !set output [notice|msg] 
  }
  if ($1 == !fight) {
    if (!$readini(ugs.ini,$nick,CHR)) { _msg $nick You are not registered. Say: !Start | return }
    if ($readini(ugs.ini,$nick,fighting) == yes) { _msg $chan $_nick($nick) starts running from the battle field.. | .timer 1 $r(1,10) lfield $chan $nick | return }
    else {
      set %fighting $addtok(%fighting,$nick,32)
      writeini ugs.ini $nick fighting Yes
      if ($readini(ugs.ini,$nick,DMG) > 0) writeini ugs.ini $nick DMG 0
      _msg $chan $_nick($nick) has entered the field! To lock on to $readini(ugs.ini,$nick,Gender) say !lo <nick>.
    }
  }
  if ($1 == !lo) {
    if ($1 != !lo) { return }
    if (!$2-) && (!$readini(ugs.ini,$nick,lo)) { _msg $nick Error - Say !Help Battling to learn how to lock on. | return }
    if (!$2-) && ($readini(ugs.ini,$nick,lo)) { _msg $chan $_nick($nick) has stopped locking on to $readini(ugs.ini,$nick,lo) $+ . | remini ugs.ini $nick lo | return }
    if (!$istok(%fighting,$2,32)) { _msg $nick Error - That person is not here. | return }
    if ($readini(ugs.ini,$nick,fighting) != Yes) { _msg $nick Error - You are not in the field. Say: !Fight | return }
    if ($readini(ugs.ini,$2,fighting) != Yes) { _msg $nick Error - That person is not in the field. Say: !Fight | return }
    _msg $chan $_nick($nick) begins targeting $_nick($2) $+ ..
    .timer 1 5 lo $chan $nick $2
  }
  if ($1 == !atk) attack $chan $nick $$2-
  if ($1 == !fighting) { 
    var %1 = 1,%names 
    while (%1 <= $numtok(%fighting,32)) {
      var %names = %names $_nick($gettok(%fighting,%1,32))
      inc %1
    }
    _msg $nick 04<08Currently Fighting: $iif(%names,%names,N/A) $+ 04>08
  }
}

alias attack { 
  tokenize 32 $1-
  if (!$readini(ugs.ini,$2,lo)) {
    if ($3 !isnum 1-3) || (!$istok(%fighting,$4,32)) { _msg $2 Error - You're not locked on to anyone. !help battling | halt }
    else var %temp.lo = $4,%temp.miss = 5 
  }
  elseif ($readini(ugs.ini,$2,lo)) { 
    if ($3 isnum 1-3) var %temp.lo = $readini(ugs.ini,$2,lo),%temp.miss = 3
    else { _msg $2 Error - Type !help battling for info | halt }
  }
  if ($readini(ugs.ini,$2,fighting)) { 
    if ($readini(ugs.ini,%temp.lo,fighting)) { 
      if ($istok(%fighting,%temp.lo,32)) { 
        if ($readini(ugs.ini,$2,attacking) != Yes) { 
          writeini ugs.ini $2 attacking Yes
          .timer 1 10 datk $1 $2
          if (!%temp.miss) var %temp.miss $r(3,5) 
          var %tmp.exdmg $rand(1,100)
          if (%tmp.exdmg isnum 40-60) {
            var %dmg = $readini(ugs.ini,%temp.lo,dmg)
            if ($right(%dmg,-2) >= 5) { var %critical $true | %tmp.exdmg = $r(150,250) }
            else {
              if (!%x) var %x = $r(1,5),%y = $r(1,5) 
              if (%x == %y) { var %critical $true | %tmp.exdmg = $r(150,250) }
            }
          }
          if (%tmp.exdmg isnum 91-100) var %dmgout = %great_hit
          elseif (%tmp.exdmg isnum 61-90) var %dmgout = %good_hit
          elseif (%tmp.exdmg isnum 46-60) var %dmgout = %norm_hit  
          if (%critical) var %dmgout = %crit_hit
          var %temp.hom = $r($2,%temp.miss),%temp.atk = $readini(ugs.ini,$2,$($+(atk,$3),2))
          if (%temp.hom == 1) { _msg $1 $_nick($2) attacks $_nick(%temp.lo) with %temp.atk $+ .. but misses! | halt }
          var %tmp.dmg = %tmp.exdmg,%hp = $calc($readini(ugs.ini,%temp.lo,DMG) + %tmp.dmg)
          var %exp = $r(1,40)
          writeini ugs.ini $2 EXP $calc($readini(ugs.ini,$2,EXP) + %exp)
          writeini ugs.ini %temp.lo DMG %hp
          _msg $1 %dmgout $_nick($2) attacks $_nick(%temp.lo) with  $+ %temp.atk $+ ! $_nick(%temp.lo) gains $+(07,$iif(%tmp.dmg < 10,0 $+ %tmp.dmg,%tmp.dmg),,$chr($asc(%))) 08damage! 04(00 $+ $iif(%hp < 10,0 $+ %hp,%hp)) $+ % $+ 04)08; $_nick($2) gains 10 $+ %exp 08exp!
          if (%critical) {
            set %fighting $remtok(%fighting,%temp.lo,1,32)
            writeini ugs.ini %temp.lo fighting No
            writeini ugs.ini %temp.lo DMG 0
            remini ugs.ini %temp.lo lo
            _msg $1 $_nick(%temp.lo) has been knocked out of combat
            npc_check $1 %temp.lo
          }
          var %temp.llo $rand(1,5)
          if (%temp.llo == 1) && ($readini(ugs.ini,%temp.lo,lo)) {
            _msg $1 $_nick(%temp.lo) has lost their lock on to 04(11 $+ $readini(ugs.ini,%temp.lo,lo) $+ 04)08 as a result of the attack.
            remini ugs.ini %temp.lo lo
            return
          }
        }
        else _msg $2 Error - You're already attacking
      }
      else _msg $2 Error - That person isn't on $chan
    }
    else _msg $2 Error - That person is not on the field
  }
  else _msg $2 Error - You're not on the field. Type !fight 
}

alias lfield {
  set %fighting $remtok(%fighting,$2,1,32)
  writeini ugs.ini $2 fighting No
  writeini ugs.ini $2 DMG 0
  remini ugs.ini $2 lo
  _msg $1 $_nick($2) has escaped from the battle field!
  npc_check $1 $2
}
alias _nick return  $+ $$1 04(11 $+ $$readini(ugs.ini,$$1,chr) $+ 04)08
alias lo {
  writeini ugs.ini $2 lo $3
  _msg $1 $_nick($2) has locked on to $_nick($3) $+ ... Type !ATK <1-3> to attack $readini(ugs.ini,$nick,Gender) $+ .
}
alias datk {
  writeini ugs.ini $2 attacking No
  _msg $1 $_nick($2) has finished $readini(ugs.ini,$nick,Gender) attack.
}
alias npc_random {
  var %randchar = $r(1,$$ini(ugc.ini,0)),%charname = $ini(ugc.ini,%randchar),%name = CF $+ $r(1000,9999),%style = $r(1,3)
  npc_spawn $$1 %name %style %charname
}
alias npc_spawn {
  if (!$ini(ugc.ini,%name)) {
    writeini ugs.ini $2 chr $4-
    writeini ugs.ini $2 NPC $true

    ;writeini ugs.ini $2 style $3

    if ($3 == 2) writeini ugs.ini $2 atk_turns 3
    writeini ugs.ini $2 ATK1 $readini(ugc.ini,$4-,atk1)
    writeini ugs.ini $2 ATK2 $readini(ugc.ini,$4-,atk2)
    writeini ugs.ini $2 ATK3 $readini(ugc.ini,$4-,atk3)
    writeini ugs.ini $2 fighting Yes
    set %fighting $addtok(%fighting,$2,32)
    if ($1 ischan) {
      _msg $1 $_nick($2) has been spawn'd 
      .timer 1 5 //npc_attack $1 $2 
    }
  }
}
alias npc_attack {
  tokenize 32 $1-
  npc_check $1 $2
  var %all = $remove(%fighting,$2),%n = $r(1,$numtok(%all,32))
  var %target = $iif(!$readini(ugs.ini,$2,lo),$gettok(%all,%n,32)),%style = $readini(ugs.ini,$2,style)

  ;if (%style == 1) writeini ugs.ini $2 lo %target
  ;if (%style == 2) {
  ;  if ($readini(ugs.ini,$2,target_turns) <= 0) { 
  ;    writeini ugs.ini $2 target_turns 3
  ;    writeini ugs.ini $2 lo %target
  ;  }
  ;  else writeini ugs.ini $2 $calc($readini(ugs.ini,$2,target_turns) -1)
  ;}
  ;elseif ($readini(ugs.ini,$2,lo)) remini ugs.ini $2 lo

  if ($istok(%fighting,%target,32)) { attack $1 $2 $r(1,3) %target | .timer 1 $r(10,30) npc_attack $1 $2 }
}
alias npc_check {
  if ($readini(ugs.ini,$2,NPC)) {
    if ($readini(ugs.ini,$2,fighting) == No) { 
      remini ugs.ini $$2
      var %n = $r(1,2),%t = $r(15,45)
      if (%n == 1) {
        if ($1 ischan) .timer 1 %t npc_random $$1
      }
      halt
    }
  }
}
alias fighting_sync {
  var %fighters = 1
  while (%fighters <= $ini(ugs.ini,0)) {
    var %name = $ini(ugs.ini,%fighters),%npc = $readini(ugs.ini,%name,npc),%fight = $readini(ugs.ini,%name,fighting)
    if (%npc) npc_check %fighters        
    else {
      if ($istok(%fighting,%name,32)) && (%fight == No) { set %fighting $remove(%fighting,%name) | if ($1 === -s) echo $color(Info) -a * %name fix'd }
      elseif (!$istok(%fighting,%name,32)) && (%fight == yes) { set %fighting $addtok(%fighting,%name,32) | if ($1 === -s) echo $color(Info) -a * %name fix'd }
    }
    inc %fighters
  }
  if ($1 === -s) echo $color(Info) -a * Finished synchronizing
}
menu channel {
  ...Plugins
  ...Configure Character Plugin
  ..Add character:chrconfig add
  ..Del character:chrconfig del
}
alias chrconfig {
  if ($1 == add) {
    set %chrname $$?="What is the characters name?"
    writeini ugc.ini %chrname Name %chrname
    writeini ugc.ini %chrname atk1 $$?="What is this characters STRONGEST attack?"
    writeini ugc.ini %chrname atk2 $$?="What is this characters AVERAGE attack?"
    writeini ugc.ini %chrname atk3 $$?="what is this characters WEAKEST attack?"
    echo -a Character Created!
  }
  if ($2 == del) {
    set %remnick $$?="What is the characters name?"
    remini ugc.ini %remnick
  }
}
;End
