private IResult TeachSpellSkill(Guilds guild, IMobileObject guildMaster, IMobileObject learner, string parameter) { GuildAbility skill = GlobalReference.GlobalValues.GuildAbilities.Skills[guild].FirstOrDefault(i => string.Equals(i.Abiltiy.AbilityName, parameter, StringComparison.CurrentCultureIgnoreCase)); if (skill != null) { if (skill.Level <= learner.Level) { return(TeachSkill((ISkill)skill.Abiltiy, guildMaster, learner)); } else { return(NotHighEnoughLevel(guildMaster, learner)); } } GuildAbility spell = GlobalReference.GlobalValues.GuildAbilities.Spells[guild].FirstOrDefault(i => string.Equals(i.Abiltiy.AbilityName, parameter, StringComparison.CurrentCultureIgnoreCase)); if (spell != null) { if (spell.Level <= learner.Level) { return(TeachSpell((ISpell)spell.Abiltiy, guildMaster, learner)); } else { return(NotHighEnoughLevel(guildMaster, learner)); } } guildMaster.EnqueueCommand(string.Format("Tell {0} I can not teach you that.", learner.KeyWords[0])); return(new Result("", true)); }
/// <summary> /// 加载玩家公会技能加成 /// </summary> public static void LoadGuildAbility(string userID) { GameUser user = new PersonalCacheStruct <GameUser>().FindKey(userID); if (user == null) { UserCacheGlobal.LoadOffline(userID); user = new PersonalCacheStruct <GameUser>().FindKey(userID); } if (!string.IsNullOrEmpty(user.MercenariesID)) { UserGuild guild = new ShareCacheStruct <UserGuild>().FindKey(user.MercenariesID); if (guild != null && guild.AbilityInfo.Count > 0) { if (user.PropertyInfo.Count == 0) { foreach (var guildAbility in guild.AbilityInfo) { GuildAbility ability = new GuildAbility(); ability.Type = guildAbility.Type; ability.Num = guildAbility.Num; user.PropertyInfo.Add(ability); } } } } }
public override bool TakeAction() { if (!string.IsNullOrEmpty(ContextUser.MercenariesID)) { GuildMember member = new ShareCacheStruct <GuildMember>().FindKey(ContextUser.MercenariesID, ContextUser.UserID); if (member != null && member.PostType == PostType.Member) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6007_AuditPermissions; return(false); } UserGuild guild = new ShareCacheStruct <UserGuild>().FindKey(ContextUser.MercenariesID); if (guild != null && guild.AbilityInfo.Count > 0) { GuildAbility ability = guild.AbilityInfo.Find(m => m.ID == guildSkillID); if (ability != null) { GuildAbilityLvInfo abilityLvInfo = new ShareCacheStruct <GuildAbilityLvInfo>().FindKey(ability.ID, ability.Lv); if (abilityLvInfo != null && ability.Lv < 10) { if (abilityLvInfo.UpDonateNum > guild.CurrDonateNum) { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6205_GuildMemberDonateNotEnough; return(false); } GuildAbilityInfo abilityInfo = new ShareCacheStruct <GuildAbilityInfo>().FindKey(ability.ID); if (abilityInfo != null) { guild.CurrDonateNum = MathUtils.Subtraction(guild.CurrDonateNum, abilityLvInfo.UpDonateNum, 0); ability.Lv = MathUtils.Addition(ability.Lv, (short)1); abilityLvInfo = new ShareCacheStruct <GuildAbilityLvInfo>().FindKey(ability.ID, ability.Lv); ability.Type = abilityInfo.GuildAbilityType; ability.Num = abilityLvInfo.EffectNum; //guild.Update(); CombatHelper.UpGuildAbilityLv(ContextUser.MercenariesID, ability); //加载公会技能升级 ErrorCode = 0; ErrorInfo = string.Format(LanguageManager.GetLang().St6205_GuildMemberJiNengShengJi, abilityInfo.AbilityName, ability.Lv); } } } } } else { ErrorCode = LanguageManager.GetLang().ErrorCode; ErrorInfo = LanguageManager.GetLang().St6203_GuildMemberNotEnough; return(false); } return(true); }
/// <summary> /// 公会技能加成效果 /// </summary> /// <param name="userID"></param> /// <param name="abilityType"></param> /// <returns></returns> public static decimal GetGuildAbilityNum(string userID, GuildAbilityType abilityType) { decimal effectNum = 0; GameUser user = new PersonalCacheStruct <GameUser>().FindKey(userID); if (user != null && user.PropertyInfo != null && user.PropertyInfo.Count > 0) { var abilitiesList = user.PropertyInfo; GuildAbility ability = abilitiesList.Find(m => m.Type == abilityType); if (ability != null) { effectNum = MathUtils.Addition(effectNum, ability.Num, decimal.MaxValue); } } effectNum = MathUtils.Addition(effectNum, 1, decimal.MaxValue); return(effectNum); }
/// <summary> /// 公会技能升级 /// </summary> public static void UpGuildAbilityLv(string guildID, GuildAbility ability) { var memberArray = new ShareCacheStruct <GuildMember>().FindAll(m => m.GuildID == guildID); foreach (GuildMember member in memberArray) { GameUser user = new PersonalCacheStruct <GameUser>().FindKey(member.UserID); if (user == null) { user = UserCacheGlobal.CheckLoadUser(member.UserID); } if (user != null && !string.IsNullOrEmpty(user.MercenariesID)) { UserGuild guild = new ShareCacheStruct <UserGuild>().FindKey(user.MercenariesID); if (guild != null && guild.AbilityInfo.Count > 0) { LoadGuildAbility(member.UserID); if (user.PropertyInfo != null && user.PropertyInfo.Count > 0) { GuildAbility guildAbility = user.PropertyInfo.Find(m => m.Type == ability.Type); if (guildAbility != null) { guildAbility.Num = ability.Num; } else { guildAbility = new GuildAbility(); guildAbility.Type = ability.Type; guildAbility.Num = ability.Num; user.PropertyInfo.Add(guildAbility); } } } } } }
public void Setup() { GlobalReference.GlobalValues = new GlobalValues(); defaultValues = new Mock <IDefaultValues>(); tagwrapper = new Mock <ITagWrapper>(); defaultValues.Setup(e => e.ReduceValues(1, 2)).Returns(new Dice(1, 2)); GlobalReference.GlobalValues.DefaultValues = defaultValues.Object; GlobalReference.GlobalValues.TagWrapper = tagwrapper.Object; magicUser = new Objects.Personality.MagicUser(); npc = new Mock <INonPlayerCharacter>(); guild = new Mock <IGuild>(); damageSpell = new DamageSpell("damageSpell", 1, 2, Objects.Damage.Damage.DamageType.Cold, 10); cureSpell = new CureSpell("cureSpell", 1, 2, 10); GuildAbility guildAbility = new GuildAbility(); GuildAbility guildAbility2 = new GuildAbility(); spellBook = new Dictionary <string, ISpell>(); npc.Setup(e => e.Level).Returns(5); npc.Setup(e => e.SpellBook).Returns(spellBook); npc.Setup(e => e.Health).Returns(90); npc.Setup(e => e.MaxHealth).Returns(100); npc.Setup(e => e.Mana).Returns(100); guildAbility.Level = 2; guildAbility2.Level = 2; guildAbility.Abiltiy = damageSpell; guildAbility2.Abiltiy = cureSpell; guild.Setup(e => e.Spells).Returns(new List <GuildAbility>() { guildAbility, guildAbility2 }); GlobalReference.GlobalValues.TickCounter = 5; }