mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-25 22:30:52 -04:00
Remove usage of class fields in /copy and /drawimage (can be used by multiple people independently now), also fix /hackrank only worked once for the entire duration of the server.
This commit is contained in:
parent
2cfaaa5afc
commit
42300d5617
@ -30,11 +30,10 @@ namespace MCGalaxy.Commands
|
||||
public override string type { get { return CommandTypes.Building; } }
|
||||
public override bool museumUsable { get { return true; } }
|
||||
public override LevelPermission defaultRank { get { return LevelPermission.AdvBuilder; } }
|
||||
public int allowoffset = 0;
|
||||
public CmdCopy() { }
|
||||
|
||||
public override void Use(Player p, string message) {
|
||||
allowoffset = message.IndexOf('@');
|
||||
int allowoffset = message.IndexOf('@');
|
||||
if (allowoffset != -1)
|
||||
message = message.Replace("@ ", "").Replace("@", "");
|
||||
|
||||
@ -68,13 +67,14 @@ namespace MCGalaxy.Commands
|
||||
Player.SendMessage(p, name);
|
||||
}
|
||||
} else {
|
||||
HandleOther(p, opt, parts);
|
||||
HandleOther(p, opt, parts, allowoffset);
|
||||
}
|
||||
}
|
||||
|
||||
void HandleOther(Player p, string opt, string[] parts) {
|
||||
CatchPos cpos = default(CatchPos);;
|
||||
void HandleOther(Player p, string opt, string[] parts, int allowoffset) {
|
||||
CatchPos cpos = default(CatchPos);
|
||||
p.copyoffset[0] = 0; p.copyoffset[1] = 0; p.copyoffset[2] = 0;
|
||||
cpos.allowoffset = allowoffset;
|
||||
|
||||
if (opt == "cut") {
|
||||
cpos.type = 1;
|
||||
@ -93,9 +93,7 @@ namespace MCGalaxy.Commands
|
||||
void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type, byte extType) {
|
||||
RevertAndClearState(p, x, y, z);
|
||||
CatchPos bp = (CatchPos)p.blockchangeObject;
|
||||
p.copystart[0] = x;
|
||||
p.copystart[1] = y;
|
||||
p.copystart[2] = z;
|
||||
p.copystart[0] = x; p.copystart[1] = y; p.copystart[2] = z;
|
||||
|
||||
bp.x = x; bp.y = y; bp.z = z; p.blockchangeObject = bp;
|
||||
p.Blockchange += new Player.BlockchangeEventHandler(Blockchange2);
|
||||
@ -148,7 +146,7 @@ namespace MCGalaxy.Commands
|
||||
}
|
||||
|
||||
Player.SendMessage(p, (state.Volume - totalAir) + " blocks copied.");
|
||||
if (allowoffset != -1) {
|
||||
if (cpos.allowoffset != -1) {
|
||||
Player.SendMessage(p, "Place a block to determine where to paste from");
|
||||
p.Blockchange += new Player.BlockchangeEventHandler(Blockchange3);
|
||||
}
|
||||
@ -208,7 +206,7 @@ namespace MCGalaxy.Commands
|
||||
Player.SendMessage(p, "Loaded copy as " + file);
|
||||
}
|
||||
|
||||
struct CatchPos { public ushort x, y, z; public int type; }
|
||||
struct CatchPos { public ushort x, y, z; public int type; public int allowoffset; }
|
||||
|
||||
public override void Help(Player p) {
|
||||
Player.SendMessage(p, "/copy - Copies the blocks in an area.");
|
||||
|
@ -37,8 +37,9 @@ namespace MCGalaxy.Commands
|
||||
public override void Use(Player p, string message)
|
||||
{
|
||||
if (!Directory.Exists("extra/images/")) { Directory.CreateDirectory("extra/images/"); }
|
||||
layer = false;
|
||||
popType = 1;
|
||||
bool layer = false;
|
||||
byte popType = 1;
|
||||
string bitmapLoc = null;
|
||||
if (message == "") { Help(p); return; }
|
||||
if (message.IndexOf(' ') != -1) //Yay parameters
|
||||
{
|
||||
@ -67,8 +68,7 @@ namespace MCGalaxy.Commands
|
||||
web.DownloadFile("http://www.imgur.com/" + message, "extra/images/tempImage_" + p.name + ".bmp");
|
||||
}
|
||||
Player.SendMessage(p, "Download complete.");
|
||||
bitmaplocation = "tempImage_" + p.name;
|
||||
message = bitmaplocation;
|
||||
bitmapLoc = "tempImage_" + p.name;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
@ -86,38 +86,39 @@ namespace MCGalaxy.Commands
|
||||
web.DownloadFile(message, "extra/images/tempImage_" + p.name + ".bmp");
|
||||
}
|
||||
Player.SendMessage(p, "Download complete.");
|
||||
bitmaplocation = "tempImage_" + p.name;
|
||||
bitmapLoc = "tempImage_" + p.name;
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
else
|
||||
{
|
||||
bitmaplocation = message;
|
||||
bitmapLoc = message;
|
||||
}
|
||||
|
||||
if (!File.Exists("extra/images/" + bitmaplocation + ".bmp")) { Player.SendMessage(p, "The URL entered was invalid!"); return; }
|
||||
if (!File.Exists("extra/images/" + bitmapLoc + ".bmp")) { Player.SendMessage(p, "The URL entered was invalid!"); return; }
|
||||
|
||||
CatchPos cpos;
|
||||
|
||||
cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos;
|
||||
CatchPos cpos = default(CatchPos);
|
||||
cpos.layer = layer;
|
||||
cpos.bitmapLoc = bitmapLoc;
|
||||
cpos.popType = popType;
|
||||
p.blockchangeObject = cpos;
|
||||
Player.SendMessage(p, "Place two blocks to determine direction.");
|
||||
p.ClearBlockchange();
|
||||
p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
|
||||
}
|
||||
public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type, byte extType)
|
||||
void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type, byte extType)
|
||||
{
|
||||
RevertAndClearState(p, x, y, z);
|
||||
CatchPos bp = (CatchPos)p.blockchangeObject;
|
||||
bp.x = x; bp.y = y; bp.z = z; p.blockchangeObject = bp;
|
||||
p.Blockchange += new Player.BlockchangeEventHandler(Blockchange2);
|
||||
}
|
||||
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type, byte extType)
|
||||
void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type, byte extType)
|
||||
{
|
||||
RevertAndClearState(p, x, y, z);
|
||||
Bitmap myBitmap = new Bitmap("extra/images/" + bitmaplocation + ".bmp");
|
||||
myBitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
|
||||
|
||||
CatchPos cpos = (CatchPos)p.blockchangeObject;
|
||||
Bitmap myBitmap = new Bitmap("extra/images/" + cpos.bitmapLoc + ".bmp");
|
||||
myBitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
|
||||
|
||||
if (x == cpos.x && z == cpos.z) { Player.SendMessage(p, "No direction was selected"); return; }
|
||||
|
||||
@ -138,6 +139,8 @@ namespace MCGalaxy.Commands
|
||||
direction = 3;
|
||||
}
|
||||
}
|
||||
byte popType = cpos.popType;
|
||||
bool layer = cpos.layer;
|
||||
if (layer)
|
||||
{
|
||||
if (popType == 1) popType = 2;
|
||||
@ -289,7 +292,8 @@ namespace MCGalaxy.Commands
|
||||
p.level.UpdateBlock(p, colblock.x, colblock.y, colblock.z, colblock.type, 0);
|
||||
}
|
||||
}
|
||||
if (bitmaplocation == "tempImage_" + p.name) File.Delete("extra/images/tempImage_" + p.name + ".bmp");
|
||||
if (cpos.bitmapLoc == "tempImage_" + p.name)
|
||||
File.Delete("extra/images/tempImage_" + p.name + ".bmp");
|
||||
|
||||
string printType;
|
||||
switch (popType)
|
||||
@ -308,8 +312,8 @@ namespace MCGalaxy.Commands
|
||||
printThread.Name = "MCG_ImagePrint";
|
||||
printThread.Start();
|
||||
}
|
||||
public override void Help(Player p)
|
||||
{
|
||||
|
||||
public override void Help(Player p) {
|
||||
Player.SendMessage(p, "/imageprint <switch> <localfile> - Print local file in extra/images/ folder. Must be type .bmp, type filename without extension.");
|
||||
Player.SendMessage(p, "/imageprint <switch> <imgurfile.extension> - Print IMGUR stored file. Example: /i piCCm.gif will print www.imgur.com/piCCm.gif. Case-sensitive");
|
||||
Player.SendMessage(p, "/imageprint <switch> <webfile> - Print web file in format domain.com/folder/image.jpg. Does not need http:// or www.");
|
||||
@ -318,11 +322,7 @@ namespace MCGalaxy.Commands
|
||||
Player.SendMessage(p, "Use switch (&flayer" + Server.DefaultColor + ") or (&fl" + Server.DefaultColor + ") to print horizontally.");
|
||||
}
|
||||
|
||||
struct CatchPos { public ushort x, y, z; }
|
||||
|
||||
string bitmaplocation;
|
||||
bool layer = false;
|
||||
byte popType = 1;
|
||||
struct CatchPos { public bool layer; public byte popType; public string bitmapLoc; public ushort x, y, z; }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,127 +1,77 @@
|
||||
/*
|
||||
Copyright 2011 MCForge
|
||||
Copyright 2011 MCForge
|
||||
|
||||
Made originally by 501st_commander, in something called SharpDevelop.
|
||||
Made into a safe and reasonabal command by EricKilla, in Visual Studio 2010.
|
||||
|
||||
Dual-licensed under the Educational Community License, Version 2.0 and
|
||||
the GNU General Public License, Version 3 (the "Licenses"); you may
|
||||
not use this file except in compliance with the Licenses. You may
|
||||
obtain a copy of the Licenses at
|
||||
Dual-licensed under the Educational Community License, Version 2.0 and
|
||||
the GNU General Public License, Version 3 (the "Licenses"); you may
|
||||
not use this file except in compliance with the Licenses. You may
|
||||
obtain a copy of the Licenses at
|
||||
|
||||
http://www.opensource.org/licenses/ecl2.php
|
||||
http://www.gnu.org/licenses/gpl-3.0.html
|
||||
http://www.opensource.org/licenses/ecl2.php
|
||||
http://www.gnu.org/licenses/gpl-3.0.html
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the Licenses are distributed on an "AS IS"
|
||||
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
or implied. See the Licenses for the specific language governing
|
||||
permissions and limitations under the Licenses.
|
||||
*/
|
||||
namespace MCGalaxy.Commands
|
||||
{
|
||||
public sealed class CmdHackRank : Command
|
||||
{
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the Licenses are distributed on an "AS IS"
|
||||
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
or implied. See the Licenses for the specific language governing
|
||||
permissions and limitations under the Licenses.
|
||||
*/
|
||||
namespace MCGalaxy.Commands {
|
||||
|
||||
public sealed class CmdHackRank : Command {
|
||||
public override string name { get { return "hackrank"; } }
|
||||
public override string shortcut { get { return ""; } }
|
||||
public override string type { get { return CommandTypes.Other; } }
|
||||
public override bool museumUsable { get { return true; } }
|
||||
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
|
||||
|
||||
public CmdHackRank() { }
|
||||
private bool hackrank = false;
|
||||
|
||||
public override void Use(Player p, string message)
|
||||
{
|
||||
if (message == "")
|
||||
{
|
||||
Help(p);
|
||||
return;
|
||||
public override void Use(Player p, string message) {
|
||||
if (message == "") { Help(p); return; }
|
||||
if (p == null) { MessageInGameOnly(p); return; }
|
||||
|
||||
if (p.hackrank) {
|
||||
Player.SendMessage(p, Colors.red + "You have already hacked a rank!"); return;
|
||||
}
|
||||
|
||||
if (hackrank)
|
||||
{
|
||||
Player.SendMessage(p, Colors.red + "You have already hacked a rank!");
|
||||
return;
|
||||
Group grp = Group.Find(message);
|
||||
if (grp != null) {
|
||||
DoFakeRank(p, grp);
|
||||
} else {
|
||||
Player.SendMessage(p, "Invalid Rank!");
|
||||
}
|
||||
|
||||
if(p == null)
|
||||
{
|
||||
Player.SendMessage(p, "Console can't use hackrank, that doesn't make any sense!");
|
||||
return;
|
||||
}
|
||||
|
||||
string[] msg = message.Split(' ');
|
||||
if (Group.Exists(msg[0]))
|
||||
{
|
||||
Group newRank = Group.Find(msg[0]);
|
||||
ranker(p, newRank);
|
||||
}
|
||||
else { Player.SendMessage(p, "Invalid Rank!"); return; }
|
||||
}
|
||||
|
||||
public void ranker(Player p, Group newRank)
|
||||
{
|
||||
void DoFakeRank(Player p, Group newRank) {
|
||||
string color = newRank.color;
|
||||
string oldrank = p.group.name;
|
||||
|
||||
p.color = newRank.color;
|
||||
|
||||
//sent the trick text
|
||||
hackrank = true;
|
||||
Player.GlobalMessage(p.color + p.DisplayName + Server.DefaultColor + "'s rank was set to " + newRank.color + newRank.name);
|
||||
Player.GlobalMessage("&6Congratulations!");
|
||||
p.SendMessage("You are now ranked " + newRank.color + newRank.name + Server.DefaultColor + ", type /help for your new set of commands.");
|
||||
|
||||
kick(p, newRank);
|
||||
p.hackrank = true;
|
||||
Player.GlobalMessage(p.FullName + "%S's rank was set to " + newRank.color + newRank.name + "%S. (Congratulations!)");
|
||||
p.SendMessage("You are now ranked " + newRank.color + newRank.name + "%S, type /help for your new set of commands.");
|
||||
DoKick(p, newRank);
|
||||
}
|
||||
|
||||
private void kick(Player p, Group newRank)
|
||||
{
|
||||
try
|
||||
void DoKick(Player p, Group newRank) {
|
||||
if (!Server.hackrank_kick) return;
|
||||
string oldCol = p.color;
|
||||
System.Timers.Timer messageTimer = new System.Timers.Timer(Server.hackrank_kick_time * 1000);
|
||||
messageTimer.Start();
|
||||
messageTimer.Elapsed += delegate
|
||||
{
|
||||
|
||||
if (Server.hackrank_kick)
|
||||
{
|
||||
int kicktime = (Server.hackrank_kick_time * 1000);
|
||||
|
||||
string oldCol = p.color;
|
||||
|
||||
//make the timer for the kick
|
||||
System.Timers.Timer messageTimer = new System.Timers.Timer(kicktime);
|
||||
|
||||
//start the timer
|
||||
messageTimer.Start();
|
||||
|
||||
//delegate the timer
|
||||
messageTimer.Elapsed += delegate
|
||||
{
|
||||
//kick him!
|
||||
string msg = "You have been kicked for hacking the rank " + newRank.color + newRank.name;
|
||||
p.LeaveServer(msg, msg);
|
||||
p.color = oldCol;
|
||||
killTimer(messageTimer);
|
||||
};
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Player.SendMessage(p, "An error has happend! It wont kick you now! :|");
|
||||
}
|
||||
string msg = "You have been kicked for hacking the rank " + newRank.color + newRank.name;
|
||||
p.LeaveServer(msg, msg);
|
||||
p.color = oldCol;
|
||||
messageTimer.Stop();
|
||||
messageTimer.Dispose();
|
||||
};
|
||||
}
|
||||
|
||||
public override void Help(Player p)
|
||||
{
|
||||
p.SendMessage("/hackrank [rank] - Hacks a rank");
|
||||
p.SendMessage("Usable Ranks:");
|
||||
p.SendMessage(Group.concatList(true, true, false));
|
||||
public override void Help(Player p) {
|
||||
Player.SendMessage(p, "/hackrank [rank] - Hacks a rank");
|
||||
Player.SendMessage(p, "Available ranks: " + Group.concatList());
|
||||
}
|
||||
|
||||
private void killTimer(System.Timers.Timer time)
|
||||
{
|
||||
time.Stop();
|
||||
time.Dispose();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -103,6 +103,7 @@ namespace MCGalaxy {
|
||||
public bool hasreadrules = false;
|
||||
public bool canusereview = true;
|
||||
public float ReachDistance = 5;
|
||||
public bool hackrank;
|
||||
|
||||
public string FullName { get { return color + prefix + DisplayName; } }
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user