Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.34 KB | None | 0 0
  1. function user_setup()
  2. auto_acc = true
  3. melee_hits = {}
  4. melee_hits_max = 11
  5. melee_acc_lower = 75
  6. melee_acc_upper = 90
  7.  
  8. melee_acc_mode = 1
  9. melee_acc_modes = {'Melee', 'Acc', 'MaxAcc'}
  10. state.OffenseMode:options(table.slice(melee_acc_modes))
  11. end
  12.  
  13. function track_melee_results(hits, misses)
  14. for i = 1, hits, 1 do
  15. table.insert(melee_hits, true)
  16. end
  17.  
  18. for i = 1, misses, 1 do
  19. table.insert(melee_hits, false)
  20. end
  21.  
  22. --slice off the first entries to limit to melee_hits_max
  23. if #melee_hits > melee_hits_max then
  24. melee_hits = table.slice(melee_hits, #melee_hits - melee_hits_max + 1)
  25. end
  26. end
  27.  
  28. --Returns rolling % of accuracy, or nil if not enough data exists
  29. function get_current_accuracy()
  30. if #melee_hits < melee_hits_max then return nil end
  31.  
  32. local hits = table.count(melee_hits, true)
  33. return hits / melee_hits_max * 100
  34. end
  35.  
  36. windower.register_event('action', function(action)
  37. if action.actor_id == player.id and action.category == 1 then -- 1 = melee attack
  38. local hits = 0
  39. local misses = 0
  40. for _, melee_result in pairs(action.targets[1].actions) do
  41. if melee_result.message == 1 or melee_result.message == 67 then -- 1 = regular attack, 67 = critical
  42. hits = hits + 1
  43. elseif melee_result.message == 15 then -- 15 = miss
  44. misses = misses + 1
  45. end
  46. end
  47. track_melee_results(hits, misses)
  48. local accuracy = get_current_accuracy()
  49. if accuracy then --accuracy = nil when there is not enough data
  50. if accuracy < melee_acc_lower then --our accuracy is too low
  51. if melee_acc_modes[melee_acc_mode + 1] then --can be upgraded
  52. melee_acc_mode = melee_acc_mode + 1
  53. local new_mode = melee_acc_modes[melee_acc_mode]
  54. print('Upgrading accuracy to', new_mode)
  55. state.OffenseMode:value(new_mode)
  56. else
  57. print('Unable to further upgrade accuracy')
  58. end
  59. elseif accuracy > melee_acc_upper then --acc is too high
  60. if melee_acc_mode > 1 then --can be downgraded
  61. melee_acc_mode = melee_acc_mode - 1
  62. local new_mode = melee_acc_modes[melee_acc_mode]
  63. print('Downgrading accuracy to', new_mode)
  64. state.OffenseMode:value(new_mode)
  65. else
  66. print('Unable to further downgrade accuracy')
  67. end
  68. end
  69. end
  70. end
  71. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement