Пример #1
0
        // Function from file: buildmode.dm
        public bool ClickOn(Ent_Static user = null, string _params = null, Base_Data _object = null)
        {
            bool _default = false;

            ByTable   pa          = null;
            int       right_click = 0;
            int       left_click  = 0;
            int       alt_click   = 0;
            int       ctrl_click  = 0;
            Base_Data T           = null;
            Base_Data T2          = null;
            Base_Data T3          = null;
            Base_Data T4          = null;
            Obj_Structure_Window_Reinforced WIN  = null;
            Obj_Structure_Window_Reinforced WIN2 = null;
            Obj_Structure_Window_Reinforced WIN3 = null;
            Obj_Structure_Window_Reinforced WIN4 = null;
            Obj_Structure_Window_Reinforced WIN5 = null;
            dynamic T5 = null;
            dynamic A  = null;
            dynamic G  = null;
            dynamic T6 = null;

            pa          = String13.ParseUrlParams(_params);
            right_click = pa.Find("right");
            left_click  = pa.Find("left");
            alt_click   = pa.Find("alt");
            ctrl_click  = pa.Find("ctrl");
            _default    = true;

            switch ((int)(this.mode))
            {
            case 1:

                if (_object is Tile && left_click != 0 && !(alt_click != 0) && !(ctrl_click != 0))
                {
                    T = _object;

                    if (_object is Tile_Space)
                    {
                        ((Tile)T).ChangeTurf(typeof(Tile_Simulated_Floor_Plasteel));
                    }
                    else if (_object is Tile_Simulated_Floor)
                    {
                        ((Tile)T).ChangeTurf(typeof(Tile_Simulated_Wall));
                    }
                    else if (_object is Tile_Simulated_Wall)
                    {
                        ((Tile)T).ChangeTurf(typeof(Tile_Simulated_Wall_RWall));
                    }
                    GlobalFuncs.log_admin("Build Mode: " + GlobalFuncs.key_name(user) + " built " + T + " at (" + ((dynamic)T).x + "," + ((dynamic)T).y + "," + ((dynamic)T).z + ")");
                    return(_default);
                }
                else if (right_click != 0)
                {
                    GlobalFuncs.log_admin("Build Mode: " + GlobalFuncs.key_name(user) + " deleted " + _object + " at (" + ((dynamic)_object).x + "," + ((dynamic)_object).y + "," + ((dynamic)_object).z + ")");

                    if (_object is Tile_Simulated_Wall)
                    {
                        T2 = _object;
                        ((Tile)T2).ChangeTurf(typeof(Tile_Simulated_Floor_Plasteel));
                    }
                    else if (_object is Tile_Simulated_Floor)
                    {
                        T3 = _object;
                        ((Tile)T3).ChangeTurf(typeof(Tile_Space));
                    }
                    else if (_object is Tile_Simulated_Wall_RWall)
                    {
                        T4 = _object;
                        ((Tile)T4).ChangeTurf(typeof(Tile_Simulated_Wall));
                    }
                    else if (_object is Obj)
                    {
                        GlobalFuncs.qdel(_object);
                    }
                    return(_default);
                }
                else if (_object is Tile && alt_click != 0 && left_click != 0)
                {
                    GlobalFuncs.log_admin("Build Mode: " + GlobalFuncs.key_name(user) + " built an airlock at (" + ((dynamic)_object).x + "," + ((dynamic)_object).y + "," + ((dynamic)_object).z + ")");
                    new Obj_Machinery_Door_Airlock(GlobalFuncs.get_turf(_object));
                }
                else if (_object is Tile && ctrl_click != 0 && left_click != 0)
                {
                    switch ((int?)(this.build_dir))
                    {
                    case 1:
                        WIN     = new Obj_Structure_Window_Reinforced(GlobalFuncs.get_turf(_object));
                        WIN.dir = ((int)(GlobalVars.NORTH));
                        break;

                    case 2:
                        WIN2     = new Obj_Structure_Window_Reinforced(GlobalFuncs.get_turf(_object));
                        WIN2.dir = ((int)(GlobalVars.SOUTH));
                        break;

                    case 4:
                        WIN3     = new Obj_Structure_Window_Reinforced(GlobalFuncs.get_turf(_object));
                        WIN3.dir = ((int)(GlobalVars.EAST));
                        break;

                    case 8:
                        WIN4     = new Obj_Structure_Window_Reinforced(GlobalFuncs.get_turf(_object));
                        WIN4.dir = ((int)(GlobalVars.WEST));
                        break;

                    case 9:
                        WIN5     = new Obj_Structure_Window_Reinforced(GlobalFuncs.get_turf(_object));
                        WIN5.dir = ((int)(GlobalVars.NORTHWEST));
                        break;
                    }
                    GlobalFuncs.log_admin("Build Mode: " + GlobalFuncs.key_name(user) + " built a window at (" + ((dynamic)_object).x + "," + ((dynamic)_object).y + "," + ((dynamic)_object).z + ")");
                }
                break;

            case 2:

                if (left_click != 0)
                {
                    if (Lang13.Bool(this.objholder.IsSubclassOf(typeof(Tile))))
                    {
                        T5 = GlobalFuncs.get_turf(_object);
                        GlobalFuncs.log_admin("Build Mode: " + GlobalFuncs.key_name(user) + " modified " + T5 + " (" + T5.x + "," + T5.y + "," + T5.z + ") to " + this.objholder);
                        ((Tile)T5).ChangeTurf(this.objholder);
                    }
                    else
                    {
                        A     = Lang13.Call(this.objholder, GlobalFuncs.get_turf(_object));
                        A.dir = this.build_dir;
                        GlobalFuncs.log_admin("Build Mode: " + GlobalFuncs.key_name(user) + " modified " + A + "'s (" + A.x + "," + A.y + "," + A.z + ") dir to " + this.build_dir);
                    }
                }
                else if (right_click != 0)
                {
                    if (_object is Obj)
                    {
                        GlobalFuncs.log_admin("Build Mode: " + GlobalFuncs.key_name(user) + " deleted " + _object + " at (" + ((dynamic)_object).x + "," + ((dynamic)_object).y + "," + ((dynamic)_object).z + ")");
                        GlobalFuncs.qdel(_object);
                    }
                }
                break;

            case 3:

                if (left_click != 0)
                {
                    if (_object.vars.Find(this.varholder) != 0)
                    {
                        GlobalFuncs.log_admin("Build Mode: " + GlobalFuncs.key_name(user) + " modified " + ((dynamic)_object).name + "'s " + this.varholder + " to " + this.valueholder);
                        _object.vars[this.varholder] = this.valueholder;
                    }
                    else
                    {
                        ((dynamic)user).WriteMsg("<span class='warning'>" + Lang13.Initial(_object, "name") + " does not have a var called '" + this.varholder + "'</span>");
                    }
                }

                if (right_click != 0)
                {
                    if (_object.vars.Find(this.varholder) != 0)
                    {
                        GlobalFuncs.log_admin("Build Mode: " + GlobalFuncs.key_name(user) + " modified " + ((dynamic)_object).name + "'s " + this.varholder + " to " + this.valueholder);
                        _object.vars[this.varholder] = Lang13.Initial(_object, this.varholder);
                    }
                    else
                    {
                        ((dynamic)user).WriteMsg("<span class='warning'>" + Lang13.Initial(_object, "name") + " does not have a var called '" + this.varholder + "'</span>");
                    }
                }
                break;

            case 4:

                if (left_click != 0)
                {
                    if (_object is Tile)
                    {
                        return(_default);
                    }
                    this.throw_atom = _object;
                }

                if (right_click != 0)
                {
                    if (this.throw_atom != null)
                    {
                        ((Ent_Dynamic)this.throw_atom).throw_at(_object, 10, 1, user);
                        GlobalFuncs.log_admin("Build Mode: " + GlobalFuncs.key_name(user) + " threw " + this.throw_atom + " at " + _object + " (" + ((dynamic)_object).x + "," + ((dynamic)_object).y + "," + ((dynamic)_object).z + ")");
                    }
                }
                break;

            case 5:

                if (!Lang13.Bool(this.cornerA))
                {
                    this.cornerA = GlobalFuncs.get_turf(_object);
                    return(_default);
                }

                if (Lang13.Bool(this.cornerA) && !Lang13.Bool(this.cornerB))
                {
                    this.cornerB = GlobalFuncs.get_turf(_object);
                }

                if (left_click != 0)
                {
                    if (Lang13.Bool(this.cornerA) && Lang13.Bool(this.cornerB))
                    {
                        if (!Lang13.Bool(this.generator_path))
                        {
                            ((dynamic)user).WriteMsg("<span class='warning'>Select generator type first.</span>");
                        }
                        G = Lang13.Call(this.generator_path);
                        ((MapGenerator)G).defineRegion(this.cornerA, this.cornerB, true);
                        ((MapGenerator)G).generate();
                        this.cornerA = null;
                        this.cornerB = null;
                        return(_default);
                    }
                }
                this.cornerA = null;
                this.cornerB = null;
                break;

            case 6:

                if (left_click != 0)
                {
                    T6 = GlobalFuncs.get_turf(_object);

                    if (this.stored != null)
                    {
                        GlobalFuncs.DuplicateObject(this.stored, true, null, T6);
                    }
                }
                else if (right_click != 0)
                {
                    if (_object is Ent_Dynamic)
                    {
                        this.stored = _object;
                    }
                }
                break;
            }
            return(_default);
        }
