Advertisement
Iire

Lobby -- Now with chat!

Aug 15th, 2013
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
mIRC 13.69 KB | None | 0 0
  1. ; Global Functions
  2.  
  3. alias -l ax.fac aline $1 $str(@,58)
  4.  
  5. alias ax.hlp {
  6.   noop $input($+(! or & = Player,$chr(44) E = Exit,$str($crlf,3), $&
  7.     @ = Wall/Floor,$chr(44) $(#,0) = Gate [Requires K to unlock],$chr(44) * = Mine,$crlf,$crlf, $&
  8.     c = Small Coin [1],$chr(44) C = Large Coin [5],$chr(44) K = Key [Unlocks #],$str($crlf,3), $&
  9.     < > ^ v = One Way Jump,$chr(44) + = Any Way Jump,$str($crlf,3),$&
  10.     Arrow Keys = Move [Player or Cursor],$chr(44) P = Pause,$str($crlf,3) $+ $&
  11.     $iif($1 == -e,$+(Space = Place [Next] Object,$chr(44) Shift + Space = Place [Previous] Object,$chr(44) Backspace = Delete Object))),q,Help)
  12. }
  13.  
  14. alias ax.ccn {
  15.   if (!$window(@ASCII_Game*,0)) {
  16.     sockclose ASCII_Game
  17.     sockclose AG.*
  18.     if ($hget(AG_PLRS)) hfree AG_PLRS
  19.     if ($window(@AG_Lobby)) window -c $v1
  20.   }
  21. }
  22.  
  23. alias startag ag.win -m
  24.  
  25. ; Game / Menu Functions
  26.  
  27. alias -l ag.msg {
  28.   var %_ag:msg $chr(160) $+ $iif($1-,$1-,Keys: $calc(%_ag:key) - Coins: $calc(%_ag:cns) - Score: $calc(%_ag:scr)), %_ag:len $calc(49 - ($len(%_ag:msg) - 3))
  29.   rline $$window(@ASCII_Game) 1 $+(%_ag:msg,$str($chr(160),%_ag:len)) $iif(!$window(@ASCII_Game_Editor),Menu)
  30. }
  31.  
  32. alias -l ag.rep return $regsubex($1,/([EK*cC.?])/,$replace(\1,.,@,\1,$chr(160)))
  33.  
  34. alias -l ag.win {
  35.   ;ag.lst
  36.   unset %_ag:* | var %_aw:win $iif($1 == -m,@ASCII_Game_Menu,@ASCII_Game), %_aw:itr 1, %_aw:cmd aline %_aw:win, %_aw:lin, %_aw:lwn $window(@ASCII_Game*,$window(@ASCII_Game*,0))
  37.   clear %_aw:win | if ($1 != -p) clear %_aw:lwn
  38.   $iif(%_aw:lwn && !$istok(-r -p,$1,32),renwin %_aw:lwn %_aw:win,window -aBCdfk0oSw0 +bfnt %_aw:win -1 -1 526 348 "Courier New" 15)
  39.   font -b %_aw:win
  40.   if (!$sock(ASCII_Game)) {
  41.     sockopen ASCII_Game irc.mountai.net 6667
  42.     sockmark ASCII_Game $+(:AG|,$left($iif($me,$me,Guest),5),00,$(|),$replace($ip,.,_))
  43.     ag.lby
  44.   }
  45.   if ($1 == -p) {
  46.     while ($hget(asc.lvl,%_aw:itr)) {
  47.       aline @ASCII_Game $v1
  48.       inc %_aw:itr
  49.     }
  50.   }
  51.   if ($1 == -c) {
  52.   }
  53.   elseif ($1 == -m) {
  54.     while (%_aw:itr <= 16) {
  55.       aline %_aw:win $replacex($v1,5,$str($chr(160),23) $+(Start,$chr(160),Game) $str($chr(160),25),7,$str($chr(160),23) $+(Join,$str($chr(160),2),Game) $str($chr(160),24),9,$str($chr(160),25) Editor $str($chr(160),25), $&
  56.         $v1,$str($chr(160),56))
  57.       inc %_aw:itr
  58.     }
  59.   }
  60.   ag.msg
  61. }
  62.  
  63.  
  64. on *:CLOSE:@ASCII_Game: {
  65.   unset %_ag:* %_ax:*
  66.   .timer 1 0 ax.ccn
  67. }
  68.  
  69. on *:CLOSE:@ASCII_Game*:.timer 1 0 ax.ccn
  70.  
  71.  
  72.  
  73. on ^*:HOTLINK:*Menu*:@ASCII_Game: {
  74.   if ($mouse.key & 1) ag.win -m
  75. }
  76.  
  77. on ^$*:HOTLINK:/(*UTF8)((?:Start|Join.).Game|Editor)/i:@ASCII_Game_Menu: {
  78.   if ($mouse.key & 1) $replace($regml(1),$+(Start,$chr(160),Game),ag.win,$+(Join,$str($chr(160),2),Game),ag.win -c,Editor,ae.win)
  79. }
  80.  
  81. on *:KEYDOWN:@ASCII_Game:37,38,39,40,112: {
  82.   if ($keychar == p) {
  83.     if (!%_ag:paused) {
  84.       ag.msg Paused
  85.       set %_ag:paused $true
  86.     }
  87.     else {
  88.       ag.msg
  89.       unset %_ag:paused
  90.     }
  91.   }
  92.   elseif (!$keychar) && (!%_ag:paused) {
  93.     var %_ag:msg, %_ag:dir $replace($keyval,37,-1,38,-1,39,+1,40,+1), %_ag:map $$fline($target,* $+ %_ax:you $+ *).text, %_ag:pat $$fline($target,* $+ %_ax:you $+ *)
  94.     if ($istok(37 39,$keyval,32)) {
  95.       var %_ag:reg $replace(%_ag:dir,-1,/(*UTF8)([^><])([<+]*)( $+ %_ax:you $+ )/,+1,/(*UTF8)( $+ %_ax:you $+ )([>+]*)([^><])/), %_ag:rln $regex(%_ag:map,%_ag:reg), $&
  96.         %_ag:chr $replace(%_ag:dir,+1,$regml(3),-1,$regml(1))
  97.       if (%_ag:chr !isin @+^v#$E $+ %_ax:oth) {
  98.         rlinex $target $$fline($target,* $+ %_ax:you $+ *) $regsubex(%_ag:map,%_ag:reg,$ag.rep(\3\2\1))
  99.         if (%_ag:scr) && (%_ag:chr != c) dec %_ag:scr
  100.       }
  101.       if (%_ag:chr == $(#,0)) {
  102.         if (!%_ag:key) %_ag:msg = You need a key to advance.
  103.         else {
  104.           rlinex $target $$fline($target,* $+ %_ax:you $+ *) $regsubex(%_ag:map,%_ag:reg,$replacex(\3\2\1,$(#,0),$chr(160)))
  105.           dec %_ag:key
  106.           if (%_ag:scr) dec %_ag:scr
  107.         }
  108.       }
  109.       if (%_ag:chr == $) {
  110.         if ($calc(%_ag:cns) < 20) %_ag:msg = You need at least 20 coins to advance.
  111.         else {
  112.           rlinex $target $$fline($target,* $+ %_ax:you $+ *) $regsubex(%_ag:map,%_ag:reg,$replacex(\3\2\1,$,$chr(160)))
  113.           dec %_ag:cns 20
  114.           if (%_ag:scr) dec %_ag:scr
  115.         }
  116.       }
  117.       if (%_ag:chr == E) {
  118.         if ($fline($target,/\?/,0,2)) %_ag:msg = You must collect all Exit Keys first.
  119.         else {
  120.           rlinex $target $$fline($target,* $+ %_ax:you $+ *) $regsubex(%_ag:map,%_ag:reg,$replacex(\3\2\1,E,$chr(160)))
  121.           noop $input(You win!)
  122.           if ($window(@ASCII_Game_Editor)) window -c $target
  123.         }
  124.       }
  125.       ; -- STR ADD LATER
  126.       if (%_ag:nch == %_ax:oth) {
  127.         noop
  128.       }
  129.       ; -- END ADD LATER
  130.       elseif (%_ag:chr isin KC*) {
  131.         var %_ag:spc $true
  132.         goto %_ag:chr        
  133.       }
  134.     }
  135.     else {
  136.       var %_ag:new $line($target,$calc($$fline($target,* $+ %_ax:you $+ *) %_ag:dir)), %_ag:chr $mid(%_ag:new,$pos(%_ag:map,%_ax:you),1), %_ag:nch %_ag:chr
  137.       var %_ag:itr $calc($$fline($target,* $+ %_ax:you $+ *) %_ag:dir), %_ag:iod $replace(%_ag:dir,+1,inc,-1,dec), %_ag:nxt $calc($$fline($target,* $+ %_ax:you $+ *) %_ag:dir)
  138.       while ($mid($line($target,%_ag:itr),$pos(%_ag:map,%_ax:you),1) isin + $+ $replace(%_ag:dir,-1,^,+1,v)) {
  139.         var %_ag:nch $mid($line($target,$calc(%_ag:nxt %_ag:dir)),$pos(%_ag:map,%_ax:you),1)
  140.         %_ag:iod %_ag:itr
  141.         var %_ag:nxt %_ag:itr, %_ag:new $line($target,%_ag:itr)
  142.       }
  143.       var %_ag:nrp $iif(%_ag:nch == .,@,$chr(160))
  144.       if (%_ag:nch !isin @#E$>< $+ $replace(%_ag:dir,-1,v,+1,^) $+ %_ax:oth) {
  145.         rlinex $target %_ag:nxt $remove($puttok($regsubex(%_ag:new,/(*UTF8)(.)/g,\t$chr(32)),%_ax:you,$pos(%_ag:map,%_ax:you),32),$chr(32))
  146.         rlinex $target $fline($target,* $+ %_ax:you $+ *,$iif($keyval == 38,2,1)) $replace(%_ag:map,%_ax:you,%_ag:nrp)
  147.         if (%_ag:scr) && (%_ag:nch != c) dec %_ag:scr
  148.       }
  149.       if (%_ag:nch == $(#,0)) {
  150.         if (!%_ag:key) %_ag:msg = You need a key to advance.
  151.         else {
  152.           if (%_ag:nch !isin v^<>) {
  153.             rlinex $target %_ag:nxt $remove($puttok($regsubex(%_ag:new,/(*UTF8)(.)/g,\t$chr(32)),%_ax:you,$pos(%_ag:map,%_ax:you),32),$chr(32))
  154.             rlinex $target $fline($target,* $+ %_ax:you $+ *,$iif($keyval == 38,2,1)) $replace(%_ag:map,%_ax:you,%_ag:nrp)
  155.             if (%_ag:scr) && (%_ag:nch != c) dec %_ag:scr
  156.           }
  157.           dec %_ag:key
  158.         }
  159.       }
  160.       if (%_ag:nch == E) {
  161.         if ($fline($target,/\?/,0,2)) %_ag:msg = You must collect all Exit Keys first.
  162.         else {
  163.           rlinex $target %_ag:nxt $remove($puttok($regsubex(%_ag:new,/(*UTF8)(.)/g,\t$chr(32)),%_ax:you,$pos(%_ag:map,%_ax:you),32),$chr(32))
  164.           rlinex $target $fline($target,* $+ %_ax:you $+ *,$iif($keyval == 38,2,1)) $replace(%_ag:map,%_ax:you,%_ag:nrp)
  165.           noop $input(You win!)
  166.           if ($window(@ASCII_Game_Editor)) window -c $target
  167.         }
  168.       }
  169.       if (%_ag:nch == $) {
  170.         if ($calc(%_ag:cns) < 20) %_ag:msg = You need at least 20 coins to advance.
  171.         else {
  172.           if (%_ag:nch !isin v^<>) {
  173.             rlinex $target %_ag:nxt $remove($puttok($regsubex(%_ag:new,/(*UTF8)(.)/g,\t$chr(32)),%_ax:you,$pos(%_ag:map,%_ax:you),32),$chr(32))
  174.             rlinex $target $fline($target,* $+ %_ax:you $+ *,$iif($keyval == 38,2,1)) $replace(%_ag:map,%_ax:you,%_ag:nrp)
  175.             if (%_ag:scr) && (%_ag:nch != c) dec %_ag:scr
  176.           }
  177.           dec %_ag:cns 20
  178.         }
  179.       }
  180.       ; -- STR ADD LATER
  181.       if (%_ag:nch == %_ax:oth) {
  182.         noop
  183.       }
  184.       ; -- END ADD LATER
  185.       elseif (%_ag:chr isin KC*) {
  186.         var %_ag:spc $true
  187.         goto $v1
  188.       }
  189.     }
  190.     if (%_ag:spc) {
  191.       :K | inc %_ag:key | goto end
  192.       :c | inc %_ag:cns $replacecs(%_ag:chr,C,5) | inc %_ag:scr $replacecs(%_ag:chr,c,100,C,500) | goto end
  193.       :* | ag.win -p | goto end
  194.     }
  195.     :end
  196.     ag.msg %_ag:msg
  197.   }
  198. }
  199.  
  200. ; ---
  201.  
  202. ; Editor Functions
  203.  
  204. alias -l ae.pos return $regsubex($$fline(@ASCII_Game_Editor,*?*).text,/(*UTF8)[^]*([^])[^]*/,$regml(1).pos)
  205. alias -l ae.chr {
  206.   noop $$fline(@ASCII_Game_Editor,/(*UTF8)([^])/,1,2)
  207.   return $regml(1)
  208. }
  209.  
  210. alias -l ae.cyc {
  211.   var %_ae:chr @ $iif(!$fline(@ASCII_Game_Editor,*!*) || $ae.chr == !,!) $iif(!$fline(@ASCII_Game_Editor,*&*) || $ae.chr == &,&) $(#,0) $ > < ^ v + K ? c C E * . $chr(160), %_ae:num $numtok(%_ae:chr,32)
  212.   return $gettok(%_ae:chr,$calc($findtokcs(%_ae:chr,$1,32) % %_ae:num $iif($prop == pre,$replace($1,$chr(160),+ %_ae:num -1,@,-2,$1,-1),+1)),32)
  213. }
  214.  
  215. alias -l ae.win {
  216.   clear @ASCII_Game_Menu | unset %_ae:* | if ($window(@ASCII_Game_Menu)) renwin $v1 @ASCII_Game_Editor | clear @ASCII_Game_Editor
  217.   aline @ASCII_Game_Editor $chr(160) $+ New - Load - Save - Playtest $str($chr(160),22) Menu
  218.   aline @ASCII_Game_Editor $str(@,58)
  219.   var %_ae:itr 1
  220.   while (%_ae:itr <= 16) {
  221.     aline @ASCII_Game_Editor $+(@,$iif(%_ae:itr == 1,$+(,$chr(160),,$str($chr(160),55)),$str($chr(160),56)),@)
  222.     inc %_ae:itr
  223.   }
  224.   aline @ASCII_Game_Editor $str(@,58)
  225. }
  226.  
  227. on *:KEYDOWN:@ASCII_Game_Editor:8,32,37,38,39,40: {
  228.   var %_ae:lin $fline($target,*?*), %_ae:txt $fline($target,*?*).text, %_ae:dir $replace($keyval,37,-1,38,-1,39,+1,40,+1), $&
  229.     %_ae:reg /(*UTF8) $+ $iif(%_ae:dir == -1,([^])([^])/,([^])([^])/), %_ae:nxt $calc(%_ae:lin %_ae:dir), %_ae:nln $line($target,%_ae:nxt)
  230.   if ($istok(8 32,$keyval,32)) rline $target %_ae:lin $regsubex(%_ae:txt,/(*UTF8)(?<=)([^])(?=)/,$replace($keyval,8,$chr(160),32,$iif($mouse.key & 4,$ae.cyc(\1).pre,$ae.cyc(\1))))
  231.   elseif (!$keychar) {
  232.     if ($istok(37 39,$keyval,32)) {
  233.       rline $target %_ae:lin $regsubex(%_ae:txt,%_ae:reg,$iif(%_ae:dir == +1,$strip(\1) $+ \2,\1 $+ $strip(\2)))
  234.       if ($ae.pos == 1) rline $target %_ae:lin $regsubex(%_ae:txt,/(*UTF8)^(.+)(.)(?=@$)/,$strip(\1) $+ \2)
  235.       if ($ae.pos == 58) rline $target %_ae:lin $regsubex(%_ae:txt,/(*UTF8)(?<=^@)(.)(.+)$/,\1 $+ $strip(\2))
  236.     }
  237.     else {
  238.       var %_ae:tmp $ae.pos, %_ae:nln $replacex(%_ae:lin %_ae:dir,3 -1,18,18 +1,3,%_ae:lin %_ae:dir,%_ae:nxt), %_ae:new $line($target,%_ae:nln)
  239.       rline $target %_ae:lin $strip(%_ae:txt)
  240.       rline $target %_ae:nln $remove($puttok($regsubex(%_ae:new,/(*UTF8)(.)/g,\t$chr(32)), $+ $mid(%_ae:new,%_ae:tmp,1) $+ ,%_ae:tmp,32),$chr(32))
  241.     }
  242.   }
  243. }
  244.  
  245. on ^$*:HOTLINK:/(*UTF8)(New|Load|Save|Playtest|Menu)/:@ASCII_Game_Editor: {
  246.   if ($mouse.key & 1) {
  247.     if ($regml(1) == Menu) ag.win -m
  248.     if ($regml(1) == New) && ($input(All unsaved changes will be lost. Continue?,,ASCII Game)) ae.win
  249.     if ($regml(1) == Load) && ($input(All unsaved changes will be lost. Continue?,,ASCII Game)) {
  250.       var %_ae:ldf $qt($$sfile(ASCII_Game_Custom\*.ascg))
  251.       clear $target
  252.       aline $target $chr(160) $+ New - Load - Save - Playtest $str($chr(160),22) Menu
  253.       ax.fac $target
  254.       filter -fw %_ae:ldf $target
  255.       rline $target 3 $regsubex($line($target,3),/(*UTF8)(?<=^@)(.)/,\t)
  256.       ax.fac $target
  257.     }
  258.     if ($regml(1) == Save) {
  259.       var %_ae:itr 3, %_ae:sft $$sfile(ASCII_Game_Custom\*.ascg,Save As...,Save), %_ae:sfl $qt(%_ae:sft $+ $iif(!$regex(%_ae:sft,/(\.ascg$)/i),.ascg))
  260.       while (%_ae:itr <= 18) {
  261.         write $iif(%_ae:itr == 3,-c) %_ae:sfl $strip($line($target,%_ae:itr))
  262.         inc %_ae:itr
  263.       }
  264.     }
  265.     if ($regml(1) == Playtest) {
  266.       var -g %_ax:you $iif($input(Yes for p1 $+ $chr(44) No for p2,y),!,&), %_ax:oth $iif($!,&,!)
  267.       var %_ae:itr 1
  268.       if ($hget(asc.lvl)) hfree asc.lvl
  269.       while (%_ae:itr <= 19) {
  270.         hadd -m asc.lvl %_ae:itr $strip($line(@ASCII_Game_Editor,%_ae:itr))
  271.         inc %_ae:itr
  272.       }
  273.       ag.win -p
  274.       ag.msg
  275.     }
  276.   }
  277. }
  278.  
  279. ; ---
  280.  
  281. ; Socket
  282.  
  283. alias rlinex {
  284.   rline $iif($1 == -l,$2-,$1-)
  285.   if (%_ax:opp) && ($1 != -l) {
  286.     sockmark -nt ASCII_Game $1-
  287.     sockudp -knt ASCII_Game 194 %_ax:opp 194 $1-
  288.   }
  289. }
  290.  
  291. alias as.uaip {
  292.   if ($regex($2,/^[\Q: $+ $prefix $+ \E]*AG\|([^|]+)\|([0-9_]+)!\S+/)) {
  293.     $replace($1,-a,hadd -m,-d,hdel) AG_PLRS $regml(1) $regml(2) | var %x 1
  294.     if ($1 == -a) aline -l @AG_Lobby $regml(1)
  295.     if ($1 == -d) dline -l @AG_Lobby $fline(@AG_Lobby,$regml(1),1,1)
  296.     aline @AG_Lobby $regml(1) Has $iif($1 == -a,joined,left) the lobby.
  297.   }
  298. }
  299.  
  300. on *:SOCKOPEN:ASCII_Game: {
  301.   sockwrite -n $sockname NICK $+(AG|,$left($me,5),00|,$replace($ip,.,_))
  302.   sockwrite -n $sockname USER u.X1i-_a 8 * :Meta's ASCII Game Player
  303.   sockwrite -n $sockname PROTOCTL UHNAMES
  304. }
  305.  
  306. on *:SOCKREAD:ASCII_Game: {
  307.   var %sock | sockread %sock | tokenize 32 %sock
  308.   if ($1 == PING) sockwrite -nt $sockname PONG $2
  309.   if ($2 == 001) sockwrite -nt $sockname JOIN #ASCII_Game
  310.   if ($2 == 433) {
  311.     inc %??
  312.     sockwrite -nt $sockname NICK $+(AG|,$left($iif($me,$me,Guest),5),$base(%??,10,10,2),$(|),$replace($ip,.,_))
  313.     sockmark $sockname $+(:AG|,$left($iif($me,$me,Guest),5),$base(%??,10,10,2),$(|),$replace($ip,.,_))
  314.   }
  315.   if ($2 == 353) {
  316.     tokenize 32 $6-
  317.     as.uaip -a $*
  318.   }
  319.   if ($2 == JOIN) && ($sock($sockname).mark $+ * !iswm $1) as.uaip -a $1
  320.   if ($2 == QUIT) as.uaip -d $1
  321.   if ($2 == PRIVMSG) al.msg << $regsubex($1,/^[\Q: $+ $prefix $+ \E]*AG\|([^|]+)\S+/,\1) << $right($4-,-1)
  322. }
  323.  
  324. ; ---
  325.  
  326. ; Lobby
  327.  
  328. alias -l ag.lby {
  329.   if (!$window(@AG_Lobby)) {
  330.     window -Deg1k1l10mS @AG_Lobby
  331.     if ($1 == -n) && ($sock(ASCII_Game)) sockwrite -n ASCII_Game NAMES #ASCII_Game
  332.   }
  333. }
  334.  
  335. alias -l al.msg {
  336.   ag.lby -n
  337.   aline -hp @AG_Lobby $1-
  338. }
  339.  
  340. on *:INPUT:@AG_Lobby: {
  341.   if (($left($1,1) !isin $+(/,$readini($mircini,n,commandchar))) || ($ctrlenter)) && (!$inpaste) {
  342.     if ($sock(ASCII_Game)) {
  343.       sockwrite -nt ASCII_Game PRIVMSG #ASCII_Game $1-
  344.       al.msg >> $regsubex($sock(ASCII_Game).mark,/^[\Q: $+ $prefix $+ \E]*AG\|([^|]+)\S+/,\1) >> $1-
  345.     }
  346.   }
  347. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement