Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $g0 = $printNameTable["Letters/0"];
- $g1 = $printNameTable["Letters/1"];
- $g2 = $printNameTable["Letters/2"];
- $g3 = $printNameTable["Letters/3"];
- $g4 = $printNameTable["Letters/4"];
- $g5 = $printNameTable["Letters/5"];
- $g6 = $printNameTable["Letters/6"];
- $g7 = $printNameTable["Letters/7"];
- $g8 = $printNameTable["Letters/8"];
- $g9 = $printNameTable["Letters/9"];
- $gflag = $printNameTable["Letters/-pound"];
- $gmark = $printNameTable["Letters/-qmark"];
- $gmine = $printNameTable["Letters/-asterisk"];
- $empty = $printNameTable["Letters/-space"];
- $piece[$g0] = "0";
- $piece[$g1] = "1";
- $piece[$g2] = "2";
- $piece[$g3] = "3";
- $piece[$g4] = "4";
- $piece[$g5] = "5";
- $piece[$g6] = "6";
- $piece[$g7] = "7";
- $piece[$g8] = "8";
- $piece[$g9] = "9";
- $piece[$gflag] = "flag";
- $piece[$gmark] = "mark";
- $piece[$gmine] = "mine";
- $piece[$empty] = "empty";
- function startMineSweeperGame(%table,%c,%mines,%tx,%ty)
- {
- ////
- //Check for problems
- //
- if(!isObject("_mns_" @ %table))
- {
- error("Table " @ %table @ " does not exist.");
- return;
- }
- if(%c.chesstable !$= "")
- {
- error("Client " @ %c @ " already in a game. NAME: " @ %c.getPlayerName());
- return;
- }
- if($mns[%table] !$= "")
- {
- error("Table " @ %table @ " already has a player.");
- return;
- }
- $mns[%table] = %c;
- %c.chesstable = %table;
- %mines = mfloor(%mines);
- if(%mines < 10)
- %mines = 10;
- if(%mines > 30)
- %mines = 30;
- $mnsmines[%table] = %mines;
- $mnsmine[%table] = %mines;
- %mine = %mines;
- if(strLen(%mine) == 1)
- %mine = "0" @ %mine;
- %m0 = getSubStr(%mine,1,1);
- echo(%m0 @ %m1);
- %m1 = getSubStr(%mine,0,1);
- %b = "_mns_" @ %table @ "_m0";
- %b.setPrint($g[%m0]);
- %b = "_mns_" @ %table @ "_m1";
- %b.setPrint($g[%m1]);
- $mnstime[%table] = 0;
- $mnstick[%table] = schedule(1000,0,mnstick,%table);
- ////
- //Clear the table
- //
- for(%x=0;%x<10;%x++)
- for(%y=0;%y<10;%y++)
- {
- %b = "_mns_" @ %table @ "_" @ %x @ %y;
- %b.setPrint($empty);
- %b.setColor(39);
- %b.isMine = 0;
- }
- for(%x=0;%x<3;%x++)
- {
- %b = "_mns_" @ %table @ "_t" @ %x;
- %b.setColor(36);
- %b.setPrint($g0);
- if(%x!=2)
- {
- %b = "_mns_" @ %table @ "_m" @ %x;
- %b.setColor(36);
- %b.setPrint($g0);
- }
- }
- ////
- //Set random mines
- //
- for(%x=0;%x<%mines;%x++)
- {
- %rx = getRandom(0,9);
- %ry = getRandom(0,9);
- %b = "_mns_" @ %table @ "_" @ %rx @ %ry;
- if(%b.isMine || (%rx == %tx && %ry == %ty))
- {
- %x--;
- continue;
- }
- else
- %b.isMine = 1;
- }
- }
- function mnstick(%t)
- {
- cancel($mnstick[%t]);
- $mnstime[%t]++;
- if($mnstime[%t] >= 120)
- {
- $mns[%t].centerprint("You lose. (Time expired)",5);
- $mns[%t].chesstable = "";
- $mns[%t] = "";
- resetmnsBoard(%t);
- return;
- }
- %l = strLen($mnsTime[%t]);
- if(%l == 1)
- %time = "00" @ $mnstime[%t];
- else if(%l == 2)
- %time = "0" @ $mnstime[%t];
- else if(%l == 3)
- %time = $mnsTime[%t];
- else
- {
- $mns[%t].centerprint("You lose. (Time expired)",5);
- $mns[%t].chesstable = "";
- $mns[%t] = "";
- resetmnsBoard(%t);
- return;
- }
- %t0 = getSubStr(%time,2,1);
- %t1 = getSubStr(%time,1,1);
- %t2 = getSubStr(%time,0,1);
- %b = "_mns_" @ %t @ "_t0";
- %b.setPrint($g[%t0]);
- %b = "_mns_" @ %t @ "_t1";
- %b.setPrint($g[%t1]);
- %b = "_mns_" @ %t @ "_t2";
- %b.setPrint($g[%t2]);
- $mnstick[%t] = schedule(1000,0,mnstick,%t);
- }
- package mnsgame
- {
- function fxDtsBrick::onActivate(%t,%p,%c,%pos,%vec)
- {
- if(strLen(%t.getName()) > 9)
- {
- %btable = getSubStr(%t.getName(),5,stripos(%t.getName(),"_",5)-5);
- if(%btable $= %c.chesstable)
- {
- %piece = $piece[%t.getPrintID()];
- ////
- //Players can only click empty spaces
- //
- if(%piece $= "empty" && %t.getColorID() == 39)
- {
- ////
- //If it's a mine, they lose.
- //
- if(%t.isMine)
- {
- //%t.setPrint($gmine);
- //%t.setColor(0);
- for(%x=0;%x<10;%x++)
- for(%y=0;%y<10;%y++)
- {
- %b = "_mns_" @ %btable @ "_" @ %x @ %y;
- if(%b.isMine)
- {
- %b.setColor(0);
- if(%b.getPrintID() == $empty || %b.getPrintID() == $gmark)
- %b.setPrint($gmine);
- else
- %b.setColor(58);
- }
- }
- cancel($mnstick[%btable]);
- $mns[%btable] = "";
- %c.chesstable = "";
- %c.centerPrint("Game Over!",5);
- }
- ////
- //It's not a mine, check surrounding spaces.
- //
- else
- {
- %tx = getSubStr(%t.getName(),strLen(%t.getName())-2,1);
- %ty = getSubStr(%t.getName(),strLen(%t.getName())-1,1);
- %minecount = 0;
- for(%x=%tx-1;%x<=%tx+1;%x++)
- {
- for(%y=%ty-1;%y<=%ty+1;%y++)
- {
- %b = "_mns_" @ %btable @ "_" @ %x @ %y;
- if(%b.isMine)
- %minecount++;
- }
- }
- ////
- //There's mines nearby. Put a number on the brick.
- //
- %t.setColor(38);
- if(%minecount > 0)
- %t.setPrint($g[%minecount]);
- ////
- //No mines nearby. Click all the spaces around the brick.
- //
- else
- {
- for(%x=%tx-1;%x<=%tx+1;%x++)
- {
- for(%y=%ty-1;%y<=%ty+1;%y++)
- {
- %b = "_mns_" @ %btable @ "_" @ %x @ %y;
- if(isObject(%b))
- %b.onActivate(%p,%c,%pos,%vec);
- }
- }
- }
- ////
- //Check if it's a victory
- //
- %count = 0;
- for(%x=0;%x<10;%x++)
- {
- for(%y=0;%y<10;%y++)
- {
- %b = "_mns_" @ %btable @ "_" @ %x @ %y;
- if(%b.getColorID() == 38)
- %count++;
- }
- }
- if(%count == 100-$mnsmines[%btable])
- {
- for(%x=0;%x<10;%x++)
- for(%y=0;%y<10;%y++)
- {
- %b = "_mns_" @ %btable @ "_" @ %x @ %y;
- if(%b.isMine)
- %b.setColor(58);
- }
- cancel($mnstick[%btable]);
- if($mnstime[%btable] >= 12)
- {
- %c.centerPrint("You win! (+1 Token)",5);
- %am = 1;
- }
- else
- {
- %c.centerPrint("Fast victory! (+3 Tokens)",5);
- %am = 3;
- }
- %to = "Tokens_" @ %c.bl_id;
- %to.tokens+=%am;
- $mns[%btable] = "";
- %c.chesstable = "";
- %c.saveTokens();
- }
- }
- }
- }
- ////
- //If it's their first move, start the game and make it impossible for it to be a mine.
- //
- else if($mns[%btable] $= "" && %c.chesstable $= "" && %btable !$= "")
- {
- %tx = getSubStr(%t.getName(),strLen(%t.getName())-2,1);
- %ty = getSubStr(%t.getName(),strLen(%t.getName())-1,1);
- startMineSweeperGame(%btable,%c,10,%tx,%ty);
- %t.onActivate(%p,%c,%pos,%vec);
- }
- }
- Parent::onActivate(%t,%p,%c,%pos,%vec);
- }
- function armor::onTrigger(%data,%this,%s,%v)
- {
- if(%s == 4 && %v)
- {
- %start = %this.getEyePoint();
- %evec = %this.getEyeVector();
- %end = vectorAdd(%start,vectorScale(%eVec,5));
- %targets = $TypeMasks::FxBrickAlwaysObjectType;
- %ray = ContainerRayCast(%start, %end, %targets, %this);
- %col = getWord(%ray,0);
- if(!isObject(%col))
- return Parent::onTrigger(%data,%this,%s,%v);
- if(strLen(%col.getName()) > 5)
- {
- if(getSubStr(%col.getName(),0,strLen(%col.getName())-3) $= ("_mns_" @ %this.client.chesstable))
- {
- %piece = $piece[%col.getPrintID()];
- if(%col.getColorID() == 39)
- {
- if(%piece $= "empty" && $mnsmine[%this.client.chesstable] > 0)
- {
- %col.setPrint($gflag);
- %mine = $mnsmine[%this.client.chesstable]--;
- if(strLen(%mine) == 1)
- %mine = "0" @ %mine;
- %m0 = getSubStr(%mine,1,1);
- %m1 = getSubStr(%mine,0,1);
- %b = "_mns_" @ %this.client.chesstable @ "_m0";
- %b.setPrint($g[%m0]);
- %b = "_mns_" @ %this.client.chesstable @ "_m1";
- %b.setPrint($g[%m1]);
- }
- else if(%piece $= "flag")
- {
- %col.setPrint($gmark);
- %mine = $mnsmine[%this.client.chesstable]++;
- if(strLen(%mine) == 1)
- %mine = "0" @ %mine;
- %m0 = getSubStr(%mine,1,1);
- %m1 = getSubStr(%mine,0,1);
- %b = "_mns_" @ %this.client.chesstable @ "_m0";
- %b.setPrint($g[%m0]);
- %b = "_mns_" @ %this.client.chesstable @ "_m1";
- %b.setPrint($g[%m1]);
- }
- else if(%piece $= "mark")
- %col.setPrint($empty);
- }
- }
- }
- }
- Parent::onTrigger(%data,%this,%s,%v);
- }
- function serverCmdLight(%c)
- {
- %this = %c.player;
- if(!isObject(%this))
- return Parent::serverCmdLight(%c);
- %start = %this.getEyePoint();
- %evec = %this.getEyeVector();
- %end = vectorAdd(%start,vectorScale(%eVec,5));
- %targets = $TypeMasks::FxBrickAlwaysObjectType;
- %ray = ContainerRayCast(%start, %end, %targets, %this);
- %col = getWord(%ray,0);
- if(strLen(%col.getName()) > 5)
- {
- if(getSubStr(%col.getName(),0,strLen(%col.getName())-3) $= ("_mns_" @ %c.chesstable))
- {
- %piece = $piece[%col.getPrintID()];
- if(%piece !$= "empty" && $piece !$= "mark" && $piece !$= "flag" && $piece != 8)
- {
- %tx = getSubStr(%col.getName(),strLen(%col.getName())-2,1);
- %ty = getSubStr(%col.getName(),strLen(%col.getName())-1,1);
- for(%x=%tx-1;%x<=%tx+1;%x++)
- for(%y=%ty-1;%y<=%ty+1;%y++)
- {
- %b = "_mns_" @ %c.chessTable @ "_" @ %x @ %y;
- if(isObject(%b) && %b.getPrintID() == $gflag)
- %count++;
- }
- if(%count == %piece)
- for(%x=%tx-1;%x<=%tx+1;%x++)
- for(%y=%ty-1;%y<=%ty+1;%y++)
- {
- %b = "_mns_" @ %c.chessTable @ "_" @ %x @ %y;
- if(isObject(%b))
- %b.onActivate(%this,%c,%b.position,%vec);
- }
- }
- }
- else
- return Parent::serverCmdLight(%c);
- }
- else
- Parent::serverCmdLight(%c);
- }
- function GameConnection::onClientLeaveGame(%c)
- {
- cancel($mnstick[%c.chesstable]);
- $mns[%c.chesstable] = "";
- resetmnsBoard(%c.chesstable);
- return Parent::onClientLeaveGame(%c);
- }
- };
- activatePackage(mnsgame);
- function fixmnsBoard(%board)
- {
- for(%x=0;%x<10;%x++)
- for(%y=0;%y<10;%y++)
- {
- %b = "_mns_" @ %board @ "_" @ %x @ %y;
- %b.addEvent(1,0,"OnActivate","Self","SetColorFX",3);
- %b.addEvent(1,100,"OnActivate","Self","SetColorFX",0);
- }
- }
- function resetmnsBoard(%table)
- {
- for(%x=0;%x<10;%x++)
- for(%y=0;%y<10;%y++)
- {
- %b = "_mns_" @ %table @ "_" @ %x @ %y;
- %b.setPrint($empty);
- %b.setColor(39);
- %b.isMine = 0;
- }
- for(%x=0;%x<3;%x++)
- {
- %b = "_mns_" @ %table @ "_t" @ %x;
- %b.setColor(36);
- %b.setPrint($g0);
- if(%x!=2)
- {
- %b = "_mns_" @ %table @ "_m" @ %x;
- %b.setColor(36);
- %b.setPrint($g0);
- }
- }
- }
- function renamemnsBoard(%bo,%n)
- {
- %b = "_mns_" @ %bo;
- %b.setName("_mns_" @ %n);
- %b = "_mns_" @ %bo @ "_t0";
- %b.setName("_mns_" @ %n @ "_t0");
- %b = "_mns_" @ %bo @ "_t1";
- %b.setName("_mns_" @ %n @ "_t1");
- %b = "_mns_" @ %bo @ "_t2";
- %b.setName("_mns_" @ %n @ "_t2");
- %b = "_mns_" @ %bo @ "_m0";
- %b.setName("_mns_" @ %n @ "_m0");
- %b = "_mns_" @ %bo @ "_m1";
- %b.setName("_mns_" @ %n @ "_m1");
- for(%x=0;%x<10;%x++)
- for(%y=0;%y<10;%y++)
- {
- %b = "_mns_" @ %bo @ "_" @ %x @ %y;
- %b.setName("_mns_" @ %n @ "_" @ %x @ %y);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment