static CTFConfig RetrieveConfig(Player p) { CTFConfig cfg = new CTFConfig(); cfg.SetDefaults(p.level); cfg.Retrieve(p.level.name); return(cfg); }
static void UpdateConfig(Player p, CTFConfig cfg) { if (!Directory.Exists("CTF")) { Directory.CreateDirectory("CTF"); } cfg.Save(p.level.name); if (Server.ctf != null && p.level == Server.ctf.Map) { Server.ctf.UpdateConfig(); } }
static bool RedFlagCallback(Player p, Vec3S32[] marks, object state, ExtBlock block) { CTFConfig cfg = RetrieveConfig(p); Vec3S32 P = marks[0]; cfg.RedFlagX = P.X; cfg.RedFlagY = P.Y; cfg.RedFlagZ = P.Z; Player.Message(p, "Set flag position of red team to ({0}, {1}, {2})", P.X, P.Y, P.Z); block = p.level.GetBlock((ushort)P.X, (ushort)P.Y, (ushort)P.Z); if (block.IsAir) { block = (ExtBlock)Block.Red; } cfg.RedFlagBlock = block.RawID; Player.Message(p, "Set flag block of red team to {0}", p.level.BlockName(block)); UpdateConfig(p, cfg); return(false); }
void HandleSet(Player p, string property) { if (!CheckExtraPerm(p, 1)) { return; } CTFConfig cfg = RetrieveConfig(p); if (property.CaselessEq("bluespawn")) { cfg.BlueSpawnX = p.Pos.X; cfg.BlueSpawnY = p.Pos.Y; cfg.BlueSpawnZ = p.Pos.Z; Player.Message(p, "Set spawn of blue team to your position."); UpdateConfig(p, cfg); } else if (property.CaselessEq("redspawn")) { cfg.RedSpawnX = p.Pos.X; cfg.RedSpawnY = p.Pos.Y; cfg.RedSpawnZ = p.Pos.Z; Player.Message(p, "Set spawn of red team to your position."); UpdateConfig(p, cfg); } else if (property.CaselessEq("blueflag")) { Player.Message(p, "Place or delete a block to set blue team's flag."); p.MakeSelection(1, null, BlueFlagCallback); } else if (property.CaselessEq("redflag")) { Player.Message(p, "Place or delete a block to set red team's flag."); p.MakeSelection(1, null, RedFlagCallback); } else if (property.CaselessEq("divider")) { cfg.ZDivider = p.Pos.BlockZ; Player.Message(p, "Set Z line divider to {0}.", cfg.ZDivider); UpdateConfig(p, cfg); } else { Help(p, "set"); } }