Example #1
0
        /// <summary>
        /// Handles an incoming group invite request (/invite Player)
        /// </summary>
        /// <param name="client">the Session the incoming packet belongs to</param>
        /// <param name="packet">the full packet</param>
        public static void GroupInviteRequest(IRealmClient client, RealmPacketIn packet)
        {
            string    str             = packet.ReadCString();
            Character activeCharacter = client.ActiveCharacter;
            Group     group           = activeCharacter.Group;
            Character target;

            if (Group.CheckInvite(activeCharacter, out target, str) != GroupResult.NoError)
            {
                return;
            }
            HashSet <IBaseRelation> relations =
                Singleton <RelationMgr> .Instance.GetRelations(activeCharacter.EntityId.Low,
                                                               CharacterRelationType.GroupInvite);

            if (group != null && relations.Count >= group.InvitesLeft)
            {
                return;
            }
            Singleton <RelationMgr> .Instance.AddRelation(RelationMgr.CreateRelation(activeCharacter.EntityId.Low,
                                                                                     target.EntityId.Low, CharacterRelationType.GroupInvite));

            Group.SendResult(activeCharacter.Client, GroupResult.NoError, str);
            SendGroupInvite(target.Client, activeCharacter.Name);
        }
Example #2
0
        /// <summary>
        /// Handles an incoming group invite request (/invite Player)
        /// </summary>
        /// <param name="client">the Session the incoming packet belongs to</param>
        /// <param name="packet">the full packet</param>
        //[ClientPacketHandler((RealmServerOpCode.CMSG_GROUP_INVITE)]
        public static void GroupInviteRequest(IRealmClient client, RealmPacketIn packet)
        {
            var inviteeName = packet.ReadCString();

            var inviter = client.ActiveCharacter;
            var group   = inviter.Group;

            Character invitee;

            if (Group.CheckInvite(inviter, out invitee, inviteeName) == GroupResult.NoError)
            {
                var listInvitees = Singleton <RelationMgr> .Instance.GetRelations(inviter.EntityId.Low,
                                                                                  CharacterRelationType.GroupInvite);

                if (group == null || listInvitees.Count < group.InvitesLeft)
                {
                    BaseRelation inviteRelation = RelationMgr.CreateRelation(inviter.EntityId.Low,
                                                                             invitee.EntityId.Low, CharacterRelationType.GroupInvite);

                    Singleton <RelationMgr> .Instance.AddRelation(inviteRelation);

                    // Target has been invited
                    Group.SendResult(inviter.Client, GroupResult.NoError, inviteeName);
                    SendGroupInvite(invitee.Client, inviter.Name);
                }
            }
        }
Example #3
0
 public void LoadDBData(List <DBBaseAlert> data)
 {
     if (data == null)
     {
         return;
     }
     foreach (var item in data)
     {
         if (item.Type == AlertType.Continue)
         {
             continue;
         }
         var alert = Add(item.TDID, GetEntity(item.Cast));
         alert.TipStr               = item.TipStr;
         alert.DetailStr            = item.DetailStr;
         alert.TitleStr             = item.TitleStr;
         alert.Illustration         = item.Illustration;
         alert.CurTurn              = item.CurTurn;
         alert.ID                   = item.ID;
         alert.IsCommingTimeOutFalg = item.IsCommingTimeOutFalg;
         alert.StartSFX             = item.StartSFX;
         alert.IsAutoTrigger        = item.IsAutoTrigger;
         alert.Bg                   = item.Bg;
         alert.Icon                 = item.Icon;
         alert.WarfareData          = RelationMgr.GetWarfareData <IBaseWarfareData>(item.War);
         item.SelfArticle.ForEach(x => alert.SelfArticle.Add(ArticleMgr.Get <TDBaseArticleData>(x)));
         item.TargetArticle.ForEach(x => alert.TargetArticle.Add(ArticleMgr.Get <TDBaseArticleData>(x)));
     }
 }
