本文整理汇总了C#中CatchPos类的典型用法代码示例。如果您正苦于以下问题:C# CatchPos类的具体用法?C# CatchPos怎么用?C# CatchPos使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
CatchPos类属于命名空间,在下文中一共展示了CatchPos类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Use
public void Use(Player p, string[] args) {
CatchPos cpos = new CatchPos();
if (args.Length != 0) {
cpos.ignore = new List<byte>();
for (int i = 0; i < args.Length; i++) {
try {
cpos.ignore.Add(Block.NameToBlock(args[i]));
}
catch {
p.SendMessage("Could not find the block '" + args[i] + "'");
return;
}
}
string s = "";
for (int i = 0; i < cpos.ignore.Count; i++) {
s += ((Block)cpos.ignore[i]).Name;
if (i == cpos.ignore.Count - 2) s += " and ";
else if (i != cpos.ignore.Count - 1) s += ", ";
}
p.SendMessage("Ignoring " + s + ".");
}
//else
//cpos.ignore.Add(Block.NameToByte("unknown")); //So it doesn't ignore air.
p.SendMessage("Place two blocks to determine the edges.");
//p.CatchNextBlockchange(new Player.BlockChangeDelegate(CatchBlock), (object)cpos);
p.SetDatapass("CmdMeasure_cpos", cpos);
p.OnPlayerBlockChange.Normal += new BlockChangeEvent.EventHandler(CatchBlock);
}
示例2: CopyBlocks
static bool CopyBlocks(Player p, Level other, ushort x, ushort y, ushort z, CatchPos cpos) {
byte[] blocks = other.blocks;
if (blocks.Length != p.level.blocks.Length) {
p.SendMessage("Cant restore selection of different size maps.");
return false;
}
int width = other.Width, height = other.Length;
if (p.level.bufferblocks && !p.level.Instant) {
for (ushort yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy)
for (ushort zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz)
for (ushort xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx)
{
BlockQueue.Addblock(p, xx, yy, zz, blocks[xx + (zz * width) + (yy * width * height)]);
}
} else {
for (ushort yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy)
for (ushort zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz)
for (ushort xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx)
{
p.level.Blockchange(p, xx, yy, zz, blocks[xx + (zz * width) + (yy * width * height)]);
}
}
return true;
}
示例3: Blockchange2
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type)
{
p.ClearBlockchange();
byte b = p.level.GetTile(x, y, z);
p.SendBlockchange(x, y, z, b);
CatchPos cpos = (CatchPos)p.blockchangeObject;
List<CatchPos> buffer = new List<CatchPos>();
CatchPos pos = new CatchPos();
//int totalChecks = 0;
//if (Math.Abs(cpos.x - x) * Math.Abs(cpos.y - y) * Math.Abs(cpos.z - z) > 8000) { Player.SendMessage(p, "Tried to restart too many blocks. You may only restart 8000"); return; }
for (ushort xx = Math.Min(cpos.x, x); xx <= Math.Max(cpos.x, x); ++xx)
{
for (ushort yy = Math.Min(cpos.y, y); yy <= Math.Max(cpos.y, y); ++yy)
{
for (ushort zz = Math.Min(cpos.z, z); zz <= Math.Max(cpos.z, z); ++zz)
{
if (p.level.GetTile(xx, yy, zz) != Block.air)
{
pos.x = xx; pos.y = yy; pos.z = zz;
pos.extraInfo = cpos.extraInfo;
buffer.Add(pos);
}
}
}
}
try
{
if (cpos.extraInfo == "")
{
if (buffer.Count > Server.rpNormLimit)
{
Player.SendMessage(p, "Cannot restart more than " + Server.rpNormLimit + " blocks.");
Player.SendMessage(p, "Tried to restart " + buffer.Count + " blocks.");
return;
}
}
else
{
if (buffer.Count > Server.rpLimit)
{
Player.SendMessage(p, "Tried to add physics to " + buffer.Count + " blocks.");
Player.SendMessage(p, "Cannot add physics to more than " + Server.rpLimit + " blocks.");
return;
}
}
}
catch { return; }
foreach (CatchPos pos1 in buffer)
{
p.level.AddCheck(p.level.PosToInt(pos1.x, pos1.y, pos1.z), pos1.extraInfo, true);
}
Player.SendMessage(p, "Activated " + buffer.Count + " blocks.");
if (p.staticCommands) p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
}
示例4: Use
public void Use(Player p, string[] args) {
if (args.Length == 0) { p.SendMessage("Please specify a message to write!"); Help(p); return; }
CatchPos cpos = new CatchPos();
cpos.message = string.Join(" ", args);
p.SetDatapass(Name, cpos);
p.SendMessage("Place two blocks to determine the direction!");
p.OnPlayerBlockChange.Normal += BlockChange1;
}
示例5: CatchBlock
public void CatchBlock(Player p, BlockChangeEventArgs args)
{
CatchPos cpos = new CatchPos();
cpos.pos = new Vector3S(args.X, args.Z, args.Y);
cpos.block = args.Holding;
args.Cancel();
p.OnPlayerBlockChange.Normal -= new Event<Player, BlockChangeEventArgs>.EventHandler(CatchBlock);
p.SetDatapass(this.Name, cpos);
p.OnPlayerBlockChange.Normal += new BlockChangeEvent.EventHandler(CatchBlock2);
}
示例6: Blockchange1
public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type)
{
p.ClearBlockchange();
byte b = p.level.GetTile(x, y, z);
p.SendBlockchange(x, y, z, b);
bp = (CatchPos)p.blockchangeObject;
thex = x; they = y + 2; thez = z; p.blockchangeObject = bp;
Thread t = new Thread(ZombieMob);
t.Start(p);
}
示例7: OnUse
protected override void OnUse(Player p, string msg, string[] parts, ref CatchPos cpos) {
if (parts.Length == 2 || parts.Length == 3) {
string arg = parts[parts.Length - 1];
ushort len;
if (!ushort.TryParse(arg, out len)) {
if (arg == "walls" || arg == "straight" || arg == "normal") return;
Player.SendMessage(p, msg + " is not valid length, assuming maximum length allowed.");
} else {
cpos.data = len;
}
}
}
示例8: Use
public void Use(Player p, string[] args)
{
main = new CatchPos();
main.block = 255;
main.cuboidType = SolidType.solid;
switch (args.Length)
{
case -1:
p.SendMessage("Invalid block or type!");
return;
case 0: // No arguments
break;
case 1: // Block or Type ONLY
if (ValidSolidType(args[0]) || ValidBlockName(args[0]))
break;
goto case -1;
case 2: // Block AND Type
if (ValidSolidType(args[0]) || ValidSolidType(args[1]))
if (ValidBlockName(args[0]) || ValidBlockName(args[1]))
break;
goto case -1;
case 6: // Coordinates ONLY
main.block = 1;
ParseCoordinates(p, args);
return;
case 7: //Coordinates with Block OR Type
if (ValidSolidType(args[6]) || ValidBlockName(args[6]))
ParseCoordinates(p, args);
else
goto case -1;
return;
case 8: //Coordinates with Block AND Type
if (ValidSolidType(args[6]) || ValidSolidType(args[7]))
if (ValidBlockName(args[6]) || ValidBlockName(args[7]))
{
ParseCoordinates(p, args);
return;
}
goto case -1;
default:
p.SendMessage("Invalid number of arguments!");
Help(p);
return;
}
p.SendMessage("Place two blocks to determine the corners.");
p.OnPlayerBlockChange.Normal += new Event<Player, BlockChangeEventArgs>.EventHandler(CatchBlock1);
}
示例9: Use
public void Use(Player p, string[] args)
{
if (args.Length != 2)
{
p.SendMessage("Invalid number of arguments!");
Help(p);
return;
}
CatchPos cpos = new CatchPos();
List<string> oldType;
if (args[0].Contains(","))
oldType = new List<string>(args[0].Split(','));
else
oldType = new List<string>() { args[0] };
oldType = oldType.Distinct().ToList(); // Remove duplicates
List<string> invalid = new List<string>(); //Check for invalid blocks
foreach (string name in oldType)
if (!Block.ValidBlockName(name))
invalid.Add(name);
if (!Block.ValidBlockName(args[1]))
invalid.Add(args[1]);
if (invalid.Count > 0)
{
p.SendMessage(String.Format("Invalid block{0}: {1}", invalid.Count == 1 ? "" : "s", String.Join(", ", invalid)));
return;
}
if (oldType.Contains(args[1]))
oldType.Remove(args[1]);
if (oldType.Count < 1)
{
p.SendMessage("Replacing a block with the same one would be pointless!");
return;
}
cpos.oldType = new List<byte>();
foreach (string name in oldType)
cpos.oldType.Add(Block.NameToBlock(name));
cpos.newType = Block.NameToBlock(args[1]);
p.SendMessage("Place two blocks to determine the edges.");
p.SetDatapass(this.Name, cpos);
p.OnPlayerBlockChange.Normal += new Event<Player, BlockChangeEventArgs>.EventHandler(CatchBlock1);
}
示例10: Blockchange2
public void Blockchange2(Player p, ushort x, ushort y, ushort z, byte type)
{
p.ClearBlockchange();
byte b = p.level.GetTile(x, y, z);
p.SendBlockchange(x, y, z, b);
CatchPos cpos = (CatchPos)p.blockchangeObject;
if (cpos.type == Block.Zero) type = p.bindings[type]; else type = cpos.type;
List<CatchPos> buffer = new List<CatchPos>();
CatchPos pos = new CatchPos();
if (cpos.extraType == 2)
{ //Fun part of making a straight line
int xdif = Math.Abs(cpos.x - x);
int ydif = Math.Abs(cpos.y - y);
int zdif = Math.Abs(cpos.z - z);
if (xdif > ydif && xdif > zdif)
{
y = cpos.y; z = cpos.z;
}
else if (ydif > xdif && ydif > zdif)
{
x = cpos.x; z = cpos.z;
}
else if (zdif > ydif && zdif > xdif)
{
y = cpos.y; x = cpos.x;
}
}
if (cpos.maxNum == 0) cpos.maxNum = 100000;
int i, dx, dy, dz, l, m, n, x_inc, y_inc, z_inc, err_1, err_2, dx2, dy2, dz2;
int[] pixel = new int[3];
pixel[0] = cpos.x; pixel[1] = cpos.y; pixel[2] = cpos.z;
dx = x - cpos.x; dy = y - cpos.y; dz = z - cpos.z;
x_inc = (dx < 0) ? -1 : 1; l = Math.Abs(dx);
y_inc = (dy < 0) ? -1 : 1; m = Math.Abs(dy);
z_inc = (dz < 0) ? -1 : 1; n = Math.Abs(dz);
dx2 = l << 1; dy2 = m << 1; dz2 = n << 1;
if ((l >= m) && (l >= n))
{
err_1 = dy2 - l;
err_2 = dz2 - l;
for (i = 0; i < l; i++)
{
pos.x = (ushort)pixel[0];
pos.y = (ushort)pixel[1];
pos.z = (ushort)pixel[2];
buffer.Add(pos);
if (err_1 > 0)
{
pixel[1] += y_inc;
err_1 -= dx2;
}
if (err_2 > 0)
{
pixel[2] += z_inc;
err_2 -= dx2;
}
err_1 += dy2;
err_2 += dz2;
pixel[0] += x_inc;
}
}
else if ((m >= l) && (m >= n))
{
err_1 = dx2 - m;
err_2 = dz2 - m;
for (i = 0; i < m; i++)
{
pos.x = (ushort)pixel[0];
pos.y = (ushort)pixel[1];
pos.z = (ushort)pixel[2];
buffer.Add(pos);
if (err_1 > 0)
{
pixel[0] += x_inc;
err_1 -= dy2;
}
if (err_2 > 0)
{
pixel[2] += z_inc;
err_2 -= dy2;
}
err_1 += dx2;
err_2 += dz2;
pixel[1] += y_inc;
}
}
else
{
err_1 = dy2 - n;
err_2 = dx2 - n;
//.........这里部分代码省略.........
示例11: Use
public override void Use(Player p, string message)
{
wait = 0;
string[] args = message.Split(' ');
if (args.Length != 2) { p.SendMessage("Invalid number of arguments!"); Help(p); wait = 1; return; }
CatchPos cpos = new CatchPos();
List<string> ignore;
if (args[0].Contains(","))
ignore = new List<string>(args[0].Split(','));
else
ignore = new List<string>() { args[0] };
ignore = ignore.Distinct().ToList(); // Remove duplicates
List<string> invalid = new List<string>(); //Check for invalid blocks
foreach (string name in ignore)
if (Block.Byte(name) == 255)
invalid.Add(name);
if (Block.Byte(args[1]) == 255)
invalid.Add(args[1]);
if (invalid.Count > 0)
{
p.SendMessage(String.Format("Invalid block{0}: {1}", invalid.Count == 1 ? "" : "s", String.Join(", ", invalid.ToArray())));
return;
}
if (ignore.Contains(args[1]))
ignore.Remove(args[1]);
if (ignore.Count == 0)
p.SendMessage("Next time just use cuboid if you're not going to ignore anything!");
if (Block.Byte(message.Split(' ')[1]) == 255) { p.SendMessage(message.Split(' ')[1] + " does not exist, please spell it correctly."); wait = 1; return; }
cpos.ignore = new List<byte>();
foreach (string name in ignore)
cpos.ignore.Add(Block.Byte(name));
cpos.newType = Block.Byte(args[1]);
if (!Block.canPlace(p, cpos.newType)) { p.SendMessage("Cannot place this block type!"); wait = 1; return; }
p.blockchangeObject = cpos;
Player.SendMessage(p, "Place two blocks to determine the edges.");
p.ClearBlockchange();
p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
}
示例12: Cuboid
private void Cuboid(CatchPos cpos, byte NewType, Player p, ushort x, ushort y, ushort z)
{
List<Pos> buffer = new List<Pos>();
ushort xx, zz, yy;
if (cpos.block != 255) {
NewType = cpos.block;
}
switch (cpos.cuboidType) {
case SolidType.solid:
buffer.Capacity = Math.Max(Math.Abs(cpos.pos.x - x), 1) * Math.Max(Math.Abs(cpos.pos.z - z), 1) * Math.Max(Math.Abs(cpos.pos.y - y), 1);
for (xx = Math.Min((ushort)(cpos.pos.x), x); xx <= Math.Max((ushort)(cpos.pos.x), x); ++xx) {
for (zz = Math.Min((ushort)(cpos.pos.z), z); zz <= Math.Max((ushort)(cpos.pos.z), z); ++zz) {
for (yy = Math.Min((ushort)(cpos.pos.y), y); yy <= Math.Max((ushort)(cpos.pos.y), y); ++yy) {
Vector3S loop = new Vector3S(xx, zz, yy);
if (p.Level.GetBlock(loop) != NewType) {
BufferAdd(buffer, xx, zz, yy);
}
}
}
}
break;
case SolidType.hollow:
for (zz = Math.Min((ushort)cpos.pos.z, z); zz <= Math.Max(cpos.pos.z, y); ++zz)
for (yy = Math.Min((ushort)cpos.pos.z, z); yy <= Math.Max(cpos.pos.z, z); ++yy) {
if (p.Level.GetBlock(cpos.pos.x, yy, zz) != NewType) {
BufferAdd(buffer, (ushort)cpos.pos.x, yy, zz);
}
if (cpos.pos.x != x) {
if (p.Level.GetBlock(x, yy, zz) != NewType) {
BufferAdd(buffer, x, yy, zz);
}
}
}
if (Math.Abs(cpos.pos.x - x) >= 2) {
for (xx = (ushort)(Math.Min(cpos.pos.x, x) + 1); xx <= Math.Max(cpos.pos.x, x) - 1; ++xx)
for (yy = Math.Min((ushort)cpos.pos.y, y); yy <= Math.Max((ushort)cpos.pos.y, y); ++yy) {
if (p.Level.GetBlock(xx, cpos.pos.z, yy) != NewType) {
BufferAdd(buffer, xx, (ushort)cpos.pos.z, yy);
}
if (cpos.pos.z != z) {
if (p.Level.GetBlock(xx, z, yy) != NewType) {
BufferAdd(buffer, xx, z, yy);
}
}
}
if (Math.Abs(cpos.pos.z - z) >= 2) {
for (xx = (ushort)(Math.Min(cpos.pos.x, x) + 1); xx <= Math.Max(cpos.pos.x, x) - 1; ++xx)
for (zz = (ushort)(Math.Min(cpos.pos.z, y) + 1); zz <= Math.Max(cpos.pos.z, y) - 1; ++zz) {
if (p.Level.GetBlock(xx, zz, cpos.pos.y) != NewType) {
BufferAdd(buffer, xx, zz, (ushort)cpos.pos.y);
}
if (cpos.pos.y != y) {
if (p.Level.GetBlock(xx, zz, y) != NewType) {
BufferAdd(buffer, xx, zz, y);
}
}
}
}
}
break;
case SolidType.walls:
for (zz = Math.Min((ushort)cpos.pos.z, z); zz <= Math.Max(cpos.pos.z, z); ++zz)
for (yy = Math.Min((ushort)cpos.pos.y, y); yy <= Math.Max(cpos.pos.y, y); ++yy) {
if (p.Level.GetBlock(cpos.pos.x, zz, yy) != NewType) {
BufferAdd(buffer, (ushort)cpos.pos.x, zz, yy);
}
if (cpos.pos.x != x) {
if (p.Level.GetBlock(x, zz, yy) != NewType) {
BufferAdd(buffer, x, zz, yy);
}
}
}
if (Math.Abs(cpos.pos.x - x) >= 2) {
if (Math.Abs(cpos.pos.y - y) >= 2) {
for (xx = (ushort)(Math.Min(cpos.pos.x, x) + 1); xx <= Math.Max(cpos.pos.x, x) - 1; ++xx)
for (zz = (ushort)(Math.Min(cpos.pos.z, z)); zz <= Math.Max(cpos.pos.z, z); ++zz) {
if (p.Level.GetBlock(xx, zz, (ushort)cpos.pos.y) != NewType) {
BufferAdd(buffer, xx, zz, (ushort)cpos.pos.y);
}
if (cpos.pos.y != y) {
if (p.Level.GetBlock(xx, zz, y) != NewType) {
BufferAdd(buffer, xx, zz, y);
}
}
}
}
}
break;
case SolidType.holes:
bool Checked = true, startZ, startY;
for (xx = Math.Min((ushort)cpos.pos.x, x); xx <= Math.Max((ushort)cpos.pos.x, x); ++xx) {
startZ = Checked;
for (zz = Math.Min((ushort)cpos.pos.z, z); zz <= Math.Max((ushort)cpos.pos.z, z); ++zz) {
startY = Checked;
for (yy = Math.Min((ushort)cpos.pos.y, y); yy <= Math.Max((ushort)cpos.pos.y, y); ++yy) {
Checked = !Checked;
if (Checked && p.Level.GetBlock(xx, zz, yy) != NewType) {
BufferAdd(buffer, xx, zz, yy);
}
//.........这里部分代码省略.........
示例13: findNext
public void findNext(CatchPos lookedAt, ref CatchPos pos)
示例14: ParseCoordinates
protected void ParseCoordinates(Player p, string[] coordinates)
{
CatchPos cpos = new CatchPos();
try
{
cpos.pos = new Vector3S(ushort.Parse(coordinates[0]), ushort.Parse(coordinates[1]), ushort.Parse(coordinates[2]));
cpos.secondPos = new Vector3S(ushort.Parse(coordinates[3]), ushort.Parse(coordinates[4]), ushort.Parse(coordinates[5]));
}
catch
{
p.SendMessage("Invalid coordinates!");
return;
}
Cuboid(cpos, p);
}
示例15: Use
public override void Use(Player p, string message)
{
wait = 0;
string[] args = message.Split(' ');
if (args.Length != 2)
{
p.SendMessage("Invail number of arguments!");
wait = 1;
Help(p);
return;
}
CatchPos cpos = new CatchPos();
List<string> oldType;
oldType = new List<string>(args[0].Split(','));
oldType = oldType.Distinct().ToList(); // Remove duplicates
List<string> invalid = new List<string>(); //Check for invalid blocks
foreach (string name in oldType)
if (Block.Ushort(name) == Block.maxblocks)
invalid.Add(name);
if (Block.Ushort(args[1]) == Block.maxblocks)
invalid.Add(args[1]);
if (invalid.Count > 0)
{
p.SendMessage(String.Format("Invalid block{0}: {1}", invalid.Count == 1 ? "" : "s", String.Join(", ", invalid.ToArray())));
wait = 1;
return;
}
if (oldType.Contains(args[1]))
oldType.Remove(args[1]);
if (oldType.Count < 1)
{
p.SendMessage("Replacing a block with the same one would be pointless!");
return;
}
cpos.oldType = new List<ushort>();
foreach (string name in oldType)
cpos.oldType.Add(Block.Ushort(name));
cpos.newType = Block.Ushort(args[1]);
foreach (byte type in cpos.oldType)
if (!Block.canPlace(p, type) && !Block.BuildIn(type)) { p.SendMessage("Cannot replace that."); wait = 1; return; }
if (!Block.canPlace(p, cpos.newType)) { p.SendMessage("Cannot place that."); wait = 1; return; }
p.blockchangeObject = cpos;
Player.SendMessage(p, "Place two blocks to determine the edges.");
p.ClearBlockchange();
p.Blockchange += new Player.BlockchangeEventHandler(Blockchange1);
}