コード例 #1
0
        public override bool BuyItem(int itemId, uint amount)
        {
            bool result;

            if (!base.BuyItem(itemId, amount))
            {
                result = false;
            }
            else
            {
                NpcItem      npcItem  = base.Items.FirstOrDefault((NpcItem entry) => entry.Item.Id == itemId);
                BsonDocument document = new BsonDocument
                {
                    {
                        "AcctId",
                        base.Character.Account.Id
                    },

                    {
                        "CharacterId",
                        base.Character.Id
                    },

                    {
                        "ItemId",
                        npcItem.ItemId
                    },

                    {
                        "Amount",
                        (long)((ulong)amount)
                    },

                    {
                        "FinalPrice",
                        npcItem.Price *amount
                    },

                    {
                        "IsToken",
                        base.Token != null
                    },

                    {
                        "Date",
                        System.DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantCulture)
                    }
                };
                Singleton <MongoLogger> .Instance.Insert("NpcShopBuy", document);

                result = true;
            }
            return(result);
        }
コード例 #2
0
            protected override TreeViewItem BuildRoot()
            {
                _loadedStyle           = EditorStyles.boldLabel;
                _activeStyle           = new GUIStyle(EditorStyles.boldLabel);
                _activeStyle.fontStyle = FontStyle.BoldAndItalic;

                var id       = 0;
                var rootItem = new TreeViewItem {
                    id = id++, depth = -1, displayName = "Root"
                };

                var worldItem = new WorldItem {
                    Store = WorldManager.Instance.Variables, World = WorldManager.Instance, id = id++, displayName = "World"
                };

                rootItem.AddChild(worldItem);

                var playerItem = new PlayerItem {
                    Store = Player.Instance.Variables, Player = Player.Instance, id = id++, displayName = "Player"
                };

                rootItem.AddChild(playerItem);

                var zonesItem = new TreeViewItem {
                    id = id++, displayName = "Zones"
                };

                rootItem.AddChild(zonesItem);

                foreach (var zone in WorldManager.Instance.Zones)
                {
                    if (zone != null)
                    {
                        var zoneItem = new ZoneItem {
                            Store = zone.Variables, Zone = zone, id = id++, displayName = zone.Zone.Name
                        };
                        zonesItem.AddChild(zoneItem);

                        foreach (var npc in zone.Npcs)
                        {
                            var npcItem = new NpcItem {
                                Store = npc.Variables, Npc = npc, id = id++, displayName = string.IsNullOrEmpty(npc.Name) ? "(Npc)" : npc.Name
                            };
                            zoneItem.AddChild(npcItem);
                        }
                    }
                }

                SetExpanded(zonesItem.id, true);
                SetupDepthsFromParentsAndChildren(rootItem);

                return(rootItem);
            }
コード例 #3
0
        public virtual bool BuyItem(int itemId, uint amount)
        {
            NpcItem npcItem = this.Items.FirstOrDefault((NpcItem entry) => entry.Item.Id == itemId);
            bool    result;

            if (npcItem == null)
            {
                this.Character.Client.Send(new ExchangeErrorMessage(8));
                result = false;
            }
            else
            {
                uint num = (uint)(npcItem.Price * amount);
                if (!this.CanBuy(npcItem, amount))
                {
                    this.Character.Client.Send(new ExchangeErrorMessage(8));
                    result = false;
                }
                else
                {
                    BasicHandler.SendTextInformationMessage(this.Character.Client, TextInformationTypeEnum.TEXT_INFORMATION_MESSAGE, 21, new object[]
                    {
                        amount,
                        itemId
                    });
                    BasePlayerItem item = Singleton <ItemManager> .Instance.CreatePlayerItem(this.Character, itemId, amount, this.MaxStats || npcItem.MaxStats);

                    this.Character.Inventory.AddItem(item);
                    if (this.Token != null)
                    {
                        this.Character.Inventory.UnStackItem(this.Character.Inventory.TryGetItem(this.Token), num);
                    }
                    else
                    {
                        this.Character.Inventory.SubKamas((int)num);
                        BasicHandler.SendTextInformationMessage(this.Character.Client, TextInformationTypeEnum.TEXT_INFORMATION_MESSAGE, 46, new object[]
                        {
                            num
                        });
                    }
                    this.Character.Client.Send(new ExchangeBuyOkMessage());
                    result = true;
                }
            }
            return(result);
        }
コード例 #4
0
ファイル: NpcEditorCommands.cs プロジェクト: Mixi59/Stump
        public override void ExecuteAdd(TriggerBase trigger)
        {
            var template     = trigger.Get <NpcTemplate>("npc");
            var itemTemplate = trigger.Get <ItemTemplate>("item");
            var shop         = template.Actions.OfType <NpcBuySellAction>().FirstOrDefault();

            WorldServer.Instance.IOTaskPool.AddMessage(
                () =>
            {
                if (shop == null)
                {
                    shop = new NpcBuySellAction(new NpcActionRecord
                    {
                        Type     = NpcBuySellAction.Discriminator,
                        Template = template
                    });

                    NpcManager.Instance.AddNpcAction(shop);
                    template.Actions.Add(shop);
                }

                var item = new NpcItem
                {
                    Item         = itemTemplate,
                    CustomPrice  = trigger.IsArgumentDefined("customprice") ? (float?)trigger.Get <float>("customprice") : null,
                    NpcShopId    = (int)shop.Record.Id,
                    BuyCriterion = string.Empty,
                    MaxStats     = trigger.IsArgumentDefined("max")
                };

                foreach (var actualItem in shop.Items.Where(x => x.ItemId == item.ItemId).ToArray())
                {
                    WorldServer.Instance.DBAccessor.Database.Delete(actualItem);
                    shop.Items.Remove(actualItem);
                    trigger.Reply("Item '{0}' remove from '{1}'s' shop", itemTemplate.Name, template.Name);
                }

                WorldServer.Instance.DBAccessor.Database.Insert(item);
                shop.Items.Add(item);
                trigger.Reply("Item '{0}' added to '{1}'s' shop", itemTemplate.Name, template.Name);
            });
        }
コード例 #5
0
ファイル: NpcShopDialog.cs プロジェクト: Mixi59/Stump
        public bool CanBuy(NpcItem item, int amount)
        {
            if (Token != null)
            {
                var token = Character.Inventory.TryGetItem(Token);

                if (token == null || token.Stack < item.Price * amount)
                {
                    return(false);
                }
            }
            else
            {
                if (Character.Inventory.Kamas < item.Price * amount)
                {
                    return(false);
                }
            }

            return(true);
        }
コード例 #6
0
        public bool CanBuy(NpcItem item, uint amount)
        {
            bool result;

            if (this.Token != null)
            {
                BasePlayerItem basePlayerItem = this.Character.Inventory.TryGetItem(this.Token);
                if (basePlayerItem == null || basePlayerItem.Stack < item.Price * amount)
                {
                    result = false;
                    return(result);
                }
            }
            else
            {
                if ((double)this.Character.Inventory.Kamas < item.Price * amount)
                {
                    result = false;
                    return(result);
                }
            }
            result = true;
            return(result);
        }
コード例 #7
0
        /// <summary>
        /// Load game assets
        /// </summary>
        protected override void LoadContent()
        {
            WzDirectory MapWzFile = Program.WzManager["map"]; // Map.wz
            WzDirectory UIWZFile  = Program.WzManager["ui"];

            // BGM
            if (Program.InfoManager.BGMs.ContainsKey(mapBoard.MapInfo.bgm))
            {
                audio = new WzMp3Streamer(Program.InfoManager.BGMs[mapBoard.MapInfo.bgm], true);
                if (audio != null)
                {
                    audio.Volume = 0.3f;
                    audio.Play();
                }
            }
            if (mapBoard.VRRectangle == null)
            {
                vr_fieldBoundary = new Rectangle(0, 0, mapBoard.MapSize.X, mapBoard.MapSize.Y);
            }
            else
            {
                vr_fieldBoundary = new Rectangle(mapBoard.VRRectangle.X + mapBoard.CenterPoint.X, mapBoard.VRRectangle.Y + mapBoard.CenterPoint.Y, mapBoard.VRRectangle.Width, mapBoard.VRRectangle.Height);
            }
            //SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);

            // Background and objects
            List <WzObject> usedProps = new List <WzObject>();

            foreach (LayeredItem tileObj in mapBoard.BoardItems.TileObjs)
            {
                WzImageProperty tileParent = (WzImageProperty)tileObj.BaseInfo.ParentObject;

                mapObjects[tileObj.LayerNumber].Add(
                    MapSimulatorLoader.CreateMapItemFromProperty(texturePool, tileParent, tileObj.X, tileObj.Y, mapBoard.CenterPoint, _DxDeviceManager.GraphicsDevice, ref usedProps, tileObj is IFlippable ? ((IFlippable)tileObj).Flip : false));
            }
            foreach (BackgroundInstance background in mapBoard.BoardItems.BackBackgrounds)
            {
                WzImageProperty bgParent = (WzImageProperty)background.BaseInfo.ParentObject;

                backgrounds_back.Add(
                    MapSimulatorLoader.CreateBackgroundFromProperty(texturePool, bgParent, background, _DxDeviceManager.GraphicsDevice, ref usedProps, background.Flip));
            }
            foreach (BackgroundInstance background in mapBoard.BoardItems.FrontBackgrounds)
            {
                WzImageProperty bgParent = (WzImageProperty)background.BaseInfo.ParentObject;

                backgrounds_front.Add(
                    MapSimulatorLoader.CreateBackgroundFromProperty(texturePool, bgParent, background, _DxDeviceManager.GraphicsDevice, ref usedProps, background.Flip));
            }

            // Load reactors
            foreach (ReactorInstance reactor in mapBoard.BoardItems.Reactors)
            {
                //WzImage imageProperty = (WzImage)NPCWZFile[reactorInfo.ID + ".img"];

                ReactorItem reactorItem = MapSimulatorLoader.CreateReactorFromProperty(texturePool, reactor, _DxDeviceManager.GraphicsDevice, ref usedProps);
                mapObjects_Reactors.Add(reactorItem);
            }

            // Load NPCs
            foreach (NpcInstance npc in mapBoard.BoardItems.NPCs)
            {
                //WzImage imageProperty = (WzImage) NPCWZFile[npcInfo.ID + ".img"];

                NpcItem npcItem = MapSimulatorLoader.CreateNpcFromProperty(texturePool, npc, _DxDeviceManager.GraphicsDevice, ref usedProps);
                mapObjects_NPCs.Add(npcItem);
            }
            // Load Mobs
            foreach (MobInstance mob in mapBoard.BoardItems.Mobs)
            {
                //WzImage imageProperty = Program.WzManager.FindMobImage(mobInfo.ID); // Mob.wz Mob2.img Mob001.wz

                MobItem npcItem = MapSimulatorLoader.CreateMobFromProperty(texturePool, mob, _DxDeviceManager.GraphicsDevice, ref usedProps);
                mapObjects_Mobs.Add(npcItem);
            }

            // Load portals
            WzSubProperty portalParent = (WzSubProperty)MapWzFile["MapHelper.img"]["portal"];

            WzSubProperty gameParent = (WzSubProperty)portalParent["game"];

            //WzSubProperty editorParent = (WzSubProperty) portalParent["editor"];

            foreach (PortalInstance portal in mapBoard.BoardItems.Portals)
            {
                PortalItem portalItem = MapSimulatorLoader.CreatePortalFromProperty(texturePool, gameParent, portal, _DxDeviceManager.GraphicsDevice, ref usedProps);
                if (portalItem != null)
                {
                    mapObjects_Portal.Add(portalItem);
                }
            }

            // Load tooltips
            WzSubProperty farmFrameParent = (WzSubProperty)UIWZFile["UIToolTip.img"]?["Item"]?["FarmFrame"];

            foreach (ToolTipInstance tooltip in mapBoard.BoardItems.ToolTips)
            {
                TooltipItem item = MapSimulatorLoader.CreateTooltipFromProperty(texturePool, farmFrameParent, tooltip, _DxDeviceManager.GraphicsDevice);

                mapObjects_tooltips.Add(item);
            }

            // Cursor
            WzImageProperty cursorImageProperty = (WzImageProperty)UIWZFile["Basic.img"]?["Cursor"];

            this.mouseCursor = MapSimulatorLoader.CreateMouseCursorFromProperty(texturePool, cursorImageProperty, 0, 0, _DxDeviceManager.GraphicsDevice, ref usedProps, false);

            // Spine object
            skeletonMeshRenderer = new SkeletonMeshRenderer(GraphicsDevice)
            {
                PremultipliedAlpha = false
            };

            // Minimap
            WzSubProperty minimapFrameProperty = (WzSubProperty)UIWZFile["UIWindow2.img"]?["MiniMap"];

            miniMap = MapSimulatorLoader.CreateMinimapFromProperty(minimapFrameProperty, mapBoard, GraphicsDevice, mapBoard.MapInfo.strMapName, mapBoard.MapInfo.strStreetName);

            //
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // default positioning for character
            SetCameraMoveX(true, true, 0);
            SetCameraMoveY(true, true, 0);

            // cleanup
            // clear used items
            foreach (WzObject obj in usedProps)
            {
                obj.MSTag      = null;
                obj.MSTagSpine = null; // cleanup
            }
            usedProps.Clear();
        }
