Advertisement
Guest User

Untitled

a guest
Oct 13th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.44 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement