コード例 #1
0
ファイル: PrismeTable.cs プロジェクト: 745c5412/tera-emu
        public static Prisme getPrism(long id)
        {
            Prisme prism = null;

            Cache.TryGetValue(id, out prism);
            return(prism);
        }
コード例 #2
0
ファイル: PrismeTable.cs プロジェクト: 745c5412/tera-emu
 public static void Add(Prisme item)
 {
     try
     {
         MySqlCommand Command = new MySqlCommand()
         {
             Connection  = DatabaseManager.Provider.getConnection(),
             CommandText = "REPLACE INTO `prismes` VALUES(@id,@mapid,@cellid,@align,@grade,@honor,@zone);",
         };
         Command.Prepare();
         Command.Parameters.AddWithValue("@id", item.ActorId);
         Command.Parameters.AddWithValue("@mapid", item.Mapid);
         Command.Parameters.AddWithValue("@cellid", item.CellId);
         Command.Parameters.AddWithValue("@align", item.Alignement);
         Command.Parameters.AddWithValue("@grade", item.Level);
         Command.Parameters.AddWithValue("@honor", item.Honor);
         Command.Parameters.AddWithValue("@zone", item.Area);
         Command.ExecuteNonQuery();
         Cache.Add(item.ActorId, item);
     }
     catch (Exception e)
     {
         Logger.Error("Can't execute query : " + e.ToString());
     }
 }
コード例 #3
0
ファイル: PrismFighter.cs プロジェクト: 745c5412/tera-emu
        public PrismFighter(Fight Fight, Prisme Monster, int MonsterGuid) : base(Fight, GameActorTypeEnum.TYPE_PRISM)
        {
            this.Prisme = Monster;
            Prisme.Initialize();
            Prisme.inFight      = (byte)0;
            Prisme.CurrentFight = Fight;
            var oldStat = this.Prisme.myFightStats;

            base.InitFighter(oldStat, MonsterGuid, Prisme.Look);
            base.JoinFight();
        }
コード例 #4
0
ファイル: PrismeTable.cs プロジェクト: 745c5412/tera-emu
        public static void TryDeleteTax(Prisme tc)
        {
            try
            {
                lock (Cache)
                {
                    Cache.Remove(tc.ActorId);
                }

                DatabaseManager.Provider.ExecuteQuery("DELETE FROM prismes WHERE id = '" + tc.ActorId + "'");
            }
            catch (Exception ex)
            {
                Logger.Error("DatabaseEntities::TryDeletePrism : Guid=" + tc.ActorId + " " + ex.ToString());
            }
        }
コード例 #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;
            }
        }
コード例 #6
0
        public PrismFight(Map Map, WorldClient Player, Prisme Monsters)
            : base(FightType.TYPE_PVMA, Map)
        {
            try
            {
                Logger.Debug("PVMA_FIGHT Launched : Player=" + Player.GetCharacter().Name + " MapId=" + Map.Id);
                this.Prisme = Monsters;
                StartTimer();
                AttFighter = new CharacterFighter(this, Player);
                var DefFighter = new PrismFighter(this, Prisme, this.NextActorId);

                Prisme.Map.DestroyActor(Prisme);

                Network.WorldServer.GetChatController().getAlignementChannel((AlignmentTypeEnum)Prisme.Alignement).Send(new ConquestPrismeAttackMessage(Prisme.Mapid + "|" + Prisme.Map.X + "|" + Prisme.Map.Y));

                Player.AddGameAction(new GameFight(AttFighter, this));

                base.InitFight(AttFighter, DefFighter);
            }
            catch (Exception ex)
            {
                Logger.Error("PrismFight::PrismFight() " + ex.ToString());
            }
        }
コード例 #7
0
ファイル: PrismeTable.cs プロジェクト: 745c5412/tera-emu
        public static void Load()
        {
            Cache.Clear();
            long time   = Environment.TickCount;
            var  reader = DatabaseManager.Provider.ExecuteReader("SELECT * FROM prismes");

            while (reader.Read())
            {
                var template = new Prisme()
                {
                    ActorId     = reader.GetInt64("id"),
                    Alignement  = reader.GetInt32("align"),
                    Level       = (byte)reader.GetInt32("grade"),
                    Mapid       = reader.GetInt16("mapid"),
                    CellId      = reader.GetInt32("cellid"),
                    Honor       = reader.GetInt32("honor"),
                    Area        = reader.GetInt32("zone"),
                    inFight     = -1,
                    Orientation = 1,
                };
                Cache.Add(template.ActorId, template);

                if (template.Map != null)
                {
                    template.Map.SpawnActor(template);
                }
            }
            reader.Close();

            AreaTable.Cache.Values.ToList().ForEach(x => x.onPrismLoaded());
            AreaSubTable.Cache.Values.ToList().ForEach(x => x.onPrismLoaded());

            //Cache.Values.ToList().ForEach(x => x.Intialize());

            Logger.Info("Loaded @'" + Cache.Count + "'@ Prism in @" + (Environment.TickCount - time) + "@ ms");
        }
コード例 #8
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;
            }
        }
コード例 #9
0
ファイル: PlayerAction.cs プロジェクト: 745c5412/tera-emu
        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);
            }
        }