Ejemplo n.º 1
0
        public static void Initialize()
        {
            nextPlayerGuid = CharacterTable.getNextGuid();
            nextPlayerGuid++;
            nextItemGuid = InventoryItemTable.getNextGuid();
            nextItemGuid++;
            nextGuildId = GuildTable.getNextGuid();
            nextGuildId++;
            nextMountId = MountTable.getNextGuid();
            nextMountId++;
            nextSpeakingId = SpeakingTable.getNextGuid();
            nextSpeakingId++;
            SpellTable.Load();
            ExpFloorTable.Load();
            MonsterTable.Load();
            ItemTemplateTable.Load();
            ItemTemplateTable.LoadItemActions();
            ItemSetTable.Load();
            DropTable.Load();
            TitleTable.Load();
            IObjectTemplateTable.Load();
            AreaTable.Load();
            AreaSubTable.Load();
            MapTable.Load();
            MapTable.LoadActions();
            CellActionTable.Load();
            MobGroupFixTable.Load();
            BreedTable.Load();
            NpcTemplateTable.Load();
            NpcTemplateTable.LoadPlaces();
            NpcQuestionTable.Load();
            NpcReplyTable.Load();
            ShopNpcTable.Initialize();
            GuildTable.Load();
            CharactersGuildTable.Load();
            TaxCollectorTable.Load();
            PrismeTable.Load();
            BidHouseTable.Load();
            BidHouseTable.LoadItems();
            MountParkTable.Load();
            StaticMountTable.Load();
            MountTable.Load();//TODO Dynamic load of Character mount
            ZaapTable.Load();
            ZaapiTable.Load();

            var Timer = new System.Timers.Timer(1000 * 60 * 25);

            Timer.Elapsed += delegate(object sender, ElapsedEventArgs e)
            {
                Save();
            };
            Timer.Start();
        }
Ejemplo n.º 2
0
 private static void ProcessConquestGepositionRequest(WorldClient Client, string Packet)
 {
     if (Packet.Length < 3)
     {
         return;
     }
     switch (Packet[2])
     {
     case 'J':
         Client.Send(new ConquestGepositionInfosMessage(PrismeTable.SerializePrismGeposition(Client.GetCharacter().Alignement)));
         break;
     }
 }
Ejemplo n.º 3
0
 public void onPrismLoaded()
 {
     if (PrismeTable.getPrism(Prisme) == null)
     {
         Alignement = 0;
         Prisme     = 0;
     }
     if (Alignement == 1)
     {
         Bontas += 1;
     }
     else if (Alignement == 2)
     {
         Brakmars += 1;
     }
 }
Ejemplo n.º 4
0
        public String PrismHelper()
        {
            Prisme prism = PrismeTable.getPrism(myMap.subArea.Prisme);

            if (prism == null)
            {
                return("-3");
            }
            else if (prism.inFight == 0)
            {
                return("0;" + prism.TimeTurn + ";" + (int)TurnTimeEnum.PRISME + ";7");
            }
            else
            {
                return(prism.inFight + "");
            }
        }
Ejemplo n.º 5
0
        private static void ProcessConquestDefenseRequest(WorldClient Client, string Packet)
        {
            switch (Packet[2])
            {
            case 'J':
                var Prism = PrismeTable.getPrism(Client.Character.myMap.subArea.Prisme);
                if (Prism != null)
                {
                    Prisme.AnalyzeAttack(Client.Character);
                    Prisme.AnalyzeDefense(Client.Character);
                }
                Client.Send(new ConquestInfoJoinPrismMessage(Client.Character.PrismHelper()));
                break;

            case 'V':
                Client.Send(new ConquestClosePanelMessage());
                break;
            }
        }