Example #4
0
        private static void OnPartyInviteRequest(IRealmClient client, Character destChr)
        {
            if (!destChr.EnablePartyRequest)
            {
                client.ActiveCharacter.SendSystemMessage(string.Format("Sorry ,but {0} rejects all party requests.",
                                                                       (object)destChr.Name));
            }
            else if (client.ActiveCharacter.Asda2FactionId != (short)-1 && destChr.Asda2FactionId != (short)-1 &&
                     (int)destChr.Asda2FactionId != (int)client.ActiveCharacter.Asda2FactionId)
            {
                client.ActiveCharacter.SendSystemMessage(string.Format("Sorry ,but {0} is in other faction.",
                                                                       (object)destChr.Name));
            }
            else
            {
                string        name            = destChr.Name;
                Character     activeCharacter = client.ActiveCharacter;
                Group         group           = activeCharacter.Group;
                IBaseRelation relation1       = Singleton <RelationMgr> .Instance
                                                .GetPassiveRelations(destChr.EntityId.Low, CharacterRelationType.GroupInvite)
                                                .FirstOrDefault <IBaseRelation>();

                if (relation1 != null && Environment.TickCount - int.Parse(relation1.Note) > 30000)
                {
                    Singleton <RelationMgr> .Instance.RemoveRelation(relation1);
                }
                Character target;
                if (Group.CheckInvite(activeCharacter, out target, name) == GroupResult.NoError)
                {
                    HashSet <IBaseRelation> relations =
                        Singleton <RelationMgr> .Instance.GetRelations(activeCharacter.EntityId.Low,
                                                                       CharacterRelationType.GroupInvite);

                    if (group != null && relations.Count >= (int)group.InvitesLeft)
                    {
                        return;
                    }
                    BaseRelation relation2 = RelationMgr.CreateRelation(activeCharacter.EntityId.Low,
                                                                        target.EntityId.Low, CharacterRelationType.GroupInvite);
                    relation2.Note = Environment.TickCount.ToString((IFormatProvider)CultureInfo.InvariantCulture);
                    Singleton <RelationMgr> .Instance.AddRelation(relation2);

                    Asda2GroupHandler.SendInviteToPartyResponseOrRequestToAnotherPlayerResponse(target.Client,
                                                                                                PartyInviteStatusRequest.Invite, client.ActiveCharacter.Name);
                    Asda2GroupHandler.SendPartyIniteResponseResponse(client, activeCharacter, target,
                                                                     PartyInviteStatusResponse.SomeOneRevicingYourInvation);
                }
                else
                {
                    Asda2GroupHandler.SendPartyIniteResponseResponse(client, activeCharacter, target,
                                                                     PartyInviteStatusResponse.ThereIsNoOneToInvite);
                }
            }
        }
Example #5
0
        private static void OnPartyInviteRequest(IRealmClient client, Character destChr)
        {
            if (!destChr.EnablePartyRequest)
            {
                client.ActiveCharacter.SendSystemMessage(string.Format("Sorry ,but {0} rejects all party requests.", destChr.Name));
                return;
            }

            var inviteeName = destChr.Name;

            var inviter = client.ActiveCharacter;
            var group   = inviter.Group;

            Character invitee;

            var listInviters = Singleton <RelationMgr> .Instance.GetPassiveRelations(destChr.EntityId.Low,
                                                                                     CharacterRelationType.GroupInvite);

            var invite = listInviters.FirstOrDefault();

            if (invite != null)
            {
                var ticks = int.Parse(invite.Note);
                var timeFromLastInvite = Environment.TickCount - ticks;
                if (timeFromLastInvite > 30000)
                {
                    RelationMgr.Instance.RemoveRelation(invite);
                }
            }
            var res = Group.CheckInvite(inviter, out invitee, inviteeName);

            if (res == GroupResult.NoError)
            {
                var listInvitees = Singleton <RelationMgr> .Instance.GetRelations(inviter.EntityId.Low,
                                                                                  CharacterRelationType.GroupInvite);

                if (group == null || listInvitees.Count < group.InvitesLeft)
                {
                    BaseRelation inviteRelation = RelationMgr.CreateRelation(inviter.EntityId.Low,
                                                                             invitee.EntityId.Low, CharacterRelationType.GroupInvite);
                    inviteRelation.Note = Environment.TickCount.ToString(CultureInfo.InvariantCulture);
                    Singleton <RelationMgr> .Instance.AddRelation(inviteRelation);

                    // Target has been invited
                    //Group.SendResult(inviter.Client, GroupResult.NoError, inviteeName);
                    SendInviteToPartyResponseOrRequestToAnotherPlayerResponse(invitee.Client, PartyInviteStatusRequest.Invite, client.ActiveCharacter.Name);
                    SendPartyIniteResponseResponse(client, inviter, invitee, PartyInviteStatusResponse.SomeOneRevicingYourInvation);
                }
            }
            else
            {
                SendPartyIniteResponseResponse(client, inviter, invitee, PartyInviteStatusResponse.ThereIsNoOneToInvite);
            }
        }
