Beispiel #1
0
        public ActionResult SetPoster(string characterId, string guildId, string message)
        {
            //find guild
            var guildObject = GetGuild(guildId);

            if (guildObject == null)
            {
                return(new ActionResult(ReturnCode.GuildNotFound));
            }

            //find member
            GuildMember member = null;

            if (!guildObject.TryGetMember(characterId, out member))
            {
                return(new ActionResult(ReturnCode.GuildMemberNotFound));
            }

            //check privilegies
            if (!member.IsAddMemberGranted())
            {
                return(new ActionResult(ReturnCode.GuildPrivilegeNotEnough));
            }

            guildObject.SetPoster(message);
            guildObject.AddTransaction(CoalitionTransaction.MakeTransaction(CoalitionTransactionType.set_poster, member.characterName, characterId, 0));
            MarkModified(guildId);
            SendGuildUpdateEvent(characterId, guildObject.GetInfo(mApplication));

            return(new ActionResult(ReturnCode.Ok, new Hashtable {
                { (int)SPC.DayPoster, message }
            }));
        }
Beispiel #2
0
        public ActionResult WithdrawCredits(string characterId, string guildId, int count)
        {
            var guildObject = GetGuild(guildId);

            if (guildObject == null)
            {
                return(new ActionResult(ReturnCode.GuildNotFound));
            }
            GuildMember member;

            if (false == guildObject.TryGetMember(characterId, out member))
            {
                return(new ActionResult(ReturnCode.GuildMemberNotFound));
            }

            if (false == member.IsAddMemberGranted())
            {
                return(new ActionResult(ReturnCode.GuildPrivilegeNotEnough));
            }

            if (guildObject.depositedCredits < count)
            {
                return(new ActionResult(ReturnCode.DepositedCreditsDontEnough));
            }

            var store = mApplication.Stores.GetOnlyPlayerStore(characterId);

            if (store == null)
            {
                return(new ActionResult(ReturnCode.PlayerStoreNotFounded));
            }

            if (false == guildObject.RemoveCredits(count))
            {
                return(new ActionResult(ReturnCode.WithdrawCreditsError));
            }

            guildObject.AddTransaction(CoalitionTransaction.MakeTransaction(CoalitionTransactionType.withdraw, member.characterName, characterId, count));
            MarkModified(guildId);

            store.AddCredits(count);
            SendGuildUpdateEvent(characterId, guildObject.GetInfo(mApplication));
            return(new ActionResult(ReturnCode.Ok, new Hashtable {
                { (int)SPC.Count, count }
            }));
        }
Beispiel #3
0
        public ActionResult DepositCredits(string characterId, string guildId, int count)
        {
            var guildObject = GetGuild(guildId);

            if (guildObject == null)
            {
                return(new ActionResult(ReturnCode.GuildNotFound));
            }
            GuildMember member;

            if (false == guildObject.TryGetMember(characterId, out member))
            {
                return(new ActionResult(ReturnCode.GuildMemberNotFound));
            }

            var store = mApplication.Stores.GetOnlyPlayerStore(characterId);

            if (store == null)
            {
                return(new ActionResult(ReturnCode.PlayerStoreNotFounded));
            }

            if (store.credits < count)
            {
                return(new ActionResult(ReturnCode.NotEnoughCredits));
            }

            if (false == store.RemoveCredits(count))
            {
                return(new ActionResult(ReturnCode.CreditsRemoveFromStoreError));
            }

            guildObject.AddCredits(count);
            guildObject.AddTransaction(CoalitionTransaction.MakeTransaction(CoalitionTransactionType.deposit, member.characterName, characterId, count));
            member.AddDeposited(count);
            MarkModified(guildId);

            SendGuildUpdateEvent(characterId, guildObject.GetInfo(mApplication));
            return(new ActionResult(ReturnCode.Ok, new Hashtable {
                { (int)SPC.Count, count }
            }));
        }
Beispiel #4
0
        public void AddTransaction(CoalitionTransaction transaction)
        {
            if (transactions == null)
            {
                transactions = new List <Hashtable>();
            }

            if (transaction == null)
            {
                return;
            }

            int cnt = transactions.Count;

            if (cnt > kMaxTransactionHistoryCount)
            {
                transactions.RemoveRange(kMaxTransactionHistoryCount - 1, cnt - kMaxTransactionHistoryCount + 1);
            }
            transactions.Insert(0, transaction.GetInfo());
        }
Beispiel #5
0
        public bool RemoveMember(string login, string characterID, string guildID)
        {
            if (guildID == characterID)
            {
                return(false);
            }

            DbObjectWrapper <Guild> guild;

            if (!mCache.TryGetGuild(guildID, out guild))
            {
                return(false);
            }

            bool success = guild.Data.RemoveMember(characterID);

            guild.Changed = true;

            var player = mApplication.Players.GetExistingPlayerByLogin(login);

            if (player == null)
            {
                return(false);
            }

            player.Data.SetGuild(characterID, string.Empty);

            var character = player.Data.GetCharacter(characterID);

            if (character != null)
            {
                guild.Data.AddTransaction(CoalitionTransaction.MakeTransaction(CoalitionTransactionType.member_removed, string.Empty, string.Empty, character.Name, characterID));
            }
            SendGuildUpdateEvent(characterID, new Hashtable());
            SendGuildUpdateEvent(guildID, guild.Data.GetInfo(mApplication));

            return(success);
        }