コード例 #8
0
        /// <summary>
        /// Load game assets
        /// </summary>
        protected override void LoadContent()
        {
            WzDirectory MapWzFile   = Program.WzManager["map"]; // Map.wz
            WzDirectory UIWZFile    = Program.WzManager["ui"];
            WzDirectory SoundWZFile = Program.WzManager["sound"];

            this.bBigBangUpdate  = UIWZFile["UIWindow2.img"]?["BigBang!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"] != null; // different rendering for pre and post-bb, to support multiple vers
            this.bBigBang2Update = UIWZFile["UIWindow2.img"]?["BigBang2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"] != null;

            // BGM
            if (Program.InfoManager.BGMs.ContainsKey(mapBoard.MapInfo.bgm))
            {
                audio = new WzMp3Streamer(Program.InfoManager.BGMs[mapBoard.MapInfo.bgm], true);
                if (audio != null)
                {
                    audio.Volume = 0.3f;
                    audio.Play();
                }
            }
            if (mapBoard.VRRectangle == null)
            {
                vr_fieldBoundary = new Rectangle(0, 0, mapBoard.MapSize.X, mapBoard.MapSize.Y);
            }
            else
            {
                vr_fieldBoundary = new Rectangle(mapBoard.VRRectangle.X + mapBoard.CenterPoint.X, mapBoard.VRRectangle.Y + mapBoard.CenterPoint.Y, mapBoard.VRRectangle.Width, mapBoard.VRRectangle.Height);
            }
            //SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);

            // test benchmark
#if DEBUG
            var watch = new System.Diagnostics.Stopwatch();
            watch.Start();
#endif

            /////// Background and objects
            List <WzObject> usedProps = new List <WzObject>();

            // Objects
            Task t_tiles = Task.Run(() =>
            {
                foreach (LayeredItem tileObj in mapBoard.BoardItems.TileObjs)
                {
                    WzImageProperty tileParent = (WzImageProperty)tileObj.BaseInfo.ParentObject;

                    mapObjects[tileObj.LayerNumber].Add(
                        MapSimulatorLoader.CreateMapItemFromProperty(texturePool, tileParent, tileObj.X, tileObj.Y, mapBoard.CenterPoint, _DxDeviceManager.GraphicsDevice, ref usedProps, tileObj is IFlippable ? ((IFlippable)tileObj).Flip : false));
                }
            });

            // Background
            Task t_Background = Task.Run(() =>
            {
                foreach (BackgroundInstance background in mapBoard.BoardItems.BackBackgrounds)
                {
                    WzImageProperty bgParent = (WzImageProperty)background.BaseInfo.ParentObject;

                    backgrounds_back.Add(
                        MapSimulatorLoader.CreateBackgroundFromProperty(texturePool, bgParent, background, _DxDeviceManager.GraphicsDevice, ref usedProps, background.Flip));
                }
                foreach (BackgroundInstance background in mapBoard.BoardItems.FrontBackgrounds)
                {
                    WzImageProperty bgParent = (WzImageProperty)background.BaseInfo.ParentObject;

                    backgrounds_front.Add(
                        MapSimulatorLoader.CreateBackgroundFromProperty(texturePool, bgParent, background, _DxDeviceManager.GraphicsDevice, ref usedProps, background.Flip));
                }
            });

            // Reactors
            Task t_reactor = Task.Run(() =>
            {
                foreach (ReactorInstance reactor in mapBoard.BoardItems.Reactors)
                {
                    //WzImage imageProperty = (WzImage)NPCWZFile[reactorInfo.ID + ".img"];

                    ReactorItem reactorItem = MapSimulatorLoader.CreateReactorFromProperty(texturePool, reactor, _DxDeviceManager.GraphicsDevice, ref usedProps);
                    mapObjects_Reactors.Add(reactorItem);
                }
            });

            // NPCs
            Task t_npc = Task.Run(() =>
            {
                foreach (NpcInstance npc in mapBoard.BoardItems.NPCs)
                {
                    //WzImage imageProperty = (WzImage) NPCWZFile[npcInfo.ID + ".img"];
                    if (npc.Hide)
                    {
                        continue;
                    }

                    NpcItem npcItem = MapSimulatorLoader.CreateNpcFromProperty(texturePool, npc, _DxDeviceManager.GraphicsDevice, ref usedProps);
                    mapObjects_NPCs.Add(npcItem);
                }
            });

            // Mobs
            Task t_mobs = Task.Run(() =>
            {
                foreach (MobInstance mob in mapBoard.BoardItems.Mobs)
                {
                    //WzImage imageProperty = Program.WzManager.FindMobImage(mobInfo.ID); // Mob.wz Mob2.img Mob001.wz
                    if (mob.Hide)
                    {
                        continue;
                    }
                    MobItem npcItem = MapSimulatorLoader.CreateMobFromProperty(texturePool, mob, _DxDeviceManager.GraphicsDevice, ref usedProps);
                    mapObjects_Mobs.Add(npcItem);
                }
            });

            // Portals
            Task t_portal = Task.Run(() =>
            {
                WzSubProperty portalParent = (WzSubProperty)MapWzFile["MapHelper.img"]["portal"];

                WzSubProperty gameParent = (WzSubProperty)portalParent["game"];
                //WzSubProperty editorParent = (WzSubProperty) portalParent["editor"];

                foreach (PortalInstance portal in mapBoard.BoardItems.Portals)
                {
                    PortalItem portalItem = MapSimulatorLoader.CreatePortalFromProperty(texturePool, gameParent, portal, _DxDeviceManager.GraphicsDevice, ref usedProps);
                    if (portalItem != null)
                    {
                        mapObjects_Portal.Add(portalItem);
                    }
                }
            });

            // Tooltips
            Task t_tooltips = Task.Run(() =>
            {
                WzSubProperty farmFrameParent = (WzSubProperty)UIWZFile["UIToolTip.img"]?["Item"]?["FarmFrame"];
                foreach (ToolTipInstance tooltip in mapBoard.BoardItems.ToolTips)
                {
                    TooltipItem item = MapSimulatorLoader.CreateTooltipFromProperty(texturePool, UserScreenScaleFactor, farmFrameParent, tooltip, _DxDeviceManager.GraphicsDevice);

                    mapObjects_tooltips.Add(item);
                }
            });

            // Cursor
            Task t_cursor = Task.Run(() =>
            {
                WzImageProperty cursorImageProperty = (WzImageProperty)UIWZFile["Basic.img"]?["Cursor"];
                this.mouseCursor = MapSimulatorLoader.CreateMouseCursorFromProperty(texturePool, cursorImageProperty, 0, 0, _DxDeviceManager.GraphicsDevice, ref usedProps, false);
            });

            // Spine object
            Task t_spine = Task.Run(() =>
            {
                skeletonMeshRenderer = new SkeletonMeshRenderer(GraphicsDevice)
                {
                    PremultipliedAlpha = false,
                };
                skeletonMeshRenderer.Effect.World = this.matrixScale;
            });

            // Minimap
            Task t_minimap = Task.Run(() =>
            {
                if (!mapBoard.MapInfo.hideMinimap)
                {
                    miniMap = MapSimulatorLoader.CreateMinimapFromProperty(UIWZFile, mapBoard, GraphicsDevice, UserScreenScaleFactor, mapBoard.MapInfo.strMapName, mapBoard.MapInfo.strStreetName, SoundWZFile, bBigBangUpdate);
                }
            });

            while (!t_tiles.IsCompleted || !t_Background.IsCompleted || !t_reactor.IsCompleted || !t_npc.IsCompleted || !t_mobs.IsCompleted || !t_portal.IsCompleted ||
                   !t_tooltips.IsCompleted || !t_cursor.IsCompleted || !t_spine.IsCompleted || !t_minimap.IsCompleted)
            {
                Thread.Sleep(100);
            }

#if DEBUG
            // test benchmark
            watch.Stop();
            Debug.WriteLine($"Map WZ files loaded. Execution Time: {watch.ElapsedMilliseconds} ms");
#endif
            //
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // default positioning for character
            SetCameraMoveX(true, true, 0);
            SetCameraMoveY(true, true, 0);

            ///////////// Border
            int leftRightVRDifference = (int)((vr_fieldBoundary.Right - vr_fieldBoundary.Left) * RenderObjectScaling);
            if (leftRightVRDifference < RenderWidth) // viewing range is smaller than the render width..
            {
                this.bDrawVRBorderLeftRight = true;  // flag

                this.texture_vrBoundaryRectLeft   = CreateVRBorder(VR_BORDER_WIDTHHEIGHT, vr_fieldBoundary.Height, _DxDeviceManager.GraphicsDevice);
                this.texture_vrBoundaryRectRight  = CreateVRBorder(VR_BORDER_WIDTHHEIGHT, vr_fieldBoundary.Height, _DxDeviceManager.GraphicsDevice);
                this.texture_vrBoundaryRectTop    = CreateVRBorder(vr_fieldBoundary.Width * 2, VR_BORDER_WIDTHHEIGHT, _DxDeviceManager.GraphicsDevice);
                this.texture_vrBoundaryRectBottom = CreateVRBorder(vr_fieldBoundary.Width * 2, VR_BORDER_WIDTHHEIGHT, _DxDeviceManager.GraphicsDevice);
            }

            /*
             * DXObject leftDXVRObject = new DXObject(
             *  vr_fieldBoundary.Left - VR_BORDER_WIDTHHEIGHT,
             *  vr_fieldBoundary.Top,
             *  texture_vrBoundaryRectLeft);
             * this.leftVRBorderDrawableItem = new BaseDXDrawableItem(leftDXVRObject, false);
             * //new BackgroundItem(int cx, int cy, int rx, int ry, BackgroundType.Regular, 255, true, leftDXVRObject, false, (int) RenderResolution.Res_All);
             *
             * // Right VR
             * DXObject rightDXVRObject = new DXObject(
             *  vr_fieldBoundary.Right,
             *  vr_fieldBoundary.Top,
             *  texture_vrBoundaryRectRight);
             * this.rightVRBorderDrawableItem = new BaseDXDrawableItem(rightDXVRObject, false);
             */
            ///////////// End Border

            // Debug items
            System.Drawing.Bitmap bitmap_debug = new System.Drawing.Bitmap(1, 1);
            bitmap_debug.SetPixel(0, 0, System.Drawing.Color.White);
            texture_debugBoundaryRect = bitmap_debug.ToTexture2D(_DxDeviceManager.GraphicsDevice);

            // cleanup
            // clear used items
            foreach (WzObject obj in usedProps)
            {
                // Spine events
                WzSpineObject spineObj = (WzSpineObject)obj.MSTagSpine;
                if (spineObj != null)
                {
                    spineObj.state.Start    += Start;
                    spineObj.state.End      += End;
                    spineObj.state.Complete += Complete;
                    spineObj.state.Event    += Event;
                }

                obj.MSTag      = null;
                obj.MSTagSpine = null; // cleanup
            }
            usedProps.Clear();
        }
