public void Add(YiObj human) { if (Members.Contains(human.UniqueId)) { return; } Members.Add(human.UniqueId); human.Guild = this; human.GuildRank = GuildRanks.Member; if (human is Player player) { player.Send(MsgSyndicateSpawn.Create(player)); Message.SendTo(player, $"{player.Name} has joined our guild!", MsgTextType.Guild); foreach (var guild in Allies) { player.Send(MsgSyndicate.Create(guild.UniqueId, GuildRequest.SetAlly)); } foreach (var guild in Enemies) { player.Send(MsgSyndicate.Create(guild.UniqueId, GuildRequest.SetEnemy)); } } ScreenSystem.Send(human, MsgSpawn.Create(human as Player), true); }
public void SendPromotionList() { if (m_pSyn == null || !IsOnline) { return; } byte synLevel = m_pSyn.Level; var msg = new MsgSyndicate(); msg.Action = SyndicateRequest.SYN_PROMOTE; if (Position == SyndicateRank.GUILD_LEADER) { int maxDl = (synLevel < 4 ? 2 : synLevel < 7 ? 3 : 4); int maxHdl = (synLevel < 6 ? 1 : 2); int maxHMan = (synLevel < 5 ? 1 : synLevel < 7 ? 2 : synLevel < 9 ? 4 : 6); int maxHSuper = (synLevel < 5 ? 1 : synLevel < 7 ? 2 : synLevel < 9 ? 4 : 6); int maxHStew = (synLevel < 3 ? 1 : synLevel < 5 ? 2 : synLevel < 7 ? 4 : synLevel < 9 ? 6 : 8); int maxAide = (synLevel < 4 ? 2 : synLevel < 6 ? 4 : 6); msg.Positions.Add((ushort)SyndicateRank.GUILD_LEADER + " 1 1 " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.GUILD_LEADER) + " " + 0); msg.Positions.Add((ushort)SyndicateRank.DEPUTY_LEADER + " " + m_pSyn.DeputyLeaderCount + " " + maxDl + " " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.DEPUTY_LEADER) + " " + 0); msg.Positions.Add((ushort)SyndicateRank.HONORARY_DEPUTY_LEADER + " " + m_pSyn.HonoraryDeputyLeaderCount + " " + maxHdl + " " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.HONORARY_DEPUTY_LEADER) + " " + Syndicate.HONORARY_DEPUTY_LEADER_PRICE * -1); msg.Positions.Add((ushort)SyndicateRank.HONORARY_MANAGER + " " + m_pSyn.HonoraryManagerCount + " " + maxHMan + " " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.HONORARY_MANAGER) + " " + Syndicate.HONORARY_MANAGER_PRICE * -1); msg.Positions.Add((ushort)SyndicateRank.HONORARY_SUPERVISOR + " " + m_pSyn.HonorarySupervisorCount + " " + maxHSuper + " " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.HONORARY_SUPERVISOR) + " " + Syndicate.HONORARY_SUPERVISOR_PRICE * -1); msg.Positions.Add((ushort)SyndicateRank.HONORARY_STEWARD + " " + m_pSyn.HonoraryStewardCount + " " + maxHStew + " " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.HONORARY_STEWARD) + " " + Syndicate.HONORARY_STEWARD_PRICE * -1); msg.Positions.Add((ushort)SyndicateRank.AIDE + " " + m_pSyn.AideCount + " " + maxAide + " " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.AIDE) + " " + 0); } else if (Position == SyndicateRank.LEADER_SPOUSE) { msg.Positions.Add((ushort)SyndicateRank.LEADER_SPOUSE_AIDE + " " + m_pSyn.LeaderSpouseAideCount + " 1 " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.LEADER_SPOUSE_AIDE) + " " + 0); } else if (Position == SyndicateRank.DEPUTY_LEADER || Position == SyndicateRank.HONORARY_DEPUTY_LEADER) { msg.Positions.Add((ushort)SyndicateRank.DEPUTY_LEADER_AIDE + " " + m_pSyn.DeputyLeaderAideCount + " 1 " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.DEPUTY_LEADER_AIDE) + " " + 0); } else if (Position == SyndicateRank.MANAGER || Position == SyndicateRank.HONORARY_MANAGER) { msg.Positions.Add((ushort)SyndicateRank.MANAGER_AIDE + " " + m_pSyn.ManagerAideCount + " 1 " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.MANAGER_AIDE) + " " + 0); } else if (Position == SyndicateRank.SUPERVISOR || Position == SyndicateRank.ARSENAL_SUPERVISOR || Position == SyndicateRank.CP_SUPERVISOR || Position == SyndicateRank.GUIDE_SUPERVISOR || Position == SyndicateRank.HONORARY_SUPERVISOR || Position == SyndicateRank.LILY_SUPERVISOR || Position == SyndicateRank.ORCHID_SUPERVISOR || Position == SyndicateRank.PK_SUPERVISOR || Position == SyndicateRank.ROSE_SUPERVISOR || Position == SyndicateRank.SILVER_SUPERVISOR || Position == SyndicateRank.TULIP_SUPERVISOR) { msg.Positions.Add((ushort)SyndicateRank.SUPERVISOR_AIDE + " " + m_pSyn.SupervisorAideCount + " 1 " + m_pSyn.Arsenal.SharedBattlePower(SyndicateRank.SUPERVISOR_AIDE) + " " + 0); } else { return; } msg.SetList(); Send(msg); }
public static void HandleSyndicate(Character pUser, MsgSyndicate pMsg) { if (pUser == null) return; switch (pMsg.Action) { #region Info / Refresh case SyndicateRequest.SYN_INFO: case SyndicateRequest.SYN_REFRESH: { if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; pUser.SyndicateMember.SendSyndicate(); MsgDutyMinContri pNewMsg = new MsgDutyMinContri(); foreach (var pPos in m_pShowDuty) pNewMsg.Append(pPos, pUser.Syndicate.MinimumDonation(pPos)); pUser.Send(pNewMsg); return; } #endregion #region Bulletin/Announcement case SyndicateRequest.SYN_BULLETIN: { if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; if (pUser.SyndicateMember.Position != SyndicateRank.GUILD_LEADER) return; string msg = Encoding.ASCII.GetString(pMsg, 26, pMsg[25]); if (msg.Length > 127) return; pUser.Syndicate.SetAnnouncement(msg); return; } #endregion #region Donate Silvers case SyndicateRequest.SYN_DONATE_SILVERS: { if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; if (pMsg.Param < 10000) // should donate at least 10000 silvers return; if (!pUser.ReduceMoney(pMsg.Param)) // not enough money return; pUser.Syndicate.ChangeFunds((int) pMsg.Param); pUser.SyndicateMember.IncreaseMoney(pMsg.Param); pUser.SyndicateMember.SendSyndicate(); pUser.SyndicateMember.SendCharacterInformation(); pUser.Syndicate.Send(string.Format(ServerString.STR_SYN_DONATE, pUser.SyndicateMember.GetRankName(), pUser.Name, pMsg.Param)); return; } #endregion #region Donate CPs case SyndicateRequest.SYN_DONATE_CONQUER_POINTS: { if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; if (!pUser.ReduceEmoney(pMsg.Param)) return; pUser.Syndicate.ChangeEmoneyFunds((int) pMsg.Param); pUser.SyndicateMember.IncreaseEmoney(pMsg.Param); pUser.SyndicateMember.SendSyndicate(); pUser.SyndicateMember.SendCharacterInformation(); pUser.Syndicate.Send(string.Format(ServerString.STR_SYN_DONATE_EMONEY, pUser.SyndicateMember.GetRankName(), pUser.Name, pMsg.Param)); return; } #endregion #region Promote case SyndicateRequest.SYN_PROMOTE: { if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; pUser.SyndicateMember.SendPromotionList(); return; } #endregion #region Paid Promotion case SyndicateRequest.SYN_PAID_PROMOTE: { if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; pUser.Syndicate.ProcessPaidPromotion(pMsg, pUser); return; } #endregion #region Request Promotion case SyndicateRequest.SYN_SEND_REQUEST: if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; if (!Enum.IsDefined(typeof(SyndicateRank), (ushort)pMsg.Param)) return; var pos = (SyndicateRank)pMsg.Param; SyndicateMember pMember = pUser.Syndicate.Members.Values.FirstOrDefault(x => x.Name == pMsg.Name); if (pMember == null) return; pUser.Syndicate.PromoteMember(pUser, pMember, pos); return; #endregion #region Join Request case SyndicateRequest.SYN_JOIN_REQUEST: { // no syn join guild param: target if (pUser.Syndicate != null || pUser.SyndicateMember != null) return; // already joined Client pTarget; if (!ServerKernel.Players.TryGetValue(pMsg.Param, out pTarget)) return; if (pUser.FetchSynInvite(pMsg.Param)) { // do join pTarget.Character.Syndicate.AppendMember(pTarget.Character, pUser.Identity, true); pUser.ClearSynInvite(); } else { // add join pUser.SetSynJoin(pMsg.Param); pMsg.Param = pUser.Identity; pMsg.RequiredLevel = pUser.Level; pMsg.RequiredMetempsychosis = pUser.Metempsychosis; pMsg.RequiredProfession = pUser.Profession; pTarget.Send(pMsg); pTarget.Character.SendRelation(pUser); } return; } #endregion #region Invite Request case SyndicateRequest.SYN_INVITE_REQUEST: { // syn invite member param: target if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; // no syn Client pTarget; if (!ServerKernel.Players.TryGetValue(pMsg.Param, out pTarget)) return; // target not found Character pTargetUser; if (pUser.Syndicate.WaitQueue.TryRemove(pTarget.Character.Identity, out pTargetUser)) { // player waiting to join return; } if (pTarget.Character.FetchSynJoin(pUser.Identity)) { // player requested to join if (pUser.Syndicate.Members.Count >= 800) return; pUser.Syndicate.AppendMember(pUser, pTarget.Character.Identity, false); pTarget.Character.ClearSynJoin(); return; } // inviting player to join pTarget.Character.SetSynInvite(pUser.Identity); pMsg.Param = pUser.Identity; pMsg.RequiredLevel = pUser.Level; pMsg.RequiredMetempsychosis = pUser.Metempsychosis; pMsg.RequiredProfession = pUser.Profession; pTarget.Send(pMsg); pTarget.Character.SendRelation(pUser); return; } #endregion #region Quit case SyndicateRequest.SYN_QUIT: { if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; if (pUser.SyndicateRank == SyndicateRank.GUILD_LEADER) return; pUser.Syndicate.QuitSyndicate(pUser); break; } #endregion #region Set Requirements case SyndicateRequest.SYN_SET_REQUIREMENTS: { if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; if (pUser.SyndicateRank != SyndicateRank.GUILD_LEADER) return; if (pMsg.RequiredProfession > 127) return; // max ^ 6 if (pMsg.RequiredMetempsychosis > 2) return; if (pMsg.RequiredLevel > ServerKernel.MAX_UPLEVEL) return; pUser.Syndicate.SetRequirements((byte) pMsg.RequiredProfession, (byte) pMsg.RequiredMetempsychosis, (byte) pMsg.RequiredLevel); break; } #endregion #region Discharge case SyndicateRequest.SYN_DISCHARGE: case SyndicateRequest.SYN_DISCHARGE2: case SyndicateRequest.SYN_DISCHARGE3: // discharge paid promotion { if (pUser.Syndicate == null || pUser.SyndicateMember == null) return; Client pClient = ServerKernel.Players.Values.FirstOrDefault(x => x.Character != null && x.Character.Name == pMsg.Name); SyndicateMember pSynMember = null; if (pClient == null) { DB.Entities.DbUser dbUser = Database.Characters.SearchByName(pMsg.Name); if (dbUser == null) return; if (!pUser.Syndicate.Members.TryGetValue(dbUser.Identity, out pSynMember)) return; } else { pSynMember = pClient.Character.SyndicateMember; } pUser.Syndicate.DischargeMember(pUser, pSynMember); break; } #endregion #region Ally case SyndicateRequest.SYN_ALLIED: { if (pUser.Syndicate == null) return; if (pUser.SyndicateRank != SyndicateRank.GUILD_LEADER) return; if (pUser.Syndicate.Allies.Count >= pUser.Syndicate.MaxAllies()) { pUser.Send(ServerString.STR_ALLY_FULL); return; } Syndicate pTarget = ServerKernel.Syndicates.Values.FirstOrDefault(x => x.Name == pMsg.Name); if (pTarget == null || pTarget.Deleted) { pUser.Send(ServerString.STR_SYN_NO_EXIST); return; } if (!pTarget.LeaderIsOnline) { pUser.Send(ServerString.STR_SYN_LEADER_NOT_ONLINE); return; } Character pTargetClient = pTarget.LeaderRole; RequestBox pBox = new RequestBox { OwnerIdentity = pUser.SyndicateIdentity, OwnerName = pUser.SyndicateName, ObjectIdentity = pTarget.Identity, ObjectName = pTarget.Name, Type = RequestBoxType.SYNDICATE_ALLY, Message = string.Format("{0} Guild Leader of {1} wants to be your ally. Do you accept?", pUser.Name, pUser.SyndicateName) }; pTargetClient.RequestBox = pUser.RequestBox = pBox; pBox.Send(pTargetClient); break; } #endregion #region Remove Ally case SyndicateRequest.SYN_NEUTRAL1: { if (pUser.Syndicate == null) return; if (pUser.SyndicateRank != SyndicateRank.GUILD_LEADER) return; Syndicate pTarget = ServerKernel.Syndicates.Values.FirstOrDefault(x => x.Name == pMsg.Name); if (pTarget == null || pTarget.Deleted) { pUser.Send(ServerString.STR_SYN_NO_EXIST); return; } pUser.Syndicate.RemoveAlliance(pTarget.Identity); break; } #endregion #region Enemy case SyndicateRequest.SYN_ENEMIED: { if (pUser.Syndicate == null) return; if (pUser.SyndicateRank != SyndicateRank.GUILD_LEADER) return; if (pUser.Syndicate.Allies.Count >= pUser.Syndicate.MaxEnemies()) { pUser.Send(ServerString.STR_ENEMY_FULL); return; } Syndicate pTarget = ServerKernel.Syndicates.Values.FirstOrDefault(x => x.Name == pMsg.Name); if (pTarget == null || pTarget.Deleted) { pUser.Send(ServerString.STR_SYN_NO_EXIST); return; } pUser.Syndicate.AntagonizeSyndicate(pTarget); break; } #endregion #region Peace case SyndicateRequest.SYN_NEUTRAL2: { if (pUser.Syndicate == null) return; if (pUser.SyndicateRank != SyndicateRank.GUILD_LEADER) return; Syndicate pTarget = ServerKernel.Syndicates.Values.FirstOrDefault(x => x.Name == pMsg.Name); if (pTarget == null || pTarget.Deleted) { pUser.Send(ServerString.STR_SYN_NO_EXIST); return; } pUser.Syndicate.RemoveEnemy(pTarget.Identity); break; } #endregion default: ServerKernel.Log.SaveLog("Missing handler for 1107:" + pMsg.Action, true); return; } }
public bool Destroy() { lock (World.AllSyndicates) { if (World.AllSyndicates.ContainsKey(Id)) { Msg msg = null; msg = new MsgTalk( "SYSTEM", "ALLUSERS", String.Format(StrRes.STR_SYN_DISBAND, Name), Channel.GM, Color.White); World.BroadcastMsg(msg); msg = new MsgSyndicate((UInt16)Id, MsgSyndicate.Action.DestroySyn); World.BroadcastMsg(msg); Syndicate master = GetMasterSyn(); Player player = null; lock (mMembers) { List <Syndicate.Member> members = new List <Syndicate.Member>(mMembers.Values); members.Add(mLeader); foreach (Syndicate.Member member in members) { if (master == this) { if (World.AllPlayers.TryGetValue(member.Id, out player)) { LeaveSyn(player, false, true); } else { Database.LeaveSyn(member.Name); } } else { master.AddMember(player); } } } foreach (UInt16 allyId in Allies) { Syndicate ally = null; if (World.AllSyndicates.TryGetValue(allyId, out ally)) { if (ally.Allies.Contains(Id)) { var allies = ally.Allies; allies[allies.IndexOf(Id)] = 0; ally.Allies = allies; msg = new MsgSyndicate(Id, MsgSyndicate.Action.ClearAlly); World.BroadcastSynMsg(ally, msg); } } } World.AllSyndicates.Remove(Id); return(Database.Delete(this)); } } return(false); }