Example #6
0
        public void TestRelationAdd()
        {
            BaseRelation relation       = null;
            BaseRelation storedRelation = null;
            int          i = 0;

            foreach (CharacterRelationType type in Enum.GetValues(typeof(CharacterRelationType)))
            {
                if (type != CharacterRelationType.Invalid && type != CharacterRelationType.Count)
                {
                    relation = RelationMgr.CreateRelation(_allianceChars[i].EntityId.Low,
                                                          _allianceChars[i + 1].EntityId.Low, type);

                    RelationMgr.Instance.AddRelation(relation);

                    storedRelation = RelationMgr.Instance.GetRelation(_allianceChars[i].EntityId.Low,
                                                                      _allianceChars[i + 1].EntityId.Low, type);

                    Assert.AreEqual(relation, storedRelation);
                    i++;
                }
            }
        }
Example #7
0
 public bool IsHaveSuzerain() => RelationMgr.IsHaveSuzerain(SelfUnit);
Example #8
0
 public bool IsHaveVassal() => RelationMgr.IsHaveVassal(SelfUnit);
Example #9
0
 public bool IsHaveMarriage() => RelationMgr.IsHaveMarriage(SelfUnit);
Example #10
0
 public bool IsHaveAlliance() => RelationMgr.IsHaveAlliance(SelfUnit);
Example #11
0
 public bool IsFriend(TUnit target)
 {
     return(RelationMgr.IsFriend(SelfUnit, target));
 }
Example #12
0
 public bool IsInWar()
 {
     return(RelationMgr.IsInWarfare(SelfBaseUnit));
 }
Example #13
0
 public int GetRelationShip(TUnit target)
 {
     return(RelationMgr.GetRelationShip(SelfUnit, target));
 }
