public void ChangeMemberRole(AllianceMemberEntry allianceMemberEntry, LogicAvatarAllianceRole allianceRole, LogicLong eventAvatarId, string eventAvatarName) { if (allianceMemberEntry.GetAllianceRole() != allianceRole) { bool isPromoted = allianceMemberEntry.HasLowerRoleThan(allianceRole); allianceMemberEntry.SetAllianceRole(allianceRole); LogicChangeAllianceRoleCommand logicChangeAllianceRoleCommand = new LogicChangeAllianceRoleCommand(); logicChangeAllianceRoleCommand.SetData(this.Id, allianceRole); ServerMessageManager.SendMessage(new GameAllowServerCommandMessage { AccountId = allianceMemberEntry.GetAvatarId(), ServerCommand = logicChangeAllianceRoleCommand }, 9); AllianceEventStreamEntry allianceEventStreamEntry = new AllianceEventStreamEntry(); AllianceStreamEntryUtil.SetSenderInfo(allianceEventStreamEntry, allianceMemberEntry); allianceEventStreamEntry.SetEventAvatarId(eventAvatarId); allianceEventStreamEntry.SetEventAvatarName(eventAvatarName); allianceEventStreamEntry.SetEventType(isPromoted ? AllianceEventStreamEntryType.PROMOTED : AllianceEventStreamEntryType.DEMOTED); StreamManager.Create(this.Id, allianceEventStreamEntry); this.AddStreamEntry(allianceEventStreamEntry); } }
private static void OnAllianceJoinRequestMessageReceived(AllianceJoinRequestMessage message) { AllianceJoinResponseMessage joinAllianceResponseMessage = new AllianceJoinResponseMessage(); if (!AllianceManager.TryGet(message.AllianceId, out Alliance alliance)) { joinAllianceResponseMessage.ErrorReason = AllianceJoinResponseMessage.Reason.GENERIC; ServerRequestManager.SendResponse(joinAllianceResponseMessage, message); return; } if (!message.Created) { if (alliance.IsFull()) { joinAllianceResponseMessage.ErrorReason = AllianceJoinResponseMessage.Reason.FULL; ServerRequestManager.SendResponse(joinAllianceResponseMessage, message); return; } if (!message.Invited) { if (alliance.Header.GetAllianceType() != AllianceType.OPEN || alliance.Header.GetNumberOfMembers() == 0) { joinAllianceResponseMessage.ErrorReason = alliance.Header.GetAllianceType() == AllianceType.CLOSED ? AllianceJoinResponseMessage.Reason.CLOSED : AllianceJoinResponseMessage.Reason.GENERIC; ServerRequestManager.SendResponse(joinAllianceResponseMessage, message); return; } if (alliance.IsBanned(message.Avatar.GetId())) { joinAllianceResponseMessage.ErrorReason = AllianceJoinResponseMessage.Reason.BANNED; ServerRequestManager.SendResponse(joinAllianceResponseMessage, message); return; } if (alliance.Header.GetRequiredScore() > message.Avatar.GetScore() || alliance.Header.GetRequiredDuelScore() > message.Avatar.GetDuelScore()) { joinAllianceResponseMessage.ErrorReason = AllianceJoinResponseMessage.Reason.SCORE; ServerRequestManager.SendResponse(joinAllianceResponseMessage, message); return; } } } else { if (alliance.Header.GetNumberOfMembers() != 0) { throw new Exception("StreamMessageManager.joinAllianceRequestMessageReceived: A new alliance must be empty!"); } } AllianceMemberEntry memberEntry = AllianceMemberUtil.GetAllianceMemberEntryFromAvatar(message.Avatar); memberEntry.SetAllianceRole(message.Created ? LogicAvatarAllianceRole.LEADER : LogicAvatarAllianceRole.MEMBER); alliance.AddMember(memberEntry); if (!message.Created) { AllianceEventStreamEntry allianceEventStreamEntry = new AllianceEventStreamEntry(); AllianceStreamEntryUtil.SetSenderInfo(allianceEventStreamEntry, memberEntry); allianceEventStreamEntry.SetEventType(AllianceEventStreamEntryType.JOINED); allianceEventStreamEntry.SetEventAvatarId(memberEntry.GetAvatarId()); allianceEventStreamEntry.SetEventAvatarName(memberEntry.GetName()); StreamManager.Create(alliance.Id, allianceEventStreamEntry); alliance.AddStreamEntry(allianceEventStreamEntry); } joinAllianceResponseMessage.Success = true; joinAllianceResponseMessage.AllianceId = alliance.Id; joinAllianceResponseMessage.AllianceName = alliance.Header.GetAllianceName(); joinAllianceResponseMessage.AllianceBadgeId = alliance.Header.GetAllianceBadgeId(); joinAllianceResponseMessage.AllianceLevel = alliance.Header.GetAllianceLevel(); joinAllianceResponseMessage.Created = message.Created; AllianceManager.Save(alliance); ServerRequestManager.SendResponse(joinAllianceResponseMessage, message); }