Ejemplo n.º 6
0
        private static void ProcessConquestJoinDefenseRequest(WorldClient Client, string Packet)
        {
            if (Packet.Length < 2)
            {
                Client.Send(new BasicNoOperationMessage());
                return;
            }
            switch (Packet[2])
            {
            case 'J':
                long prismID = Client.Character.myMap.subArea.Prisme;
                var  Prism   = PrismeTable.getPrism(prismID);
                if (Prism == null || Prism.Alignement != Client.Character.Alignement || Client.GetFight() != null || Prism.CurrentFight == null)
                {
                    Client.Send(new BasicNoOperationMessage());
                    return;
                }

                if (Client.GetFight() == null && !Client.GetCharacter().isAaway)
                {
                    if (Client.GetCharacter().myMap.Id != Prism.Mapid)
                    {
                        Client.GetCharacter().isJoiningTaxFight = true;
                        Client.GetCharacter().OldPosition       = new Couple <Map, int>(Client.Character.myMap, Client.Character.CellId);
                        Client.GetCharacter().Teleport(Prism.Map, Prism.CellId);
                        try
                        {
                            System.Threading.Thread.Sleep(700);
                        }
                        catch (Exception e)
                        {
                            Logger.Error(e);
                        }
                    }

                    if (Client.GetCharacter().HasRestriction(RestrictionEnum.RESTRICTION_IS_TOMBESTONE))
                    {
                        Client.Send(new BasicNoOperationMessage());
                        return;
                    }

                    var Team = Prism.CurrentFight.GetTeam2();

                    if (Prism.CurrentFight.CanJoin(Team, Client.GetCharacter()))
                    {
                        var Fighter = new CharacterFighter(Prism.CurrentFight, Client);

                        var FightAction = new GameFight(Fighter, Prism.CurrentFight);

                        Client.AddGameAction(FightAction);

                        Prism.CurrentFight.JoinFightTeam(Fighter, Team, false, -1, false);
                    }
                }

                //AnalyseDefense
                var Packets = new List <PacketBase>();
                foreach (var Prisme in PrismeTable.Cache.Values.Where(x => x.Alignement == Client.Character.Alignement && (x.inFight == 0 || x.inFight == -2)))
                {
                    Packets.Add(new PrismInformationsDefenseMessage(Prisme.PrismDefenders(Prisme.ActorId, Prisme.CurrentFight)));
                }
                foreach (var packet in Packets)
                {
                    Network.WorldServer.GetChatController().getAlignementChannel(Client.Character.AlignmentType).Send(packet);
                }

                break;
            }
        }
Ejemplo n.º 7
0
        internal static void PlacePrisme(ActionModel actionModel, Player perso, Player target, int itemID, int cellID)
        {
            try
            {
                if (perso.CellId <= 0)
                {
                    return;
                }
                if (perso.Deshonor >= 1)
                {
                    perso.Send(new TextInformationMessage(TextInformationTypeEnum.ERREUR, 83));
                }
                if (perso.getGrade() < 3)
                {
                    perso.Send(new TextInformationMessage(TextInformationTypeEnum.ERREUR, 155));
                }
                if (perso.Alignement == 0 || perso.Alignement == 3)
                {
                    perso.Send(new TextInformationMessage(TextInformationTypeEnum.ERREUR, 34, "43"));
                    return;
                }
                if (!perso.showWings)
                {
                    perso.Send(new TextInformationMessage(TextInformationTypeEnum.ERREUR, 148));
                    return;
                }
                if (perso.myMap.FightCell == null || Regex.Split(perso.myMap.FightCell, "\\|").Length != 2)
                {
                    perso.Send(new TextInformationMessage(TextInformationTypeEnum.ERREUR, 146));
                    return;
                }
                if (perso.myMap.subArea.Alignement != 0 || !perso.myMap.subArea.CanConquest)
                {
                    perso.Send(new TextInformationMessage(TextInformationTypeEnum.ERREUR, 149));
                    return;
                }
                var Prisme = new Prisme()
                {
                    ActorId     = PrismeTable.getPrismeID(),
                    Alignement  = perso.Alignement,
                    Level       = 1,
                    Mapid       = perso.myMap.Id,
                    CellId      = perso.CellId,
                    Honor       = 0,
                    Area        = -1,
                    inFight     = -1,
                    Orientation = 1,
                };
                perso.myMap.subArea.setAlignement(perso.Alignement);
                perso.myMap.subArea.Prisme = Prisme.ActorId;

                Network.WorldServer.GetChatController().getAlignementChannel(AlignmentTypeEnum.ALIGNMENT_NEUTRAL).Send(new SubAreaAlignMessage(perso.myMap.subArea.ID + "|" + perso.Alignement + "|1"));
                if (perso.myMap.subArea.area.Alignement == 0)
                {
                    Network.WorldServer.GetChatController().getAlignementChannel(AlignmentTypeEnum.ALIGNMENT_NEUTRAL).Send(new AreaAlignMessage(perso.myMap.subArea.areaID + "|" + perso.Alignement));
                }

                Network.WorldServer.GetChatController().getAlignementChannel(AlignmentTypeEnum.ALIGNMENT_BONTARIAN).Send(new SubAreaAlignMessage(perso.myMap.subArea.ID + "|" + perso.Alignement + "|0"));
                if (perso.myMap.subArea.area.Alignement == 0)
                {
                    Network.WorldServer.GetChatController().getAlignementChannel(AlignmentTypeEnum.ALIGNMENT_BONTARIAN).Send(new AreaAlignMessage(perso.myMap.subArea.areaID + "|" + perso.Alignement));
                }

                Network.WorldServer.GetChatController().getAlignementChannel(AlignmentTypeEnum.ALIGNMENT_BRAKMARIAN).Send(new SubAreaAlignMessage(perso.myMap.subArea.ID + "|" + perso.Alignement + "|0"));
                if (perso.myMap.subArea.area.Alignement == 0)
                {
                    Network.WorldServer.GetChatController().getAlignementChannel(AlignmentTypeEnum.ALIGNMENT_BRAKMARIAN).Send(new AreaAlignMessage(perso.myMap.subArea.areaID + "|" + perso.Alignement));
                }

                if (perso.myMap.subArea.area.Alignement == 0)
                {
                    perso.myMap.subArea.area.Prisme     = Prisme.ActorId;
                    perso.myMap.subArea.area.Alignement = perso.Alignement;
                    Prisme.Area = perso.myMap.subArea.area.ID;
                }

                PrismeTable.Add(Prisme);

                perso.myMap.SpawnActor(Prisme);
                PrismeTable.DestroyPrismGepositionCache();
            }
            catch (Exception e)
            {
                Logger.Error(e);
            }
        }
