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 } })); }
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 } })); }
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 } })); }
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()); }
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); }
/// <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); }
/* * 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); }