SHARE
TWEET

Untitled

a guest Oct 13th, 2019 78 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using Decal.Adapter.Wrappers;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Data;
  7.  
  8. namespace UtilityBelt.Lib.Salvage {
  9.     class TinkerCalc {
  10.  
  11.         public Dictionary<int, double> activeTinker = new Dictionary<int, double>();
  12.        
  13.         public static float GetMaterialMod(int material) {
  14.             switch (material) {
  15.                 case (int)Material.GOLD:
  16.                 case (int)Material.OAK:
  17.                     return 10.0f;
  18.  
  19.                 case (int)Material.ALABASTER:
  20.                 case (int)Material.ARMOREDILLO_HIDE:
  21.                 case (int)Material.BRASS:
  22.                 case (int)Material.BRONZE:
  23.                 case (int)Material.CERAMIC:
  24.                 case (int)Material.GRANITE:
  25.                 case (int)Material.LINEN:
  26.                 case (int)Material.MARBLE:
  27.                 case (int)Material.MOONSTONE:
  28.                 case (int)Material.OPAL:
  29.                 case (int)Material.PINE:
  30.                 case (int)Material.REEDSHARK_HIDE:
  31.                 case (int)Material.VELVET:
  32.                 case (int)Material.WOOL:
  33.                     return 11.0f;
  34.  
  35.                 case (int)Material.EBONY:
  36.                 case (int)Material.GREEN_GARNET:
  37.                 case (int)Material.IRON:
  38.                 case (int)Material.MAHOGANY:
  39.                 case (int)Material.PORCELAIN:
  40.                 case (int)Material.SATIN:
  41.                 case (int)Material.STEEL:
  42.                 case (int)Material.TEAK:
  43.                     return 12.0f;
  44.  
  45.                 case (int)Material.BLOODSTONE:
  46.                 case (int)Material.CARNELIAN:
  47.                 case (int)Material.CITRINE:
  48.                 case (int)Material.HEMATITE:
  49.                 case (int)Material.LAVENDER_JADE:
  50.                 case (int)Material.MALACHITE:
  51.                 case (int)Material.RED_JADE:
  52.                 case (int)Material.ROSE_QUARTZ:
  53.                     return 25.0f;
  54.  
  55.                 default:
  56.                     return 20.0f;
  57.             }
  58.         }
  59.         public static List<float> tinkDifficulty = new List<float>()
  60.         {
  61.             // attempt #
  62.             1.0f,   // 1
  63.             1.1f,   // 2
  64.             1.3f,   // 3
  65.             1.6f,   // 4
  66.             2.0f,   // 5
  67.             2.5f,   // 6
  68.             3.0f,   // 7
  69.             3.5f,   // 8
  70.             4.0f,   // 9
  71.             4.5f    // 10
  72.         };
  73.  
  74.         public static double GetSkillChance(int skill, int difficulty, float factor = 0.03f) {
  75.             var chance = 1.0 - (1.0 / (1.0 + Math.Exp(factor * (skill - difficulty))));
  76.  
  77.             return Math.Min(1.0, Math.Max(0.0, chance));
  78.         }
  79.  
  80.         public static void DoCalc(WorldObject targetSalvage, WorldObject targetItem) {
  81.             try {
  82.                 int skill;
  83.                 var salvageMod = TinkerCalc.GetMaterialMod(targetSalvage.Values(LongValueKey.Material));
  84.                 var salvageWorkmanship = targetSalvage.Values(DoubleValueKey.SalvageWorkmanship);
  85.                 var itemWorkmanship = targetItem.Values(LongValueKey.Workmanship);
  86.                 var tinkeredCount = targetItem.Values(LongValueKey.NumberTimesTinkered);
  87.                 var attemptMod = tinkDifficulty[tinkeredCount];
  88.  
  89.                 Util.WriteToChat("salvageMod: " + salvageMod);
  90.                 Util.WriteToChat("salvageWorkmanship: " + salvageWorkmanship);
  91.                 Util.WriteToChat("itemWorkmanship: " + itemWorkmanship);
  92.                 Util.WriteToChat("tinkeredCount: " + tinkeredCount);
  93.                 Util.WriteToChat("attemptMod: " + attemptMod);
  94.  
  95.                 int weaponTinkeringSkill = Globals.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.WeaponTinkering];
  96.                 int magicItemTinkeringSkill = Globals.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.MagicItemTinkering];
  97.                 int armorTinkeringSkill = Globals.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.ArmorTinkering];
  98.                 int itemTinkeringSkill = Globals.Core.CharacterFilter.EffectiveSkill[CharFilterSkillType.ItemTinkering];
  99.  
  100.                 Util.WriteToChat("weaponTinkeringSkill: " + weaponTinkeringSkill);
  101.                 Util.WriteToChat("magicItemTinkeringSkill: " + magicItemTinkeringSkill);
  102.                 Util.WriteToChat("armorTinkeringSkill: " + armorTinkeringSkill);
  103.                 Util.WriteToChat("itemTinkeringSkill: " + itemTinkeringSkill);
  104.  
  105.                 int tinkerType = TinkerType.GetTinkerType(targetSalvage.Values(LongValueKey.Material));
  106.  
  107.                 switch (tinkerType) {
  108.                     case 30:
  109.                         Util.WriteToChat("magic item");
  110.                         skill = magicItemTinkeringSkill;
  111.                         break;
  112.                     case 29:
  113.                         Util.WriteToChat("armor");
  114.                         skill = armorTinkeringSkill;
  115.                         break;
  116.                     case 28:
  117.                         Util.WriteToChat("weapon");
  118.                         skill = weaponTinkeringSkill;
  119.                         break;
  120.                     case 18:
  121.                         Util.WriteToChat("item");
  122.                         skill = itemTinkeringSkill;
  123.                         break;
  124.                     default:
  125.                         Util.WriteToChat("invalid salvage");
  126.                         skill = 0;
  127.                         break;
  128.                 }
  129.  
  130.                 var workmanshipMod = 1.0f;
  131.                 if (salvageWorkmanship >= itemWorkmanship) {
  132.                     workmanshipMod = 2.0f;
  133.                 }
  134.                 var difficulty = (int)Math.Floor(((salvageMod * 5.0f) + (itemWorkmanship * salvageMod * 2.0f) - (salvageWorkmanship * workmanshipMod * salvageMod / 5.0f)) * attemptMod);
  135.                 Util.WriteToChat("difficulty: " + difficulty);
  136.  
  137.  
  138.                 double successChance = GetSkillChance(skill, difficulty);
  139.                 Util.WriteToChat("successChance: " + successChance);
  140.  
  141.                 Dictionary<int, double> activeTinker = new Dictionary<int, double> {
  142.                     { tinkeredCount, successChance }
  143.                 };
  144.  
  145.                 foreach (KeyValuePair<int, double> entry in activeTinker) {
  146.                     Util.WriteToChat(entry.Key.ToString() + " ------ " + entry.Value.ToString());
  147.                 }
  148.  
  149.  
  150.                
  151.              //   return difficulty;
  152.             }
  153.             catch (Exception ex) { Logger.LogException(ex); }
  154.         }
  155.     }
  156. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top