コード例 #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>
        //[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);
                }
            }
        }
コード例 #2
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);
                }
            }
        }
コード例 #3
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);
            }
        }
コード例 #4
0
        public override void Calculate()
        {
            if (InputPorts[0].Data == null)
            {
                return;
            }

            relation = InputPorts[0].Data as BaseRelation;

            if (relation == null)
            {
                return;
            }

            // Init the ComboBox
            control.projectSelectionComboBox.Items.Clear();

            if (relation.GetType() == typeof(Relation))
            {
                // var relation2 = InputPorts[0]?.Data as Relation;
                control.projectSelectionComboBox.Items.Add("1");
                control.projectSelectionComboBox.Items.Add("2");
            }

            else if (relation.GetType() == typeof(Relation3))
            {
                var relation3     = InputPorts[0]?.Data as Relation3;
                var relCollection = relation3.Collection as ObservableCollection <Tuple <Guid, Guid, Guid> >;
                var resRelation   = new Relation(relation3.ModelId, relation3.ProjectId);

                var resCollection = resRelation.Collection as ObservableCollection <Tuple <Guid, Guid> >;

                foreach (var item in relCollection)
                {
                    resCollection?.Add(new Tuple <Guid, Guid>(item.Item1, item.Item3));
                }

                OutputPorts[0].Data = resRelation;
            }
        }
コード例 #5
0
ファイル: RelationTest.cs プロジェクト: NecroSharper/WCell
        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++;
                }
            }
        }
コード例 #6
0
        public override void Calculate()
        {
            // Input Part
            if (InputPorts[0].Data.GetType() != typeof(Relation))
            {
                return;
            }

            _relation = InputPorts[0].Data as Relation;

            if (_relation == null)
            {
                return;
            }

            nodeControl.ListBox.Items.Clear();
            foreach (var item in _relation.Collection)
            {
                nodeControl.ListBox.Items.Add(item);
            }
            BinButton.Visibility = Visibility.Visible;
            OutputPorts[0].Data  = _relation;
        }