Zion Sphinx — File Browser

ZionSphinxv3.0 / ZionSphinxv3.0 / plugins / zion_tag.mrc

zion_tag.mrc — 8.83 KB — Download this file

; --------< Zion Plugin >------------------------------------------
; Name....: Tag
; File....: zion_tag.mrc
; Ver.....: 1.0b160807
; Author..: sprion
; Email...: sprion@lyniq.com
; Date....: 16 Aug 07
; URL.....: http://zinc.sg
; Info....: Allows you and others to join the same game conveniently.
; Changes.: No longer accepts tag if you're not connected to Zion.
;---------------------------------------------------------------------
;translatable
; ---- BEGIN ----

on *:signal:zion_cmdlistopen:{
  zion.listcmd z.tag ; Tags a user and joins the same game when he/she does. ; /z.tag <nick> ; /z.tag sprion
  zion.listcmd z.stoptag ; Stop tagging a user. ; /z.stoptag <nick> ; /z.stoptag sprion
  zion.listcmd z.listtags ; List & manage incoming and outgoing tags.
}

; script unload signal
on *:signal:zion_unload:.unload -rs $+(",$script,")

; when connected to zion
on *:signal:zion_start:{ if ($z3.findtog($saveid,on)) on -s }

on *:load:{
  z.note $z.head(Plugin) $ $nopath($script) $z.lang(sys,loaded)
  .signal -n zion_plugin_load $script
  on -s
}

; to update system menu, /signal -n zion_gamelist3_systemmenu reset

on *:unload:if ($dialog(zion_tags)) xdialog -x zion_tags | off -s | if ($hget(zion_tag)) hfree zion_tag | .signal -n zion_plugin_unload $script

; provide userinfo information & cmd of this plugin
on *:signal:zion_userinfo.requestver:zion.user.adddetails $z.fileinfo($script,Name) $ $z.fileinfo($script,Ver)
on *:signal:zion_userinfo.showplug:if ($3- = $z.fileinfo($script,Name)) .signal zion_userinfo.addbutton $z.lang(tag,Tag) $ zion.tag $2

; -- END CONFORMING --

on *:signal:zion_gamelist3_systemmenu_init:{
  var %v $calc($xpop($1,root).num +1)
  z.h.setvar z.tag.menu.1 %v
  xpop -a $1 %v $chr(9) + %v 0 $z.lang(tag,view)
  %v = $calc($xpop($1,root).num +1)
  z.h.setvar z.tag.menu.2 %v
  xpop -a $1 %v $chr(9) $iif($z3.findtog($saveid,on),+c,+) %v 0 $z.lang(tag,allow)
  %v = $calc($xpop($1,root).num +1)
  xpop -a $1 %v $chr(9) + %v 0 -
}
on *:signal:xpopup-agl.system:{
  if ($1 = $z.h.getvar(z.tag.menu.2)) { toggle | .signal -n zion_gamelist3_systemmenu reset }
  elseif ($1 = $z.h.getvar(z.tag.menu.1)) z.listtags
}

alias -l saveID return zion_tag

alias -l on {
  z3.addtog $saveid on $r(1,99)
  if ($1 != -s) z.echo $z.lang(tag,header) $z.lang(tag,enabled)
}

alias -l off {
  z3.deltog $saveid on
  if ($1 != -s) z.echo $z.lang(tag,header) $z.lang(tag,disabled)
  if ($hget(zion_tag,in)) hdel zion_tag in
  z.comms.send +m $me -iof $saveid end
  z.comms.remchan $me
}

alias -l toggle {
  if ($z3.findtog($saveid,on)) off
  else on
}
alias z.tag zion.tag $1-
alias zion.tag {
  if ($hget(zion_tag,out)) {
    z.echo $z.head(err) $z.lang(tag,alreadytag) $1
    return
  }
  elseif ($timer(zion.s.tagtimeout)) {
    z.echo $z.head(err) $z.lang(tag,wait)
    return
  }
  if ($istok($hget(zion_tag,in),$1,44)) {
    z.echo $z.head(err) $1 $z.lang(tag,currenttag)
    return
  }
  var %tok = $+(tok,$r(999,99999))
  .ctcp $1 ZION-TAG-REQ $z.b64($1) $z.b64($me) %tok
  hadd -m zion_tag $1 $z.b64(%tok)
  hadd -m zion_tag out $1
  .timerzion.s.tagtimeout -o 1 12 zion.tag.timeout $1
}

