Exemplo n.º 1
0
 public static void OnMapReloaded(IMap map)
 {
     for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) {
         if (!map.IsNpcSlotEmpty(i)) {
             map.ActiveNpc[i].CalculateOriginalStats();
             RefreshCharacterTraits(map.ActiveNpc[i], map, null);
         }
     }
 }
Exemplo n.º 2
0
 public static void UnlockRoom(Client client, IMap imap)
 {
     int remainingEnemies = 0;
     for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) {
         if (!imap.IsNpcSlotEmpty(i)) remainingEnemies++;
     }
     if (remainingEnemies <= 1) {
         if (imap.MaxX == 19) {
             for (int i = 8; i <= 11; i++) {
                 if (imap.Tile[i,1].Type == Enums.TileType.Key) {
                     imap.SetTile(i, 1, 0, 0, 1);
                     imap.SetAttribute(i, 1, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                     Messenger.SendTile(i, 1, imap);
                 }
                 if (imap.Tile[i,13].Type == Enums.TileType.Key) {
                     imap.SetTile(i, 13, 0, 0, 1);
                     imap.SetAttribute(i, 13, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                     Messenger.SendTile(i, 13, imap);
                 }
             }
             for (int i = 6; i <= 8; i++) {
                 if (imap.Tile[1,i].Type == Enums.TileType.Key) {
                     imap.SetTile(1, i, 0, 0, 1);
                     imap.SetAttribute(1, i, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                     Messenger.SendTile(1, i, imap);
                 }
                 if (imap.Tile[18,i].Type == Enums.TileType.Key) {
                     imap.SetTile(18,i, 0, 0, 1);
                     imap.SetAttribute(18, i, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                     Messenger.SendTile(18, i, imap);
                 }
             }
         } else if (imap.MaxX == 46) {
             for (int i = 22; i <= 24; i++) {
                 if (imap.Tile[i,1].Type == Enums.TileType.Key) {
                     imap.SetTile(i, 1, 0, 0, 1);
                     imap.SetAttribute(i, 1, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                     Messenger.SendTile(i, 1, imap);
                 }
                 if (imap.Tile[i,33].Type == Enums.TileType.Key) {
                     imap.SetTile(i, 33, 0, 0, 1);
                     imap.SetAttribute(i, 33, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                     Messenger.SendTile(i, 33, imap);
                 }
             }
             for (int i = 16; i <= 18; i++) {
                 if (imap.Tile[1,i].Type == Enums.TileType.Key) {
                     imap.SetTile(1, i, 0, 0, 1);
                     imap.SetAttribute(1, i, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                     Messenger.SendTile(1, i, imap);
                 }
                 if (imap.Tile[45,i].Type == Enums.TileType.Key) {
                     imap.SetTile(45, i, 0, 0, 1);
                     imap.SetAttribute(45, i, Enums.TileType.Walkable, 0, 0, 0, "", "", "");
                     Messenger.SendTile(45, i, imap);
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
        public static void OnMapLoad(Client client, IMap oldMap, IMap map, bool loggedIn)
        {
            // Maintenance mode (external program is scheduled to run at this time)
            TimeSpan start = new TimeSpan(5, 49, 0); //12:49 AM EST
            TimeSpan end = new TimeSpan(5, 51, 0); //12:51 AM EST
            TimeSpan now = DateTime.Now.TimeOfDay;

            if ((now > start) && (now < end)) {
                if (MaintenanceRestart == false) {
                    MaintenanceRestart = true;
                    Messenger.AdminMsg("[Staff] Automated maintenance process starting...", Text.Red);
                    RestartServer();
                }
            }

            start = new TimeSpan(6, 0, 0); //6 AM
            end = new TimeSpan(6, 10, 0); //6:10 AM (it takes about 10 minutes to run)
            now = DateTime.Now.TimeOfDay;

            if ((now > start) && (now < end)) {
               Server.Globals.ServerStatus = "The server is currently in maintenance mode, which may result in slowdowns.";
            } else {
                if (Server.Globals.ServerStatus == "The server is currently in maintenance mode, which may result in slowdowns.") {
                    Server.Globals.ServerStatus = "";
                }
            }

            //restore stats (temporary workaround)
            if (map.MapID == MapManager.GenerateMapID(Server.Settings.Crossroads)) {
                for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) {
                    if (client.Player.Team[i] != null) {
                        if (client.Player.Team[i].InTempMode) {

                            client.Player.RestoreRecruitStats(i);

                        }

                    }
                }
            }

            //remove from party
            if (oldMap != null && oldMap.Moral == Enums.MapMoral.None && map.Moral != Enums.MapMoral.None && exPlayer.Get(client).FirstMapLoaded == true) {
                if (client.Player.PartyID != null) {
                    Party party = PartyManager.FindPlayerParty(client);
                    PartyManager.RemoveFromParty(party, client);
                }
                if (client.Player.Dead) {
                        ReviveCharacter(client.Player.GetActiveRecruit(), client.Player.Map, false, null);
                    }
            }

            //if (!loggedIn) {
            //	if (client.Player.PartyID != null) {
            //        Party party = PartyManager.FindPlayerParty(client);
            //        bool remove = true;
            //        foreach (Client member in party.GetOnlineMemberClients()) {
            //        	if (member.Player.Map == client.Player.Map) {
            //        		remove = false;
            //        	}
            //        }
            //        if (remove) {
            //        	PartyManager.RemoveFromParty(party, client);
            //        }
            //    }
            //}

            //restore hunger
            if (!map.HungerEnabled) {
                for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) {
                    if (client.Player.Team[i] != null) {
                        if (client.Player.Team[i].MaxBelly > 100) {

                            client.Player.Team[i].MaxBelly = 100;

                        }
                        client.Player.Team[i].RestoreBelly();

                    }
                }
            }

            if (client.Player.LoggedIn) {
                AddExclusives(client, map, null);
            }

            int heldItemNum = -1;
            if (client.Player.GetActiveRecruit().HeldItemSlot > -1) {
                heldItemNum = client.Player.GetActiveRecruit().HeldItem.Num;
            }
            //if (client.Player.Helmet > -1) {
            //    helmet = client.Player.Helmet;
            //}
            //TODO: restructure for party items
            switch (heldItemNum) {
                //case 66: {//x-ray specs
                //        Messenger.PlayerMsg(client, "Pokémon in this area:", Text.Yellow);
                        //substitute the 14 for max NPCs
                //        List<int> Npcs = new List<int>();
                //        for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) {
                //            if (Npcs.Contains(map.Npc[i].NpcNum) == false && map.Npc[i].NpcNum > 0) {
                //                Npcs.Add(map.Npc[i].NpcNum);
                //                Messenger.PlayerMsg(client, "Lv." + map.ActiveNpc[i].Level + " " + NpcManagerBase.Npcs[map.Npc[i].NpcNum].Name, Text.Yellow);
                //            }
                //        }
                        //} else {

                        //}

                        //if (Npcs.Count == 0) {
                        //    Messenger.PlayerMsg(client, "(None)", Text.Yellow);
                        //}

                    //}
                    //break;
                case 544: {//gaggle specs
                        for (int j = 0; j < 14; j++) {
                            map.ActiveNpc[j].Target = client;
                        }
                    }
                    break;
            }

            //Castform stuff
            if (client.Player.LoggedIn) {
                //exPlayer.Get(client).TurnsTaken = 0;
            }

            //for gen5 egg
            //bool hasTriggerEvent = false;
            //for (int i = 0; i < client.Player.TriggerEvents.Count; i++) {
            //    if (client.Player.TriggerEvents[i].Trigger == TriggerEventTrigger.StepCounter &&
            //        client.Player.TriggerEvents[i].ID == "MysteryEggStepCounter") {
            //        hasTriggerEvent = true;
            //        break;
            //    }
            //}

            //if (client.Player.HasItem(131) > 0 && !hasTriggerEvent) {
            //    StepCounterTriggerEvent triggerEvent = new StepCounterTriggerEvent("MysteryEggStepCounter", TriggerEventAction.RunScript, 2, true, client, 200);
            //    client.Player.AddTriggerEvent(triggerEvent);
            //Messenger.PlayerMsg(client, "1", Text.BrightRed);
            //}

            //CTF issues
            if (ActiveCTF != null &&
                map.MapID != MapManager.GenerateMapID(CTF.REDMAP) &&
                map.MapID != MapManager.GenerateMapID(CTF.BLUEMAP) &&
                map.MapID != MapManager.GenerateMapID(CTF.HUBMAP)) {

                ActiveCTF.RemoveFromGame(client);
            }

            if (client.Player.CharID == Auction.AuctionMaster && client.Player.MapID != Auction.AUCTION_MAP) {
                //Auction.EndAuction(client);
                Auction.State = Auction.AuctionState.NotStarted;
                Auction.AuctionMaster = null;
            }

            // Snowball game cleanup
            if (exPlayer.Get(client).SnowballGameInstance != null) {
                SnowballGame snowballGame = exPlayer.Get(client).SnowballGameInstance;
                if (client.Player.Map != snowballGame.ArenaMap
                    && client.Player.MapID != SnowballGame.WaitingRoomMap) {

                    snowballGame.RemoveFromGame(client);
                }
            }

            if (!loggedIn) {

                if (client.Player.CurrentChapter == null && BossBattles.IsBossBattleMap(client)) {
                    bool empty = true;
                    for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) {
                        if (!map.IsNpcSlotEmpty(i)) {
                            empty = false;
                            break;
                        }
                    }
                    if (empty) {
                        // TODO: You can completely skip the boss battle if you relog while the intro story
                        // 		 is playing and no NPC has been spawned yet. Disabled until a workaround is
                        //		 made.
                        // --Enabled until workaround is made.  The only thing achieved from getting around a boss is dungeon completion.
                        BossBattles.RunBossBattleCleanup(client, client.Player.Map.Name);
                    }
                }
            }
        }