Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Decal.Adapter.Wrappers;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Data;
- namespace UtilityBelt.Lib.Salvage {
- class TinkerCalc {
- public Dictionary<int, double> activeTinker = new Dictionary<int, double>();
- public static float GetMaterialMod(int material) {
- switch (material) {
- case (int)Material.GOLD:
- case (int)Material.OAK:
- return 10.0f;
- case (int)Material.ALABASTER:
- case (int)Material.ARMOREDILLO_HIDE:
- case (int)Material.BRASS:
- case (int)Material.BRONZE:
- case (int)Material.CERAMIC:
- case (int)Material.GRANITE:
- case (int)Material.LINEN:
- case (int)Material.MARBLE:
- case (int)Material.MOONSTONE:
- case (int)Material.OPAL:
- case (int)Material.PINE:
- case (int)Material.REEDSHARK_HIDE:
- case (int)Material.VELVET:
- case (int)Material.WOOL:
- return 11.0f;
- case (int)Material.EBONY:
- case (int)Material.GREEN_GARNET:
- case (int)Material.IRON:
- case (int)Material.MAHOGANY:
- case (int)Material.PORCELAIN:
- case (int)Material.SATIN:
- case (int)Material.STEEL:
- case (int)Material.TEAK:
- return 12.0f;
- case (int)Material.BLOODSTONE:
- case (int)Material.CARNELIAN:
- case (int)Material.CITRINE:
- case (int)Material.HEMATITE:
- case (int)Material.LAVENDER_JADE:
- case (int)Material.MALACHITE:
- case (int)Material.RED_JADE:
- case (int)Material.ROSE_QUARTZ:
- return 25.0f;
- default:
- return 20.0f;
- }
- }
- public static List<float> tinkDifficulty = new List<float>()
- {
- // attempt #
- 1.0f, // 1
- 1.1f, // 2
- 1.3f, // 3
- 1.6f, // 4
- 2.0f, // 5
- 2.5f, // 6
- 3.0f, // 7
- 3.5f, // 8
- 4.0f, // 9
- 4.5f // 10
- };
- public static double GetSkillChance(int skill, int difficulty, float factor = 0.03f) {
- var chance = 1.0 - (1.0 / (1.0 + Math.Exp(factor * (skill - difficulty))));
- return Math.Min(1.0, Math.Max(0.0, chance));
- }
- public static void DoCalc(WorldObject targetSalvage, WorldObject targetItem) {
- try {
- int skill;
- var salvageMod = TinkerCalc.GetMaterialMod(targetSalvage.Values(LongValueKey.Material));
- var salvageWorkmanship = targetSalvage.Values(DoubleValueKey.SalvageWorkmanship);
- var itemWorkmanship = targetItem.Values(LongValueKey.Workmanship);
- var tinkeredCount = targetItem.Values(LongValueKey.NumberTimesTinkered);
- var attemptMod = tinkDifficulty[tinkeredCount];
- Util.WriteToChat("salvageMod: " + salvageMod);
- Util.WriteToChat("salvageWorkmanship: " + salvageWorkmanship);
- Util.WriteToChat("itemWorkmanship: " + itemWorkmanship);
- Util.WriteToChat("tinkeredCount: " + tinkeredCount);
- Util.WriteToChat("attemptMod: " + attemptMod);
- int weaponTinkeringSkill = Globals.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.WeaponTinkering];
- int magicItemTinkeringSkill = Globals.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.MagicItemTinkering];
- int armorTinkeringSkill = Globals.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.ArmorTinkering];
- int itemTinkeringSkill = Globals.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.ItemTinkering];
- Util.WriteToChat("weaponTinkeringSkill: " + weaponTinkeringSkill);
- Util.WriteToChat("magicItemTinkeringSkill: " + magicItemTinkeringSkill);
- Util.WriteToChat("armorTinkeringSkill: " + armorTinkeringSkill);
- Util.WriteToChat("itemTinkeringSkill: " + itemTinkeringSkill);
- int tinkerType = TinkerType.GetTinkerType(targetSalvage.Values(LongValueKey.Material));
- switch (tinkerType) {
- case 30:
- Util.WriteToChat("magic item");
- skill = magicItemTinkeringSkill;
- break;
- case 29:
- Util.WriteToChat("armor");
- skill = armorTinkeringSkill;
- break;
- case 28:
- Util.WriteToChat("weapon");
- skill = weaponTinkeringSkill;
- break;
- case 18:
- Util.WriteToChat("item");
- skill = itemTinkeringSkill;
- break;
- default:
- Util.WriteToChat("invalid salvage");
- skill = 0;
- break;
- }
- var workmanshipMod = 1.0f;
- if (salvageWorkmanship >= itemWorkmanship) {
- workmanshipMod = 2.0f;
- }
- var difficulty = (int)Math.Floor(((salvageMod * 5.0f) + (itemWorkmanship * salvageMod * 2.0f) - (salvageWorkmanship * workmanshipMod * salvageMod / 5.0f)) * attemptMod);
- Util.WriteToChat("difficulty: " + difficulty);
- double successChance = GetSkillChance(skill, difficulty);
- Util.WriteToChat("successChance: " + successChance);
- Dictionary<int, double> activeTinker = new Dictionary<int, double> {
- { tinkeredCount, successChance }
- };
- foreach (KeyValuePair<int, double> entry in activeTinker) {
- Util.WriteToChat(entry.Key.ToString() + " ------ " + entry.Value.ToString());
- }
- // return difficulty;
- }
- catch (Exception ex) { Logger.LogException(ex); }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement