Zion Sphinx — File Browser

ZionSphinxv3.0 / ZionSphinxv3.0 / zionuser.mrc

zionuser.mrc — 29.56 KB — Download this file

; --------< Zion >----------------------------------------------------
; Name....: Zion User System
; File....: zionuser.mrc
; Ver.....: 1.0b280807
; Author..: sprion
; Email...: sprion@lyniq.com
; Date....: 28 Aug 07
; URL.....: http://zion.zincplay.com
; Info....: User System
; Changes.: Fixed an issue that allowed users to bypass login and get Gamelist working.
;---------------------------------------------------------------------
;translatable
; script unload signal
on *:signal:zion_unload:.unload -rs $+(",$script,")
;on *:signal:zion_check:if (%zion.s.pvar.syn) return | var %f $z3.pfile | if ($crc(%f) != $z.h.getvar(pfile)) z3.spf
;on *:signal:zion_mirc_start:if (!$isfile($+(",$scriptdir,user.dat,"))) { z.echo error: $z.lang(err,3) | zion.unload }
;on *:load:z3.spf
alias -l saveID return zion_userinfo
alias zion.user.id return ZIONUSER.280807

on *:signal:zion_cmdlistopen:{
  zion.listcmd z.modpop ; Increases or decreases a user's popularity. ; /z.modpop <+|-> <forumID> ; /z.modpop + sprion
  zion.listcmd z.deauth ; Logs off Zion, allowing you to sign in as another user.
  zion.listcmd z.myinfo ; Opens your Userinfo Window.
}
alias zion_user_auth {
  var %p = -mdr
  if ($left($1,1) = -) %p = $1
  else %zion.s.auth.store = $1-
  dialog %p zion_user_auth zion_user_auth_table
}

dialog zion_user_auth_table {
  title $z.lang(user,dialogname)
  size -1 -1 405 231
}

on *:dialog:zion_user_auth:*:*: {
  if ($devent == init) {
    dll_mc SetIcon -w $dialog($dname).hwnd 1 $z.icl
    dcx Mark $dname zion_user_auth_cb
    xdialog -b $dname +ty
    zion_user_auth_init_dcx
    beep 2
    flash $z.lang(user,loginflash)
  }
}

alias -l zion_user_auth_init_dcx {
  var %t $rgb(255,255,255)
  var %b $rgb(16,95,152)
  var %e $rgb(9,43,67)
  
  ;dialog bg
  xdialog -g $dname +i $z.images(userlogin.bmp)
  
  
  xdialog -c $dname 1 text 66 115 60 20
  xdid -t $dname 1 $z.lang(user,username)
  xdid -C $dname 1 +t %t
  xdid -C $dname 1 +kb %b
  xdid -f $dname 1 +a ansi 8 Tahoma
  
  xdialog -c $dname 2 edit 129 113 150 20 autohs autovs tabstop
  ;  xdid -a $dname 2
  xdid -C $dname 2 +bk %e
  xdid -C $dname 2 +t %t
  
  xdialog -c $dname 3 text 66 140 60 20
  xdid -t $dname 3 $z.lang(user,password)
  xdid -C $dname 3 +t %t
  xdid -C $dname 3 +kb %b
  xdid -f $dname 3 +a ansi 8 Tahoma
  
  xdialog -c $dname 4 edit 129 138 150 20 autohs autovs tabstop password
  ;  xdid -a $dname 4
  xdid -C $dname 4 +bk %e
  xdid -C $dname 4 +t %t
  
  xdialog -c $dname 5 button 290 133 75 25 tabstop
  xdid -t $dname 5 Log In
  
  xdialog -c $dname 9 text 130 163 120 20 transparent
  xdid -t $dname 9 $z.lang(user,loginauto)
  xdid -C $dname 9 +t %t
  xdid -C $dname 9 +kb %b
  xdid -f $dname 9 +a ansi 8 Tahoma
  
  xdialog -c $dname 8 check 258 160 20 20 tabstop right
  xdid -C $dname 8 +b %b
  xdid -c $dname 8
  
  
  xdialog -c $dname 7 link 152 178 98 20 tabstop
  xdid -t $dname 7 $z.lang(user,forgotpass)
  xdid -C $dname 7 +b %b
  xdid -f $dname 7 +a ansi 8 Tahoma
  
  xdialog -c $dname 6 link 152 195 98 20 tabstop
  xdid -t $dname 6 $z.lang(user,createacc)
  xdid -C $dname 6 +b %b
  xdid -f $dname 6 +a ansi 8 Tahoma
  
  _userauth_load $dname
  
  .timerzion.s.auth.top -o 0 1 zion_user_auth_topper $dname
}

alias zion_user_auth_topper {
  if ($dialog($1) && ($appactive) && (!$dialog($1).active)) dialog -v $1
  elseif (!$dialog($1)) .timerzion.s.auth.top off
}


