/// <summary> /// /// </summary> /// <param name="member"></param> public void SendTaxCollectorsList(GuildMember member) { if (m_taxCollectors.Count > 0) { member.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_LIST(m_taxCollectors)); } else { member.Dispatch(WorldMessage.BASIC_NO_OPERATION()); } }
/// <summary> /// /// </summary> /// <param name="member"></param> /// <param name="taxCollector"></param> public void RemoveTaxCollector(GuildMember member, TaxCollectorEntity taxCollector) { if (taxCollector.Guild != this) { member.SendHasNotEnoughRights(); return; } if (!member.HasRight(GuildRightEnum.COLLECT_TAXCOLLECTOR)) { member.SendHasNotEnoughRights(); return; } taxCollector.AddMessage(() => { if (!taxCollector.HasGameAction(GameActionTypeEnum.MAP)) { member.Dispatch(WorldMessage.BASIC_NO_OPERATION()); return; } taxCollector.Map.SubArea.TaxCollector = null; taxCollector.StopAction(GameActionTypeEnum.MAP); AddMessage(() => { RemoveTaxCollector(taxCollector); SafeDispatch(WorldMessage.GUILD_TAXCOLLECTOR_REMOVED(taxCollector, member.Name)); }); }); }
/// <summary> /// /// </summary> /// <param name="member"></param> /// <param name="kickedMemberName"></param> public void MemberKick(GuildMember member, string kickedMemberName) { if (kickedMemberName != member.Name && !member.HasRight(GuildRightEnum.BAN)) { member.SendHasNotEnoughRights(); return; } var kickedMember = m_members.Find(m => m.Name == kickedMemberName); if (kickedMember == null) { member.Dispatch(WorldMessage.BASIC_NO_OPERATION()); return; } if (kickedMember.Rank == GuildRankEnum.BOSS) { if (kickedMemberName != member.Name) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("The boss cannot be kicked by a pig.")); return; } } member.Dispatch(WorldMessage.GUIL_KICK_SUCCESS(member.Name, kickedMemberName)); if (member.Name != kickedMemberName) { kickedMember.Dispatch(WorldMessage.GUIL_KICK_SUCCESS(member.Name, kickedMemberName)); } RemoveMember(kickedMember); kickedMember.GuildLeave(); base.Dispatch(WorldMessage.GUILD_MEMBER_REMOVE(kickedMember.Id)); CheckIntegrity(); }
/// <summary> /// /// </summary> /// <param name="member"></param> public void TaxCollectorLeave(GuildMember member) { if (member.TaxCollectorJoinedId == -1) { member.Dispatch(WorldMessage.BASIC_NO_OPERATION()); return; } var collector = m_taxCollectors.Find(taxCollector => taxCollector.Id == member.TaxCollectorJoinedId); if (collector == null) { member.Dispatch(WorldMessage.BASIC_NO_OPERATION()); return; } member.TaxCollectorJoinedId = -1; collector.AddMessage(() => collector.DefenderLeft(member)); m_taxCollectorDispatcher.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_DEFENDER_LEAVE(collector.Id, member.Id)); }
/// <summary> /// /// </summary> /// <param name="member"></param> public void AddTaxCollectorListener(GuildMember member) { foreach (var taxCollector in m_taxCollectors) { taxCollector.AddMessage(() => { if (taxCollector.HasGameAction(Action.GameActionTypeEnum.FIGHT)) { var fight = taxCollector.Fight as TaxCollectorFight; if (fight.State == FightStateEnum.STATE_PLACEMENT) { member.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_ATTACKER_JOIN(taxCollector.Id, fight.Team0.Fighters.ToArray())); if (taxCollector.Defenders.Count > 0) { member.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_DEFENDER_JOIN(taxCollector.Id, taxCollector.Defenders.ToArray())); } } } }); } m_taxCollectorDispatcher.AddHandler(member.Dispatch); }
/// <summary> /// /// </summary> /// <param name="member"></param> /// <param name="spellId"></param> public void BoostSpell(GuildMember member, int spellId) { if (!member.HasRight(GuildRightEnum.MANAGE_BOOST)) { member.SendHasNotEnoughRights(); return; } if (!Statistics.Spells.HasSpell(spellId)) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("Unknow spellId")); return; } if (BoostPoint < 5) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("Not enough point to boost this spell.")); return; } BoostPoint -= 5; Statistics.Spells.LevelUpSpell(spellId); SendBoostInformations(member); }
/// <summary> /// /// </summary> /// <param name="member"></param> /// <param name="taxCollectorId"></param> public void TaxCollectorJoin(GuildMember member, long taxCollectorId) { var collector = m_taxCollectors.Find(taxCollector => taxCollector.Id == taxCollectorId); if (collector == null) { member.Dispatch(WorldMessage.BASIC_NO_OPERATION()); return; } var character = member.Character; if (character == null) { return; } character.AddMessage(() => { if (!character.CanGameAction(GameActionTypeEnum.TAXCOLLECTOR_AGGRESSION)) { character.Dispatch(WorldMessage.INFORMATION_MESSAGE(InformationTypeEnum.ERROR, InformationEnum.ERROR_YOU_ARE_AWAY)); return; } character.DefendTaxCollector(); collector.AddMessage(() => { if (!collector.CanDefend) { character.AddMessage(() => character.StopAction(GameActionTypeEnum.TAXCOLLECTOR_AGGRESSION)); return; } collector.DefenderJoin(member); // switch back to guild context AddMessage(() => { member.TaxCollectorJoinedId = taxCollectorId; m_taxCollectorDispatcher.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_DEFENDER_JOIN(taxCollectorId, member)); }); }); }); }
/// <summary> /// /// </summary> /// <param name="member"></param> /// <param name="kickedMemberName"></param> public void MemberKick(GuildMember member, string kickedMemberName) { if (kickedMemberName != member.Name && !member.HasRight(GuildRightEnum.BAN)) { member.SendHasNotEnoughRights(); return; } var kickedMember = m_members.Find(m => m.Name == kickedMemberName); if (kickedMember == null) { member.Dispatch(WorldMessage.BASIC_NO_OPERATION()); return; } if (kickedMember.Rank == GuildRankEnum.BOSS) { if (kickedMemberName != member.Name) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("The boss cannot be kicked by a pig.")); return; } } member.Dispatch(WorldMessage.GUIL_KICK_SUCCESS(member.Name, kickedMemberName)); if (member.Name != kickedMemberName) kickedMember.Dispatch(WorldMessage.GUIL_KICK_SUCCESS(member.Name, kickedMemberName)); RemoveMember(kickedMember); kickedMember.GuildLeave(); base.Dispatch(WorldMessage.GUILD_MEMBER_REMOVE(kickedMember.Id)); CheckIntegrity(); }
/// <summary> /// /// </summary> /// <param name="member"></param> public void HireTaxCollector(GuildMember member) { if (member.Character == null) return; member.Character.AddMessage(() => { if (member.Character.Map.SubArea.TaxCollector != null) { member.Dispatch(WorldMessage.INFORMATION_MESSAGE(InformationTypeEnum.ERROR, InformationEnum.ERROR_MAX_TAXCOLLECTOR_BY_SUBAREA_REACHED, 1)); // MAX COLLECTOR BY SUBAREA return; } if (member.Character.Inventory.Kamas < TaxCollectorPrice) { member.Dispatch(WorldMessage.INFORMATION_MESSAGE(InformationTypeEnum.ERROR, InformationEnum.ERROR_NOT_ENOUGH_KAMAS, TaxCollectorPrice)); return; } AddMessage(() => { if (!member.HasRight(GuildRightEnum.HIRE_TAXCOLLECTOR)) { member.SendHasNotEnoughRights(); return; } if (m_taxCollectors.Count >= Statistics.MaxTaxcollector) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("Your guild has already hired the maximum TaxCollector.")); return; } var taxCollectorDAO = new TaxCollectorDAO() { Id = TaxCollectorRepository.Instance.NextTaxCollectorId, GuildId = Id, OwnerId = member.Id, Name = Util.Next(WorldConfig.TAXCOLLECTOR_MIN_NAME, WorldConfig.TAXCOLLECTOR_MAX_NAME), FirstName = Util.Next(WorldConfig.TAXCOLLECTOR_MIN_FIRSTNAME, WorldConfig.TAXCOLLECTOR_MAX_FIRSTNAME), MapId = member.Character.MapId, CellId = member.Character.CellId, Skin = WorldConfig.TAXCOLLECTOR_SKIN_BASE, SkinSize = WorldConfig.TAXCOLLECTOR_SKIN_SIZE_BASE, Kamas = 0, Experience = 0, }; TaxCollectorRepository.Instance.Created(taxCollectorDAO); foreach (var spell in Statistics.Spells.GetSpells()) if(spell.Level > 0) SpellBookEntryRepository.Instance.Create((int)EntityTypeEnum.TYPE_TAX_COLLECTOR, taxCollectorDAO.Id, spell.SpellId, spell.Level, 25); var taxCollector = EntityManager.Instance.CreateTaxCollector(this, taxCollectorDAO); AddTaxCollector(taxCollector); member.Character.AddMessage(() => { member.Character.Inventory.SubKamas(TaxCollectorPrice); member.Dispatch(WorldMessage.INFORMATION_MESSAGE(InformationTypeEnum.INFO, InformationEnum.INFO_KAMAS_LOST, TaxCollectorPrice)); }); base.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_HIRED(taxCollector, member.Character.Name)); }); }); }
/// <summary> /// /// </summary> /// <param name="member"></param> /// <param name="statId"></param> public void BoostStats(GuildMember member, char statId) { if (!member.HasRight(GuildRightEnum.MANAGE_BOOST)) { member.SendHasNotEnoughRights(); return; } if (BoostPoint < 1) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("You don't have any boost point.")); return; } switch (statId) { case 'o': if (Statistics.BaseStatistics.GetTotal(EffectEnum.AddPods) >= 5000) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("Your taxcollector has already reached the max Pods.")); return; } Statistics.BaseStatistics.AddBase(EffectEnum.AddPods, 20); BoostPoint--; break; case 'x': if (Statistics.BaseStatistics.GetTotal(EffectEnum.AddWisdom) >= 400) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("Your taxcollector has already reached the max Wisdom.")); return; } Statistics.BaseStatistics.AddBase(EffectEnum.AddWisdom, 1); BoostPoint--; break; case 'p': if (Statistics.BaseStatistics.GetTotal(EffectEnum.AddProspection) >= 500) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("Your taxcollector has already reached the max Prospection.")); return; } Statistics.BaseStatistics.AddBase(EffectEnum.AddProspection, 1); BoostPoint--; break; case 'k': if (BoostPoint < 10) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("You don't have enough boost point.")); return; } if (Statistics.MaxTaxcollector >= 50) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("Your guild has already reached the maximum Taxcollector count.")); return; } Statistics.MaxTaxcollector++; BoostPoint -= 10; break; default: member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("Unknow boost statId")); return; } SendBoostInformations(member); }
/// <summary> /// /// </summary> /// <param name="member"></param> /// <param name="taxCollectorId"></param> public void TaxCollectorJoin(GuildMember member, long taxCollectorId) { var collector = m_taxCollectors.Find(taxCollector => taxCollector.Id == taxCollectorId); if (collector == null) { member.Dispatch(WorldMessage.BASIC_NO_OPERATION()); return; } var character = member.Character; if (character == null) return; character.AddMessage(() => { if (!character.CanGameAction(GameActionTypeEnum.TAXCOLLECTOR_AGGRESSION)) { character.Dispatch(WorldMessage.INFORMATION_MESSAGE(InformationTypeEnum.ERROR, InformationEnum.ERROR_YOU_ARE_AWAY)); return; } character.DefendTaxCollector(); collector.AddMessage(() => { if (!collector.CanDefend) { character.AddMessage(() => character.StopAction(GameActionTypeEnum.TAXCOLLECTOR_AGGRESSION)); return; } collector.DefenderJoin(member); // switch back to guild context AddMessage(() => { member.TaxCollectorJoinedId = taxCollectorId; m_taxCollectorDispatcher.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_DEFENDER_JOIN(taxCollectorId, member)); }); }); }); }
/// <summary> /// /// </summary> /// <param name="member"></param> public void SendMembersInformations(GuildMember member) { member.Dispatch(WorldMessage.GUILD_MEMBERS_INFORMATIONS(m_members)); }
/// <summary> /// /// </summary> /// <param name="member"></param> public void SendBoostInformations(GuildMember member) { member.Dispatch(WorldMessage.GUILD_BOOST_INFORMATIONS(BoostPoint, TaxCollectorPrice, Statistics)); }
/// <summary> /// /// </summary> /// <param name="member"></param> /// <param name="profilId"></param> /// <param name="rank"></param> /// <param name="percent"></param> /// <param name="power"></param> public void MemberProfilUpdate(GuildMember member, long profilId, int rank, int percent, int power) { var himSelf = member.Id == profilId; var targetMember = GetMember(profilId); if (targetMember == null) { member.Dispatch(WorldMessage.BASIC_NO_OPERATION()); return; } var rankChanged = rank != (int)targetMember.Rank; var powerChanged = power != targetMember.Power; var xpShareChanged = percent != targetMember.XPSharePercent; var canManageOwnExp = member.HasRight(GuildRightEnum.MANAGE_OWN_EXP_PERCENT); var canManageOthersExp = member.HasRight(GuildRightEnum.MANAGE_EXP_PERCENT); var canManageRank = member.HasRight(GuildRightEnum.MANAGE_RANK); var canManagePower = member.HasRight(GuildRightEnum.MANAGE_POWER); if (!canManageOwnExp && !canManageOthersExp && !canManageRank && !canManagePower) { member.SendHasNotEnoughRights(); return; } if (!himSelf && !canManageOthersExp && xpShareChanged) { member.SendHasNotEnoughRights(); return; } if (!canManagePower && powerChanged) { member.SendHasNotEnoughRights(); return; } if (!canManageRank && rankChanged) { member.SendHasNotEnoughRights(); return; } if (!canManageOwnExp && himSelf && xpShareChanged) { member.SendHasNotEnoughRights(); return; } if (rankChanged && (GuildRankEnum)rank == GuildRankEnum.BOSS) { if (member.Rank == GuildRankEnum.BOSS && targetMember.Rank != GuildRankEnum.BOSS) { targetMember.SetBoss(); MemberProfilUpdate(targetMember, member.Id, (int)GuildRankEnum.SECOND_IN_COMMAND, 0, 0); member.Dispatch(WorldMessage.GUILD_MEMBERS_INFORMATIONS(member)); } } else { targetMember.Power = power; targetMember.Rank = (GuildRankEnum)rank; } targetMember.XPSharePercent = percent; // update profil member.Dispatch(WorldMessage.GUILD_MEMBERS_INFORMATIONS(targetMember)); targetMember.Dispatch(WorldMessage.GUILD_STATS(this, power)); }
/// <summary> /// /// </summary> /// <param name="member"></param> public void HireTaxCollector(GuildMember member) { if (member.Character == null) { return; } member.Character.AddMessage(() => { if (member.Character.Map.SubArea.TaxCollector != null) { member.Dispatch(WorldMessage.INFORMATION_MESSAGE(InformationTypeEnum.ERROR, InformationEnum.ERROR_MAX_TAXCOLLECTOR_BY_SUBAREA_REACHED, 1)); // MAX COLLECTOR BY SUBAREA return; } if (member.Character.Inventory.Kamas < TaxCollectorPrice) { member.Dispatch(WorldMessage.INFORMATION_MESSAGE(InformationTypeEnum.ERROR, InformationEnum.ERROR_NOT_ENOUGH_KAMAS, TaxCollectorPrice)); return; } AddMessage(() => { if (!member.HasRight(GuildRightEnum.HIRE_TAXCOLLECTOR)) { member.SendHasNotEnoughRights(); return; } if (m_taxCollectors.Count >= Statistics.MaxTaxcollector) { member.Dispatch(WorldMessage.SERVER_ERROR_MESSAGE("Your guild has already hired the maximum TaxCollector.")); return; } var taxCollectorDAO = new TaxCollectorDAO() { Id = TaxCollectorRepository.Instance.NextTaxCollectorId, GuildId = Id, OwnerId = member.Id, Name = Util.Next(WorldConfig.TAXCOLLECTOR_MIN_NAME, WorldConfig.TAXCOLLECTOR_MAX_NAME), FirstName = Util.Next(WorldConfig.TAXCOLLECTOR_MIN_FIRSTNAME, WorldConfig.TAXCOLLECTOR_MAX_FIRSTNAME), MapId = member.Character.MapId, CellId = member.Character.CellId, Skin = WorldConfig.TAXCOLLECTOR_SKIN_BASE, SkinSize = WorldConfig.TAXCOLLECTOR_SKIN_SIZE_BASE, Kamas = 0, Experience = 0, }; TaxCollectorRepository.Instance.Created(taxCollectorDAO); foreach (var spell in Statistics.Spells.GetSpells()) { if (spell.Level > 0) { SpellBookEntryRepository.Instance.Create((int)EntityTypeEnum.TYPE_TAX_COLLECTOR, taxCollectorDAO.Id, spell.SpellId, spell.Level, 25); } } var taxCollector = EntityManager.Instance.CreateTaxCollector(this, taxCollectorDAO); AddTaxCollector(taxCollector); member.Character.AddMessage(() => { member.Character.Inventory.SubKamas(TaxCollectorPrice); member.Dispatch(WorldMessage.INFORMATION_MESSAGE(InformationTypeEnum.INFO, InformationEnum.INFO_KAMAS_LOST, TaxCollectorPrice)); }); base.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_HIRED(taxCollector, member.Character.Name)); }); }); }
/// <summary> /// /// </summary> /// <param name="member"></param> public void SendGeneralInformations(GuildMember member) { member.Dispatch(WorldMessage.GUILD_GENERAL_INFORMATIONS(IsActive, Level, ExperienceFloorCurrent, ExperienceFloorNext, Experience)); }
/// <summary> /// /// </summary> /// <param name="member"></param> public void AddTaxCollectorListener(GuildMember member) { foreach (var taxCollector in m_taxCollectors) { taxCollector.AddMessage(() => { if (taxCollector.HasGameAction(Action.GameActionTypeEnum.FIGHT)) { var fight = taxCollector.Fight as TaxCollectorFight; if (fight.State == FightStateEnum.STATE_PLACEMENT) { member.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_ATTACKER_JOIN(taxCollector.Id, fight.Team0.Fighters.ToArray())); if (taxCollector.Defenders.Count > 0) member.Dispatch(WorldMessage.GUILD_TAXCOLLECTOR_DEFENDER_JOIN(taxCollector.Id, taxCollector.Defenders.ToArray())); } } }); } m_taxCollectorDispatcher.AddHandler(member.Dispatch); }