Beispiel #6
0
        /// <summary>
        /// Changing status of member by other member
        /// </summary>
        /// <param name="sourceCharacterID">Character ID of member who make changes</param>
        /// <param name="targetCharacterID">Character ID of membe who will be changed</param>
        /// <param name="guildID">Target guild id</param>
        /// <param name="status">New status of member</param>
        /// <returns></returns>
        public bool ChangeGuildMemberStatus(string sourceCharacterID, string targetCharacterID, string guildID, int status)
        {
            if (sourceCharacterID == targetCharacterID)
            {
                log.Info("ChangeGuildMemberStatus - don't allow change self status");
                return(false);
            }

            DbObjectWrapper <Guild> guild = null;

            if (!mCache.TryGetGuild(guildID, out guild))
            {
                log.Info("ChangeGuildMemberStatus - guild not found");
                return(false);
            }

            GuildMember sourceMember = null;

            if (!guild.Data.TryGetMember(sourceCharacterID, out sourceMember))
            {
                log.Info("ChangeGuildMemberStatus - source member not found");
                return(false);
            }

            GuildMember targetMember = null;

            if (!guild.Data.TryGetMember(targetCharacterID, out targetMember))
            {
                log.Info("ChangeGuildMemberStatus - target member not found");
                return(false);
            }

            GuildMemberStatus newStatus = (GuildMemberStatus)status;

            if (newStatus == GuildMemberStatus.Moderator)
            {
                if (!guild.Data.addingModersAllowed)
                {
                    log.InfoFormat("ChangeGuildMemberStatus: guild already has maximum count of moderators [green]");
                    return(false);
                }
            }

            GuildMemberStatus sourceStatus = (GuildMemberStatus)sourceMember.guildStatus;
            GuildMemberStatus targetStatus = (GuildMemberStatus)targetMember.guildStatus;


            if (sourceStatus == GuildMemberStatus.Moderator)
            {
                if (targetStatus != GuildMemberStatus.Member)
                {
                    log.Info("ChangeGuildMemberStatus - moderator allow change only members status");
                    return(false);
                }
                if (newStatus != GuildMemberStatus.Moderator)
                {
                    log.Info("ChangeGuildMemberStatus - moderator allow raise status of member to moderator only");
                    return(false);
                }
            }
            else if (sourceStatus == GuildMemberStatus.Owner)
            {
                if (targetStatus == GuildMemberStatus.Owner)
                {
                    log.Info("ChangeGuildMemberStatus  - Don't allow two owners of guild");
                    return(false);
                }
                if (newStatus == targetStatus)
                {
                    log.Info("ChangeGuildMemberStatus - New status same as before status");
                    return(false);
                }
            }

            targetMember.guildStatus = status;
            guild.Changed            = true;

            if (status == (int)GuildMemberStatus.Moderator)
            {
                guild.Data.AddTransaction(CoalitionTransaction.MakeTransaction(CoalitionTransactionType.make_officier, string.Empty, string.Empty, targetMember.characterName, targetMember.characterId));
            }

            SendGuildUpdateEvent(sourceMember.characterId, guild.Data.GetInfo(mApplication));
            SendGuildUpdateEvent(targetMember.characterId, guild.Data.GetInfo(mApplication));

            if (newStatus == GuildMemberStatus.Moderator)
            {
                mApplication.AddAchievmentVariable(targetMember.gameRefId, "coalition_officier", 1);
            }
            return(true);
        }
Beispiel #7
0
        /*
         * Notification data must be { {SPC.Action, (GuildAction)(int) }, {SPC.Guild, (string)guildID } }
         */
        private bool HandleAddMemberNotification(string memberCharacterID, Hashtable notificationData)
        {
            string guildID = (string)notificationData[(int)SPC.Guild];

            SelectCharacterClientPeer peer;

            if (!mApplication.Clients.TryGetPeerForCharacterId(memberCharacterID, out peer))
            {
                log.InfoFormat("character peer not found");
                return(false);
            }

            var player = mApplication.Players.GetExistingPlayer(peer.id);

            if (player == null)
            {
                log.Info("existing player not founded");
                return(false);
            }

            var character = player.Data.GetCharacter(peer.characterId);

            if (character == null)
            {
                log.Info("character not founded");
                return(false);
            }

            if (!string.IsNullOrEmpty(character.guildID))
            {
                log.Info("character already in guild");
                return(false);
            }

            GuildMember member = new GuildMember {
                characterId   = character.CharacterId,
                gameRefId     = player.Data.GameRefId,
                guildStatus   = (int)GuildMemberStatus.Member,
                exp           = character.Exp,
                login         = player.Data.Login.ToLower(),
                characterName = character.Name,
                characterIcon = character.characterIcon
            };

            if (!AddMember(guildID, member))
            {
                log.Info("some error adding member to guild");
                return(false);
            }


            mApplication.Players.SetGuild(player.Data.GameRefId, memberCharacterID, guildID);

            var guild = GetGuild(guildID);

            if (guild != null)
            {
                guild.AddTransaction(CoalitionTransaction.MakeTransaction(CoalitionTransactionType.member_added, string.Empty, string.Empty, member.characterName, member.characterId));
                SendGuildUpdateEvent(memberCharacterID, guild.GetInfo(mApplication));
            }


            mApplication.AddAchievmentVariable(member.gameRefId, "coalition_member", 1);
            return(true);
        }