;// Callback alias for zion_user_auth
alias zion_user_auth_cb {
  /*
  if ($2 != mouse) {
    echo $color(info) -s zion_user_auth_cb: $1-
  }
  */
  if ($2 = keyup) {
    if (($4 = 13) && (($3 = 2) || ($3 = 4))) { .timer 1 0 zion_user_auth_cb zion_user_auth sclick 5 }
  }
  elseif ($2 = close) {
    var %d z.options
    if ($dialog(%d)) {
      if ($hget(zsession,authed)) { xdid -b %d 131 | xdid -e %d 132 }
      else { xdid -b %d 132 | xdid -e %d 131 }
    }
    if (%zion.s.auth.store) z.deauth
    unset %zion.s.auth.*
  }
  elseif ($2 = sclick) {
    if ($3 = 7) run $+(http://,$z.forumhost,$z.forumpath,/profile.php?mode=sendpassword)
    elseif ($3 = 6) run $+(http://,$z.forumhost,$z.forumpath,/profile.php?mode=register)
    ; login
    elseif ($3 = 5) {
      var %p,%a,%v,%e 86400
      if (($xdid($1,2).text = $null) || ($xdid($1,4).text = $null)) { %e = $input($z.lang(user,enterdetails),uowd,$z.lang(err,oops)) | xdid -F $1 2 | return }
      _userauthcon -b $1
      if ($xdid($1,4).text = [jeric]) %p = $z3.findtog(auth,key)
      else %p = $md5($xdid($1,4).text)
      
      %a = $_userauth($xdid($1,2).text,%p)
      
      if (%a) {
        if ($xdid($1,8).state) z3.addtog auth key %p
        else z3.deltog auth key
        if (%zion.s.auth.store) $ifmatch
        unset %zion.s.auth.*
        dialog -x $1
      }
      else _userauthcon -e $1
    }
  }
}
alias _userreadhhhconnect {
  unset %zion.s.authcon.*
  %zion.s.authcon.c = 8624
  %zion.s.authcon.ctime = $ctime
  %zion.s.authcon.f = $1
  %zion.s.authcon.s = $2
  %zion.s.authcon.r = $3
  %zion.s.authcon.e = $iif($4,$4,1)
  %zion.s.authcon.t = $me
  sockclose zion.auth
  z.sockopen zion.auth $z.forumhost 80
  while (%zion.s.authcon.result = $null) {
    dll_wfix WhileFix
    if ($calc($ctime - %zion.s.authcon.ctime) > 15) break
  }
  return %zion.s.authcon.result
}
alias _userreadmodconnect {
  unset %zion.s.authcon.*
  %zion.s.authcon.c = 4967
  %zion.s.authcon.ctime = $ctime
  %zion.s.authcon.u = $1
  sockclose zion.auth
  z.sockopen zion.auth $z.forumhost 80
  while (%zion.s.authcon.result = $null) {
    dll_wfix WhileFix
    if ($calc($ctime - %zion.s.authcon.ctime) > 15) break
  }
  return %zion.s.authcon.result
}
alias -l _usermodpopconnect {
  unset %zion.s.authcon.*
  %zion.s.authcon.c = 5832
  %zion.s.authcon.ctime = $ctime
  %zion.s.authcon.a = $1
  %zion.s.authcon.f = $2
  sockclose zion.auth
  z.sockopen zion.auth $z.forumhost 80
  while (%zion.s.authcon.result = $null) {
    dll_wfix WhileFix
    if ($calc($ctime - %zion.s.authcon.ctime) > 15) break
  }
  return %zion.s.authcon.result
}
alias -l _userauthconnect {
  unset %zion.s.authcon.*
  %zion.s.authcon.c = 2301
  %zion.s.authcon.name = $1
  %zion.s.authcon.pass = $2
  %zion.s.authcon.ctime = $ctime
  sockclose zion.auth
  z.sockopen zion.auth $z.forumhost 80
  while (%zion.s.authcon.result = $null) {
    dll_wfix WhileFix
    if ($me ison %zion.s.data) .part %zion.s.data
    if ($calc($ctime - %zion.s.authcon.ctime) > 15) break
  }
  return %zion.s.authcon.result
}

on *:sockopen:zion.auth:{
  if ($sockerr > 0) { return }
  var %s sockwrite -n zion.auth,%m
  if (%zion.s.authcon.c = 2301) %m = $+($z.forumpath,/poop.php?a=authenticate&u=,%zion.s.authcon.name,&p=,%zion.s.authcon.pass)
  elseif (%zion.s.authcon.c = 5832) { %m = $+($z.forumpath,/poop.php?a=,%zion.s.authcon.a,&u=,$z3.findtog(auth,name),&p=,$hget(zsession,pass),&t=,%zion.s.authcon.f) }
  elseif (%zion.s.authcon.c = 4967) %m = $+($z.forumpath,/poop.php?a=read&t=,%zion.s.authcon.u)
  elseif (%zion.s.authcon.c = 8624) %m = $+($z.forumpath,/poop.php?a=hhh&u=,$z3.findtog(auth,name),&p=,$hget(zsession,pass),&t=,%zion.s.authcon.f,&s=,%zion.s.authcon.s,&r=,%zion.s.authcon.r,&v=,%zion.s.authcon.t,&o=,%zion.s.authcon.e)
  z.sendget zion.auth %m
  %s Accept: */* | %s Accept-Encoding: gzip, deflate
  %s User-Agent: non-mozilla Zion | %s Host: $z.forumhost | %s Connection: Keep-Alive | %s Cache-control: private, no-cache
  %s
}
on *:sockread:zion.auth:{
  if ($sockerr > 0) return
  var %read,%z Zion-Reply,%r,%s
  sockread -f %read
  if ($left(%read,10) = %z) {
    %r = $gettok(%read,2-,58)
    if (%zion.s.authcon.c = 2301) {
      %s = $gettok(%r,1,59)
      if (%s = valid-user) {
        %zion.s.authcon.result = 1
        if ($gettok(%r,2,59) != $null) z.h.setvar bob $ifmatch
        sockclose zion.auth
      }
      elseif ((%s = invalid-user) || (%s = inactive-user)) {
        if ($me ison %zion.s.data) .part %zion.s.data
        %zion.s.authcon.result = 0
        sockclose zion.auth
      }
    }
    elseif (%zion.s.authcon.c = 5832) {
      %zion.s.authcon.result = %r
    }
    elseif (%zion.s.authcon.c = 4967) {
      %zion.s.authcon.result = %r
    }
    elseif (%zion.s.authcon.c = 8624) {
      %zion.s.authcon.result = %r
    }
  }
}
/*
alias -l _userauth {
  ; 172800 = 2 days
  var %a,%v,%e 172800
  if ($_userauthconnect($1,$2)) {
    %a = 1
    z3.addtog auth gd2 $ctime
  }
  ; cached auth
  elseif (($calc($ctime - $z3.findtog(auth,gd2)) < %e) && ($md5($+($1,$2)) = $z3.findtog(auth,gd))) {
    %a = 1
  }

  ; bad auth
  else {
    %e = $input(You have specified an incorrect or inactive account or server timed out. Please try again.,uowdk15,Oops!)
    z.deauth
    ;    dialog -v zion_user_auth
  }

  if (%a) {
    hadd -m zsession authed 1
    hadd zsession pass $2
    z3.addtog auth name $1
    z3.addtog auth gd $md5($+($1,$2))
  }

  if ($isid) return %a
}
*/

alias -l _userauth {
  ; 172800 = 2 days
  var %a,%v,%e 172800,%r $_userauthconnect($1,$2)
  if (%r) {
    %a = 1
    z3.addtog auth gd2 $ctime
    z3.deltog auth cached
  }
  ; cached auth
  elseif ((%r = $null) && ($calc($ctime - $z3.findtog(auth,gd2)) < %e) && ($md5($+($1,$2)) = $z3.findtog(auth,gd))) {
    %a = 1
    %v = 1
    z.echo $z.head(notice) $z.lang(user,cached)
  }
  ; bad auth
  else {
    %e = $input($z.lang(user,loginfail),uowdk15,$z.lang(err,oops))
    z.deauth
    ;    dialog -v zion_user_auth
  }
  
  if (%a) {
    hadd -m zsession authed 1
    hadd zsession pass $2
    z3.addtog auth name $1
    z3.addtog auth gd $md5($+($1,$2))
    if (%v) { hadd zsession cached 1 | z3.addtog auth cached $ctime }
  }
  
  if ($isid) return %a
}

alias z.deauth {
  var %p $hget(zsession,pass)
  z3.deltog auth pop
  z3.deltog auth key
  z3.deltog auth gd
  z3.deltog auth gd2
  if ($hget(zsession,authed)) hdel zsession authed
  if (%p) hdel zsession pass
  .signal -n zion_deauth $iif($z3.findtog(auth,name),$ifmatch,0) %p
}
alias -l _userauth_load {
  if ($z3.findtog(auth,name)) { xdid -ra $1 2 $ifmatch | xdid -F $dname 4 }
  else xdid -F $dname 2
  if ($z3.findtog(auth,key)) { xdid -ra $1 4 [jeric] | xdid -c $1 8 }
  else xdid -u $1 8
}
alias -l _userauthcon {
  var %b xdid $1 $2
  %b 2
  %b 4
  %b 5
  %b 8
  xdid -F $2 2
}
; reusables
alias z.authdo {
  if (!$hget(zsession,authed)) {
    var %k $z3.findtog(auth,key)
    if (!%k) %k = $hget(zsession,pass)
    if ((%k) && ($_userauth($z3.findtog(auth,name),%k))) $1-
    else zion_user_auth $1-
    return
  }
  $1-
}

alias zion.user.fillinfo {
  var %d zion_userinfo,%r $+(<e,rror>),%v,%t,%o,%c $z.user.popcol(0)
  %v = $iif($zhget(con),$_zi($ifmatch),%r)
  xdid -C %d 17 +t $iif(%v = Yes,$rgb(30,30,230),$z.user.popcol(0))
  xdid -t %d 17 %v
  %v = $iif($zhget(ing),$_zi($ifmatch),%r)
  xdid -C %d 19 +t $iif(%v != No,$rgb(30,30,230),$z.user.popcol(0))
  xdid -t %d 19 $iif(%v != No,Yes,No/Hosting)
  if (%v != No) xdid -p %d 19 180 105 20 20
  xdid $iif(((%v != No) && ($numtok(%v,32) = 1)),-s,-h) %d 12
  if ($gettok(%v,2,32)) { xdid -t %d 23 $duration($ifmatch) | xdid -s %d 23 }
  if ($zhget(nic)) dialog -t %d Zion Userinfo - $ifmatch
  %v = $zhget(name)
  xdid -r %d 201
  if (%v = -) add $+(B,AD/H,ACKED) $ $+(B,AD!) $+(R,e-i,nstall) $+(Z,ion,!)
  _clearbut
  add $z.lang(user,corever) $ $iif($zhget(zver),$_zi($ifmatch),%r)
  add $z.lang(user,mver) $ $iif($zhget(mver),$_zi($ifmatch),%r)
  add $z.lang(user,os) $ $iif($zhget(os),$_zi($ifmatch),%r)
  add $z.lang(user,dx) $ $iif($zhget(dx),$_zi($ifmatch),%r)
  add $z.lang(user,gdi) $ $iif($zhget(gdi),$_zi($ifmatch),%r)
  add $z.lang(user,regged) $ $iif($zhget(reg2),$_zi($ifmatch),%r)
  add $z.lang(user,settings) $ $iif($zhget(set),$_zi($ifmatch),%r)
  add $z.lang(user,repinst) $ $iif($zhget(inst),$_zi($ifmatch),%r)
  add $z.lang(user,gameconf) $ $iif($zhget(gconf),$_zi($ifmatch),%r)
  add $z.lang(user,gamever) $ $iif($zhget(gver),$_zi($ifmatch),%r)
  add $z.lang(user,gameset) $ $iif($zhget(gset),$_zi($ifmatch),%r)
  add $z.lang(user,gui) $ $iif($zhget(gui),$_zi($ifmatch),%r)
  add $z.lang(user,le) $ $iif($zhget(le),$_zi($ifmatch),%r)
  add $z.lang(user,userinfo) $ $iif($zhget(use),$_zi($ifmatch),%r)
  add $z.lang(user,gamelist) $ $iif($zhget(gl),$_zi($ifmatch),%r)
  add $z.lang(user,shell) $ $iif($zhget(gls),$_zi($ifmatch),%r)
  add $z.lang(user,options) $ $iif($zhget(opt),$_zi($ifmatch),%r)
  add $z.lang(user,reg) $ $iif($zhget(reg),$_zi($ifmatch),%r)
  %v = $hget($saveid,plugs)
  while (%v > 0) {
    dll_wfix WhileFix
    add $zhget(%v)
    dec %v
  }
  unset %v
  xdid -t %d 13 $z.lang(user,name) $iif($zhget(name),$ifmatch,%r)
  xdid -s %d 201
  %v = $zhget(hhh)
  ; remove after propagation
  if ($numtok(%v,32) > 1) unset %v
  ;show Unverified for now, hacked in the future once propagated
  if (!%v) %o = $z.lang(user,unverified)
  else {
    %t = $_userreadhhhconnect($zhget(name),$gettok($z.h.getvar($zhget(nic) $+ _ctcp),2,32),%v,2)
    if ($left(%t,10) = valid-user) {
      ;%o = Verified Account
      ;%c = $z.user.popcol(1)
      %v = $iif($2,$2,$iif($gettok(%t,2,59) isnum,$ifmatch,%r))
      if ($dialog(%d)) {
        xdid -C %d 15 +t $z.user.popcol(%v)
        xdid -t %d 15 %v
        %v = $zhget(name)
        if (($1 != -nc) && (%v != -) && (%v != $z3.findtog(auth,name))) { xdid -s %d 20 | xdid -s %d 21 }
        else { xdid -h %d 20 | xdid -h %d 20 }
        %v = $gettok(%t,3,59)
        %t = $+(",$scriptdir,av.html,")
        if (%v) {
          var %a write %t
;          xdid -n %d 25 $+(http://,$z.forumhost,$z.forumpath,/images/avatars/,$ifmatch)
;          write -c %t <body scroll=no topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0"><img src=" $+ $iif($left(%v,4) = http,%v,$+(http://,$z.forumhost,$z.forumpath,/images/avatars/,%v)) $+ " width="100" height="100">
;          xdid -n %d 25 $+(file:///,c:/av.html)
          write -c %t
          %a <html><head><script type="text/javascript">
          %a <!--
          %a function resizeImg()
          %a $chr(123)
          %a var _resizeWidth  = 100;
          %a var _resizeHeight = 100;
          %a var _resizeClass  = 'av';
          %a var imgArray = document.getElementsByTagName( 'IMG' );
          %a for ( var i = 0; i < imgArray.length; i++ )
          %a $chr(123)
          %a var imgObj = imgArray[i];
          %a if ( imgObj.className == _resizeClass )
          %a $chr(123)
          %a if ( imgObj.width < 101)
          %a $chr(123)
          %a $chr(125)
          %a else $chr(123) imgObj.style.width = _resizeWidth + 'px'; $chr(125)
          %a if ( imgObj.height < 101)
          %a $chr(123)
          %a imgObj.style.marginTop = ((_resizeHeight - imgObj.height) /2) + 'px';
          %a $chr(125)
          %a else $chr(123) imgObj.style.height = _resizeHeight + 'px'; $chr(125)
          %a $chr(125)
          %a $chr(125)
          %a $chr(125)
          %a window.onload = resizeImg;
          %a //-->
          %a </script></head><body bgcolor=white scroll=no topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0"><center><a target=_blank href=" $+ $+(http://,$z.forumhost,$z.forumpath,/profile.php?mode=viewprofile&u=,$zhget(name)) $+ "><img class="av" border=0 src=" $+ $iif($left(%v,4) = http,%v,$+(http://,$z.forumhost,$z.forumpath,/images/avatars/,%v)) $+ "></a></center>
          xdid -n %d 25 $+(file:///,$scriptdir,av.html)
          xdid -s %d 25
          xdid -h %d 2
          .timer 1 1 .remove %t
        }
      }
    }
    elseif (%t = $null) %o = $z.lang(user,unverified)
    elseif ($left(%t,12) = invalid-user) %o = $z.lang(user,hacked)
  }
  if ((%o) && ($dialog(%d))) {
    xdid -C %d 24 +t %c
    xdid -t %d 24 %o
    xdid -s %d 24
  }
}
alias -l zhget return $z.64b($hget($saveid,$1))
alias -l zhadd hadd -m $saveid $1 $z.b64($2-)
alias -l add {
  var %d zion_userinfo,%bg2_ $z.options.bg2_,%bg $z.options.bg,%c,%e %bg2_
  if (!%zion.s.user.add) {
    %c = -1
    %zion.s.user.add = 1
  }
  else {
    %c = %bg
    unset %zion.s.user.add
  }
  tokenize 36 $1-
  if (BAD isin $2) {
    %e = $z.user.popcol(0)
    if ($zhget(nic) = $me) {
      _providebut $z.lang(user,repair) $ _repair
    }
  }
  .signal -n zion_userinfo.showplug $zhget(name) $zhget(nic) $1
  xdid -a %d 201 0 0 +cbk 0 1 0 0 %e %c $1 $chr(9) + 0 $2
}
on *:signal:zion_userinfo.setname:zhadd name $1-
on *:signal:zion_userinfo.addbutton:if ($zhget(name) != $z3.findtog(auth,name)) _providebut $replace($1-,<nick>,$zhget(nic))
alias -l _repair dialog -x $1 | zion.install repair
alias -l _clearbut {
  var %p 7,%d zion_userinfo
  while (($xdid(%d,%p).visible) && (%p < 9)) {
    xdid -h %d %p
    inc %p
  }
}
alias -l _providebut {
  var %p 7,%d zion_userinfo
  while (($xdid(%d,%p).visible) && (%p < 9)) {
    inc %p
  }
  xdid -s %d %p
  tokenize 36 $1-
  xdid -t %d %p $1
  xdid -M %d %p $2
}
alias z.myinfo {
  %zion.s.user.todo = zion.user.fillinfo
  z.authdo z.myinfo2
}
alias z.myinfo2 {
  %s = $z.gensalt
  z.h.setvar $me $+ _ctcp $ctime %s
  zion.user.fillhash %s $me
  zion_userinfo
}
alias zion.user.reply {
  %zion.s.user.todo = zion.user.write $1
  z.authdo zion.user.fillhash $2 $1
}

; create additional info to userpage by appending to %t in /zion.user.write
; add the vars into /zion.user.ctcp2hash, make sure %p is 1 more than the last token for example %p = 21 if $20 is the last.
; add the var values in /zion.user.fillhash

alias zion.user.write {
  var %c $chr(124),%v,%t = $+($hget($saveid,name),%c,$hget($saveid,con),%c,$hget($saveid,ing),%c,$hget($saveid,zver),%c,$hget($saveid,inst),%c,$hget($saveid,set),%c,$hget($saveid,gconf),%c,$hget($saveid,gver),%c,$hget($saveid,gset),%c,$hget($saveid,gui),%c,$hget($saveid,le),%c,$hget($saveid,use),%c,$hget($saveid,gl),%c,$hget($saveid,gls),%c,$hget($saveid,opt),%c,$hget($saveid,reg),%c,$hget($saveid,reg2),%c,$hget($saveid,nic),%c,$hget($saveid,dx),%c,$hget($saveid,gdi),%c,$hget($saveid,hhh),%c,$hget($saveid,os),%c,$hget($saveid,mver)),%n,%l 1,%s,%m 300
  
  %v = $hget($saveid,plugs)
  while (%v > 0) {
    %t = $+(%t,%c,$hget($saveid,%v))
    dec %v
  }

  ;.ctcpreply $1 ZION_USERINFO $z.b64($me) %t
  ;.ctcpreply $1 ZION_USERINFO $z.b64($me) %g
  
  %n = $ceil($calc($len(%t) / %m))
  while (%l <= %n) {
    %s = $mid(%t,$calc(((%l -1) * %m) +1),%m)
    .ctcpreply $1 ZION_USERINFO $z.b64($me) $chr($calc(%l +33)) $+ . $+ $chr($calc(%n +33)) %s
    inc %l
  }
}

alias zion.user.ctcp2hash {
  tokenize 124 $1-
  if ($hget($saveid)) hfree $saveid
  var %a hadd -m $saveid,%p 24,%t
  %a name $1
  %a con $2
  %a ing $3
  %a zver $4
  %a inst $5
  %a set $6
  %a gconf $7
  %a gver $8
  %a gset $9
  %a gui $10
  %a le $11
  %a use $12
  %a gl $13
  %a gls $14
  %a opt $15
  %a reg $16
  %a reg2 $17
  %a nic $18
  %a dx $19
  %a gdi $20
  %a hhh $21
  %a os $22
  %a mver $23
  
  while ( $eval($+($chr(36),%p),2) ) {
    inc %t
    %a %t $ifmatch
    inc %p
  }
  if (%t) %a plugs %t
}

alias zion.user.fillhash {
  if ($hget($saveid)) hfree $saveid
  var %a zhadd,%o -,%b +,%n ;,%y .
  %a name $iif($z3.findtog(auth,name),$ifmatch,-)
  %a con $iif($z.started,%y,%n)
  %a ing $iif(%zion.le.connectedIP,$ifmatch $iif(%zion.le.gamestart,$calc($ctime - $ifmatch)),%n)
  %a zver $z.ver
  %a inst $iif(%z.i.inst,$+(R,unning),$+(O,ff))
  %a set $iif($z.settingsok,%o,%b)
  %a gconf $iif($z.gamesettingsok,%o,%b)
  %a gver $iif($zion.game.ver,$ifmatch,%b)
  %a gset $iif($zion.game.id,$ifmatch,%b)
  %a gui $iif($z.guiinstalled,$zion.gui.id,%b)
  %a le $iif($z.leinstalled,$iif($zion.le2.id,$ifmatch,$zion.le.id),%b)
  %a use $zion.user.id
  %a gl $iif($zion.gamelist.id,$ifmatch,%b)
  %a gls $iif($zion.glshell.id,$ifmatch,%b)
  %a opt $iif($zion.options.id,$ifmatch,%b)
  %a reg $iif($zion.reg.id,$ifmatch,%b)
  %a reg2 $iif($z.h.getvar(registered),%y,%n)
  %a nic $me
  %a dx $iif($dcx(IsUsingDirectX),%y,%b)
  %a gdi $iif($dcx(IsUsingGDI),%y,%b)
  %a hhh $md5($1 $+ $hget(zsession,pass) $+ $2)
  %a os $os
  %a mver $version
  .signal -n zion_userinfo.requestver
  .timerzion.s.userinfo.done 1 0 .signal zion_userinfo.done
}

alias -l _zi {
  if ($1 = -) return $+(O,k)
  elseif ($1 = +) return $+(B,ad)
  elseif ($1 = ;) return $+(N,o)
  elseif ($1 = .) return $+(Y,es)
  else return $1
}
ctcp ^*:ZION_USERID:{
  if (($nick isop %zion.s.chat) || ($nick isop %zion.s.data)) {
    .ctcpreply $v1 $1 $z3.findtog(auth,name)
    halt
  }
}
on *:CTCPREPLY:ZION_USERINFO*:{
  if ($z.64b($2) != $nick) return
  if ($timer(zion.s.user.incoming)) return
  .timerzion.s.user.incoming 1 3 return
  var %1,%2,%n 1,%h $saveid $+ _temp,%f $nick $+ _f
  if (*.* iswm $3) {
    %1 = $calc($asc($gettok($3,1,46)) -33)
    %2 = $calc($asc($gettok($3,2,46)) -33)
    hadd -mu10 %h $nick $+ _ $+ %1 $4-
    if (%1 = %2) {
      hdel %h %f
      while (%n <= %2) {
        hadd -mu10 %h %f $hget(%h,%f) $+ $hget(%h,$nick $+ _ $+ %n)
        inc %n
      }
      zion.user.ctcp2hash $hget(%h,%f)
      zion_userinfo
      zion.user.fillinfo
    }
    else { .timerzion.s.user.incoming off | haltdef | return }
  }
;  zion.user.ctcp2hash %m
;  zion_userinfo
;  zion.user.fillinfo
  if (%zion.s.user.cmd) {
    tokenize 32 $ifmatch
    if ($2 = $nick) {
      var %ch zion_userinfo_cb zion_userinfo sclick
      if ($1 = 109) %ch 21
      elseif ($1 = 110) %ch 20
    }
    unset %zion.s.user.cmd
  }
  haltdef
  return
}
on *:signal:zion_userinfo.done:if (%zion.s.user.todo) $ifmatch

alias zion.user.adddetails {
  hinc -m $saveid plugs
  zhadd $hget($saveid,plugs) $1-
}
alias zion_userinfo {
  if (!$dialog(zion_userinfo)) dialog -ma zion_userinfo zion_userinfo_table
}
dialog zion_userinfo_table {
  title $z.lang(user,userinfowin)
  size -1 -1 350 360
}
on *:dialog:zion_userinfo:*:*: {
  if ($devent == init) {
    dcx Mark $dname zion_userinfo_cb
    xdialog -b $dname +mnty
    
    ;// Call initilisation alias
    zion_userinfo_init_dcx
  }
}
alias -l zion_userinfo_init_dcx {
  var %d $dname,%r $z.lang(user,notavail),%r2 $z.lang(user,getting)
  var %bg $z.options.bg
  var %bg2 $z.options.bg2
  var %bg2_ $z.options.bg2_
  var %bg3 $rgb(255,255,255)
  
  ;  xdialog -g %d +b $rgb(97,183,255)
  
  xdialog -c $dname 200 box 10 170 330 150
  ;  xdid -t $dname 200 System
  xdid -C %d 200 +b %bg2
  xdid -C %d 200 +kt %bg2_
  xdid -f %d 200 +a ansi 8 Tahoma
  
  ; system
  xdid -c %d 200 202 text 7 3 200 15
  xdid -C %d 202 +kb %bg2
  xdid -C %d 202 +t %bg2_
  xdid -f %d 202 +ab ansi 7 Tahoma
  xdid -t %d 202 $z.lang(user,system)
  
  xdid -l $dname 200 root $chr(9) +pl 0 1 0 0
  .timer 1 0 xdid -l $dname 200 update
  
  ;// Initialising control: (ListView 18)
  xdid -c $dname 200 201 listview 16 21 300 120 showsel tooltip tabstop report fullrow nolabelwrap
  xdid -C %d 201 +kb %bg2
  xdid -f %d 201 +a ansi 8 tahoma
  xdid -h %d 201
  
  
  xdid -t %d 201 +c 0 135 $z.lang(user,var) $chr(9) +l 0 140 $z.lang(user,val)
  
  ;// Initialising control: jeric's Userinfo (Box 1)
  xdialog -c $dname 10 box 10 10 330 150
  ;  xdid -t $dname 1 jeric's Userinfo
  xdid -C %d 10 +b %bg3
  xdid -C %d 10 +kt %bg2_
  xdid -f %d 10 +a ansi 8 Tahoma
  
  ; userinfo
  xdid -c %d 10 11 text 7 3 200 15
  xdid -C %d 11 +kb %bg3
  xdid -C %d 11 +t %bg2_
  xdid -f %d 11 +ab ansi 7 Tahoma
  xdid -t %d 11 $z.lang(user,sheet)
  
  ; ping
  ;  xdid -c %d 10 22 text 250 3 70 15 right
  ;  xdid -C %d 22 +kb %bg3
  ;  xdid -C %d 22 +t %bg2_
  ;  xdid -f %d 22 +ab ansi 7 Tahoma
  ;  xdid -t %d 22 Ping: %r
  
  xdid -c $dname 10 22 link 290 125 30 15 tabstop
  xdid -t $dname 22 $z.lang(user,more)
;  xdid -C $dname 22 +b %b
  xdid -C %d 22 +kb %bg3
  xdid -C %d 22 +t %bg2_
  xdid -f $dname 22 +ab ansi 7 Tahoma
  
  ;hack
  xdid -c $dname 10 24 text 225 3 100 15 tabstop right
;  xdid -t $dname 24 Verifying...
  xdid -C %d 24 +kb %bg3
;  xdid -C %d 24 +t $z.user.popcol(50)
  xdid -f $dname 24 +ab ansi 7 Tahoma
  xdid -h %d 24
  
  
  ;// Initialising control: Name: sprion (Text 3)
  xdid -c $dname 10 13 text 125 20 180 20
  xdid -f %d 13 +ab ansi 8 Tahoma
  xdid -C %d 13 +kb %bg3
  xdid -C %d 13 +t %bg2_
  xdid -t $dname 13 $z.lang(user,name) %r2
  
  
  xdid -c %d 10 14 text 125 45 60 20
  xdid -f %d 14 +ab ansi 8 Tahoma
  xdid -C %d 14 +kb %bg3
  xdid -C %d 14 +t %bg2_
  xdid -t %d 14 $z.lang(user,pop)
  
  xdid -c %d 10 15 text 190 45 40 20 right
  xdid -f %d 15 +ab ansi 8 Tahoma
  xdid -C %d 15 +kb %bg3
  xdid -C %d 15 +t $z.user.popcol(0)
  xdid -t %d 15 ??
  
  xdid -c %d 10 16 text 125 85 65 20
  xdid -f %d 16 +ab ansi 8 Tahoma
  xdid -C %d 16 +kb %bg3
  xdid -C %d 16 +t %bg2_
  xdid -t %d 16 $z.lang(user,connected)
  
  xdid -c %d 10 17 text 192 85 20 20
  xdid -f %d 17 +ab ansi 8 Tahoma
  xdid -C %d 17 +kb %bg3
  xdid -C %d 17 +t $z.user.popcol(1)
  xdid -t %d 17 %r
  
  xdid -c %d 10 18 text 125 105 55 20
  xdid -f %d 18 +ab ansi 8 Tahoma
  xdid -C %d 18 +kb %bg3
  xdid -C %d 18 +t %bg2_
  xdid -t %d 18 $z.lang(user,gaming)
  
  xdid -c %d 10 19 text 180 105 120 20
  xdid -f %d 19 +ab ansi 8 Tahoma
  xdid -C %d 19 +kb %bg3
  xdid -C %d 19 +t $z.user.popcol(1)
  xdid -t %d 19 %r
  
  xdid -c %d 10 12 button 235 95 75 25 tabstop
  xdid -t %d 12 $z.lang(user,join)
  xdid -h %d 12
  
  xdid -c %d 10 23 text 215 105 110 20 right
  xdid -f %d 23 +ab ansi 8 Tahoma
  xdid -C %d 23 +kb %bg3
  xdid -C %d 23 +t %bg2_
  xdid -t %d 23 %r
  xdid -h %d 23
  
  
  xdid -c %d 10 20 button 235 42 20 20 tabstop
  xdid -f %d 20 +ab ansi 10 Tahoma
  xdid -t %d 20 -
  xdid -h %d 20
  
  xdid -c %d 10 21 button 255 42 20 20 tabstop
  xdid -f %d 21 +ab ansi 10 Tahoma
  xdid -t %d 21 +
  xdid -h %d 21
  
  xdid -c %d 10 2 image 15 20 100 100
  xdid -i %d 2 + $z.images(default.bmp)
  
  xdid -c %d 10 25 webctrl 15 20 100 100 tabstop
;  xdid -n %d 25 http://dcx.scriptsdb.org
  xdid -h %d 25
  
  
  xdialog -c $dname 6 button 265 327 75 25 tabstop
  xdid -t $dname 6 $z.lang(user,close)
  
  xdialog -c $dname 7 button 180 327 75 25 tabstop
  xdid -h %d 7
  
  xdialog -c $dname 8 button 95 327 75 25 tabstop
  xdid -h %d 8
  
  xdialog -c $dname 9 button 10 327 75 25 tabstop
  xdid -h %d 9
  
}
alias z.user.popcol {
  if ($1 <= 0) return $rgb(230,30,30)
  elseif ($1 >= 50) return $rgb(246,191,0)
  else return $rgb(30,230,30)
}

alias zion_userinfo_cb {
  /*
  if ($2 != mouse) {
    echo $color(info) -s * zion_userinfo_cb: $1-
  }
*/
  
  if ($2 = sclick) {
    if ($3 = 6) dialog -x $1
    elseif ($3 isnum 7-9) {
      if ($xdid($1,$3).mark) $ifmatch
      xdid -h $1 $3
      ;      if ($xdid($1,$3).text = Repair) { dialog -x $1 | zion.install repair }
    }
    elseif ($3 isnum 20-21) {
      var %a
      xdid -h $1 20 | xdid -h $1 21
      /*
      ; check
      if (($calc($ctime - $z3.fpt(prot,l)) < 86400) || ($calc($ctime - $z3.fpt(p,$+(o,$zhget(h)))) < 2419200)) {
        %a =  $z.pop($z.lang(err,4),$z.lang(err,5),0,48,0,0)
        return
      }
      */
      ; old increment code
      ;.ctcp $zhget(nic) ZION_USERINF0 $z.b64($me) $+($iif($3 = 21,u,d),$md5($z3.fpt(prot,instk)))
      ; USE ONLINE INCREMENT SCRIPT HERE, CHECKS WILL BE DONE THERE INSTEAD.
      /*
      %a = $_usermodpopconnect($iif($3 = 21,add,remove),$zhget(name))
      if (%a !isnum) %a = $z.pop($z.lang(err,4),$z.lang(err,5),0,48,0,0)
      else {
        .ctcp $zhget(nic) ZION_USERINF0 $z.b64($me) $+($iif($3 = 21,u,d),$z3.findtog(auth,name))
        if ($dialog(zion_userinfo)) {
          zion.user.fillinfo -nc %a
        }
      }
      */
      z.modpop $iif($3 = 21,+,-) $zhget(name) $zhget(nic)
    }
    elseif ($3 = 12) z.connect $gettok($zhget(ing),1,32)
    elseif ($3 = 22) run $+(http://,$z.forumhost,$z.forumpath,/profile.php?mode=viewprofile&u=,$zhget(name))
  }
  
  if ($2 = close) {
    z.h.unsetvar $zhget(nic) $+ _ctcp
    if ($hget($saveid)) hfree $saveid
  }
}

alias z.modpop {
  var %a,%n,%t,%z,%c,%e
  if ($1 = -) %c = remove
  elseif ($1 = +) %c = add
  else %e = 1
  
  if ((%e) || ($2 = $null)) { z.echo $z.head(err) /z.modpop <+|-> <forumID> | return }
  %a = $_usermodpopconnect(%c,$2)
  if (%a !isnum) %a = $z.pop($z.lang(err,4),$z.lang(err,5) ( $+ $2 $+ ),0,48,0,0)
  else {
    %t = $hfind(zion_users,$+($chr(32),$2,*),0,w).data
    while (%t > 0) {
      %z = $hget(zion_users,$hfind(zion_users,$+($chr(32),$2,*),%t,w).data)
      if ($gettok(%z,2,32) = $2) %n = $gettok(%z,1,32)
      dec %t
    }
    if ((!%n) && ($3)) %n = $3
    z.echo $z.head(notice) $z.lang(user,%c) $iif(%n,%n ( $+ $2 $+ ),$2) $z.lang(user,4) %a
    if (%n) {
      .ctcp %n ZION_USERINF0 $z.b64($me) $iif(%c = remove,d,u) $z3.findtog(auth,name)
      if ($dialog(zion_userinfo)) {
        zion.user.fillinfo -nc %a
      }
    }
  }
  
}
ctcp ^*:ZION_USERINFO:?:{
  if ($z.64b($2) != $nick) return
  if (($3 = u) || ($3 = d)) .timer 1 0 _inform $4 $nick $3
  else {
    if ($timer(zion.s.user.reply)) return
    .timerzion.s.user.reply 1 5 return
    zion.gui.gnote -b $rgb(255,255,255) $z.lang(user,userinfo) $ $nick is viewing your profile.. $ 10
    zion.user.reply $nick $3
  }
  if ($isalias(z.update)) z.update
  haltdef
}

/*
; these routines needs to be re-scripted for the increment script of derick's
ctcp *:ZION_USERINF0:?:{
  if ($z.64b($2) != $nick) return
  var %a $left($3-,1),%m $right($3-,-1)
  ; can use %m = his board name
  .timer 1 0 _inform %m $nick %a
  haltdef
}
*/
alias _inform beep 2 | var %m = $2 $+($chr(40),$1,$chr(41)) $iif($3 = u,$z.lang(user,1),$z.lang(user,2)) $z.lang(user,yourpop),%a = $iif($appactive,$input(%m,oidk5,$z.lang(user,3)),0) | z.echo $z.head(notice) %m | flash %m