alias -l _disconnect {
  if ($1 = -s) tokenize 32 $2-
  else .ctcpreply $1 ZION-TAG-END $z.b64($1) $z.b64($me)
  z.comms.remchan $1
  hdel zion_tag out $1
  hdel zion_tag $1
}
alias zion.tag.timeout {
  _disconnect -s $1
  z.echo $z.lang(tag,header) $z.lang(tag,failed) $1
}
alias z.stoptag zion.tag.dc $1-
alias zion.tag.dc {
  _disconnect $1
  z.echo $z.lang(tag,header) $z.lang(tag,stopped) $1
}
alias zion.tag.connected {
  z.comms.addchan $1
  hadd -m zion_tag $1 $2
  z.echo $z.lang(tag,header) $1 $z.lang(tag,hasaccepted)
  .timerzion.s.tagtimeout off
}
alias zion.tag.accept {
  z.comms.addchan $me
  hadd -m zion_tag in $addtok($hget(zion_tag,in),$1,44)
  z.echo $z.lang(tag,header) $z.lang(tag,accepted) $1
}
alias zion.tag.deny {
  zion.tag.detag $1
  z.echo $z.lang(tag,header) $1 $z.lang(tag,detagged)
  .ctcp $1 ZION-TAG-END $z.b64($1) $z.b64($me)
}
alias zion.tag.detag hadd -m zion_tag in $remtok($hget(zion_tag,in),$1,1,44)
/*
menu nicklist,query {
  Zion $gettok($z.ver,1,32)
  .-
;  .Tag Zion user:z.comms.send -of $saveid req.tag $1
  .Tag Zion user:zion.tag $1
  .View my tags:return
}
*/
on *:quit:{
  var %r $hget(zion_tag,in)
  if ((%r) && ($istok(%r,$nick,44))) zion.tag.detag $nick
  if ($nick = $hget(zion_tag,out)) { _disconnect $1 | z.echo $z.lang(tag,header) $1 $z.lang(tag,disconnected) }
}
on *:nick:{
  var %r $hget(zion_tag,in)
  if ($nick = $hget(zion_tag,out)) hadd zion_tag out $newnick
  if ((%r) && ($istok(%r,$nick,44))) hadd zion_tag in $reptok(%r,$nick,$newnick,1,44)
}
on *:signal:zion_comms:{
  if ($2 = $saveid) {
    if ($hget(zion_tag,out) = $1) {
      if ($3 = connect) {
        var %h $hget(zion_tag,$1)
        if ((%h) && (tok !isin %h)) {
          z.splay 3
          z.echo $z.lang(tag,header) $1 $z.lang(tag,hasjoined)
          z.connect -s $decr(%h,$4-)
        }
      }
      elseif ($3 = end) {
        _disconnect -s $1
        z.echo $z.lang(tag,header) $1 $z.lang(tag,hasstopped)
      }
    }
  }
}
;ctcp %nick ZION-WC3FT-REQ $z.rotate(4,$me $longip($z.ip) 6112)

ctcp *:ZION-TAG-REQ:?:{
  var %v $z3.findtog($saveid,on)
  if (!%v) return
  if ($1 != ZION-TAG-REQ) return
  
  if ($z.64b($2) != $me) return
  if ($z.64b($3) != $nick) return
  
  .timer 1 0 _prompt $nick $1 $z.b64($4) %v
  
  haltdef
}

alias -l _prompt {
  beep 2
  flash $1 requests Tag
  var %v $hget(zion_tag,out)
  if (%v) z.echo $z.head(err) $z.lang(tag,unable) $1 $z.lang(tag,unable2) %v
  elseif (!$z.started) z.echo $z.head(err) $z.lang(tag,unable) $1 $z.lang(tag,unable3)
  elseif ($input($1 $z.lang(tag,reqprompt),yqk11,$z.lang(tag,header_reqprompt))) {
    zion.tag.accept $1
    .ctcpreply $1-
  }
}

