Advertisement
Plornt

Untitled

Aug 20th, 2015
496
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
mIRC 48.42 KB | None | 0 0
  1. ;; Created by Tom Caserta
  2. ;; Hawkee: [Plornt]
  3. alias sanitizeInput {
  4.   ;; TODO: Sanitation that requires no max length
  5.   ;return $1-
  6.  ; echo -a [Sanitizing] $1-
  7.   return $!decode( $encode($1-,m) ,m)
  8. }
  9.  
  10. alias execIdentifier {
  11.   var %params $null
  12.   var %i 2
  13.   while (%i <= $0) {
  14.     var %params = $iif(%params,$v1 $+ $chr(44),$null) $+ $sanitizeInput($($+($,%i),2))
  15.     inc %i
  16.   }
  17.   return $($+($,$1,$iif(%params,( $+ %params $+ ), $null)),2)
  18. }
  19.  
  20. ; $1 = Channel, $2 = Section, $3 = Item, $4- = Value
  21. alias mwrite {
  22.   if ($3 == waitingFor) {
  23.     ;echoa -a $1 3Info: Waiting for is $4
  24.   }
  25.   if ($3 == waitingFor && $4 < 0) {
  26.     msg $1 4DEBUG: Command has gone into negatives?
  27.   }
  28.   ;echo -a 03Write:  machikoro.ini $+($1,$chr(44),$2) $3 $4-
  29.   writeini machikoro.ini $+($1,$chr(44),$2) $3 $4-
  30. }
  31.  
  32. ;; $1 == Channel $2 = Section $3 = Optional Item Only
  33. alias mRemoveSectionStartingWith {
  34.   var %i 1
  35.   var %iniSecs = $ini(machikoro.ini, 0)
  36.   var %builtWildCard $1 $+ $chr(44) $+ $2
  37.   while (%i <= %iniSecs) {
  38.     var %section = $ini(machikoro.ini, %i)
  39.     echo -a %i -- %iniSecs -- %section --  %builtWildCard --- $3
  40.     if ($startsWith(%section, %builtWildCard)) {
  41.       mremove $1 $gettok(%section,2-,44) $3!
  42.       dec %i
  43.       dec %iniSecs
  44.     }
  45.     inc %i
  46.   }
  47. }
  48.  
  49. ; $1 = Channel, $2 = Section, $3 = Item
  50. alias mremove {
  51.   ;msg $1 REMOVING $2 ( $3 )
  52.   ;echo -a Removing $+($1,$chr(44),$2) $3
  53.   remini machikoro.ini $+($1,$chr(44),$2) $3
  54. }
  55.  
  56. alias mini {
  57.   return $ini(machikoro.ini, $+($1,$chr(44),$2), $3)
  58. }
  59.  
  60. ; $1 = Channel, $2 = Section, $3 = Item, $4 = Ini File, $5- = Value
  61. alias miniwrite {
  62.   writeini $4 $+($1,$chr(44),$2) $3 $5-
  63. }
  64.  
  65. ; $1 = Channel, $2 = Section, $3 = Item
  66. alias mread {
  67.   return $readini($iif($4,$4,machikoro.ini), n, $+($1,$chr(44),$2), $3)
  68. }
  69.  
  70. alias b {
  71.   return  $+ $1- $+ 
  72. }
  73.  
  74. ;; $1 == Channel $2 == Index
  75. alias getTurnOffsetPlayer {
  76.   echo -a Current Turn: $getTurn($1) Index $2 Next turn: $getTurn($1, $calc($mGetSetting($1, turn) + 1))
  77.   return $getTurn($1, $calc($calc($calc($mGetSetting($1, turn) + $calc($2 - 1)) % $playerAmount($1)) + 1))
  78. }
  79.  
  80. ; 1 = Channel, $2 = alias to be called each time with %i and value
  81. alias mForEachPlayer {
  82.   var %iniFile $iif($4,$v1,machikoro.ini)
  83.   var %i 1
  84.   var %ini $ini(%iniFile, $+($1,$chr(44),players), 0)
  85.   while (%i <= $playerAmount($1)) {
  86.     $2 $getTurnOffsetPlayer($1, %i)
  87.     inc %i
  88.   }
  89. }
  90.  
  91.  
  92. ; 1 = Channel, $2 = Section, $3 = alias to be called each time with %i and value
  93. alias mForEach {
  94.   var %iniFile $iif($4,$v1,machikoro.ini)
  95.   var %i 1
  96.   var %ini $ini(%iniFile, $+($1,$chr(44),$2), 0)
  97.   while (%i <= %ini ) {
  98.     var %currKey $ini(%iniFile, $+($1,$chr(44),$2), %i)
  99.     var %currValue = $mread($1,$2,%currKey, %iniFile)
  100.     $3 %currKey %currValue %i
  101.     inc %i
  102.   }
  103. }
  104.  
  105.  
  106. alias mIsInitializing {
  107.   return $iif($mGetSetting($1,status) == 1,$true,$false)
  108. }
  109.  
  110. alias mIsStarted {
  111.   return $iif($mGetSetting($1, status) == 2, $true,$false)
  112. }
  113.  
  114. alias mInitGame {
  115.   mSetSetting $1 status 1
  116.   initializeCards $1 $2-
  117. }
  118.  
  119. alias mStartGame {
  120.   incTurn $1
  121.   mGiveStartingCardsAndMoney $1
  122.   mSetSetting $1 status 2
  123.   nextTurn $1 init
  124. }
  125.  
  126. alias mIsJoined {
  127.   return $iif($mread($1, players, $2) == true,$true,$false)
  128. }
  129.  
  130. alias machiJoin {
  131.   mwrite $1 players $2 true
  132. }
  133.  
  134. alias mGetSetting {
  135.   return $mread($1, gameSettings, $2)
  136. }
  137.  
  138. alias mSetSetting {
  139.   mwrite $1 gameSettings $2 $3-
  140. }
  141.  
  142. alias cardSectionIgnored {
  143.   return $iif($1 == card_types || $1 == handler_priority,$true,$false)
  144. }
  145.  
  146. alias translateCard {
  147.   var %channel = $1
  148.   var %card = $2-
  149.   ;msg $1 %card
  150.   if (%card !isnum && $ini(machi_cards.ini, %card, 0) > 0) {
  151.     return %card
  152.   }  
  153.   elseif ($mread(%channel, temp_card_reverse, $md5($lower(%card))) != $null) {
  154.     ; msg $1 Got this from md5 %card $lower(%card)  $md5($lower(%card)) $mread(%channel, temp_card_reverse, $md5($lower(%card)))
  155.     return $mread(%channel, temp_card_reverse, $md5($lower(%card)))
  156.   }
  157.  
  158.   var %i = 1
  159.   var %potential $null
  160.   while (%i <= $ini(machi_cards.ini,0) ) {
  161.     var %section = $ini(machi_cards.ini,%i)
  162.     if (!$cardSectionIgnored(%section)) {
  163.       echo -a * $+ %card $+ * iswm $readCard(%section, name)
  164.       if (* $+ %card $+ * iswm $readCard(%section, name)) {
  165.         echo -a IS POTENTIAL.... %card %section
  166.         var %potential $addtok(%potential,%section, 44)
  167.       }
  168.     }
  169.     inc %i
  170.   }
  171.   if ($numtok(%potential, 44) == 1) {
  172.     return %potential
  173.   }
  174.   return $null
  175. }
  176.  
  177. ; $1 = Card Name, $2 = Property
  178. alias readCard {
  179.   ;echo -a 2INFO: Reading card $1 property $2
  180.   return $readini(machi_cards.ini,$1,$2)
  181. }
  182.  
  183. alias playerSection {
  184.   return player. $+ $1
  185. }
  186.  
  187. alias getPlayerSetting {
  188.   return $mread($1,$playerSection($2),$3)
  189. }
  190.  
  191. alias setPlayerSetting {
  192.   mwrite $1 $playerSection($2) $3 $4-
  193. }
  194. alias incPlayerSetting {
  195.   setPlayerSetting $1 $2 $3 $calc($iif($getPlayerSetting($1,$2,$3),$v1,0) + $4)
  196. }
  197. alias addCoins {
  198.   incPlayerSetting $1 $2 coins $3
  199. }
  200. alias getCoins {
  201.   return $getPlayerSetting($1,$2,coins)
  202. }
  203. alias getCoinsFmt {
  204.   return $coinage($getCoins($1,$2))
  205. }
  206. alias getPlayerCardAmount {
  207.   return $iif($getPlayerSetting($1, $2, card. $+ $3),$v1,0)
  208. }
  209.  
  210. ;; $1 = Channel $2 = Player $3 = Card
  211. alias removePlayerCard {
  212.   incPlayerSetting $1 $2 card. $+ $3 -1
  213. }
  214. ;; $1 = Channel $2 = Player $3 = Card
  215. alias addPlayerCard {
  216.   incPlayerSetting $1 $2 card. $+ $3 1
  217. }
  218. alias mTheme {
  219.   return 10
  220. }
  221. alias mNoticeTheme {
  222.   return 07
  223. }
  224. alias machiNotice {
  225.   noop $dll(spaces.dll, send, NOTICE $1 $mTheme $+ $iif($isid && $3 == $true,$replace(2,$chr(32),.),$2-))
  226.   echo $1 $timestamp <NOTICE: $+ $me $+ > $2-
  227. }
  228. alias machiMessage {
  229.   noop $dll(spaces.dll, send, PRIVMSG $1 $mTheme $+ $iif($isid && $3 == $true,$replace(2,$chr(32),.),$2-))
  230.   echo $1 $timestamp < $+ $me $+ > $2-
  231. }
  232. alias cardName {
  233.   ;echo -a machi_cards.ini , card_types $readCard($1,type) $+ _icon
  234.   return $+(,$readCard($1,color),$iif(!$2,$+([,$readini(machi_cards.ini,card_types,$readCard($1,type) $+ _icon),]),$null),$chr(32),$readCard($1,name),$mTheme)
  235. }
  236. alias playerAmount {
  237.   return $mini($1, players, 0)
  238. }
  239. alias coinage {
  240.   return $iif($2,$,💰) $+ $bytes($iif($1,$1,0),b)
  241. }
  242.  
  243. alias getTypeName {
  244.   return $readini(machi_cards.ini,card_types,$1 $+ _name)
  245. }
  246.  
  247. ;; $1 = Channel, $2 = Card, $3 = Amount per, $4 = Player, $5 = Multiplier Type
  248. alias addCoinsPerCardWithMultiplierType {
  249.   var %cardAmtMultiplierCard = $getPlayerCardAmount($1,$4,$2)
  250.   if (%cardAmtMultiplierCard > 0) {
  251.     var %cardTypesOfMultiplier = $mread($1,temp_card_types,$5)
  252.     ;msg $1 Debug: %cardamtMultiplierCard  %cardTypesOfMultiplier
  253.     var %i 1
  254.     var %multiplier = 0
  255.     while (%i <= $numtok(%cardTypesOfMultiplier,44)) {
  256.       var %card = $gettok(%cardTypesOfMultiplier,%i,44)
  257.       var %cardAmt = $getPlayerCardAmount($1,$4,%card)
  258.       if (%cardAmt > 0) {
  259.         var %multiplier = $calc(%multiplier + %cardAmt)
  260.         var %names = $sentencify(%names,$cardName(%card) $chr(91) $+ x $+ %cardAmt $+ ])
  261.       }
  262.       inc %i
  263.     }
  264.     var %coinAmount = $calc($calc($3 * %multiplier) * %cardAmtMultiplierCard)
  265.     addCoins $1 $4 %coinAmount
  266.     machiNotice $4 Your %cardAmtMultiplierCard $cardName($2) just earned you $coinage(%coinAmount) from your $b($getTypeName($5)) cards ( $+ %names $+ )
  267.   }
  268. }
  269. ;; $1 = Channel, $2 = Card, $3 = Amount per, $4 = Player
  270. ;; #stopbeingannoying wheat_field 1 TomM Amount of cards: 0
  271. alias addCoinsPerCard {
  272.   var %cardAmt $getPlayerCardAmount($1,$4,$2)
  273.   ;machiMessage $1 Debug: adding coins per card: $1 $2 $3 $4 Amount of cards: %cardAmt
  274.   if (%cardAmt > 0) {
  275.     var %amt $calc(%cardAmt * $3)
  276.     var %eventID $createEvent($1, onBeforeEarnCoin)
  277.     var %oldAmt %amt
  278.     noop $setEventValues($1, %eventID, $false, roller $4, cardOwner $4, coinAmount %amt, card $2, cardAmount %cardAmt, dispatcher addCoinsPerCard)
  279.     var %continue $dispatchEvent($chan, %eventID, $true)
  280.     var %isHandled = $eventInfo($1, %eventID).isHandled
  281.     var %amt = $eventInfo($1, %eventID).coinAmount
  282.     ;msg $1 0,07Debug: $eventInfo($1, %eventID).coinAmount VS %oldAmt
  283.     destroyEvent $1 %eventID
  284.  
  285.     if (%continue) {
  286.       addCoins $1 $4 %amt
  287.       machiNotice $4 Your %cardAmt $cardName($2) card(s) just earned you $coinage(%amt) coins.
  288.     }
  289.   }
  290. }
  291.  
  292. ;; $1 = Channel $2 = Card $3 = Payer $4 = amount per, $5 = Player
  293. alias payUserPerCard {
  294.   if ($3 != $5) {
  295.     var %cardAmt $getPlayerCardAmount($1,$5,$2)
  296.     if (%cardAmt > 0) {
  297.       var %amt = $calc(%cardAmt * $4)
  298.  
  299.       var %eventID $createEvent($1, onBeforeEarnCoin)
  300.  
  301.       noop $setEventValues($1, %eventID, $false, roller $3, cardOwner $5, coinAmount %amt, card $2, cardAmount %cardAmt, dispatcher payUserPerCard)
  302.       var %continue $dispatchEvent($chan, %eventID, $true)
  303.       var %isHandled = $eventInfo($1, %eventID).isHandled
  304.       var %amt = $eventInfo($1, %eventID).coinAmount
  305.  
  306.       destroyEvent $1 %eventID
  307.       var %userCoins $getCoins($1, $3)
  308.       var %origAmount %amt
  309.       var %notEnoughCoins $iif(%userCoins >= %amt, $false, $true)
  310.       var %amt = $iif(%notEnoughCoins, %userCoins, %amt)
  311.  
  312.       if (%continue) {
  313.         addCoins $1 $3 $calc(0 - %amt)
  314.         addCoins $1 $5 %amt
  315.         machiNotice $3 Your roll cost you $coinage(%amt) to $5 $+ 's %cardAmt * $cardName($2) $+ . $&
  316.           $iif(%notEnoughCoins, You didn't have enough to pay the full amount of $b(%origAmount), $null)
  317.  
  318.  
  319.         machiNotice $5 Your %cardAmt $cardName($2) just earned you $coinage(%amt) from $3 $+ . $iif(%notEnoughCoins, They didn't have enough to pay the full amount of $b(%origAmount), $null)
  320.  
  321.         machiMessage $1 $b($3) just paid $b($5) $coinage(%amt) coins for their $cardName($2)
  322.       }
  323.  
  324.     }
  325.   }
  326. }
  327. ;; $1 = Channel, $2 = Payee, $3 = Amount, $4 = Card Name, $5 = Player
  328. alias payUser {
  329.   if ($2 != $5) {
  330.     var %amt $iif($3 > $getCoins($1, $5),$v2, $v1)
  331.  
  332.     addCoins $1 $2 %amt
  333.     addCoins $1 $5 $calc(0 - %amt)
  334.  
  335.     machiNotice $2 Your $cardName($4) just earned you $coinage(%amt) from $b($5)
  336.     machiNotice $5 $b($2) just took $coinage(%amt) due to their $cardName($4) activating.
  337.   }
  338. }
  339. ;; HANDLERS
  340. ;; Input: $1 = Channel $2 = Roller $3 = Card Name
  341.  
  342. alias MachiKoro_BlueCardHandler {
  343.   ;  machimessage $1 DEBUG: Debugging blue card handler: $1 $2 $3
  344.   var %amount = $readCard($3, receive)
  345.   noop $mForEach($1,players,addCoinsPerCard $1 $3 %amount)
  346.   return $false
  347. }
  348. alias MachiKoro_GreenCardHandler {
  349.   var %amount = $readCard($3, receive)
  350.   var %multiplierType = $readCard($3, multiplier)
  351.   if (%multiplierType != $null) {
  352.     addCoinsPerCardWithMultiplierType $chan $3 %amount $2 %multiplierType
  353.   }
  354.   else {
  355.     addCoinsPerCard $chan $3 %amount $2
  356.   }
  357.   return $false
  358. }
  359. alias MachiKoro_RedCardHandler {
  360.   var %amount = $readCard($3, receive)
  361.   noop $mForEachPlayer($1, payUserPerCard $1 $3 $2 %amount)
  362.   return $false
  363. }
  364. alias MachiKoro_StadiumHandler {
  365.  
  366.   if ($getPlayerCardAmount($1,$2,$3) > 0) {
  367.     var %amt = $readCard($3,receive)
  368.     noop $mForEachPlayer($1, players, payUser $1 $2 %amt $3)
  369.     return $false
  370.   }
  371. }
  372. alias MachiKoro_BusinessCenterHandler {
  373.   ;msg $1 Bus center called $1-
  374.   if ($getPlayerCardAmount($1,$2,$3) > 0) {
  375.     machiMessage $1 $2 $+ 's $cardName($3) has just been activated. $2 please use !takeCard [user] [Card Name]
  376.     ;'
  377.     registerCommand $1 $2 takeCardHandler !takeCard
  378.     return $true
  379.   }
  380. }
  381.  
  382.  
  383. ;; $1 = Channel, $2 = User, $3- = Content
  384. ;; Returns $true for valid, $false for invalid
  385. alias takeCardHandler {
  386.   var %chan $1
  387.   var %nick $2
  388.   if ($3) {
  389.     var %user = $gettok($3,1,32)
  390.     var %card = $translateCard($1,$gettok($3,2-,32))
  391.     if (!%card || $readCard(%card, type) == 8) {
  392.       machiMessage $1 You must specify a non landmark card to take $b($2) using $b(!takeCard <user> <card>)
  393.       return $false
  394.     }
  395.  
  396.     if ($mIsJoined($1, %user)) {
  397.       var %hasCard $getPlayerCardAmount($1, %user, %card)
  398.       if (%hasCard > 0) {
  399.         removePlayerCard $1 %user %card
  400.         addPlayerCard $1 $2 %card
  401.         machiNotice $2 Taken $cardName(%card) from $b(%user)
  402.         machiNotice %user $b($2) just took $cardName(%card) from you because of their $cardName(business_center) establishment.
  403.         machiMessage $1 $b($2) took $cardName(%card) from $b(%user) $+ !
  404.         return $true
  405.       }
  406.       else {
  407.         machiNotice $2 $b(%user) does not have that card.
  408.       }
  409.     }
  410.     else {
  411.       machiNotice $2 You didnt correctly supply a correct user to take a card from. Make sure they're in the current game and use $b(!takeCard <nickname> <card>)
  412.     }
  413.   }
  414.   return $false
  415. }
  416.  
  417. alias MachiKoro_TVStationHandler {
  418.  
  419.   if ($getPlayerCardAmount($1,$2,$3) > 0) {
  420.     machiMessage $1 $2 $+ 's $cardName($3) has just been activated. $2 please use !takeCoins [player]
  421.     ;'
  422.     registerCommand $1 $2 takeCoinsHandler !takeCoins
  423.     return $true
  424.   }
  425. }
  426.  
  427. ;; $1 = Channel, $2 = User, $3- = Content
  428. ;; Returns $true for valid, $false for invalid
  429. alias takeCoinsHandler {
  430.   var %chan $1
  431.   var %nick $2
  432.   if ($3) {
  433.     var %user = $gettok($3,1,32)
  434.     if ($mIsJoined($1, %user)) {
  435.       var %userCoins $getCoins($1, %user)
  436.       var %takeCoins $iif(%userCoins > 5, 5, $iif(%userCoins > 0,$v1,0))
  437.       addCoins %chan %nick %takeCoins
  438.       addCoins %chan %user $calc(0 - %takeCoins)
  439.       machiNotice $2 Taken $coinage(%takeCoins) from $b(%user) $+ $iif(%takeCoins == 5,.,$chr(32) $+ as they didnt have enough to cover the costs.)
  440.       machiNotice %user $b($2) just took $coinage(%takeCoins) from you because of their $cardName(tv_station) establishment.
  441.       machiMessage $1 $b($2) took $coinage(%takeCoins) from $b(%user) $+ .
  442.       return $true
  443.     }
  444.     else {
  445.       machiNotice $2 You didnt correctly supply a correct user to take coins from. Make sure they're in the current game and use $b(!takeCoins [nickname])
  446.     }
  447.   }
  448.   return $false
  449. }
  450.  
  451. ;; Event Handlers
  452. ;; $1 = Channel $2 = Event ID
  453. ;; Returns prevent default
  454.  
  455. alias MachiKoro_ShoppingMallHandler {
  456.   var %cardOwner $eventInfo($1, $2).cardOwner
  457.   var %roller $eventInfo($1, $2).roller
  458.   var %coinAmount $eventInfo($1, $2).coinAmount
  459.   var %cardAmount $eventInfo($1, $2).cardAmount
  460.   var %card $eventInfo($1, $2).card
  461.   var %dispatcher $eventInfo($1, $2).dispatcher
  462.   var %type $readCard(%card, type)
  463.  
  464.   if (%type == 4 || %type == 7) {
  465.     if ($getPlayerCardAmount($1, %cardOwner, shopping_mall) > 0) {
  466.       ;noop $setEventValues($1, %eventID, $false, roller $3, cardOwner $5, coinAmount %amt, card $2, cardAmount %cardAmt, dispatcher payUserPerCard)
  467.  
  468.       $setEventValues($1, $2, $false, coinAmount $calc($calc($readCard(%card, receive) + 1) * %cardAmount))
  469.       ;
  470.  
  471.       machiNotice %cardOwner Your $cardName(shopping_mall) just activated earning $coinage(1) more for each $cardName(%card) you own.
  472.     }
  473.   }
  474. }
  475.  
  476. alias MachiKoro_StationHandler {
  477.   var %nick = $eventInfo($1, $2).nick
  478.   var %diceCount = $gettok($eventInfo($1,$2).message,2,32)
  479.   if ($getPlayerCardAmount($1, %nick, station) > 0) {
  480.     noop $setEventValues($1, $2,$true, fromStation $true)
  481.     if (%diceCount isnum && %diceCount <= 2 && %diceCount > 0) {
  482.       noop $setEventValues($1, $2,$true,isHandled $true)
  483.  
  484.       machiMessage $1 $b(%nick) is rolling $b(%diceCount) $iif(%diceCount == 1,die,dice) $+ .
  485.       mRoll $1 %nick %diceCount
  486.  
  487.     }
  488.     else {
  489.       noop $setEventValues($1, $2,$true,isHandled $false)
  490.       machiMessage $1 Sorry $b(%nick) $+ , as you have a $cardName(station) you need to specify the amount of dice you would like to roll.
  491.     }
  492.   }
  493. }
  494.  
  495. alias MachiKoro_AmusementParkHandler {
  496.   var %eventName = $eventInfo($1, $2).eventName
  497.   ;  msg $1 RETAKING TURN %eventName
  498.   if (%eventName == onAfterDiceRoll) {
  499.     var %nick = $eventInfo($1, $2).nick
  500.     ; msg $1 %nick was the caller
  501.     var %diceCounts = $eventInfo($1, $2).diceCounts
  502.     if ($getPlayerCardAmount($1, %nick, amusement_park) > 0 && ($eventInfo($1, $2).isHandled == $false )) {
  503.       if ($numtok(%diceCounts,44) > 1) {
  504.         var %i 2
  505.         ; machiMessage $1 Debug dice counts : %diceCounts
  506.         var %prev $gettok(%diceCounts,1,44)
  507.         while (%i <= $numtok(%diceCounts,44)) {
  508.           var %curr = $gettok(%diceCounts, %i, 44)
  509.           if (%prev != %curr) {
  510.             ;  machiMessage $1  %prev is not equal to %curr
  511.             return
  512.           }
  513.           var %prev = %curr
  514.           inc %i
  515.         }
  516.  
  517.         ; All dice are the same...
  518.         mSetSetting $1 retakeTurn $true
  519.         machiMessage $1 $b(%nick) just rolled a double! They can have another turn at the end of this because of their $cardName(amusement_park)
  520.       }
  521.     }
  522.   }
  523.   else if (%eventName == onTurnEnd) {
  524.     if ($mGetSetting($1,retakeTurn) == $true) {
  525.       mSetSetting $1 retakeTurn $false
  526.       machiMessage $1 Retaking turn as they rolled a double...
  527.       decTurn $1
  528.     }
  529.   }
  530. }
  531.  
  532.  
  533. ;; $1 = Channel, $2 = User, $3- = Content
  534. ;; Returns $true for valid, $false for invalid
  535. alias MachiKoro_ReRollHandler {
  536.   setPlayerSetting $1 $2 rerolled $true
  537.   var %eventID $createEvent($1, onBeforeDiceRoll)
  538.   noop $setEventValues($1, %eventID, $false, nick $2, message !roll $3-)
  539.   var %continue $dispatchEvent($chan, %eventID, $true)
  540.   var %isHandled = $eventInfo($1, %eventID).isHandled
  541.   destroyEvent $1 %eventID
  542.  
  543.   if (%continue) {
  544.     deRegisterCommand $1 $2 !continue
  545.     var %roll = $rand(1,6)
  546.     mRoll $1 $2 1
  547.     setPlayerSetting $1 $2 rerolled $false
  548.     return $true
  549.   }
  550.   else if (%isHandled == $true) {
  551.     deRegisterCommand $1 $2 !continue
  552.  
  553.     setPlayerSetting $1 $2 rerolled $false
  554.     return $true
  555.   }
  556.   setPlayerSetting $1 $2 rerolled $false
  557.   return $false
  558. }
  559.  
  560. ;; $1 = Channel, $2 User, $3- = Content
  561. alias MachiKoro_PurchaseHandler {
  562.   var %card $translateCard($1,$3-)
  563.   if (!%card) {
  564.     machiMessage $1 $b($2) $+ , that card does not exist or you didnt specify the card correctly. Please use $b(!purchase <card>) $+ . You can also $b(!pass) if you want to end your turn.
  565.     return $false
  566.   }
  567.   var %coinAmount $readCard(%card, cost)
  568.   if (%coinAmount > $getCoins($1, $2)) {
  569.     machiMessage $1 $b($2) $+ , you do not have enough coins to purchase the $cardName(%card) $+ , you require $b($coinage(%coinAmount)) $+ . You can also $b(!pass) if you want to end your turn.
  570.     return $false
  571.   }
  572.   var %cardsLeft $getMarketAmount($1, %card)
  573.  
  574.   if (%cardsLeft != unlimited && %cardsLeft <= 0) {
  575.     machiMessage $1 $b($2) $+ , sorry there is no more of that establishment on the market. You can also $b(!pass) if you want to end your turn.
  576.     return $false
  577.   }
  578.  
  579.   if ($cannotBuyCard($1, $2, %card)) {
  580.     machiMessage $1 $b($2) $+ , sorry you cannot purchase this card because: $cantBuyReason($v1) $+ . You can also $b(!pass) if you want to end your turn.
  581.     return $false
  582.   }
  583.  
  584.   setPlayerSetting $1 $2 hasPurchasedCard $true
  585.   addCoins $1 $2 $calc(0 - %coinAmount)
  586.   addPlayerCard $1 $2 %card
  587.   removeCardFromMarket $1 %card
  588.   machiMessage $1 $b($2) just purchased the $cardName(%card) for $coinage(%coinAmount) $+ $iif(%cardsLeft != unlimited,$chr(44) there is now $b($calc(%cardsLeft - 1)) left on the market.,.)
  589.  
  590.   return $true
  591. }
  592.  
  593. alias MachiKoro_PassHandler {
  594.   mremove $1 commands. $+ $2
  595.   mSetSetting $1 waitingFor 0
  596.   machimessage $1 $b($2) passed the rest of their turn.
  597.   return $true
  598. }
  599.  
  600. ;; $1 = Channel, $2 = User, $3- = Content
  601. ;; Returns $true for valid, $false for invalid
  602. alias MachiKoro_ContinueRollHandler {
  603.   var %dice $getPlayerSetting($1,$2,radioTower_eventDice)
  604.   var %diceCounts $getPlayerSetting($1,$2,radioTower_eventDiceCounts)
  605.   var %diceTotal $getPlayerSetting($1,$2,radioTower_eventDiceTotal)
  606.   var %diceMessage $getPlayerSetting($1,$2,radioTower_eventDiceMessage)
  607.   machiMessage $1 Continuing with %diceMessage %isHandled
  608.  
  609.   setPlayerSetting $1 $2 rerolled $true
  610.   var %eventID $createEvent($1, onAfterDiceRoll)
  611.   noop $setEventValues($1, %eventID, $false, nick $2, dice %dice, diceCounts %diceCounts, diceTotal %diceTotal, diceMessage %diceMessage)
  612.   var %continue = $dispatchEvent($1, %eventID)
  613.   deRegisterCommand $1 $2 !roll
  614.   if (%continue) {
  615.  
  616.     processRoll $1 %diceTotal $2
  617.     ;machiMessage $1 Debug: Total %diceTotal $2 $1 %dice %diceCounts %diceTotal %diceMessage
  618.     setPlayerSetting $1 $2 rerolled $false
  619.     return $true
  620.   }
  621.   return $true
  622. }
  623.  
  624. alias MachiKoro_RadioTowerHandler {
  625.   var %nick = $eventInfo($1, $2).nick
  626.   if ($getPlayerCardAmount($1, %nick, radio_tower) > 0) {
  627.     if ($getPlayerSetting($1, %nick, rerolled) != $true) {
  628.       registerCommand $1 %nick MachiKoro_ReRollHandler !roll
  629.       registerCommand $1 %nick MachiKoro_ContinueRollHandler !continue
  630.       setPlayerSetting $1 %nick rerolled $false
  631.       setPlayerSetting $1 %nick radioTower_eventDice $eventInfo($1,$2).dice
  632.       setPlayerSetting $1 %nick radioTower_eventDiceCounts $eventInfo($1,$2).diceCounts
  633.       setPlayerSetting $1 %nick radioTower_eventDiceTotal $eventInfo($1,$2).diceTotal
  634.       setPlayerSetting $1 %nick radioTower_eventDiceMessage $eventInfo($1,$2).diceMessage
  635.       noop $setEventValues($1, $2, $true, isHandled $true)
  636.       machiMessage $1 $b(%nick) as you have a $cardName(radio_tower) you have the option of discarding your roll by $b(!roll) again or $b(!continue)
  637.     }
  638.   }
  639. }
  640.  
  641. ;; END HANDLERS
  642.  
  643. ;; $1 = Channel, $2 = Player, $3 = Handler, $4 = Command, $5 = Do not wait for command
  644. alias registerCommand {
  645.   if ($mread($1, commands. $+ $2, $4) == $null) {
  646.     mwrite $1 commands. $+ $2 $4 $3
  647.     if (!$5) {
  648.       ;  msg $chan 2Debug: Setting waiting for for $4 as $5 is true.
  649.       mSetSetting $1 waitingFor $calc($mGetSetting($1,waitingFor) + 1)
  650.     }
  651.   }
  652. }
  653.  
  654. ;; $1 = Channel, $2 = Player, $3 = Command $4 = Do not wait for command
  655. alias deRegisterCommand {
  656.   if ($mread($1, commands. $+ $2, $3) != $null) {
  657.     mremove $1 commands. $+ $2  $3
  658.     if (!$4) {
  659.       ;  msg $chan 2Debug: Setting waiting for for $3 as $4 is true.
  660.       mSetSetting $1 waitingFor $calc($mGetSetting($1,waitingFor) - 1)
  661.     }
  662.   }
  663. }
  664.  
  665.  
  666. ; $1 = Channel $2 = Roller $3 = card name
  667. ; returns true or false if a player interaction is required
  668. alias handleCard {
  669.   echo -a Handling card: $1-
  670.   return $execIdentifier($readCard($3,handler),$1,$2,$3)
  671. }
  672.  
  673. ; $1 = Channel, $2 = roll, $3 = player nick, [$4 = Skip to handlerIndex, $5 = Skip to cardIndex]
  674. alias processRoll {
  675.   var %hitCards = $mread($1,temp_card_rolls,$2)
  676.   ;msg $1 DEBUG: $1 $2 $3
  677.   ;msg $1 Debug Hit Cards: %hitCards
  678.   if (%hitCards) {
  679.     var %processIndex = 1
  680.     var %hasSkipped = $false
  681.     if ($4) {
  682.       var %processIndex = $4
  683.     }
  684.     while (%processIndex <= $ini(machi_cards.ini, handler_priority, 0)) {
  685.       var %handlerSection = $ini(machi_cards.ini, handler_priority, %processIndex)
  686.       var %handler = $readini(machi_cards.ini, handler_priority, %handlerSection)
  687.       var %handlerCards = $mread($1, temp_card_handlers, %handler)
  688.       var %i = 1
  689.       echo -a Debug: %handler ::: %handlerCards
  690.  
  691.       if ($5 && %hasSkipped == $false) {
  692.         var %hasSkipped = $true
  693.         var %i = $5
  694.       }
  695.  
  696.       while (%i <= $numtok(%hitCards,44) ) {
  697.         var %hitCard $gettok(%hitCards,%i,44)
  698.         if ($istok(%handlerCards, %hitCard, 44)) {
  699.           if ($handleCard($1,$3,%hitCard)) {
  700.             var %waitingFor = $iif(%waitingFor,%waitingFor $+ $chr(44),$null) $+ %hitCard
  701.             mPauseProcessing $1 %processIndex $calc(%i + 1) $3 $2
  702.             return
  703.           }
  704.         }
  705.         inc %i
  706.       }
  707.       inc %processIndex
  708.     }
  709.   }
  710.   if (!%waitingFor && $getPlayerSetting($1, $3, hasPurchasedCard) == $false) {
  711.     if ($getCoins($1,$3) > 0) {
  712.       var %waitingFor = $iif(%waitingFor, %waitingFor $+ $chr(44),$null) $+  MachiKoro_PurchaseHandler
  713.       ;; This var is pointless above? No idea. Fuck it.
  714.       machiMessage $1 $b($3) you can now purchase a card from the market with $b(!purchase <card>) $+ , or just $b(pass)
  715.       sendMarket $1 $3
  716.       registerCommand $1 $3 MachiKoro_PurchaseHandler !purchase
  717.  
  718.     }
  719.     else {
  720.       machiMessage $1 $b($3) You have no coins to purchase anything... Moving on.
  721.     }
  722.   }
  723.   if (!%waitingFor) {
  724.     nextTurn $1
  725.   }
  726. }
  727.  
  728. alias isProcessingPaused {
  729.   return $iif($mGetSetting($1, pausedProcessing) == $true,$true,$false)
  730. }
  731.  
  732. alias mPauseProcessing {
  733.   machiMessage $1 MachiKoro is paused whilst $b($4) makes their move!
  734.   mSetSetting $1 pausedProcessing $true
  735.   mSetSetting $1 currentHandlerID $2
  736.   mSetSetting $1 currentHandlerIndex $3
  737.   mSetSetting $1 currentRoller $4
  738.   mSetSetting $1 currentRoll $5
  739. }
  740.  
  741. alias mResumeProcessing {
  742.   mSetSetting $1 pausedProcessing $false
  743.   processRoll $1 $mGetSetting($1, currentRoll) $mGetSetting($1, currentRoller) $mGetSetting($1, currentHandlerID) $mGetSetting($1, currentHandlerIndex)
  744.   mSetSetting $1 currentHandlerID 1
  745.   mSetSetting $1 currentHandlerIndex 1
  746.   mSetSetting $1 currentRoller -
  747.   mSetSetting $1 currentRoll 0
  748. }
  749.  
  750. alias getTurn {
  751.   return $mini($1, players, $iif(!$2,$mGetSetting($1,turn),$2))
  752. }
  753. alias incTurn {
  754.   ; msg $1 DEBUG Players:  $playerAmount($1) Curr Turn: $getTurn($1) incrementing by 1 is: $calc($mGetSetting($1,turn) + 1) :: ACT TURN $iif($calc($mGetSetting($1,turn) + 1) <= $playerAmount($1),$v1,1)
  755.   var %turn = $iif($calc($mGetSetting($1,turn) + 1) <= $playerAmount($1),$v1,1)
  756.   mSetSetting $1 turn %turn
  757. }
  758.  
  759. alias decTurn {
  760.   var %turn = $iif($calc($mGetSetting($1,turn) - 1) > 0,$v1,$playerAmount($1))
  761.   mSetSetting $1 turn %turn
  762. }
  763.  
  764. ;; $1 chan $2 player
  765. alias sendCoins {
  766.  
  767.   machiNotice $2 Coin amounts after that turn: $getPlayerCoins($1)
  768. }
  769.  
  770. alias eachGiveCard {
  771.   ;echo -a Giving card $1-
  772.   addPlayerCard $1 $3 $2
  773. }
  774. alias eachGiveCoins {
  775.   addCoins $1 $3 $2
  776. }
  777.  
  778. alias mGiveStartingCardsAndMoney {
  779.   var %i 1
  780.   noop  $mForEach($1,players,eachGiveCoins $1 3 )
  781.   while (%i <= $ini(machi_cards.ini,0) ) {
  782.     var %section = $ini(machi_cards.ini,%i)
  783.     if (!$cardSectionIgnored(%section)) {
  784.       ;echo -a %SECTION = $readCard(%section, start_with)
  785.       if ($readCard(%section, start_with) == 1) {
  786.  
  787.         noop  $mForEach($1,players,eachGiveCard $1 %section )
  788.       }
  789.     }
  790.     inc %i
  791.   }
  792.  
  793. }
  794.  
  795.  
  796. alias masssendCoins {
  797.   noop  $mForEach($1,players,sendCoins $1 $2)
  798. }
  799. alias masssendCardInfo {
  800.   noop  $mForEach($1,players,sendCardInfo $1 $2)
  801.  
  802. }
  803. alias nextTurn {
  804.   ;echo -a 07Debug: Next turn called with $1-
  805.   if ($hasWon($1, $getTurn($1))) {
  806.     machiMessage $1 $b($getTurn($1)) has collected all the required establishments and has won the game!
  807.     mreset $1
  808.   }
  809.   else {
  810.  
  811.     deRegisterCommand $1 $getTurn($1) !pass $true
  812.     ;echo -a 07Debug: Waiting for $mGetSetting($1,waitingFor) process to complete before moving to next turn.
  813.     if (!$mGetSetting($1,waitingFor) || $mGetSetting($1,waitingFor) <= 0) {
  814.       incTurn $1
  815.       ;echo -a 07Debug: Turn is currently $getTurn($1)
  816.  
  817.       var %eventID $createEvent($1, onTurnEnd)
  818.       noop $setEventValues($1, %eventID, $false, nick $getTurn($1))
  819.       var %continue = $dispatchEvent($1, %eventID)
  820.  
  821.       ;echo -a 07Debug: Turn after event is $getTurn($1)
  822.  
  823.       if (%continue) {
  824.  
  825.         setPlayerSetting $1 $getTurn($1) hasPurchasedCard $false
  826.         setPlayerSetting $chan $nick hasRolled $false
  827.         registerCommand $1 $getTurn($1) MachiKoro_PassHandler !pass $true
  828.         ;echo -a 07Debug: Registering event handlers for next turn.
  829.         if ($2 == init) {
  830.           ;echo -a 07Debug: Initialized from start game.
  831.           masssendCardInfo $1
  832.           machiMessage $1 MachiKoro has just started. $b($getTurn($1)) $+ 's turn. Type $b(!roll) to begin or type $b(!pass) to pass your turn.
  833.         }
  834.         else {
  835.           masssendCoins $1
  836.           machiMessage $1 That's their turn over. Next up is $b($getTurn($1)) $+ ! Type $b(!roll [dice]) to roll or type $b(!pass) to pass your turn.
  837.         }
  838.       }
  839.     }
  840.     else {
  841.       registerCommand $1 $getTurn($1) MachiKoro_PassHandler !pass $true
  842.     }
  843.   }
  844. }
  845.  
  846. ;; $1 = Channel, $2 = Nick
  847. alias hasWon {
  848.   var %i 1
  849.   var %winCards $mGetSetting($1,win_cards)
  850.   var %playerWinCards 0
  851.   var %winCardAmount $numtok(%winCards,44)
  852.   while (%i <= %winCardAmount) {
  853.     var %currCard = $gettok(%winCards,%i, 44)
  854.     if ($getPlayerCardAmount($1,$2,%currCard) > 0) {
  855.       inc %playerWinCards
  856.     }
  857.     inc %i
  858.   }
  859.   if (%playerWinCards == %winCardAmount) {
  860.     return $true
  861.   }
  862.   return $false
  863. }
  864.  
  865.  
  866. ;; $1 = Channel, $2 = event ID $3 = prevent default $4- = [<property> <value> ...]
  867. alias setEventValues {
  868.   if (!$isid) {
  869.     ;echo -a 4Error: $!returnEventValues Must be called as an identifier to preserve spaces in tokenization
  870.     halt
  871.   }
  872.   mwrite $1 event. $+ $2 preventDefault $3
  873.   var %i 4
  874.   while (%i <= $0) {
  875.     var %currVal = $($+($,%i),2)
  876.     mwrite $1 event. $+ $2 $gettok(%currVal,1-,32)
  877.     inc %i
  878.   }
  879. }
  880.  
  881. ;; $1 = Channel, $2 = Event ID
  882. alias destroyEvent {
  883.   mremove $1 event. $+ $2
  884. }
  885.  
  886. ;; $1 = Channel, $2 = Event Name
  887. alias createEvent {
  888.   if (!$isid) {
  889.     ;echo -a 04Error: $!createEvent must be called as an identifier to return the event ID to be destroyed once processing is complete
  890.     halt
  891.   }
  892.   if (!$2) {
  893.     ;echo -a 04Error: No event name provided
  894.     halt
  895.   }
  896.   var %eventID $calc($mGetSetting($1,event_id) + 1)
  897.   mSetSetting $1 event_id %eventID
  898.   noop $setEventValues($1,%eventID,$false,eventName $2,createdAt $ctime, isHandled $false)
  899.   return %eventID
  900. }
  901.  
  902. ;; $1 = Channel $2 event ID $prop = property
  903. alias eventInfo {
  904.   ;machinotice $1 $1 $2 $prop
  905.   if ($prop) {
  906.     return $mread($1, event. $+ $2, $prop)
  907.   }
  908.   return $2
  909. }
  910.  
  911. ;; $1 Channel, $2 event ID, $3 self destroy
  912. alias dispatchEvent {
  913.   var %listeners = $mread($1,temp_card_hooks,$eventInfo($1, $2).eventName)
  914.   var %numListeners = $numtok(%listeners, 44)
  915.   var %processIndex = 0
  916.   var %continueProcessing = $true
  917.  
  918.   ;echo -a Dispatching event $1 : $2 to %listeners for event $eventInfo($1, $2).eventName
  919.   while (%processIndex <= $ini(machi_cards.ini, handler_priority, 0)) {
  920.     var %handlerSection = $ini(machi_cards.ini, handler_priority, %processIndex)
  921.     var %handler = $readini(machi_cards.ini, handler_priority, %handlerSection)
  922.     ;echo -a Checking event dispatchers %handlerSection %handler
  923.     var %i 1
  924.     while (%i <= %numListeners) {
  925.       var %currListener = $gettok(%listeners, %i, 44)
  926.       if ($readCard(%currListener,handler) == %handler) {
  927.         noop $execIdentifier(%handler, $1, $2)
  928.         ;echo -a Prevent Default: $eventInfo($1, $2).preventDefault
  929.         if ($eventInfo($1, $2).preventDefault == $true) {
  930.           var %continueProcessing = $false
  931.           ; machiMessage $1 Debug: Stopping event from propagating.
  932.         }
  933.       }
  934.       inc %i
  935.     }
  936.     inc %processIndex
  937.   }
  938.   if (!$3 || $3 == $false) {
  939.     noop $destroyEvent($1, $2)
  940.  
  941.   }
  942.   return %continueProcessing
  943. }
  944.  
  945. alias formatRolls {
  946.   var %useRange = $false
  947.   var %min $gettok($1,1,44)
  948.   var %max $gettok($1,1,44)
  949.   var %i 1
  950.   while (%i <= $numtok($1,44)) {
  951.     var %pRoll = $gettok($1, %i, 44)
  952.     if (%pRoll < %min) {
  953.       var %min = %pRoll
  954.     }
  955.     if (%pRoll > %max) {
  956.       var %max = %pRoll
  957.     }
  958.     ;echo -a %pRoll curr num Min %min Max %max ::: $1-
  959.     inc %i
  960.   }
  961.   var %diff $calc(%max - %min)
  962.   if (%diff > 1) {
  963.     var %x $calc(%min + 1)
  964.     var %useRange = $true
  965.     ;echo -a Diff is %diff
  966.     while (%x < %max) {
  967.       ;echo -a Debug X is %x
  968.       if (!$istok($1,%x,44)) {
  969.         %useRange = $false
  970.         ;echo -a Not using range because $1 does not have %x in it $istok($1,%x,44)
  971.       }
  972.       inc %x
  973.     }
  974.   }
  975.   else if (%diff == 1) {
  976.     var %useRange $true
  977.   }
  978.   return $iif($2,$null,⚀) $+ $iif(%useRange,%min $+ ~ $+ %max,$1)
  979. }
  980.  
  981. ;; $1 = Card
  982. alias formatCardRoll {
  983.   ;echo -a 0,4DEBUG ROLL: $readCard($1,roll) $1 is card
  984.   return $iif($readCard($1,roll),$+([,$formatRolls($v1,$2),]),$null)
  985. }
  986.  
  987. ;; $1 = Channel $2 = Card
  988. alias formatCardAmount {
  989.  
  990.   var %marketAmount $getMarketAmount($1, $2)
  991.   return $iif(%marketAmount != unlimited, $+($chr(91),x,%marketAmount,]),$null)
  992. }
  993.  
  994. ;; $1 = Card
  995. alias formatCardCost {
  996.   return $+([,$coinage($readCard($1,cost),$2),])
  997. }
  998.  
  999.  
  1000. alias formatCardType {
  1001.   return $getTypeName($readCard($1, type))
  1002. }
  1003.  
  1004. ;; $1 = Channel $2 = Card
  1005. alias formatCardMarket {
  1006.   var %ret $cardName($2) $formatCardAmount($1, $2) $formatCardCost($2) $formatCardRoll($2)
  1007.   if (!$cannotBuyCard($1,$3,$2)) {
  1008.     var %ret $b(%ret)
  1009.   }
  1010.   return %ret
  1011. }
  1012.  
  1013. alias formatCardReceive {
  1014.   return $iif($readCard($1, receive),$coinage($v1, $2),$null)
  1015. }
  1016. alias padd {
  1017.   returnex $iif($3,$str($chr(32),$1),$null) $+ $2 $+ $iif(!$3,$str($chr(32),$1) $+ $b($chr(124)) $+ $chr(32),$null)
  1018. }
  1019. alias ds {
  1020.   remove machikoro.ini
  1021.   initializeCards $chan
  1022.   sendCardInfo $chan $1
  1023. }
  1024. alias slen {
  1025.   return $len($strip($1,cb))
  1026. }
  1027.  
  1028. alias lenp {
  1029.   returnex $padd($calc($1 + 5 - $2),$3)
  1030. }
  1031.  
  1032. alias isExtensionEnabled {
  1033.   return $iif($mGetSetting($1, extension. $+ $2) == $true,$true,$false)
  1034. }
  1035. alias enableExtension {
  1036.   msetsetting $1 extension. $+ $2 $true
  1037. }
  1038. alias disableExtension {
  1039.   msetsetting $1 extension. $+ $2 $false
  1040. }
  1041. alias sendCardInfo {
  1042.   var %i = 1
  1043.   var %cardOutput
  1044.   var %maxLengthName $getMaxLength($1, name)
  1045.   var %maxLengthAmount $getMaxLength($1, amount)
  1046.   var %maxLengthCost $getMaxLength($1, cost)
  1047.   var %maxLengthRoll $getMaxLength($1, roll)
  1048.   var %maxLengthType $getMaxLength($1, type)
  1049.   var %maxLengthReceive $getMaxLength($1, receive)
  1050.  
  1051.   var %cardName = $getHeading(cn)
  1052.   var %cardType = $getHeading(t)
  1053.   var %cardReceives = $getHeading(i)
  1054.   var %cardAmount = $getHeading(a)
  1055.   var %cardCost = $getHeading(c)
  1056.   var %cardRoll = $getHeading(r)
  1057.   var %cNL $slen(%cardName)
  1058.   var %cTL $slen(%cardType)
  1059.   var %cRL $slen(%cardReceives)
  1060.   var %cAL $slen(%cardAmount)
  1061.   var %cCL $slen(%cardCost)
  1062.   var %cRoL $slen(%cardRoll)
  1063.   noop $machiMessage($2,$b($chr(124)) $+ $chr(32)  $+ $chr(32)  $+ $padd($calc(%maxLengthName - %cNL + 3),$b(%cardName)) $+ $padd($calc(%maxLengthAmount - %cAL + 3),$b(%cardAmount)) $+ $padd($calc(%maxLengthCost - %cCL + 3), $b(%cardCost)) $+ $padd($calc(%maxLengthRoll - %cRoL + 3), $b(%cardRoll)) $+ $padd($calc(%maxLengthReceive - %cRL + 3), $b(%cardReceives)) $+ $padd($calc(%maxLengthType - %cTL + 3), $b(%cardType)))
  1064.  
  1065.   while (%i <= $mini($1, temp_card_types, 0)) {
  1066.     var %type $mread($1, temp_card_types, $mini($1, temp_card_types, %i))
  1067.     var %x 1
  1068.     var %amtC $numtok(%type, 44)
  1069.     while (%x <= %amtC) {
  1070.       var %card = $gettok(%type, %x, 44)
  1071.       var %cardName $cardName(%card,$true)
  1072.       var %cNL $slen(%cardName)
  1073.       var %cardType $formatCardType(%card)
  1074.       var %cTL $slen(%cardType)
  1075.       var %cardReceives $formatCardReceive(%card, $true)
  1076.       var %cRL $slen(%cardReceives)
  1077.       var %cardAmount $formatCardAmount($1, %card)
  1078.       var %cAL $slen(%cardAmount)
  1079.       var %cardCost $formatCardCost(%card, $true)
  1080.       var %cCL $slen(%cardCost)
  1081.       var %cardRoll $formatCardRoll(%card, $true)
  1082.       var %cRoL $slen(%cardRoll)
  1083.       ;echo -a %maxLengthName %cNL %cardName
  1084.       var %message $b($chr(124)) $+ $chr(32) $+ $padd($calc(%maxLengthName - %cNL + 3),%cardName) $+ $padd($calc(%maxLengthAmount - %cAL + 3),%cardAmount) $+ $padd($calc(%maxLengthCost - %cCL + 3), %cardCost) $+ $padd($calc(%maxLengthRoll - %cRoL + 3), %cardRoll) $+ $padd($calc(%maxLengthReceive - %cRL + 3), %cardReceives) $+ $padd($calc(%maxLengthType - %cTL + 3), %cardType)
  1085.       noop $machiMessage($2,%message)
  1086.       var %desc $readCard(%card, description)
  1087.       var %descLen $slen(%desc)
  1088.  
  1089.       noop $machiMessage($2,$b($chr(124)) $+ $str($chr(32),2) $+ $padd($calc($slen(%message) - %descLen - 4), %desc))
  1090.       noop $machiMessage($2,$b($chr(124)) $+ $str(_,$calc($slen(%message) - 2)) $+ $b($chr(124)))
  1091.       inc %x
  1092.     }
  1093.     var %cardOutput $null
  1094.     inc %i
  1095.   }
  1096. }
  1097.  
  1098. ;; $1 = Channel $2 = Target
  1099. alias sendMarket {
  1100.   var %i = 1
  1101.   var %cardOutput
  1102.   while (%i <= $mini($1, temp_card_types, 0)) {
  1103.     var %type $mread($1, temp_card_types, $mini($1, temp_card_types, %i))
  1104.     var %x 1
  1105.     var %amtC $numtok(%type, 44)
  1106.     while (%x <= %amtC) {
  1107.       var %card = $gettok(%type, %x, 44)
  1108.       var %cardOutput = $sentencify(%cardOutput,$formatCardMarket($1, %card, $2))
  1109.       inc %x
  1110.     }
  1111.  
  1112.     machiNotice $2 $b([Market]) %cardOutput
  1113.     var %cardOutput $null
  1114.     inc %i
  1115.   }
  1116.   machiNotice $2 $b([Market]) You currently have $b($coinage($getCoins($1, $2))) to spend.
  1117. }
  1118.  
  1119. alias pluralizeDie {
  1120.   return $iif($1 > 1,dice,die)
  1121. }
  1122.  
  1123. alias dieIcon {
  1124.   return $gettok(⚀.⚁.⚂.⚃.⚄.⚅,$1,46)
  1125. }
  1126.  
  1127. ;; $1 = Channel, $2 = Player, $3 = Amount of dice
  1128. alias mRoll {
  1129.   var %diceCounts $rand(1,6)
  1130.   var %diceMessage $dieIcon(%diceCounts) $b(%diceCounts)
  1131.   var %total %diceCounts
  1132.   ;echo -a 2INFO: Dice Total %total
  1133.   while ($numtok(%diceCounts,44) < $3) {
  1134.     var %curRoll $rand(1,6)
  1135.     ;; Cant use addtok for this as it doesnt allow for dupes
  1136.     var %diceCounts %diceCounts $+ , $+ %curRoll
  1137.     var %total = $calc(%total + %curRoll)
  1138.     var %diceMessage $sentencify(%diceMessage,$dieIcon(%curRoll) $b(%curRoll))
  1139.   }
  1140.   machiMessage $1 4 $+ $b($2) rolled %diceMessage with $3 $pluralizeDie($3)
  1141.  
  1142.   ; Dispatching event
  1143.   var %eventID $createEvent($1, onAfterDiceRoll)
  1144.   noop $setEventValues($1, %eventID, $false, nick $2, dice $3, diceCounts %diceCounts, diceTotal %total, diceMessage %diceMessage)
  1145.   var %continue = $dispatchEvent($1, %eventID)
  1146.   if (%continue) {
  1147.     ;;echo -a DEBUG ROLL: $1 %total $2
  1148.     processRoll $1 %total $2
  1149.   }
  1150. }
  1151.  
  1152. alias startsWith {
  1153.   ;echo -a $1 STARTS WITH $2 = $pos($1,$2)
  1154.   return $iif($pos($1,$2) == 1, $true, $false)
  1155. }
  1156.  
  1157. alias getMarketAmount {
  1158.   return $mGetSetting($1, market $+ . $+ $2)
  1159. }
  1160.  
  1161. ;; $1 = Channel, $2 = Player, $3 = Card
  1162. alias cannotBuyCard {
  1163.   if ($readCard($3, allowed) != $null && $getPlayerCardAmount($1, $2, $3) >= $readCard($3, allowed)) {
  1164.     return 3
  1165.   }
  1166.   else  if ($getMarketAmount($1, $3) != unlimited && $getMarketAmount($1, $3) <= 0) {
  1167.     return 1
  1168.   }
  1169.   else if ($getCoins($1, $2) < $readCard($3, cost)) {
  1170.     return 2
  1171.   }
  1172.   else if ($3 == $null) {
  1173.     return 4
  1174.   }
  1175.   return 0
  1176. }
  1177.  
  1178. ;; $1 = Status Code From $cannotBuyCard
  1179. alias cantBuyReason {
  1180.   if ($1 == 0) {
  1181.     return This establishment is purchasable
  1182.   }
  1183.   else if ($1 == 1) {
  1184.     return There is no more establishments of this type left on the market.
  1185.   }
  1186.   else if ($1 == 2) {
  1187.     return You do not have enough money for this establisment.
  1188.   }
  1189.   else if ($1 == 3) {
  1190.     return You already own the maximum allowed of this establishment type.
  1191.   }
  1192.   else if ($1 == 4) {
  1193.     return That card does not exist.
  1194.   }
  1195. }
  1196.  
  1197. ;; $1 = Channel, $2 = Card, $3 = amount?
  1198. alias removeCardFromMarket {
  1199.   var %mAmt $getMarketAmount($1, $2)
  1200.   if (%mAmt != unlimited) {
  1201.  
  1202.     msetsetting $1 market. $+ $2 $iif($calc(%mAmt - $iif($3,$v1,1)) <= 0,0,$v1)
  1203.  
  1204.   }
  1205. }
  1206.  
  1207. ;; $1 = Channel, $2 = Card, $3 = amount?
  1208. alias addCardToMarket {
  1209.   var %mAmt $getMarketAmount($1, $2)
  1210.   if (%mAmt != unlimited && $3 != unlimited) {
  1211.     msetsetting $1 market. $+ $2 $calc(%mAmt + $iif($3,$v1,1))
  1212.   }
  1213.   else {
  1214.     msetSetting $1 market. $+ $2 unlimited
  1215.   }
  1216. }
  1217.  
  1218.  
  1219.  
  1220. ;; $1 = Channel, $2 = Player
  1221. alias mremovePlayer {
  1222.   if ($getTurn($1) == $2) {
  1223.     decTurn $1
  1224.   }
  1225.   var %i = 1
  1226.  
  1227.   var %playerSections = $mini($1, $playerSection($2), 0)
  1228.   while (%i <= %playerSections) {
  1229.     var %iniSec = $mini($1, $playerSection($2), %i)
  1230.     if ($startsWith(%iniSec, card.)) {
  1231.       var %card = $right(%iniSec, $len(card.))
  1232.       addCardToMarket $1 %card $getPlayerCardAmount($1, $2, %card)
  1233.     }
  1234.     inc %i
  1235.   }
  1236.   mremove $1 players $2
  1237.   mremove $1 player. $+ $2
  1238.  
  1239.   machiMessage $1 $b($2) has been removed from the current game and all their cards have been added back to the market. It is $b($getTurn($1)) $+ 's turn.
  1240. }
  1241. alias getPlayerCards {
  1242.   var %cards = $null
  1243.   var %i 1
  1244.   var %playerSections = $mini($1, $playerSection($2), 0)
  1245.   while (%i <= %playerSections) {
  1246.     var %iniSec = $mini($1, $playerSection($2), %i)
  1247.     if ($startsWith(%iniSec, card.)) {
  1248.       var %card = $right(%iniSec, $calc($len(%iniSec) - $len(card.)))
  1249.       var %cards $sentencify(%cards, $cardName(%card) $+([x,$getPlayerCardAmount($1,$2,%card),]) $+([,$readCard(%card,roll),]))
  1250.     }
  1251.     inc %i
  1252.   }
  1253.   return %cards
  1254. }
  1255. alias sentencify {
  1256.   return $iif($1,$1 $+ $chr(44) $+ $chr(32),$null) $+ $2
  1257. }
  1258. ;; $1 = Channel
  1259. alias mreset {
  1260.   mremovesectionstartingwith $1 temp_card_
  1261.   mremovesectionstartingwith $1 commands
  1262.   mremovesectionstartingwith $1 gameSettings
  1263.   mremovesectionstartingwith $1 player
  1264.   mremove $1 market
  1265. }
  1266. alias getPlayerCoins {
  1267.   var %i 1
  1268.   while (%i <= $playerAmount($1)) {
  1269.     var %pl = $mini($1, players, %i)
  1270.     var %score = $sentencify(%score, $b(%pl) $+ : $coinage($getCoins($1,%pl)))
  1271.     inc %i
  1272.   }
  1273.   return %score
  1274. }
  1275.  
  1276. alias getHeading {
  1277.   if ($1 == cn) return Card Name
  1278.   if ($1 == t) return Type
  1279.   if ($1 == i) return Income
  1280.   if ($1 == a) return Amount
  1281.   if ($1 == c) return Cost
  1282.   if ($1 == r) return Roll
  1283. }
  1284. ; $1 = Channel, $2- = Constraints
  1285. alias initializeCards {
  1286.   mremove $1 temp_card_handlers
  1287.   mremove $1 temp_card_types
  1288.   mremove $1 temp_card_rolls
  1289.   mremove $1 temp_card_reverse
  1290.   mremove $1 temp_card_hooks
  1291.  
  1292.   var %cardName = $getHeading(cn)
  1293.   var %cardType = $getHeading(t)
  1294.   var %cardReceives = $getHeading(i)
  1295.   var %cardAmount = $getHeading(a)
  1296.   var %cardCost = $getHeading(c)
  1297.   var %cardRoll = $getHeading(r)
  1298.   setMaxLength $1 name %cardName
  1299.   setMaxLength $1 type %cardType
  1300.   setMaxLength $1 cost %cardCost
  1301.   setMaxLength $1 roll %cardRoll
  1302.   setMaxLength $1 amount %cardAmount
  1303.   setMaxLength $1 receive %cardReceives
  1304.  
  1305.   var %i = 1
  1306.   while (%i <= $ini(machi_cards.ini,0) ) {
  1307.     var %section = $ini(machi_cards.ini,%i)
  1308.     if (!$cardSectionIgnored(%section)) {
  1309.       var %roll = $readCard(%section,roll)
  1310.       initializeCard $1 %section $iif(%roll,$v1,0) $readCard(%section, type) $readCard(%section, handler) $iif($readCard(%section, required_for_win),1,0) $readCard(%section, hooks)
  1311.     }
  1312.     inc %i
  1313.   }
  1314. }
  1315.  
  1316. alias setMaxLength {
  1317.   var %l = $slen($3-)
  1318.   var %cl = $getMaxLength($1, $2)
  1319.   if (%cl == $null || %l > %cl) {
  1320.     mwrite $1 temp_card_lengths max_ $+ $2 $+ _length %l
  1321.  
  1322.   }
  1323. }
  1324. ;; $1 chan $2 property
  1325. alias getMaxLength {
  1326.   return $mread($1, temp_card_lengths, max_ $+ $2 $+ _length)
  1327. }
  1328. ;$1 = channel $2 = card section $3 = roll numbers $4 = type $5 = Handler $6 = Required for win $7 = hooks
  1329. alias initializeCard {
  1330.   var %x = 1
  1331.   var %rollNumbers = $numtok($3, 44)
  1332.   mwrite $1 temp_card_handlers $5 $addtok($mread($1,temp_card_handlers,$5),$2,44)
  1333.   mwrite $1 temp_card_types $4 $addtok($mread($1,temp_card_types,$4),$2,44)
  1334.   mwrite $1 temp_card_reverse $md5($lower($readCard($2,name))) $2
  1335.  
  1336.  
  1337.   ;; Temporary max lengths for formatting the send output correctly
  1338.   setMaxLength $1 name $cardName($2, $true)
  1339.   setMaxLength $1 type $formatCardType($2)
  1340.   setMaxLength $1 cost $formatCardCost($2, $true)
  1341.   setMaxLength $1 roll $formatCardRoll($2)
  1342.   setMaxLength $1 amount $formatCardAmount($1, $2)
  1343.   setMaxLength $1 receive $formatCardReceive($2, $true)
  1344.  
  1345.  
  1346.  
  1347.   addCardToMarket $1 $2 $iif($readCard($2, in_market),$v1,0)
  1348.  
  1349.  
  1350.   if ($6 == 1) {
  1351.     mSetSetting $1 win_cards $addtok($mGetSetting($1,win_cards),$2,44)
  1352.   }
  1353.  
  1354.   while (%x <= %rollNumbers) {
  1355.     var %rollCounter = $gettok($3,%x,44)
  1356.     mwrite $1 temp_card_rolls %rollCounter $addtok($mread($1,temp_card_rolls,%rollCounter),$2,44)
  1357.     inc %x
  1358.   }
  1359.   ; Registering event hooks
  1360.   var %hookIndex = 1
  1361.   while (%hookIndex <= $numtok($7,44)) {
  1362.     var %hookName = $gettok($7,%hookIndex,44)
  1363.     mwrite $1 temp_card_hooks %hookName $addtok($mread($1, temp_card_hooks, %hookName), $2, 44)
  1364.     inc %hookIndex
  1365.   }
  1366. }
  1367.  
  1368. on *:TEXT:*:#:{
  1369.   ;; mwrite $1 commands. $+ $2 $4 $3
  1370.   var %handler = $mread($chan,commands. $+ $nick,$1)
  1371.   if (%handler != $null) {
  1372.     var %isHandled = $execIdentifier(%handler,$chan,$nick,$2-)
  1373.  
  1374.     ;machiMessage $chan Command is handled: %isHandled
  1375.     if (%isHandled) {
  1376.       deRegisterCommand $chan $nick $1
  1377.       if ($mGetSetting($chan,waitingFor) == 0) {
  1378.         if ($isProcessingPaused($chan)) {
  1379.           mResumeProcessing $chan
  1380.         }
  1381.         else {
  1382.           nextTurn $chan
  1383.         }
  1384.         ;  nextTurn $chan
  1385.       }
  1386.       else {
  1387.         ; machiMessage $chan Debug: Turn is not yet settled. Cannot continue.
  1388.       }
  1389.     }
  1390.     halt
  1391.   }
  1392.   if ($1 == !machiKoro) {
  1393.     if (!$mIsInitializing($chan)) {
  1394.       if (!$mIsStarted($chan)) {
  1395.         mInitGame $chan $2-
  1396.         machiJoin $chan $nick
  1397.         machiMessage $chan Starting $b(Machi Koro) $+ . Type $b(!mJoin) to join the game, or $b(!mStart) to begin playing. Only 4 slots remaining.
  1398.       }
  1399.       else {
  1400.         machiMessage $chan Sorry $b($nick) $+ , the games already started. Wait until next time to play.
  1401.       }
  1402.     }
  1403.     else {
  1404.       machiMessage $chan Machi Koro is already starting $b($nick) $+ , type $b(!mJoin) to join the current game.
  1405.  
  1406.     }
  1407.   }
  1408.   else if ($1 == !forceInit && $nick isop $chan) {
  1409.     initializeCards $chan
  1410.   }
  1411.   else if ($1 == !mJoin) {
  1412.     if (!$misJoined($chan,$nick) && $mIsInitializing($chan)) {
  1413.  
  1414.       machiMessage $chan $b($nick) has just joined the current game.
  1415.       machiJoin $chan $nick
  1416.     }
  1417.     else if ($mIsStarted($chan)) {
  1418.       machiMessage $chan Sorry $b($nick) $+ , the games already started. You cannot join an in progress game.
  1419.     }
  1420.     else {
  1421.       machiMessage $chan You have already joined the current game.
  1422.     }
  1423.   }
  1424.   else if ($1 == !forceaddCard && $nick isop $chan) {
  1425.   var %user $iif($2 != -p,$nick,$3)
  1426.     var %card $iif($2 != -p,$translateCard($chan, $2-),$translateCard($chan,$4-))
  1427.     msg $chan card: %card
  1428.     if (%card) {
  1429.       addPlayerCard $chan %user %card
  1430.       machiMessage $chan Forcing add of card $cardName(%card)
  1431.  
  1432.     }
  1433.   }
  1434.   else if ($1 == !stopMachiKoro && $nick isop $chan) {
  1435.     mreset $chan
  1436.     machiMessage $chan Game has been ended by $b($nick)
  1437.   }
  1438.   else if ($1 == !quit) {
  1439.     if ($mIsJoined($chan, $nick)) {
  1440.       mremoveplayer $chan $nick
  1441.       if ($playerAmount($1) <= 0) {
  1442.         mreset $chan
  1443.         machiMessage $chan Game has ended as there is no longer enough players.
  1444.       }
  1445.     }
  1446.     else {
  1447.       machiMessage $chan $b($nick) $+ , you are not part of the current game.
  1448.     }
  1449.   }
  1450.   else if ($1 == !kick && $nick isop $chan) {
  1451.     if ($mIsJoined($chan, $2)) {
  1452.       mremoveplayer $chan $2
  1453.       if ($playerAmount($1) <= 0) {
  1454.         mreset $chan
  1455.         machiMessage $chan Game has ended as there is no longer enough players.
  1456.       }
  1457.     }
  1458.     else {
  1459.       machiMessage $chan $b($2) is not part of the current game.
  1460.     }
  1461.   }
  1462.   else if ($1 == !coins) {
  1463.     machiNotice $nick Current coin amounts: $getPlayerCoins($chan)
  1464.   }
  1465.   else if ($1 == !enableExtension && $nick isop $chan) {
  1466.     machiMessage $chan Extension enabled.
  1467.     enableExtension $1 $2-
  1468.   }
  1469.   else if ($1 == !disableExtension && $nick isop $chan) {
  1470.     machiMessage $chan Extension disabled
  1471.     disableExtension $1 $2-
  1472.   }
  1473.   else if ($1 == !cards) {
  1474.     var %nick $iif($2,$2,$nick)
  1475.     if ($mIsJoined($chan, $nick)) {
  1476.       machiNotice $nick $getPlayerCards($chan, %nick)
  1477.     }
  1478.     else {
  1479.       machiMessage $chan $b($nick) there is no such player that has joined the game.
  1480.     }
  1481.   }
  1482.   else if ($1 == !mstop && $nick isop $chan) {
  1483.     machiMessage $chan Stopped game
  1484.     mreset $chan
  1485.   }
  1486.   else if ($1 == !mStart) {  
  1487.     if ($mIsInitializing($chan)) {
  1488.       mStartGame $chan
  1489.     }
  1490.     else {
  1491.       machiMessage $chan $b($nick) there is no game to be started. Either start a game with $b(!machikoro) or play the game thats currently going on.
  1492.     }
  1493.   }
  1494.   else if ($1 == !forceJoin && $nick isop $chan) {
  1495.     machiMessage $chan $iif($2,$2,$nick) has been added to the game.
  1496.     machiJoin $chan $iif($2,$2,$nick)
  1497.   }
  1498.   else if ($1 == !forceNextTurn && $nick isop $chan) {
  1499.     machiMessage $chan Resetting waiting for and moving on...
  1500.     msetsetting $chan waitingFor 0
  1501.     nextTurn $chan
  1502.   }
  1503.   else if ($1 == !forceRoll && $nick isop $chan) {
  1504.     processRoll $chan $2 $iif($3,$3,$nick)
  1505.   }
  1506.   if ($1 == !roll && $getTurn($chan) == $nick) {
  1507.     if (!$getPlayerSetting($chan, $nick, hasRolled)) {
  1508.       var %eventID $createEvent($chan, onBeforeDiceRoll)
  1509.       noop $setEventValues($chan, %eventID, $false, nick $nick, message $1-)
  1510.       var %continue $dispatchEvent($chan, %eventID, $false)
  1511.       if ($eventInfo($chan, %eventID).isHandled) {
  1512.  
  1513.         setPlayerSetting $chan $nick hasRolled $true
  1514.       }
  1515.       ; msg $chan Got roll %continue $mGetSetting($chan,waitingFor)
  1516.       if (%continue) {
  1517.  
  1518.         setPlayerSetting $chan $nick hasRolled $true
  1519.         var %roll = $rand(1,6)
  1520.         mRoll $chan $nick 1
  1521.       }
  1522.  
  1523.     }
  1524.     else {
  1525.       machiMessage $chan $b($nick) you have already rolled. Complete the rest of your turn before rolling again.
  1526.     }
  1527.   }
  1528. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement