public Task UpdateGuildFame(DbGuild guild, int amount, ITransaction transaction = null) { var guildKey = $"guild.{guild.Id}"; var trans = transaction ?? _db.CreateTransaction(); if (amount > 0) { trans.HashIncrementAsync(guildKey, "totalFame", amount) .ContinueWith(t => { if (!t.IsCanceled) { guild.TotalFame = (int)t.Result; } }); } var task = trans.HashIncrementAsync(guildKey, "fame", amount) .ContinueWith(t => { if (!t.IsCanceled) { guild.Fame = (int)t.Result; } }); if (transaction == null) { trans.Execute(); } return(task); }
public GuildCreateStatus CreateGuild(string guildName, out DbGuild guild) { guild = null; if (String.IsNullOrWhiteSpace(guildName)) { return(GuildCreateStatus.InvalidName); } guildName = guildName.Trim(); int newGuildId = (int)Strings.Increment(0, "newGuildId").Exec(); if (!Hashes.SetIfNotExists(0, "guilds", guildName.ToUpperInvariant(), Convert.ToString(newGuildId)).Exec()) { return(GuildCreateStatus.UsedName); } guild = new DbGuild(this, newGuildId) { Name = guildName, Level = 0, Fame = 0, TotalFame = 0 }; guild.Flush(); return(GuildCreateStatus.OK); }
public DbGuild GetGuild(int id) { var ret = new DbGuild(_db, id); if (ret.IsNull) { return(null); } return(ret); }
public bool SetGuildBoard(DbGuild guild, string text) { if (guild.IsNull) { return(false); } guild.Board = text; guild.FlushAsync(); return(true); }
public bool ChangeGuildLevel(DbGuild guild, int level) { if (level != 1 && level != 2 && level != 3) { return(false); } guild.Level = level; guild.Flush(); return(true); }
public bool ChangeGuildLevel(DbGuild guild, int level) { // supported guild levels if (level != 1 && level != 2 && level != 3) { return(false); } guild.Level = level; guild.FlushAsync(); return(true); }
public AddGuildMemberStatus AddGuildMember(DbGuild guild, DbAccount acc, bool founder = false) { if (acc == null) { return(AddGuildMemberStatus.Error); } if (acc.NameChosen == false) { return(AddGuildMemberStatus.NameNotChosen); } if (acc.GuildId == guild.Id) { return(AddGuildMemberStatus.AlreadyInGuild); } if (acc.GuildId > 0) { return(AddGuildMemberStatus.InAnotherGuild); } using (TimedLock.Lock(guild.MemberLock)) { int guildSize = 50; // probably not best to lock this up but should be ok if (guild.Members.Length >= guildSize) { return(AddGuildMemberStatus.GuildFull); } var members = guild.Members.ToList(); if (members.Contains(acc.AccountId)) { return(AddGuildMemberStatus.IsAMember); // this should not happen... } members.Add(acc.AccountId); guild.Members = members.ToArray(); guild.FlushAsync(); } // set account guild info acc.GuildId = guild.Id; acc.GuildRank = (founder) ? 40 : 0; acc.FlushAsync(); return(AddGuildMemberStatus.OK); }
public void Death(XmlData dat, DbAccount acc, DbChar character, FameStats stats, string killer) { character.Dead = true; var classStats = new DbClassStats(acc); // calculate total fame given bonuses bool firstBorn; var finalFame = stats.CalculateTotal(dat, character, classStats, out firstBorn); // save character character.FinalFame = finalFame; SaveCharacter(acc, character, classStats, acc.LockToken != null); var death = new DbDeath(acc, character.CharId) { ObjectType = character.ObjectType, Level = character.Level, TotalFame = finalFame, Killer = killer, FirstBorn = firstBorn, DeathTime = DateTime.UtcNow }; death.FlushAsync(); var idBuff = BitConverter.GetBytes(character.CharId); _db.SetRemoveAsync( "alive." + acc.AccountId, idBuff, CommandFlags.FireAndForget); _db.ListLeftPushAsync( "dead." + acc.AccountId, idBuff, When.Always, CommandFlags.FireAndForget); UpdateFame(acc, finalFame); var guild = new DbGuild(acc); if (!guild.IsNull) { UpdateGuildFame(guild, finalFame); UpdatePlayerGuildFame(acc, finalFame); } if (!acc.Admin) { DbLegend.Insert(_db, acc.AccountId, character.CharId, finalFame); } }
public AddGuildMemberStatus AddGuildMember(DbGuild guild, DbAccount acc, bool founder = false) { if (acc == null) { return(AddGuildMemberStatus.Error); } if (acc.NameChosen == false) { return(AddGuildMemberStatus.NameNotChosen); } if (Convert.ToInt32(acc.GuildId) == guild.Id) { return(AddGuildMemberStatus.AlreadyInGuild); } if (Convert.ToInt32(acc.GuildId) > 0) { return(AddGuildMemberStatus.InAnotherGuild); } int guildSize = 100; if (guild.Members.Length >= guildSize) { return(AddGuildMemberStatus.GuildFull); } var members = guild.Members.ToList(); if (members.Contains(Convert.ToInt32(acc.AccountId))) { return(AddGuildMemberStatus.IsAMember); } members.Add(Convert.ToInt32(acc.AccountId)); guild.Members = members.ToArray(); guild.Flush(); acc.GuildId = Convert.ToString(guild.Id); acc.GuildRank = (founder) ? 40 : 0; acc.Flush(); return(AddGuildMemberStatus.OK); }
public GuildCreateStatus CreateGuild(string guildName, out DbGuild guild) { guild = null; if (String.IsNullOrWhiteSpace(guildName)) { return(GuildCreateStatus.InvalidName); } // remove excessive whitespace var rgx = new Regex(@"\s+"); guildName = rgx.Replace(guildName, " "); guildName = guildName.Trim(); // check if valid rgx = new Regex(@"^[A-Za-z\s]{1,20}$"); if (!rgx.IsMatch(guildName)) { return(GuildCreateStatus.InvalidName); } // add guild to guild list var newGuildId = (int)_db.StringIncrement("nextGuildId"); if (!_db.HashSet("guilds", guildName.ToUpperInvariant(), newGuildId, When.NotExists)) { return(GuildCreateStatus.UsedName); } // create guild data structure guild = new DbGuild(_db, newGuildId) { Name = guildName, Level = 0, Fame = 0, TotalFame = 0 }; // save guild.FlushAsync(); return(GuildCreateStatus.OK); }