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
}
}
}