Ejemplo n.º 8
0
        public override void OverridableEndFight(FightTeam Winners, FightTeam Loosers)
        {
            var WinnersFighter  = Winners.GetFighters().OfType <CharacterFighter>().ToList();
            var LoosersFighter  = Loosers.GetFighters().OfType <CharacterFighter>().ToList();
            var WinnersFighterP = Winners.GetFighters().OfType <PrismFighter>().ToList();
            var LoosersFighterP = Loosers.GetFighters().OfType <PrismFighter>().ToList();

            var WinnersTotalGrade = WinnersFighter.Sum(x => x.Character.getGrade());
            var WinnersTotalLevel = WinnersFighter.Sum(x => x.Level);

            WinnersTotalGrade += WinnersFighterP.Sum(x => x.Prisme.Level * 15 + 80);//Setting LEVEL PVP
            WinnersTotalLevel += WinnersFighterP.Sum(x => x.Level);

            var LoosersTotalGrade = LoosersFighter.Sum(x => x.Character.getGrade());
            var LoosersTotalLevel = LoosersFighter.Sum(x => x.Level);

            LoosersTotalGrade += LoosersFighterP.Sum(x => x.Prisme.Level * 15 + 80);
            LoosersTotalLevel += LoosersFighterP.Sum(x => x.Level);

            foreach (var Fighter in LoosersFighter)
            {
                int WinHonor = 0;
                if (Fighter.Character.AlignmentType != AlignmentTypeEnum.ALIGNMENT_NEUTRAL)
                {
                    WinHonor = Algo.CalculateAggressionHonor(Fighter, false, WinnersFighter.Count + WinnersFighterP.Count, WinnersTotalGrade, WinnersTotalLevel, LoosersTotalGrade, LoosersTotalLevel);
                    if (WinHonor > Fighter.Character.Honor)
                    {
                        WinHonor = Fighter.Character.Honor;
                    }
                    Fighter.Character.RemoveHonor(WinHonor);
                }


                if (Fighter.Character.GetClient() != null)
                {
                    Fighter.Character.GetClient().Send(new AccountStatsMessage(Fighter.Character));
                }


                this.myResult.AddResult(Fighter, false, WinHonor: -WinHonor);
            }

            var PhToWin = Algo.Random(150, 300);

            foreach (var Fighter in WinnersFighter)
            {
                var Drops = new Dictionary <int, int>();

                if (Fighter.Character.AlignmentType != AlignmentTypeEnum.ALIGNMENT_NEUTRAL)
                {
                    Fighter.Character.AddHonor(PhToWin);
                }

                this.myResult.AddResult(Fighter, true, WinHonor: PhToWin, WinItems: Drops);
            }

            foreach (var Fighter in LoosersFighterP)
            {
                int WinHonor = PhToWin;

                if (WinHonor > Fighter.Prisme.Honor)
                {
                    WinHonor = Fighter.Prisme.Honor;
                }
                Fighter.Prisme.AddHonor(-WinHonor);

                Network.WorldServer.GetChatController().getAlignementChannel(AlignmentTypeEnum.ALIGNMENT_NEUTRAL).Send(new SubAreaAlignMessage(Map.subArea.ID + "|0|1"));
                Network.WorldServer.GetChatController().getAlignementChannel((AlignmentTypeEnum)Prisme.Alignement).Send(new ConquestPrismDiedMessage(Prisme.Mapid + "|" + Prisme.Map.X + "|" + Prisme.Map.Y));

                foreach (var Key in Network.WorldServer.GetChatController().AlignChannels.Keys.Where(x => x != AlignmentTypeEnum.ALIGNMENT_NEUTRAL))
                {
                    Network.WorldServer.GetChatController().getAlignementChannel(Key).Send(new SubAreaAlignMessage(Map.subArea.ID + "|-1|0"));
                    Network.WorldServer.GetChatController().getAlignementChannel(Key).Send(new SubAreaAlignMessage(Map.subArea.ID + "|0|1"));
                    if (Prisme.Area == -1)
                    {
                        continue;
                    }
                    Network.WorldServer.GetChatController().getAlignementChannel(Key).Send(new AreaAlignMessage(Map.subArea.areaID + "|-1"));
                }
                if (Prisme.Area != -1)
                {
                    Map.subArea.area.Prisme = 0;
                    Map.subArea.area.setAlignement(0);
                }

                Map.subArea.Prisme = 0;
                Map.subArea.setAlignement(0);
                this.Map.DestroyActor((Fighter as PrismFighter).Prisme);
                PrismeTable.TryDeleteTax((Fighter as PrismFighter).Prisme);

                this.myResult.AddResult(Fighter, false, WinHonor: -WinHonor);
            }
            foreach (var Fighter in WinnersFighterP)
            {
                int WinHonor = Algo.CalculateAggressionHonor(Fighter, true, WinnersFighter.Count + WinnersFighterP.Count, WinnersTotalGrade, WinnersTotalLevel, LoosersTotalGrade, LoosersTotalLevel);
                Fighter.Prisme.AddHonor(WinHonor);
                Network.WorldServer.GetChatController().getAlignementChannel((AlignmentTypeEnum)Prisme.Alignement).Send(new ConquestPrismSurvivedMessage(Prisme.Mapid + "|" + Prisme.Map.X + "|" + Prisme.Map.Y));
                Prisme.inFight      = -1;
                Prisme.CurrentFight = null;
                Prisme.Map.SpawnActor((Fighter as PrismFighter).Prisme);
                var Drops = new Dictionary <int, int>();
                this.myResult.AddResult(Fighter, true, WinHonor: WinHonor, WinItems: Drops);
            }
            base.EndFight();
        }