Esempio n. 1
0
        /// <summary>
        /// Occurs when the party invitation gets accepted
        /// </summary>
        private void CM_PARTYINVITATIONACCEPT(CMSG_PARTYINVITATIONACCEPT cpkt)
        {
            //FORWARD A OKAY MESSAGE TO THE SENDER AND RECIEVER OF THE INIVATION
            PartySession party = this.character.sessionParty;

            if (party != null)
            {
                if (cpkt.Status == 1)
                {
                    //Has accepted the party invitation
                    {
                        SMSG_PARTYINVITATIONRESULT spkt = new SMSG_PARTYINVITATIONRESULT();
                        spkt.Result    = 0;
                        spkt.SessionId = party.PartyLeader.id;
                        party.PartyLeader.client.Send((byte[])spkt);
                    }
                    //Send over a new party
                    if (this.character.sessionParty.Count == 1)
                    {
                        SMSG_PARTYMEMBERINFO spkt = new SMSG_PARTYMEMBERINFO();
                        spkt.Leader      = party.PartyLeader.id;
                        spkt.LeaderIndex = 1;
                        spkt.Setting1    = this.character.sessionParty.LootSettings;
                        spkt.Setting2    = this.character.sessionParty.ExpSettings;
                        spkt.Setting3    = 0;
                        if (this.character.sessionParty.ItemLeader != null)
                        {
                            spkt.Setting4 = this.character.sessionParty.ItemLeader.id;
                        }
                        spkt.AddMemberInfo(party.GetCharacters());
                        spkt.SessionId = party.PartyLeader.id;
                        spkt.Result    = 1;
                        party.PartyLeader.client.Send((byte[])spkt);
                    }

                    //Forwards new party member information to all existing players
                    this.character.sessionParty.Add(this.character);
                    int index = party.IndexOf(this.character) + 1;


                    //Process character adding
                    foreach (Character target in party.GetCharacters())
                    {
                        //Send a new character to other party members
                        if (target.id != character.id)
                        {
                            SMSG_PARTYNEWMEMBER spkt2 = new SMSG_PARTYNEWMEMBER();
                            spkt2.Index     = 1;
                            spkt2.ActorId   = this.character.id;
                            spkt2.Unknown   = 1;
                            spkt2.Name      = this.character.Name;
                            spkt2.SessionId = target.id;
                            target.client.Send((byte[])spkt2);
                        }
                        //Send a complete list to yourself
                        else
                        {
                            SMSG_PARTYMEMBERINFO spkt7 = new SMSG_PARTYMEMBERINFO();
                            spkt7.Leader      = party.PartyLeader.id;
                            spkt7.LeaderIndex = 1;
                            spkt7.Setting1    = this.character.sessionParty.LootSettings;
                            spkt7.Setting2    = this.character.sessionParty.ExpSettings;
                            spkt7.Setting3    = 0;
                            if (this.character.sessionParty.ItemLeader != null)
                            {
                                spkt7.Setting4 = this.character.sessionParty.ItemLeader.id;
                            }
                            spkt7.Result    = 1;
                            spkt7.SessionId = this.character.id;
                            spkt7.AddMemberInfo(party.GetCharacters());
                            this.Send((byte[])spkt7);
                        }
                    }



                    //Forwards new party member location and HP/SP
                    //informations
                    foreach (Character target in party.GetCharacters())
                    {
                        if (target.id == character.id)
                        {
                            continue;
                        }

                        //Send over target to myself
                        SMSG_PARTYUNKNOWN spkt4 = new SMSG_PARTYUNKNOWN();
                        spkt4.ActorID   = target.id;
                        spkt4.Unsure    = 1;
                        spkt4.Unknown   = (byte)(this.character.map + 0x65);
                        spkt4.Race      = 0;
                        spkt4.Map       = target.map;
                        spkt4.HP        = target.HP;
                        spkt4.HPmax     = target.HPMAX;
                        spkt4.SP        = target.SP;
                        spkt4.SPmax     = target.SPMAX;
                        spkt4.LP        = target._status.CurrentLp;
                        spkt4.CharLvl   = target._level;
                        spkt4.Job       = target.job;
                        spkt4.JobLvl    = target.jlvl;
                        spkt4.SessionId = this.character.id;
                        this.Send((byte[])spkt4);

                        //Send my self to target
                        SMSG_PARTYUNKNOWN spkt3 = new SMSG_PARTYUNKNOWN();
                        spkt3.ActorID   = this.character.id;
                        spkt3.Unsure    = 1;
                        spkt3.Unknown   = (byte)(this.character.map + 0x65);
                        spkt3.Race      = 0;
                        spkt3.Map       = this.character.map;
                        spkt3.HP        = this.character.HP;
                        spkt3.HPmax     = this.character.HPMAX;
                        spkt3.SP        = this.character.SP;
                        spkt3.SPmax     = this.character.SPMAX;
                        spkt3.LP        = this.character._status.CurrentLp;
                        spkt3.CharLvl   = this.character._level;
                        spkt3.Job       = this.character.job;
                        spkt3.JobLvl    = this.character.jlvl;
                        spkt3.SessionId = target.id;
                        target.client.Send((byte[])spkt3);


                        //Process positon update
                        if (target.map == this.character.map)
                        {
                            SMSG_PARTYMEMBERLOCATION spkt6 = new SMSG_PARTYMEMBERLOCATION();
                            spkt6.Index     = 1;
                            spkt6.ActorId   = target.id;
                            spkt6.X         = target.Position.x;
                            spkt6.Y         = target.Position.y;
                            spkt6.SessionId = this.character.id;
                            this.Send((byte[])spkt6);


                            SMSG_PARTYMEMBERLOCATION spkt5 = new SMSG_PARTYMEMBERLOCATION();
                            spkt5.Index     = 1;
                            spkt5.ActorId   = this.character.id;
                            spkt5.X         = this.character.Position.x;
                            spkt5.Y         = this.character.Position.y;
                            spkt5.SessionId = target.id;
                            target.client.Send((byte[])spkt5);
                        }
                    }
                }
                else
                {
                    Character PartyLeader           = this.character.sessionParty.PartyLeader;
                    SMSG_PARTYINVITATIONRESULT spkt = new SMSG_PARTYINVITATIONRESULT();
                    spkt.Result    = (byte)PartyErrors.DENIED;
                    spkt.SessionId = PartyLeader.id;
                    PartyLeader.client.Send((byte[])spkt);

                    try
                    {
                        uint      TargetActorId = (uint)this.character.Tag;
                        Character TargetActor   = null;
                        if (LifeCycle.TryGetById(TargetActorId, out TargetActor))
                        {
                            TargetActor.Tag = null;
                            if (TargetActor.sessionParty._Characters.Count <= 1)
                            {
                                TargetActor.sessionParty = null;
                            }
                        }
                    }
                    catch (InvalidCastException)
                    {
                        Trace.TraceWarning("Cannot retrieve actor information");
                    }

                    if (this.character.sessionParty.Count <= 1)
                    {
                        this.character.sessionParty = null;
                    }
                    this.character.Tag = null;
                }
            }
            //FORWARD A DENIAL MESSAGE TO THE RECIEVER OF THE INVITATION
            else
            {
                SMSG_PARTYINVITATIONRESULT spkt = new SMSG_PARTYINVITATIONRESULT();
                spkt.Result    = (byte)PartyErrors.DENIED;
                spkt.SessionId = this.character.id;
                this.Send((byte[])spkt);
                this.character.sessionParty = null;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Occurs when the party invitation gets accepted
        /// </summary>
        private void CM_PARTYINVITATIONACCEPT(CMSG_PARTYINVITATIONACCEPT cpkt)
        {
            //FORWARD A OKAY MESSAGE TO THE SENDER AND RECIEVER OF THE INIVATION
            PartySession party = this.character.sessionParty;
            if (party != null)
            {
                if (cpkt.Status == 1)
                {
                    //Has accepted the party invitation
                    {
                        SMSG_PARTYINVITATIONRESULT spkt = new SMSG_PARTYINVITATIONRESULT();
                        spkt.Result = 0;
                        spkt.SessionId = party.PartyLeader.id;
                        party.PartyLeader.client.Send((byte[])spkt);
                    }
                    //Send over a new party
                    if (this.character.sessionParty.Count == 1)
                    {
                        SMSG_PARTYMEMBERINFO spkt = new SMSG_PARTYMEMBERINFO();
                        spkt.Leader = party.PartyLeader.id;
                        spkt.LeaderIndex = 1;
                        spkt.Setting1 = this.character.sessionParty.LootSettings;
                        spkt.Setting2 = this.character.sessionParty.ExpSettings;
                        spkt.Setting3 = 0;
                        if (this.character.sessionParty.ItemLeader != null)
                            spkt.Setting4 = this.character.sessionParty.ItemLeader.id;
                        spkt.AddMemberInfo(party.GetCharacters());
                        spkt.SessionId = party.PartyLeader.id;
                        spkt.Result = 1;
                        party.PartyLeader.client.Send((byte[])spkt);
                    }

                    //Forwards new party member information to all existing players
                    this.character.sessionParty.Add(this.character);
                    int index = party.IndexOf(this.character) + 1;

                    //Process character adding
                    foreach (Character target in party.GetCharacters())
                    {
                        //Send a new character to other party members
                        if (target.id != character.id)
                        {
                            SMSG_PARTYNEWMEMBER spkt2 = new SMSG_PARTYNEWMEMBER();
                            spkt2.Index = 1;
                            spkt2.ActorId = this.character.id;
                            spkt2.Unknown = 1;
                            spkt2.Name = this.character.Name;
                            spkt2.SessionId = target.id;
                            target.client.Send((byte[])spkt2);
                        }
                        //Send a complete list to yourself
                        else
                        {
                            SMSG_PARTYMEMBERINFO spkt7 = new SMSG_PARTYMEMBERINFO();
                            spkt7.Leader = party.PartyLeader.id;
                            spkt7.LeaderIndex = 1;
                            spkt7.Setting1 = this.character.sessionParty.LootSettings;
                            spkt7.Setting2 = this.character.sessionParty.ExpSettings;
                            spkt7.Setting3 = 0;
                            if (this.character.sessionParty.ItemLeader != null)
                                spkt7.Setting4 = this.character.sessionParty.ItemLeader.id;
                            spkt7.Result = 1;
                            spkt7.SessionId = this.character.id;
                            spkt7.AddMemberInfo(party.GetCharacters());
                            this.Send((byte[])spkt7);
                        }
                    }

                    //Forwards new party member location and HP/SP
                    //informations
                    foreach (Character target in party.GetCharacters())
                    {
                        if (target.id == character.id) continue;

                        //Send over target to myself
                        SMSG_PARTYUNKNOWN spkt4 = new SMSG_PARTYUNKNOWN();
                        spkt4.ActorID = target.id;
                        spkt4.Unsure = 1;
                        spkt4.Unknown = (byte)(this.character.map + 0x65);
                        spkt4.Race = 0;
                        spkt4.Map = target.map;
                        spkt4.HP = target.HP;
                        spkt4.HPmax = target.HPMAX;
                        spkt4.SP = target.SP;
                        spkt4.SPmax = target.SPMAX;
                        spkt4.LP = target._status.CurrentLp;
                        spkt4.CharLvl = target._level;
                        spkt4.Job = target.job;
                        spkt4.JobLvl = target.jlvl;
                        spkt4.SessionId = this.character.id;
                        this.Send((byte[])spkt4);

                        //Send my self to target
                        SMSG_PARTYUNKNOWN spkt3 = new SMSG_PARTYUNKNOWN();
                        spkt3.ActorID = this.character.id;
                        spkt3.Unsure = 1;
                        spkt3.Unknown = (byte)(this.character.map + 0x65);
                        spkt3.Race = 0;
                        spkt3.Map = this.character.map;
                        spkt3.HP = this.character.HP;
                        spkt3.HPmax = this.character.HPMAX;
                        spkt3.SP = this.character.SP;
                        spkt3.SPmax = this.character.SPMAX;
                        spkt3.LP = this.character._status.CurrentLp;
                        spkt3.CharLvl = this.character._level;
                        spkt3.Job = this.character.job;
                        spkt3.JobLvl = this.character.jlvl;
                        spkt3.SessionId = target.id;
                        target.client.Send((byte[])spkt3);

                        //Process positon update
                        if (target.map == this.character.map)
                        {
                            SMSG_PARTYMEMBERLOCATION spkt6 = new SMSG_PARTYMEMBERLOCATION();
                            spkt6.Index = 1;
                            spkt6.ActorId = target.id;
                            spkt6.X = target.Position.x;
                            spkt6.Y = target.Position.y;
                            spkt6.SessionId = this.character.id;
                            this.Send((byte[])spkt6);

                            SMSG_PARTYMEMBERLOCATION spkt5 = new SMSG_PARTYMEMBERLOCATION();
                            spkt5.Index = 1;
                            spkt5.ActorId = this.character.id;
                            spkt5.X = this.character.Position.x;
                            spkt5.Y = this.character.Position.y;
                            spkt5.SessionId = target.id;
                            target.client.Send((byte[])spkt5);
                        }
                    }
                }
                else
                {
                    Character PartyLeader = this.character.sessionParty.PartyLeader;
                    SMSG_PARTYINVITATIONRESULT spkt = new SMSG_PARTYINVITATIONRESULT();
                    spkt.Result = (byte)PartyErrors.DENIED;
                    spkt.SessionId = PartyLeader.id;
                    PartyLeader.client.Send((byte[])spkt);

                    try
                    {
                        uint TargetActorId = (uint)this.character.Tag;
                        Character TargetActor = null;
                        if (LifeCycle.TryGetById(TargetActorId, out TargetActor))
                        {
                            TargetActor.Tag = null;
                            if (TargetActor.sessionParty._Characters.Count <= 1)
                                TargetActor.sessionParty = null;
                        }
                    }
                    catch (InvalidCastException)
                    {
                        Trace.TraceWarning("Cannot retrieve actor information");
                    }

                    if (this.character.sessionParty.Count <= 1)
                        this.character.sessionParty = null;
                    this.character.Tag = null;
                }
            }
            //FORWARD A DENIAL MESSAGE TO THE RECIEVER OF THE INVITATION
            else
            {
                SMSG_PARTYINVITATIONRESULT spkt = new SMSG_PARTYINVITATIONRESULT();
                spkt.Result = (byte)PartyErrors.DENIED;
                spkt.SessionId = this.character.id;
                this.Send((byte[])spkt);
                this.character.sessionParty = null;
            }
        }