mIRC Home    About    Download    Register    News    Help

Print Thread
#246227 29/05/14 10:29 AM
Joined: May 2014
Posts: 9
C
Codica Offline OP
Nutrimatic drinks dispenser
OP Offline
Nutrimatic drinks dispenser
C
Joined: May 2014
Posts: 9
I want my turnbased battl egam eto have levels.
I use this to set the levels:

Code:
on *:TEXT:!setlevels*:#:{
  if ($nick == Codica) {
    set %levelsetter $2
    setlevels
    msg $chan Set $2 's level to %levelshow. [ $+ [ %levelsetter ] ]
  }
}

alias setlevels {
  set %xp %xp. [ $+ [ %levelsetter ] ]

  if (%xp == $null) {
    set %lvl. $+ %levelsetter 0
    set %lvlshow. $+ %levelsetter ⓪
    HALT
  }
  if (%xp == 0) {
    if (%xp > 0) {
      if (%xp > 249) {
        if (%xp > 499) {
          if (%xp > 999) {
            if (%xp > 1499) {
              if (%xp > 1999) {
                if (%xp > 2499) {
                  if (%xp > 2999) {
                    if (%xp > 3999) {
                      if (%xp > 4999) {
                        if (%xp > 5999) {
                          if (%xp > 6999) {
                            if (%xp > 7999) {
                              if (%xp > 8999) {
                                if (%xp > 9999) {
                                  if (%xp > 11999) {
                                    if (%xp > 13999) {
                                      if (%xp > 15999) {
                                        if (%xp > 17999) {
                                          if (%xp > 19999) {
                                            set %lvl. $+ %levelsetter 20
                                            set %lvlshow. $+ %levelsetter ⑳
                                            RETURN
                                          }
                                          set %lvl. $+ %levelsetter 19
                                          set %lvlshow. $+ %levelsetter ⑲
                                          RETURN
                                        }
                                        set %lvl. $+ %levelsetter 18
                                        set %lvlshow. $+ %levelsetter ⑱
                                        RETURN
                                      }
                                      set %lvl. $+ %levelsetter 17
                                      set %lvlshow. $+ %levelsetter ⑰
                                      RETURN
                                    }
                                    set %lvl. $+ %levelsetter 16
                                    set %lvlshow. $+ %levelsetter ⑯
                                    RETURN
                                  }
                                  set %lvl. $+ %levelsetter 15
                                  set %lvlshow. $+ %levelsetter ⑮
                                  RETURN
                                }
                                set %lvl. $+ %levelsetter 14
                                set %lvlshow. $+ %levelsetter ⑭
                                RETURN
                              }
                              set %lvl. $+ %levelsetter 13
                              set %lvlshow. $+ %levelsetter ⑬
                              RETURN
                            }
                            set %lvl. $+ %levelsetter 12
                            set %lvlshow. $+ %levelsetter ⑫
                            RETURN
                          }
                          set %lvl. $+ %levelsetter 11
                          set %lvlshow. $+ %levelsetter ⑪
                          RETURN
                        }
                        set %lvl. $+ %levelsetter 10
                        set %lvlshow. $+ %levelsetter ⑩
                        RETURN
                      }
                      set %lvl. $+ %levelsetter 9
                      set %lvlshow. $+ %levelsetter ⑨
                      RETURN
                    }
                    set %lvl. $+ %levelsetter 8
                    set %lvlshow. $+ %levelsetter ⑧
                    RETURN
                  }
                  set %lvl. $+ %levelsetter 7
                  set %lvlshow. $+ %levelsetter ⑦
                  RETURN
                }
                set %lvl. $+ %levelsetter 6
                set %lvlshow. $+ %levelsetter ⑥
                RETURN
              }
              set %lvl. $+ %levelsetter 5
              set %lvlshow. $+ %levelsetter ⑤
              RETURN
            }
            set %lvl. $+ %levelsetter 4
            set %lvlshow. $+ %levelsetter ④
            RETURN
          }
          set %lvl. $+ %levelsetter 3
          set %lvlshow. $+ %levelsetter ③
          RETURN
        }
        set %lvl. $+ %levelsetter 2
        set %lvlshow. $+ %levelsetter ②
        RETURN
      }
      set %lvl. $+ %levelsetter 1
      set %lvlshow. $+ %levelsetter ①
      RETURN
    }
    set %lvl. $+ %levelsetter 0
    set %lvlshow. $+ %levelsetter ⓪
    RETURN
  }
}



What is wrong with this code?

(those &#1561 thingys are supposed to be numbers inside circles)

Last edited by Codica; 29/05/14 10:30 AM.
Codica #246228 29/05/14 01:04 PM
Joined: Jan 2004
Posts: 1,358
L
Hoopy frood
Offline
Hoopy frood
L
Joined: Jan 2004
Posts: 1,358
Unless you've set this variable somewhere else, it will halt:
Code:
set %xp %xp. [ $+ [ %levelsetter ] ]

  if (%xp == $null) {


These conditions will never both be true:
Code:
  if (%xp == 0) {
    if (%xp > 0) {


Besides that, this could be done better. I don't know where you're getting the %xp from, so I changed !setlevels to take it as an argument.

Code:
on *:text:!setlevels & &:#:{
  if ($nick != Codica) return

  var %user = $$2, %xp = $$3
  var %level = $set.level(%user, %xp)
  var %display = $level.display(%level)

  if (%level != $null) msg $chan Set %user $+ 's level to %display
  else msg $chan Could not set %user $+ 's level.
}

alias set.level {
  var %user = $$1, %xp = $$2
  var %level = $xp.level(%xp)

  if (%level != $null) set %lvl. $+ %user %level

  return %level
}

alias xp.level {
  var %xp = $$1
  if (%xp !isnum) return

  if (%xp >= 12000) return $int($calc(10 + %xp / 2000))
  elseif (%xp >= 3000) return $int($calc(5 + %xp / 1000))
  elseif (%xp >= 500) return $int($calc(2 + %xp / 500))
  elseif (%xp > 0) return $int($calc(1 + %xp / 250))
  else return 0
}

alias xp.level.alt {
  var %xp = $$1, %boundries = 0 250 500 1000 1500 2000 2500 3000 4000 5000 6000 7000 8000 9000 10000 12000 14000 16000 18000 20000
  if (%xp !isnum) return
  
  var %level = $numtok(%boundries,32)
  while (%level) {
    if (%xp >= $gettok(%boundries,%level,32)) break
    dec %level
  }
  
  return %level
}

alias level.display {
  var %level = $$1
  if (%level !isnum) return

  if (%level > 0) return $chr($calc(9311 + %level))
  elseif (%level == 0) return $chr(9450)
}


Link Copied to Clipboard