Example #14
0
        public MailError SendMail(string recipientName,
                                  string subject,
                                  string body,
                                  MailStationary stationary,
                                  ICollection <Item> items,
                                  uint money,
                                  uint cod)
        {
            FactionGroup recipientFaction;
            int          recipientMailCount;

            // Find and verify the recipient
            var             normalizedName = recipientName;
            var             recipient      = World.GetCharacter(normalizedName, false);
            CharacterRecord recipientRecord;

            if (recipient != null)
            {
                // receiving character is online, get info from the character object
                recipientFaction   = recipient.Faction.Group;
                recipientMailCount = recipient.MailAccount.AllMail.Count;
                recipientRecord    = recipient.Record;
            }
            else
            {
                // no character online with that name, get info from the CharacterRecord
                var charRecord = CharacterRecord.GetRecordByName(normalizedName);
                if (charRecord == null)
                {
                    MailHandler.SendResult(m_chr.Client, 0, MailResult.MailSent, MailError.RECIPIENT_NOT_FOUND);
                    return(MailError.RECIPIENT_NOT_FOUND);
                }

                recipientFaction   = FactionMgr.GetFactionGroup(charRecord.Race);
                recipientMailCount = charRecord.MailCount;
                recipientRecord    = charRecord;
            }

            if (!m_chr.GodMode)
            {
                if (stationary == MailStationary.GM)
                {
                    MailHandler.SendResult(m_chr.Client, 0, MailResult.MailSent, MailError.INTERNAL_ERROR);
                    return(MailError.INTERNAL_ERROR);
                }

                // Can't send to people who ignore you
                if (RelationMgr.IsIgnoring(recipientRecord.EntityLowId, m_chr.EntityId.Low))
                {
                    MailHandler.SendResult(m_chr.Client, 0, MailResult.MailSent, MailError.RECIPIENT_NOT_FOUND);
                    return(MailError.RECIPIENT_NOT_FOUND);
                }

                // Can't send mail to people on the other team
                if (!MailMgr.AllowInterFactionMail && !m_chr.GodMode)
                {
                    if (recipientFaction != m_chr.Faction.Group)
                    {
                        MailHandler.SendResult(m_chr, 0u, MailResult.MailSent, MailError.NOT_YOUR_ALLIANCE);
                        return(MailError.NOT_YOUR_ALLIANCE);
                    }
                }

                // Check that the recipient can recieve more mail.
                if (recipientMailCount > MailMgr.MaxMailCount)
                {
                    MailHandler.SendResult(m_chr, 0u, MailResult.MailSent, MailError.RECIPIENT_CAP_REACHED);
                    return(MailError.RECIPIENT_CAP_REACHED);
                }
            }

            return(SendMail(recipientRecord, subject, body, stationary, items, money, cod));
        }
Example #15
0
        public MailError SendMail(string recipientName, string subject, string body, MailStationary stationary,
                                  ICollection <Item> items, uint money, uint cod)
        {
            string          name      = recipientName;
            Character       character = World.GetCharacter(name, false);
            FactionGroup    factionGroup;
            int             num;
            CharacterRecord recipient;

            if (character != null)
            {
                factionGroup = character.Faction.Group;
                num          = character.MailAccount.AllMail.Count;
                recipient    = character.Record;
            }
            else
            {
                CharacterRecord recordByName = CharacterRecord.GetRecordByName(name);
                if (recordByName == null)
                {
                    MailHandler.SendResult(m_chr.Client, 0U, MailResult.MailSent,
                                           MailError.RECIPIENT_NOT_FOUND);
                    return(MailError.RECIPIENT_NOT_FOUND);
                }

                factionGroup = FactionMgr.GetFactionGroup(recordByName.Race);
                num          = recordByName.MailCount;
                recipient    = recordByName;
            }

            if (!m_chr.GodMode)
            {
                if (stationary == MailStationary.GM)
                {
                    MailHandler.SendResult(m_chr.Client, 0U, MailResult.MailSent,
                                           MailError.INTERNAL_ERROR);
                    return(MailError.INTERNAL_ERROR);
                }

                if (RelationMgr.IsIgnoring(recipient.EntityLowId, m_chr.EntityId.Low))
                {
                    MailHandler.SendResult(m_chr.Client, 0U, MailResult.MailSent,
                                           MailError.RECIPIENT_NOT_FOUND);
                    return(MailError.RECIPIENT_NOT_FOUND);
                }

                if (!MailMgr.AllowInterFactionMail && !m_chr.GodMode && factionGroup != m_chr.Faction.Group)
                {
                    MailHandler.SendResult(m_chr, 0U, MailResult.MailSent,
                                           MailError.NOT_YOUR_ALLIANCE);
                    return(MailError.NOT_YOUR_ALLIANCE);
                }

                if (num > MailMgr.MaxMailCount)
                {
                    MailHandler.SendResult(m_chr, 0U, MailResult.MailSent,
                                           MailError.RECIPIENT_CAP_REACHED);
                    return(MailError.RECIPIENT_CAP_REACHED);
                }
            }

            return(SendMail(recipient, subject, body, stationary, items, money, cod));
        }