コード例 #9
0
        public bool SellItem(int guid, uint amount)
        {
            bool result;

            if (!this.CanSell)
            {
                this.Character.Client.Send(new ExchangeErrorMessage(9));
                result = false;
            }
            else
            {
                BasePlayerItem item = this.Character.Inventory.TryGetItem(guid);
                if (item == null)
                {
                    this.Character.Client.Send(new ExchangeErrorMessage(9));
                    result = false;
                }
                else
                {
                    if (item.Stack < amount)
                    {
                        this.Character.Client.Send(new ExchangeErrorMessage(9));
                        result = false;
                    }
                    else
                    {
                        NpcItem npcItem = this.Items.FirstOrDefault((NpcItem entry) => entry.Item.Id == item.Template.Id);
                        int     num;
                        if (npcItem != null)
                        {
                            num = (int)((long)((int)System.Math.Ceiling(npcItem.Price / 10.0)) * (long)((ulong)amount));
                        }
                        else
                        {
                            num = (int)((long)((int)System.Math.Ceiling(item.Template.Price / 10.0)) * (long)((ulong)amount));
                        }
                        BasicHandler.SendTextInformationMessage(this.Character.Client, TextInformationTypeEnum.TEXT_INFORMATION_MESSAGE, 22, new object[]
                        {
                            amount,
                            item.Template.Id
                        });
                        this.Character.Inventory.RemoveItem(item, amount, true);
                        if (this.Token != null)
                        {
                            this.Character.Inventory.AddItem(this.Token, (uint)num);
                        }
                        else
                        {
                            this.Character.Inventory.AddKamas(num);
                            BasicHandler.SendTextInformationMessage(this.Character.Client, TextInformationTypeEnum.TEXT_INFORMATION_MESSAGE, 45, new object[]
                            {
                                num
                            });
                        }
                        this.Character.Client.Send(new ExchangeSellOkMessage());
                        result = true;
                    }
                }
            }
            return(result);
        }
