private static void GainExperienceFromSkill(SkillData skill, PlayerInstance ch, int mastery, int skillLevel) { var gain = ch.PlayerData.GetSkillMastery(skill.ID) == mastery ? GainMasteryOfSkill(skill, ch, skillLevel) : GainExperienceInSkill(ch, skillLevel); ch.GainXP(gain); }
private static void LoseExperience(PlayerInstance ch) { var lostXp = (int)((ch.GetExperienceLevel(ch.Level + 1) - ch.GetExperienceLevel(ch.Level)) * 0.1f); comm.act(ATTypes.AT_FLEE, $"Curse the gods, you've lost {lostXp} experience!", ch, null, null, ToTypes.Character); ch.GainXP(0 - lostXp); }
public static void AbilityLearnFromSuccess(this SkillData skill, PlayerInstance ch) { var sn = (int)skill.ID; var skillMastery = ch.PlayerData.GetSkillMastery(sn); if (ch.IsNpc() || skillMastery <= 0) { return; } var adept = skill.RaceAdept.ToList()[(int)ch.CurrentRace]; var skillLevel = skill.RaceLevel.ToList()[(int)ch.CurrentRace]; if (skillLevel == 0) { skillLevel = ch.Level; } if (skillMastery < adept) { var schance = skillMastery + 5 * skill.difficulty; var percent = SmaugRandom.D100(); var learn = 1; if (percent >= schance) { learn = 2; } else if (schance - percent > 25) { return; } ch.PlayerData.UpdateSkillMastery(sn, adept.GetLowestOfTwoNumbers(skillMastery + learn)); int gain; if (ch.PlayerData.GetSkillMastery(sn) == adept) { gain = 1000 * skillLevel; ch.SetColor(ATTypes.AT_WHITE); ch.Printf("You are now an adept of %s! You gain %d bonus experience!", skill.Name, gain); } else { gain = 20 * skillLevel; if (ch.CurrentFighting == null) // TODO: Check gsn_hide && gsn_sneak { ch.SetColor(ATTypes.AT_WHITE); ch.Printf("You gain %d experience points from your success!", gain); } } ch.GainXP(gain); } }