Пример #1
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);
        }