/// <summary> /// psl packet /// </summary> /// <param name="pslPacket"></param> public void Psl(PslPacket pslPacket) { Mate mate = Session.Character.Mates.FirstOrDefault(x => x.IsTeamMember && x.MateType == MateType.Partner); if (mate == null) { return; } if (pslPacket.Type == 0) { if (mate.IsUsingSp) { mate.IsUsingSp = false; mate.SpSkills = null; Session.Character.MapInstance.Broadcast(mate.GenerateCMode(-1)); Session.SendPacket(mate.GenerateCond()); Session.SendPacket(mate.GeneratePski()); Session.SendPacket(mate.GenerateScPacket()); Session.Character.MapInstance.Broadcast(mate.GenerateOut()); Session.Character.MapInstance.Broadcast(mate.GenerateIn()); Session.SendPacket(Session.Character.GeneratePinit()); //psd 30 } else { Session.SendPacket("delay 5000 3 #psl^1 "); Session.CurrentMapInstance?.Broadcast(UserInterfaceHelper.Instance.GenerateGuri(2, 2, mate.MateTransportId), mate.PositionX, mate.PositionY); } } else { if (mate.SpInstance == null) { return; } mate.IsUsingSp = true; //TODO: update pet skills mate.SpSkills = new NpcMonsterSkill[3]; Session.SendPacket(mate.GenerateCond()); Session.Character.MapInstance.Broadcast(mate.GenerateCMode(mate.SpInstance.Item.Morph)); Session.SendPacket(mate.GeneratePski()); Session.SendPacket(mate.GenerateScPacket()); Session.Character.MapInstance.Broadcast(mate.GenerateOut()); Session.Character.MapInstance.Broadcast(mate.GenerateIn()); Session.SendPacket(Session.Character.GeneratePinit()); Session.Character.MapInstance.Broadcast(mate.GenerateEff(196)); } }
private void ExecuteHandler(ClientSession session) { Mate mate = session.Character.Mates.Find(x => x.IsTeamMember && x.MateType == MateType.Partner); if (mate == null) { return; } if (Type == 0) { if (mate.SpInstance == null) { session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("NEED_WEAR_PARTNER_SP"), 0)); return; } var currentRunningSeconds = (DateTime.UtcNow - Process.GetCurrentProcess().StartTime.AddHours(-2).AddSeconds(-50)).TotalSeconds; var timeSpanSinceLastUsage = currentRunningSeconds - mate.LastSp; if (timeSpanSinceLastUsage < mate.SpCooldown) { session.SendPacket(UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("PARTNER_SP_IN_COOLDOWN"), mate.SpCooldown - (int)Math.Round(timeSpanSinceLastUsage, 0)), 0)); return; } if (mate.IsUsingSp) { mate.RemoveSp(); } else { session.SendPacket("pdelay 5000 3 #psl^1 "); session.CurrentMapInstance?.Broadcast(UserInterfaceHelper.GenerateGuri(2, 2, mate.MateTransportId), mate.PositionX, mate.PositionY); } } else { if (mate.SpInstance == null) { session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("NEED_WEAR_PARTNER_SP"), 0)); return; } mate.IsUsingSp = true; session.SendPacket(mate.GenerateCond()); session.Character.MapInstance.Broadcast(mate.GenerateCMode(mate.SpInstance.Item.Morph)); session.SendPacket(mate.GenerateScPacket()); session.Character.MapInstance.Broadcast(mate.GenerateOut()); session.Character.MapInstance.Broadcast(mate.GenerateIn()); session.SendPacket(session.Character.GeneratePinit()); session.Character.MapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 196)); session.SendPacket(mate.GeneratePski()); MateHelper.Instance.AddPartnerBuffs(session, mate); } }
private void ExecuteHandler(ClientSession session) { Mate partnerInTeam = session.Character.Mates.FirstOrDefault(s => s.IsTeamMember && s.MateType == MateType.Partner); if (partnerInTeam == null || PetId != partnerInTeam.PartnerSlot) { session.SendPacket(UserInterfaceHelper.GenerateModal(Language.Instance.GetMessageFromKey("PARTNER_NOT_IN_TEAM"), 1)); return; } if (partnerInTeam.SpInstance == null) { session.SendPacket(UserInterfaceHelper.GenerateModal(Language.Instance.GetMessageFromKey("PARTNER_DOESNT_WEAR_SP"), 1)); return; } if (partnerInTeam.SpInstance.FirstPartnerSkill > 0 && SkillSlot == 0 || partnerInTeam.SpInstance.SecondPartnerSkill > 0 && SkillSlot == 1 || partnerInTeam.SpInstance.ThirdPartnerSkill > 0 && SkillSlot == 2) { session.SendPacket(UserInterfaceHelper.GenerateModal(Language.Instance.GetMessageFromKey("PARTNER_ALREADY_HAS_SKILL"), 1)); return; } if (partnerInTeam.IsUsingSp) { session.SendPacket(UserInterfaceHelper.GenerateModal(Language.Instance.GetMessageFromKey("MUST_REMOVE_PARTNER_SP"), 1)); return; } if (partnerInTeam.SpInstance.Agility < 100 && session.Account.Authority < AuthorityType.GameMaster) { session.SendPacket(UserInterfaceHelper.GenerateModal(Language.Instance.GetMessageFromKey("NOT_ENOUGH_AGILITY"), 1)); return; } var skillList = ServerManager.Instance.PartnerSkills.FirstOrDefault(s => s.PartnerVnum == partnerInTeam.SpInstance.ItemVNum); if (skillList == null) { return; } switch (Option) { case 0: session.SendPacket($"pdelay 3000 12 #ps_op^{PetId}^{SkillSlot}^1"); session.CurrentMapInstance?.Broadcast(UserInterfaceHelper.GenerateGuri(2, 2, partnerInTeam.MateTransportId), partnerInTeam.PositionX, partnerInTeam.PositionY); break; default: switch (SkillSlot) { case 0: partnerInTeam.SpInstance.FirstPartnerSkill = skillList.FirstSkill; partnerInTeam.SpInstance.FirstPartnerSkillRank = (PartnerSkillRankType)ServerManager.RandomNumber <byte>(1, 8); break; case 1: partnerInTeam.SpInstance.SecondPartnerSkill = skillList.SecondSkill; partnerInTeam.SpInstance.SecondPartnerSkillRank = (PartnerSkillRankType)ServerManager.RandomNumber <byte>(1, 8); break; case 2: partnerInTeam.SpInstance.ThirdPartnerSkill = skillList.ThirdSkill; partnerInTeam.SpInstance.ThirdPartnerSkillRank = (PartnerSkillRankType)ServerManager.RandomNumber <byte>(1, 8); break; } partnerInTeam.SpInstance.Agility = 0; session.SendPacket(partnerInTeam.GenerateScPacket()); session.SendPacket(partnerInTeam.GeneratePski()); session.SendPacket(UserInterfaceHelper.GenerateModal(Language.Instance.GetMessageFromKey("PARTNER_LEARNT_SKILL"), 1)); break; } }