示例#1
0
        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);
                }
            }
        }
示例#2
0
        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;
            }
        }