void UpdateDatabase(Player p, MBData data, ushort x, ushort y, ushort z) { data.Message = data.Message.Replace("'", "\\'"); data.Message = Colors.EscapeColors(data.Message); string lvlName = p.level.name; object locker = ThreadSafeCache.DBCache.Get(lvlName); lock (locker) { Database.Backend.CreateTable("Messages" + lvlName, LevelDB.createMessages); p.level.hasMessageBlocks = true; int count = 0; using (DataTable Messages = Database.Backend.GetRows("Messages" + lvlName, "*", "WHERE X=@0 AND Y=@1 AND Z=@2", x, y, z)) { count = Messages.Rows.Count; } if (count == 0) { Database.Backend.AddRow("Messages" + lvlName, "X, Y, Z, Message", x, y, z, data.Message); } else { Database.Backend.UpdateRows("Messages" + lvlName, "Message=@3", "WHERE X=@0 AND Y=@1 AND Z=@2", x, y, z, data.Message); } } }
void PlacedMark(Player p, ushort x, ushort y, ushort z, byte type, byte extType) { p.ClearBlockchange(); MBData data = (MBData)p.blockchangeObject; byte old = p.level.GetTile(x, y, z); if (p.level.CheckAffectPermissions(p, x, y, z, old, data.Block, data.ExtBlock)) { p.level.Blockchange(p, x, y, z, data.Block, data.ExtBlock); UpdateDatabase(p, data, x, y, z); Player.Message(p, "Message block created."); } else { Player.Message(p, "Failed to create a message block."); } p.RevertBlock(x, y, z); if (p.staticCommands) { p.Blockchange += PlacedMark; } }