コード例 #10
0
        /// <summary>
        /// Load game assets
        /// </summary>
        protected override void LoadContent()
        {
            WzDirectory MapWzFile = Program.WzManager["map"]; // Map.wz
            WzDirectory UIWZFile  = Program.WzManager["ui"];

            // BGM
            if (Program.InfoManager.BGMs.ContainsKey(mapBoard.MapInfo.bgm))
            {
                audio = new WzMp3Streamer(Program.InfoManager.BGMs[mapBoard.MapInfo.bgm], true);
                if (audio != null)
                {
                    audio.Volume = 0.3f;
                    audio.Play();
                }
            }
            if (mapBoard.VRRectangle == null)
            {
                vr_fieldBoundary = new Rectangle(0, 0, mapBoard.MapSize.X, mapBoard.MapSize.Y);
            }
            else
            {
                vr_fieldBoundary = new Rectangle(mapBoard.VRRectangle.X + mapBoard.CenterPoint.X, mapBoard.VRRectangle.Y + mapBoard.CenterPoint.Y, mapBoard.VRRectangle.Width, mapBoard.VRRectangle.Height);
            }
            //SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);

            // test benchmark
#if DEBUG
            var watch = new System.Diagnostics.Stopwatch();
            watch.Start();
#endif

            /////// Background and objects
            List <WzObject> usedProps = new List <WzObject>();

            // Objects
            Task t_tiles = Task.Run(() =>
            {
                foreach (LayeredItem tileObj in mapBoard.BoardItems.TileObjs)
                {
                    WzImageProperty tileParent = (WzImageProperty)tileObj.BaseInfo.ParentObject;

                    mapObjects[tileObj.LayerNumber].Add(
                        MapSimulatorLoader.CreateMapItemFromProperty(texturePool, tileParent, tileObj.X, tileObj.Y, mapBoard.CenterPoint, _DxDeviceManager.GraphicsDevice, ref usedProps, tileObj is IFlippable ? ((IFlippable)tileObj).Flip : false));
                }
            });

            // Background
            Task t_Background = Task.Run(() =>
            {
                foreach (BackgroundInstance background in mapBoard.BoardItems.BackBackgrounds)
                {
                    WzImageProperty bgParent = (WzImageProperty)background.BaseInfo.ParentObject;

                    backgrounds_back.Add(
                        MapSimulatorLoader.CreateBackgroundFromProperty(texturePool, bgParent, background, _DxDeviceManager.GraphicsDevice, ref usedProps, background.Flip));
                }
                foreach (BackgroundInstance background in mapBoard.BoardItems.FrontBackgrounds)
                {
                    WzImageProperty bgParent = (WzImageProperty)background.BaseInfo.ParentObject;

                    backgrounds_front.Add(
                        MapSimulatorLoader.CreateBackgroundFromProperty(texturePool, bgParent, background, _DxDeviceManager.GraphicsDevice, ref usedProps, background.Flip));
                }
            });

            // Reactors
            Task t_reactor = Task.Run(() =>
            {
                foreach (ReactorInstance reactor in mapBoard.BoardItems.Reactors)
                {
                    //WzImage imageProperty = (WzImage)NPCWZFile[reactorInfo.ID + ".img"];

                    ReactorItem reactorItem = MapSimulatorLoader.CreateReactorFromProperty(texturePool, reactor, _DxDeviceManager.GraphicsDevice, ref usedProps);
                    mapObjects_Reactors.Add(reactorItem);
                }
            });

            // NPCs
            Task t_npc = Task.Run(() =>
            {
                foreach (NpcInstance npc in mapBoard.BoardItems.NPCs)
                {
                    //WzImage imageProperty = (WzImage) NPCWZFile[npcInfo.ID + ".img"];
                    if (npc.Hide)
                    {
                        continue;
                    }

                    NpcItem npcItem = MapSimulatorLoader.CreateNpcFromProperty(texturePool, npc, _DxDeviceManager.GraphicsDevice, ref usedProps);
                    mapObjects_NPCs.Add(npcItem);
                }
            });

            // Mobs
            Task t_mobs = Task.Run(() =>
            {
                foreach (MobInstance mob in mapBoard.BoardItems.Mobs)
                {
                    //WzImage imageProperty = Program.WzManager.FindMobImage(mobInfo.ID); // Mob.wz Mob2.img Mob001.wz
                    if (mob.Hide)
                    {
                        continue;
                    }
                    MobItem npcItem = MapSimulatorLoader.CreateMobFromProperty(texturePool, mob, _DxDeviceManager.GraphicsDevice, ref usedProps);
                    mapObjects_Mobs.Add(npcItem);
                }
            });

            // Portals
            Task t_portal = Task.Run(() =>
            {
                WzSubProperty portalParent = (WzSubProperty)MapWzFile["MapHelper.img"]["portal"];

                WzSubProperty gameParent = (WzSubProperty)portalParent["game"];
                //WzSubProperty editorParent = (WzSubProperty) portalParent["editor"];

                foreach (PortalInstance portal in mapBoard.BoardItems.Portals)
                {
                    PortalItem portalItem = MapSimulatorLoader.CreatePortalFromProperty(texturePool, gameParent, portal, _DxDeviceManager.GraphicsDevice, ref usedProps);
                    if (portalItem != null)
                    {
                        mapObjects_Portal.Add(portalItem);
                    }
                }
            });

            // Tooltips
            Task t_tooltips = Task.Run(() =>
            {
                WzSubProperty farmFrameParent = (WzSubProperty)UIWZFile["UIToolTip.img"]?["Item"]?["FarmFrame"];
                foreach (ToolTipInstance tooltip in mapBoard.BoardItems.ToolTips)
                {
                    TooltipItem item = MapSimulatorLoader.CreateTooltipFromProperty(texturePool, farmFrameParent, tooltip, _DxDeviceManager.GraphicsDevice);

                    mapObjects_tooltips.Add(item);
                }
            });

            // Cursor
            Task t_cursor = Task.Run(() =>
            {
                WzImageProperty cursorImageProperty = (WzImageProperty)UIWZFile["Basic.img"]?["Cursor"];
                this.mouseCursor = MapSimulatorLoader.CreateMouseCursorFromProperty(texturePool, cursorImageProperty, 0, 0, _DxDeviceManager.GraphicsDevice, ref usedProps, false);
            });

            // Spine object
            Task t_spine = Task.Run(() =>
            {
                skeletonMeshRenderer = new SkeletonMeshRenderer(GraphicsDevice)
                {
                    PremultipliedAlpha = false
                };
            });

            // Minimap
            Task t_minimap = Task.Run(() =>
            {
                if (!mapBoard.MapInfo.hideMinimap)
                {
                    WzSubProperty minimapFrameProperty = (WzSubProperty)UIWZFile["UIWindow2.img"]?["MiniMap"];

                    if (minimapFrameProperty == null) // UIWindow2 not available pre-BB.
                    {
                        minimapFrameProperty = (WzSubProperty)UIWZFile["UIWindow.img"]?["MiniMap"];
                    }
                    miniMap = MapSimulatorLoader.CreateMinimapFromProperty(minimapFrameProperty, mapBoard, GraphicsDevice, mapBoard.MapInfo.strMapName, mapBoard.MapInfo.strStreetName);
                }
            });

            while (!t_tiles.IsCompleted || !t_Background.IsCompleted || !t_reactor.IsCompleted || !t_npc.IsCompleted || !t_mobs.IsCompleted || !t_portal.IsCompleted ||
                   !t_tooltips.IsCompleted || !t_cursor.IsCompleted || !t_spine.IsCompleted || !t_minimap.IsCompleted)
            {
                Thread.Sleep(50);
            }

#if DEBUG
            // test benchmark
            watch.Stop();
            Debug.WriteLine($"Map loaded. Execution Time: {watch.ElapsedMilliseconds} ms");
#endif
            //
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // default positioning for character
            SetCameraMoveX(true, true, 0);
            SetCameraMoveY(true, true, 0);

            // Debug items
            System.Drawing.Bitmap bitmap_debug = new System.Drawing.Bitmap(1, 1);
            bitmap_debug.SetPixel(0, 0, System.Drawing.Color.White);
            texture_debugBoundaryRect = bitmap_debug.ToTexture2D(_DxDeviceManager.GraphicsDevice);

            // cleanup
            // clear used items
            foreach (WzObject obj in usedProps)
            {
                obj.MSTag      = null;
                obj.MSTagSpine = null; // cleanup
            }
            usedProps.Clear();
        }