コード例 #1
0
    private static void HandleGetHelp(GameSession session, PacketReader packet)
    {
        int dungeonId = packet.ReadInt();

        if (session.Player.DungeonHelperAccessTime > session.ClientTick)
        {
            session.Send(PartyPacket.DungeonHelperCooldown(session.Player.DungeonHelperAccessTime - session.ClientTick));
            return;
        }

        Party party = session.Player.Party;

        if (party is null)
        {
            party = new(session.Player);
            GameServer.PartyManager.AddParty(party);

            session.Send(PartyPacket.Create(party, false));
            session.Send(PartyPacket.PartyHelp(dungeonId));
            MapleServer.BroadcastPacketAll(DungeonHelperPacket.BroadcastAssist(party, dungeonId));
            return;
        }

        session.Player.DungeonHelperAccessTime = session.ClientTick + 30000; // 30 second cooldown

        party.BroadcastPacketParty(PartyPacket.PartyHelp(dungeonId));
        MapleServer.BroadcastPacketAll(DungeonHelperPacket.BroadcastAssist(party, dungeonId));
    }
コード例 #2
0
    private static void SetEnchantStats(GameSession session, ItemEnchant itemEnchantStats, Item item)
    {
        Dictionary <StatAttribute, ItemStat> statDiff = GetEnchantStatDiff(item.Stats.Enchants, itemEnchantStats.Stats);

        foreach (ItemStat stat in itemEnchantStats.Stats.Values)
        {
            if (!item.Stats.Enchants.ContainsKey(stat.ItemAttribute))
            {
                item.Stats.Enchants[stat.ItemAttribute] = new BasicStat(stat.ItemAttribute, stat.Rate, StatAttributeType.Rate);
                continue;
            }
            item.Stats.Enchants[stat.ItemAttribute].Flat = stat.Flat;
            item.Stats.Enchants[stat.ItemAttribute].Rate = stat.Rate;
        }
        item.EnchantLevel++;
        item.EnchantExp = 0;
        item.Charges   -= itemEnchantStats.Rates.ChargesAdded;
        if (item.EnchantLevel > 11)
        {
            string message = $"3,{item.Uid},{ChatLinkType.Enchant},{session.Player.Name}"; //unk what 3 is
            MapleServer.BroadcastPacketAll(ItemLinkPacket.SendLinkItem(new()
            {
                item
            }));
            MapleServer.BroadcastPacketAll(ChatPacket.Send(session.Player, message, ChatType.ItemEnchant));
        }

        session.Send(ItemEnchantPacket.EnchantSuccess(item, statDiff.Values.ToList()));
        //TODO: If item is equipped, update stats
    }
コード例 #3
0
        async Task Initialize()
        {
            Console.WriteLine("Initialize hardware...");

            onboardLed = new RgbPwmLed(device: Device,
                                       redPwmPin: Device.Pins.OnboardLedRed,
                                       greenPwmPin: Device.Pins.OnboardLedGreen,
                                       bluePwmPin: Device.Pins.OnboardLedBlue,
                                       3.3f, 3.3f, 3.3f);
            onboardLed.SetColor(Color.Red);

            // initialize the wifi adpater
            if (!Device.InitWiFiAdapter().Result)
            {
                throw new Exception("Could not initialize the WiFi adapter.");
            }

            // connnect to the wifi network.
            Console.WriteLine($"Connecting to WiFi Network {Secrets.WIFI_NAME}");
            var connectionResult = await Device.WiFiAdapter.Connect(Secrets.WIFI_NAME, Secrets.WIFI_PASSWORD);

            if (connectionResult.ConnectionStatus != ConnectionStatus.Success)
            {
                throw new Exception($"Cannot connect to network: {connectionResult.ConnectionStatus}");
            }
            Console.WriteLine($"Connected. IP: {Device.WiFiAdapter.IpAddress}");

            // create our maple web server
            mapleServer = new MapleServer(Device.WiFiAdapter.IpAddress, 5417, true);
            mapleServer.Start();

            onboardLed.SetColor(Color.Green);
        }
