public bool AddTaxCollectorSpawn(Character character) { if (!character.GuildMember.HasRight(GuildRightsBitEnum.GUILD_RIGHT_HIRE_TAX_COLLECTOR)) { character.Client.Send(new TaxCollectorErrorMessage((sbyte)TaxCollectorErrorReasonEnum.TAX_COLLECTOR_NO_RIGHTS)); return(false); } if (character.Guild.TaxCollectors.Count >= character.Guild.MaxTaxCollectors) { character.Client.Send(new TaxCollectorErrorMessage((sbyte)TaxCollectorErrorReasonEnum.TAX_COLLECTOR_MAX_REACHED)); return(false); } if (character.Position.Map.TaxCollector != null) { character.Client.Send(new TaxCollectorErrorMessage((sbyte)TaxCollectorErrorReasonEnum.TAX_COLLECTOR_ALREADY_ONE)); return(false); } m_lastRemovedTaxCollectors.Clean(); if (m_lastRemovedTaxCollectors.FirstOrDefault(x => x.First.GuildId == character.Guild.Id && x.First.MapId == character.Map.Id) != null) { character.Client.Send(new TaxCollectorErrorMessage((sbyte)TaxCollectorErrorReasonEnum.TAX_COLLECTOR_CANT_HIRE_YET)); return(false); } if (!character.Position.Map.AllowCollector) { character.Client.Send(new TaxCollectorErrorMessage((sbyte)TaxCollectorErrorReasonEnum.TAX_COLLECTOR_CANT_HIRE_HERE)); return(false); } if (character.IsInFight()) { character.Client.Send(new TaxCollectorErrorMessage((sbyte)TaxCollectorErrorReasonEnum.TAX_COLLECTOR_ERROR_UNKNOWN)); return(false); } var position = character.Position.Clone(); var taxCollectorNpc = new TaxCollectorNpc(m_idProvider.Pop(), position.Map.GetNextContextualId(), position, character.Guild, character); WorldServer.Instance.IOTaskPool.AddMessage(() => Database.Insert(taxCollectorNpc.Record)); m_taxCollectorSpawns.Add(taxCollectorNpc.GlobalId, taxCollectorNpc.Record); m_activeTaxCollectors.Add(taxCollectorNpc); taxCollectorNpc.Map.Enter(taxCollectorNpc); character.Guild.AddTaxCollector(taxCollectorNpc); TaxCollectorHandler.SendTaxCollectorMovementMessage(taxCollectorNpc.Guild.Clients, TaxCollectorMovementTypeEnum.TAX_COLLECTOR_HIRED, taxCollectorNpc, character.Id, character.Name); return(true); }
public void RemoveTaxCollectorSpawn(TaxCollectorNpc taxCollector) { WorldServer.Instance.IOTaskPool.AddMessage(() => Database.Delete(taxCollector.Record)); taxCollector.Bag.DeleteBag(); m_taxCollectorSpawns.Remove(taxCollector.GlobalId); m_activeTaxCollectors.Remove(taxCollector); m_lastRemovedTaxCollectors.Push(taxCollector.Record); }
public void RemoveTaxCollectorSpawn(TaxCollectorNpc taxCollector, bool lazySave = true) { if (lazySave) { ServerBase <WorldServer> .Instance.IOTaskPool.AddMessage(delegate { this.Database.Delete(taxCollector.Record); }); } else { base.Database.Delete(taxCollector.Record); } taxCollector.Bag.DeleteBag(lazySave); this.m_taxCollectorSpawns.Remove(taxCollector.GlobalId); this.m_activeTaxCollectors.Remove(taxCollector); }
public bool TryAddTaxCollectorSpawn(Character character, bool lazySave = true) { bool result; if (!character.GuildMember.HasRight(GuildRightsBitEnum.GUILD_RIGHT_HIRE_TAX_COLLECTOR)) { TaxCollectorHandler.SendTaxCollectorErrorMessage(character.Client, TaxCollectorErrorReasonEnum.TAX_COLLECTOR_NO_RIGHTS); result = false; } else { if (character.Guild.TaxCollectors.Count <TaxCollectorNpc>() >= character.Guild.MaxTaxCollectors) { TaxCollectorHandler.SendTaxCollectorErrorMessage(character.Client, TaxCollectorErrorReasonEnum.TAX_COLLECTOR_MAX_REACHED); result = false; } else { if (character.Position.Map.TaxCollector != null) { TaxCollectorHandler.SendTaxCollectorErrorMessage(character.Client, TaxCollectorErrorReasonEnum.TAX_COLLECTOR_ALREADY_ONE); result = false; } else { if (!character.Position.Map.AllowCollector) { TaxCollectorHandler.SendTaxCollectorErrorMessage(character.Client, TaxCollectorErrorReasonEnum.TAX_COLLECTOR_CANT_HIRE_HERE); result = false; } else { if (character.IsInFight()) { TaxCollectorHandler.SendTaxCollectorErrorMessage(character.Client, TaxCollectorErrorReasonEnum.TAX_COLLECTOR_ERROR_UNKNOWN); result = false; } else { //var basePlayerItem = character.Inventory.TryGetItem(Singleton<ItemManager>.Instance.TryGetTemplate(AllianceManager.ALLIOGEMME_ID)); //character.Inventory.RemoveItem(basePlayerItem, 1, true); ObjectPosition objectPosition = character.Position.Clone(); TaxCollectorNpc taxCollectorNpc = new TaxCollectorNpc(this.m_idProvider.Pop(), objectPosition.Map.GetNextContextualId(), objectPosition, character.Guild, character.Name); if (lazySave) { ServerBase <WorldServer> .Instance.IOTaskPool.AddMessage(delegate { this.Database.Insert(taxCollectorNpc.Record); }); } else { base.Database.Insert(taxCollectorNpc.Record); } this.m_taxCollectorSpawns.Add(taxCollectorNpc.GlobalId, taxCollectorNpc.Record); this.m_activeTaxCollectors.Add(taxCollectorNpc); taxCollectorNpc.Map.Enter(taxCollectorNpc); character.Guild.AddTaxCollector(taxCollectorNpc); result = true; } } } } } return(result); }