on *:CTCPREPLY:ZION-TAG-REQ*:{
  ; tag success
  if (($hget(zion_tag,out) = $nick) && ($2 = $hget(zion_tag,$nick))) {
    zion.tag.connected $nick $3
  }
  haltdef
}

ctcp *:ZION-TAG-END:?:{
  if ($1 != ZION-TAG-END) return
  
  if ($z.64b($2) != $me) return
  if ($z.64b($3) != $nick) return
  
  _disconnect -s $nick
  z.echo $z.lang(tag,header) $nick $z.lang(tag,detaggedme)
  
  haltdef
}

on *:CTCPREPLY:ZION-TAG-END*:{
  if ($1 != ZION-TAG-END) return
  
  if ($z.64b($2) != $me) return
  if ($z.64b($3) != $nick) return
  
  z.echo $z.lang(tag,header) $nick $z.lang(tag,stoppedtag)
  zion.tag.detag $nick
  
  haltdef
}


on *:signal:zion_connect2game:{
  var %v $z3.findtog($saveid,on)
  if ((%v) && ($hget(zion_tag,in))) z.comms.send +m $me -iof $saveid connect $encr(%v,$1-)
}
alias encr return $encr.work(+,$1,$replace($2,$chr(32),[chr32]))
alias decr return $replace($encr.work(-,$1,$2),[chr32],$chr(32))
alias -l encr.work {
  var %s $3-,%k $2,%t,%l $len(%s),%c
  while (%l > 0) {
    %c = $mid(%s,%l,1)
    %c = $chr($calc($asc(%c) $1 %k))
    %t = $+(%t,%c)
    dec %l
  }
  return %t
}


alias z.listtags {
  dialog -ma zion_tags zion_tags_table
}

dialog zion_tags_table {
  title $z.lang(tag,tagwintitle)
  size -1 -1 218 257
}

on *:dialog:zion_tags:*:*: {
  if ($devent == init) {
    dcx Mark $dname zion_tags_cb
    xdialog -b $dname +oty
    
;// Call initilisation alias
    zion_tags_init_dcx
  }
}

alias -l zion_tags_init_dcx {
  var %d $dname
;// Initialising control: Close (Button 3)
  xdialog -c $dname 3 button 145 225 65 25 tabstop
  xdid -t $dname 3 $z.lang(sys,close)
  
;// Initialising control: De-Tag (Button 2)
  xdialog -c $dname 2 button 80 225 60 25 tabstop
  xdid -t $dname 2 $z.lang(tag,detag)
  
;// Initialising control: (ListView 1)
  xdialog -c $dname 1 listview 10 10 200 210 report fullrow showsel nolabelwrap tooltip tabstop grid
  
  xdid -t %d 1 +c 0 130 $z.lang(tag,ircn) $chr(9) +l 0 70 $z.lang(tag,type)
  
  _load.list %d
}

alias -l _load.list {
  xdid -r $1 1
  if ($hget(zion_tag,out)) add $ifmatch $ $z.lang(tag,out)
  if ($hget(zion_tag,in)) {
    var %i $ifmatch,%n 1
    while (%n <= $numtok(%i,44)) {
      add $gettok(%i,%n,44) $ $z.lang(tag,in)
      inc %n
    }
  }
}
alias -l add {
  var %d zion_tags,%bg $z.options.bg,%c,%e $z.options.bg2_
  if (!%zion.s.tags.add) {
    %c = -1
    %zion.s.tags.add = 1
  }
  else {
    %c = %bg
    unset %zion.s.tags.add
  }
  tokenize 36 $1-
  
  xdid -a %d 1 0 0 +cbk 0 1 0 0 %e %c $1 $chr(9) + 0 $2
}

;// Callback alias for zion_tags
alias zion_tags_cb {
/*
  if ($2 != mouse) {
    echo $color(info) -s * zion_tags_cb: $1-
  }
*/
  if ($2 = sclick) {
    if ($3 = 3) {
      dialog -x $1
    }
    elseif ($3 = 2) {
      var %s $xdid($1,1,1).seltext
      if (!%s) return
      if (%s = $z.lang(tag,out)) zion.tag.dc $xdid($1,1,0).seltext
      else zion.tag.deny $xdid($1,1,0).seltext
      .timer 1 0 _load.list $1
    }
  }
}