コード例 #4
0
    public override void Handle(LoginSession session, PacketReader packet)
    {
        LoginMode mode     = (LoginMode)packet.ReadByte();
        string    username = packet.ReadUnicodeString();
        string    password = packet.ReadUnicodeString();

        if (string.IsNullOrEmpty(username))
        {
            session.Send(LoginResultPacket.SendLoginMode(Packets.LoginMode.IncorrectId));
            return;
        }

        Account account;

        if (DatabaseManager.Accounts.AccountExists(username.ToLower()))
        {
            if (!DatabaseManager.Accounts.Authenticate(username, password, out account))
            {
                session.Send(LoginResultPacket.SendLoginMode(Packets.LoginMode.IncorrectPassword));
                return;
            }

            Session loggedInAccount = MapleServer.GetSessions(MapleServer.GetLoginServer(), MapleServer.GetGameServer()).FirstOrDefault(p => p switch
            {
                LoginSession s => s.AccountId == account.Id,
                GameSession s => s.Player?.AccountId == account.Id,
                _ => false
            });
コード例 #5
0
    public void Dispose()
    {
        if (Disposed)
        {
            return;
        }

        if (this is LoginSession loginSession)
        {
            MapleServer.GetLoginServer().RemoveSession(loginSession);
        }

        if (this is GameSession gameSession)
        {
            MapleServer.GetGameServer().RemoveSession(gameSession);
        }

        Disposed = true;
        Complete();
        Thread.Join(STOP_TIMEOUT);

        CloseClient();

#if DEBUG
        GC.SuppressFinalize(this);
#endif
    }
コード例 #6
0
        public void Initialize()
        {
            bool goodToGo = false;

            try
            {
                goodToGo = InitializeNetwork();
            }
            catch (Exception e)
            {
                Debug.Print(e.Message);
            }

            if (goodToGo)
            {
                Debug.Print("Network done.");

                //Setup local time of the card
                Utility.SetLocalTime(NTPTime(NTP_POOL_URL, NTP_OFFSET));
                Debug.Print("Local time was set. Current local time is " + DateTime.Now);

                //Setup initial time variables
                MachineRunningSince = DateTime.Now;

                MachineState = CoffeeMachineState.Standby;
                TurnOffMode  = TurnOffMode.Automatic;

                // start web server
                MapleServer server = new MapleServer();
                server.Start();
            }
        }
コード例 #7
0
        public void Run()
        {
            this.IsRunning = true;
            bool goodToGo = false;

            try {
                goodToGo = InitializeNetwork();
            } catch (Exception e) {
                Debug.Print(e.Message);
            }

            if (goodToGo)
            {
                MakeWebRequest("http://google.com");

                //
                Debug.Print("Network done.");

                // set initial state
                Ports.ONBOARD_LED.Write(false);
                Ports.GPIO_PIN_D1.Write(false);

                // start web server
                MapleServer server = new MapleServer();
                server.Start();
            }

            //this.IsRunning = false;
        }
コード例 #8
0
        async Task Initialize()
        {
            Console.WriteLine("Initialize hardware...");

            // initialize the wifi adpater
            if (!Device.InitWiFiAdapter().Result)
            {
                throw new Exception("Could not initialize the WiFi adapter.");
            }

            // connnect to the wifi network.
            Console.WriteLine($"Connecting to WiFi Network {Secrets.WIFI_NAME}");
            var connectionResult = await Device.WiFiAdapter.Connect(Secrets.WIFI_NAME, Secrets.WIFI_PASSWORD);

            if (connectionResult.ConnectionStatus != ConnectionStatus.Success)
            {
                throw new Exception($"Cannot connect to network: {connectionResult.ConnectionStatus}");
            }
            Console.WriteLine($"Connected. IP: {Device.WiFiAdapter.IpAddress}");

            // create our maple web server
            server = new MapleServer(
                Device.WiFiAdapter.IpAddress,
                advertise: true,
                processMode: RequestProcessMode.Parallel
                );

            Console.WriteLine("Finished initialization.");
        }
コード例 #9
0
        async Task Initialize()
        {
            var onboardLed = new RgbPwmLed(
                device: Device,
                redPwmPin: Device.Pins.OnboardLedRed,
                greenPwmPin: Device.Pins.OnboardLedGreen,
                bluePwmPin: Device.Pins.OnboardLedBlue);

            onboardLed.SetColor(Color.Red);

            DisplayController.Current.Initialize();
            displayController = DisplayController.Current;
            displayController.ShowSplashScreen();

            var connectionResult = await Device.WiFiAdapter.Connect(Secrets.WIFI_NAME, Secrets.WIFI_PASSWORD);

            if (connectionResult.ConnectionStatus != ConnectionStatus.Success)
            {
                throw new Exception($"Cannot connect to network: {connectionResult.ConnectionStatus}");
            }

            mapleServer = new MapleServer(
                Device.WiFiAdapter.IpAddress, 5417, true
                );

            onboardLed.SetColor(Color.Green);
        }
コード例 #10
0
        public static void Process(GameSession session, string command)
        {
            string[] args = command.ToLower().Split(" ", 2);
            switch (args[0])
            {
            case "item":
                ProcessItemCommand(session, args.Length > 1 ? args[1] : "");
                break;

            case "npc":
                ProcessNpcCommand(session, args.Length > 1 ? args[1] : "");
                break;

            case "map":
                ProcessMapCommand(session, args.Length > 1 ? args[1] : "");
                break;

            case "coord":
                session.SendNotice(session.FieldPlayer.Coord.ToString());
                break;

            case "battleof":
                session.Send(UserBattlePacket.UserBattle(session.FieldPlayer, false));
                break;

            case "notice":
                if (args.Length <= 1)
                {
                    break;
                }
                MapleServer.BroadcastPacketAll(NoticePacket.Notice(args[1]));
                break;
            }
        }
コード例 #11
0
        private static void Initializer_NetworkConnected(object sender, EventArgs e)
        {
            var mapleServer = new MapleServer();

            mapleServer.Start();

            Debug.Print("Maple started");
        }
コード例 #12
0
        protected void InitializeWebServer()
        {
            var handler = new RequestHandler();

            handler.GetPlantHumidity += OnGetPlantHumidity;

            _server = new MapleServer();
            _server.AddHandler(handler);
        }
コード例 #13
0
        public async Task Start()
        {
            MapleServer.BroadcastPacketAll(GlobalPortalPacket.Notice(this));

            await Task.Delay(60000);

            MapleServer.BroadcastPacketAll(GlobalPortalPacket.Clear(this));
            GameServer.GlobalEventManager.RemoveEvent(this);
        }
コード例 #14
0
        protected void InitializeWebServer()
        {
            var handler = new RequestHandler();

            handler.RotateTo   += (s, e) => { _servoController.RotateTo(((ServoEventArgs)e).Angle); };;
            handler.StopSweep  += (s, e) => { _servoController.StopSweep(); };
            handler.StartSweep += (s, e) => { _servoController.StartSweep(); };

            _server = new MapleServer();
            _server.AddHandler(handler);
        }
コード例 #15
0
ファイル: App.cs プロジェクト: gkhalley/SSwHost
        protected void InitializePowerServer()
        {
            var handler = new RequestHandler();

            handler.TurnOn             += (s, e) => { _receptacleController.TurnOn1(); };
            handler.TurnOff            += (s, e) => { _receptacleController.TurnOff1(); };
            handler.StartRunningColors += (s, e) => { _receptacleController.StartRunningColors(); };

            _server = new MapleServer();
            _server.AddHandler(handler);
        }
コード例 #16
0
        public static void Main()
        {
            MapleServer server = new MapleServer();

            Initializer.NetworkConnected += (s, e) =>
            {
                // start maple server and send name broadcast address
                server.Start("assimilate server", Initializer.CurrentNetworkInterface.IPAddress);
            };
            Initializer.InitializeNetwork();
            Thread.Sleep(Timeout.Infinite);
        }
コード例 #17
0
        public override void Handle(GameSession session, PacketReader packet)
        {
            ChatType type      = (ChatType)packet.ReadInt();
            string   message   = packet.ReadUnicodeString();
            string   recipient = packet.ReadUnicodeString();

            packet.ReadLong();

            GameCommandActions.Process(session, message);

            switch (type)
            {
            case ChatType.Channel:     //TODO: Send to all players on current channel
                break;

            case ChatType.Super:
            case ChatType.World:
                //Send to all players online
                MapleServer.BroadcastPacketAll(ChatPacket.Send(session.Player, message, type));
                break;

            case ChatType.GuildNotice:
            case ChatType.Guild:
                //TODO: Send to all in guild
                break;

            case ChatType.Party:
                Party party = GameServer.PartyManager.GetPartyById(session.Player.PartyId);
                if (party != null)
                {
                    party.BroadcastPacketParty(ChatPacket.Send(session.Player, message, type));
                }
                break;

            case ChatType.WhisperTo:
                Player recipientPlayer = GameServer.Storage.GetPlayerByName(recipient);

                if (recipientPlayer != null)
                {
                    recipientPlayer.Session.Send(ChatPacket.Send(session.Player, message, ChatType.WhisperFrom));
                    session.Send(ChatPacket.Send(recipientPlayer, message, ChatType.WhisperTo));
                }
                else
                {
                    session.Send(ChatPacket.Send(session.Player, "Player not found or they are not online.", ChatType.WhisperFail));
                }
                break;

            default:
                session.FieldManager.SendChat(session.Player, message, type);
                break;
            }
        }
コード例 #18
0
ファイル: App.cs プロジェクト: rlbandeira/Netduino_Samples
        protected void InitializeWebServer()
        {
            // configure our web server
            RequestHandler handler = new RequestHandler();

            handler.TurnOff   += Handler_TurnOff;
            handler.TurnOn    += Handler_TurnOn;
            handler.GetStatus += Handler_GetStatus;

            _server = new MapleServer();
            _server.AddHandler(handler);
        }
コード例 #19
0
        void InitializeWebServer()
        {
            var handler = new RequestHandler();

            handler.Stop         += OnStop;
            handler.TurnLeft     += OnTurnLeft;
            handler.TurnRight    += OnTurnRight;
            handler.MoveForward  += OnMoveForward;
            handler.MoveBackward += OnMoveBackward;

            mapleServer = new MapleServer();
            mapleServer.AddHandler(handler);
        }
コード例 #20
0
        protected void InitializeWebServer()
        {
            var handler = new RequestHandler();

            handler.TurnOn             += (s, e) => { _rgbController.TurnOn(); };
            handler.TurnOff            += (s, e) => { _rgbController.TurnOff(); };
            handler.StartBlink         += (s, e) => { _rgbController.StartBlink(); };
            handler.StartPulse         += (s, e) => { _rgbController.StartPulse(); };
            handler.StartRunningColors += (s, e) => { _rgbController.StartRunningColors(); };

            _server = new MapleServer();
            _server.AddHandler(handler);
        }
コード例 #21
0
    public override void Execute(GameCommandTrigger trigger)
    {
        string[] args = trigger.Get <string[]>("message");

        if (args == null || args.Length <= 1)
        {
            trigger.Session.SendNotice("No message provided.");
            return;
        }

        string message = CommandHelpers.BuildString(args, trigger.Session.Player.Name);

        MapleServer.BroadcastPacketAll(NoticePacket.Notice(message));
    }
コード例 #22
0
        async Task Initialize()
        {
            LedController.Current.Initialize();

            var connectionResult = await Device.WiFiAdapter.Connect(Secrets.WIFI_NAME, Secrets.WIFI_PASSWORD);

            if (connectionResult.ConnectionStatus != ConnectionStatus.Success)
            {
                throw new Exception($"Cannot connect to network: {connectionResult.ConnectionStatus}");
            }

            mapleServer = new MapleServer(
                Device.WiFiAdapter.IpAddress, 5417, true
                );
        }
コード例 #23
0
        protected void InitializeWebServer()
        {
            var handler = new RequestHandler();

            handler.Connect += (s, e) =>
            {
                _playerTeamA.Salute();
                _playerTeamB.Salute();
            };

            handler.KickA += (s, e) => { _playerTeamA.Kick(); };
            handler.KickB += (s, e) => { _playerTeamB.Kick(); };

            _server = new MapleServer();
            _server.AddHandler(handler);
        }
コード例 #24
0
        private static void HandleWorldChat(GameSession session, string message, ChatType type)
        {
            Item voucher = session.Player.Inventory.Items.Values.FirstOrDefault(x => x.Tag == "FreeWorldChatCoupon");

            if (voucher != null)
            {
                session.Send(NoticePacket.Notice(SystemNotice.UsedWorldChatVoucher, NoticeType.ChatAndFastText));
                InventoryController.Consume(session, voucher.Uid, 1);
            }
            else if (!session.Player.Wallet.RemoveMerets(30))
            {
                session.Send(ChatPacket.Error(session.Player, SystemNotice.InsufficientMerets, ChatType.NoticeAlert));
                return;
            }

            MapleServer.BroadcastPacketAll(ChatPacket.Send(session.Player, message, type));
        }
コード例 #25
0
ファイル: Program.cs プロジェクト: ishotjr/IoRCT
        public static void Main()
        {
            // TODO: can't seem to get this example to work regardless of using directives/references - so going w/ this hack for now!
            //while (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
            while (Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IPAddress == "0.0.0.0")
            {
                Debug.Print("Waiting for network...");
                Thread.Sleep(10);
            }
            ;
            Debug.Print("IP: " + Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IPAddress);

            remoteController = new DS1803Controller();

            var handler = new RequestHandler();

            // TODO: sweepPot(byte pot, int from, int to)
            //handler.SweepPot += (s, e) => { remoteController.sweepPot(); };

            handler.SweepSteeringPotCenterToRight += (s, e) => { remoteController.sweepSteeringPotCenterToRight(); };
            handler.SweepSteeringPotCenterToLeft  += (s, e) => { remoteController.sweepSteeringPotCenterToLeft(); };
            handler.SweepSteeringPotRightToLeft   += (s, e) => { remoteController.sweepSteeringPotRightToLeft(); };
            handler.SweepSteeringPotLeftToRight   += (s, e) => { remoteController.sweepSteeringPotLeftToRight(); };
            handler.SweepSteeringPotRightToCenter += (s, e) => { remoteController.sweepSteeringPotRightToCenter(); };
            handler.SweepSteeringPotLeftToCenter  += (s, e) => { remoteController.sweepSteeringPotLeftToCenter(); };
            handler.SweepSteeringPotTest          += (s, e) => { remoteController.sweepSteeringPotTest(); };

            handler.SweepThrottlePotCenterToMaxForward += (s, e) => { remoteController.sweepThrottlePotCenterToMaxForward(); };
            handler.SweepThrottlePotMaxForwardToCenter += (s, e) => { remoteController.sweepThrottlePotMaxForwardToCenter(); };
            handler.SweepThrottlePotCenterToMaxReverse += (s, e) => { remoteController.sweepThrottlePotCenterToMaxReverse(); };
            handler.SweepThrottlePotMaxReverseToCenter += (s, e) => { remoteController.sweepThrottlePotMaxReverseToCenter(); };
            handler.SweepThrottlePotCenterToMidForward += (s, e) => { remoteController.sweepThrottlePotCenterToMidForward(); };
            handler.SweepThrottlePotMidForwardToCenter += (s, e) => { remoteController.sweepThrottlePotMidForwardToCenter(); };
            handler.SweepThrottlePotCenterToMidReverse += (s, e) => { remoteController.sweepThrottlePotCenterToMidReverse(); };
            handler.SweepThrottlePotMidReverseToCenter += (s, e) => { remoteController.sweepThrottlePotMidReverseToCenter(); };

            handler.CircleRight += (s, e) => { remoteController.circleRight(); };
            handler.CircleLeft  += (s, e) => { remoteController.circleLeft(); };

            handler.Stop += (s, e) => { remoteController.stop(); };

            maple = new MapleServer();
            maple.AddHandler(handler);
            maple.Start();
            Debug.Print("Maple serving on http://" + Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].IPAddress);
        }
コード例 #26
0
        public static void Main(string[] args)
        {
            MapleServer server = new MapleServer(
                IPAddress.Parse("127.0.0.1"),
                // OR:
                //GetLocalIP(),
                advertise: true,
                processMode: RequestProcessMode.Parallel
                );

            server.Start();

            Console.WriteLine($"Server is listening on {server.IPAddress}");
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();

            server.Stop();

            Console.WriteLine("Goodbye.");
        }
コード例 #27
0
        async Task InitializeAsync()
        {
            ServoController.Instance.InitializeServo();

            if (!Device.InitWiFiAdapter().Result)
            {
                throw new Exception("Could not initialize the WiFi adapter.");
            }

            var connectionResult = await Device.WiFiAdapter.Connect("SSID", "password");

            if (connectionResult.ConnectionStatus != ConnectionStatus.Success)
            {
                throw new Exception($"Cannot connect to network: {connectionResult.ConnectionStatus}");
            }

            server = new MapleServer(
                Device.WiFiAdapter.IpAddress, 5417
                );
        }
コード例 #28
0
    private static void HandleGetHelp(GameSession session, PacketReader packet)
    {
        int dungeonId = packet.ReadInt();

        if (session.Player.Party == null)
        {
            Party newParty = new(session.Player);
            GameServer.PartyManager.AddParty(newParty);

            session.Send(PartyPacket.Create(newParty, false));
            session.Send(PartyPacket.PartyHelp(dungeonId));
            MapleServer.BroadcastPacketAll(DungeonHelperPacket.BroadcastAssist(newParty, dungeonId));

            return;
        }

        Party party = session.Player.Party;

        party.BroadcastPacketParty(PartyPacket.PartyHelp(dungeonId));
        MapleServer.BroadcastPacketAll(DungeonHelperPacket.BroadcastAssist(party, dungeonId));
    }
コード例 #29
0
        private static void HandleSuperChat(GameSession session, string message, ChatType type)
        {
            if (session.Player.SuperChat == 0)
            {
                return;
            }

            Item superChatItem = session.Player.Inventory.Items.Values.FirstOrDefault(x => x.Function.Id == session.Player.SuperChat);

            if (superChatItem == null)
            {
                session.Player.SuperChat = 0;
                session.Send(SuperChatPacket.Deselect(session.FieldPlayer));
                session.Send(ChatPacket.Error(session.Player, SystemNotice.InsufficientSuperChatThemes, ChatType.NoticeAlert));
                return;
            }

            MapleServer.BroadcastPacketAll(ChatPacket.Send(session.Player, message, type));
            InventoryController.Consume(session, superChatItem.Uid, 1);
            session.Send(SuperChatPacket.Deselect(session.FieldPlayer));
            session.Player.SuperChat = 0;
        }
コード例 #30
0
        /// <summary>
        /// Get the app running
        /// </summary>
        internal void Run()
        {
            bool isConnected = false;

            try
            {
                // attempt to connect
                isConnected = InitNetwork();
            }
            catch (Exception ex)
            {
                Debug.Print(ex.Message);
            }

            // if it is connected, take the other initialize actions
            if (isConnected)
            {
                // start REST API server
                MapleServer server = new MapleServer();
                server.AddHandler(new RequestHandler());
                server.Start(ServerName, Initializer.CurrentNetworkInterface.IPAddress);
            }
        }