Пример #2
0
        // Function from file: glass.dm
        public bool construct_window(dynamic user = null)
        {
            string  title            = null;
            ByTable directions       = null;
            int     i                = 0;
            Obj_Structure_Window win = null;
            dynamic dir_to_set       = null;
            dynamic direction        = null;
            bool    found            = false;
            Obj_Structure_Window                     WT = null;
            Obj_Structure_Window_Reinforced          W  = null;
            Obj_Structure_Window_Reinforced_Fulltile W2 = null;
            Obj_Structure_WindoorAssembly            WA = null;
            Obj_Machinery_Door_Window                W3 = null;
            Obj_Structure_WindoorAssembly            WD = null;


            if (!Lang13.Bool(user) || !(this != null))
            {
                return(false);
            }

            if (!(user.loc is Tile))
            {
                return(false);
            }

            if (!((Mob)user).IsAdvancedToolUser())
            {
                user.WriteMsg("<span class='warning'>You don't have the dexterity to do this!</span>");
                return(false);
            }
            title  = "Sheet Reinf. Glass";
            title += new Txt(" (").item(this.get_amount()).str(" sheet").s().str(" left)").ToString();

            dynamic _g = Interface13.Input(title, "Would you like full tile glass a one direction glass pane or a windoor?", null, null, new ByTable(new object [] { "One Direction", "Full Window", "Windoor", "Cancel" }), InputType.Any);               // Was a switch-case, sorry for the mess.

            if (_g == "One Direction")
            {
                if (!(this != null))
                {
                    return(true);
                }

                if (this.loc != user)
                {
                    return(true);
                }
                directions = new ByTable(GlobalVars.cardinal);
                i          = 0;

                foreach (dynamic _a in Lang13.Enumerate(user.loc, typeof(Obj_Structure_Window)))
                {
                    win = _a;

                    i++;

                    if (i >= 4)
                    {
                        user.WriteMsg("<span class='danger'>There are too many windows in this location.</span>");
                        return(true);
                    }
                    directions.Remove(win.dir);

                    if (!GlobalVars.cardinal.Contains(win.ini_dir))
                    {
                        user.WriteMsg("<span class='danger'>Can't let you do that.</span>");
                        return(true);
                    }
                }
                dir_to_set = 2;

                foreach (dynamic _c in Lang13.Enumerate(new ByTable(new object [] { user.dir, Num13.Rotate(user.dir, 90), Num13.Rotate(user.dir, 180), Num13.Rotate(user.dir, 270) })))
                {
                    direction = _c;

                    found = false;

                    foreach (dynamic _b in Lang13.Enumerate(user.loc, typeof(Obj_Structure_Window)))
                    {
                        WT = _b;


                        if (WT.dir == direction)
                        {
                            found = true;
                        }
                    }

                    if (!found)
                    {
                        dir_to_set = direction;
                        break;
                    }
                }
                W          = null;
                W          = new Obj_Structure_Window_Reinforced(user.loc, true);
                W.state    = 0;
                W.dir      = Convert.ToInt32(dir_to_set);
                W.ini_dir  = W.dir;
                W.anchored = 0;
                W.add_fingerprint(user);
                this.use(1);
            }
            else if (_g == "Full Window")
            {
                if (!(this != null))
                {
                    return(true);
                }

                if (this.loc != user)
                {
                    return(true);
                }

                if ((this.get_amount() ?? 0) < 2)
                {
                    user.WriteMsg("<span class='warning'>You need more glass to do that!</span>");
                    return(true);
                }

                if (Lang13.Bool(Lang13.FindIn(typeof(Obj_Structure_Window), user.loc)))
                {
                    user.WriteMsg("<span class='warning'>There is a window in the way!</span>");
                    return(true);
                }
                W2          = null;
                W2          = new Obj_Structure_Window_Reinforced_Fulltile(user.loc, true);
                W2.state    = 0;
                W2.anchored = 0;
                W2.add_fingerprint(user);
                this.use(2);
            }
            else if (_g == "Windoor")
            {
                if (!(this != null) || this.loc != user || !(user.loc is Tile))
                {
                    return(true);
                }

                foreach (dynamic _d in Lang13.Enumerate(user.loc, typeof(Obj_Structure_WindoorAssembly)))
                {
                    WA = _d;


                    if (WA.dir == Convert.ToInt32(user.dir))
                    {
                        user.WriteMsg("<span class='warning'>There is already a windoor assembly in that location!</span>");
                        return(true);
                    }
                }

                foreach (dynamic _e in Lang13.Enumerate(user.loc, typeof(Obj_Machinery_Door_Window)))
                {
                    W3 = _e;


                    if (W3.dir == Convert.ToInt32(user.dir))
                    {
                        user.WriteMsg("<span class='warning'>There is already a windoor in that location!</span>");
                        return(true);
                    }
                }

                if ((this.get_amount() ?? 0) < 5)
                {
                    user.WriteMsg("<span class='warning'>You need more glass to do that!</span>");
                    return(true);
                }
                WD          = new Obj_Structure_WindoorAssembly(user.loc);
                WD.state    = "01";
                WD.anchored = 0;
                WD.add_fingerprint(user);
                this.use(5);

                dynamic _f = user.dir;                 // Was a switch-case, sorry for the mess.
                if (_f == 2)
                {
                    WD.dir     = ((int)(GlobalVars.SOUTH));
                    WD.ini_dir = GlobalVars.SOUTH;
                }
                else if (_f == 4)
                {
                    WD.dir     = ((int)(GlobalVars.EAST));
                    WD.ini_dir = GlobalVars.EAST;
                }
                else if (_f == 8)
                {
                    WD.dir     = ((int)(GlobalVars.WEST));
                    WD.ini_dir = GlobalVars.WEST;
                }
                else
                {
                    WD.dir     = ((int)(GlobalVars.NORTH));
                    WD.ini_dir = GlobalVars.NORTH;
                }
            }
            else
            {
                return(true);
            }
            return(false);
        }