Advertisement
Guest User

ZRP ui_wpn_params.script

a guest
Feb 11th, 2016
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.44 KB | None | 0 0
  1. -- nv080414 - option to show true gun accuracy.
  2. -- v1ld: set to true by default
  3. local show_single_fire_accuracy = true
  4.  
  5. function normalize(val)
  6. if val > 100 then
  7. val = 100
  8. elseif val < 1 then
  9. val = 1
  10. end
  11.  
  12. return val
  13. end
  14.  
  15.  
  16. function read_if_exist(ltx, section, value, default)
  17. if ltx:line_exist(section,value) then
  18. return ltx:r_float(section,value)
  19. else
  20. return default
  21. end
  22. end
  23.  
  24. function GetRPM(section)
  25. local ltx = system_ini()
  26.  
  27. local rpm = ltx:r_float(section,"rpm")
  28. local mag_size = ltx:r_float(section,"ammo_mag_size")
  29.  
  30. if rpm > 200 then
  31. rpm = math.pow((rpm - 200)/720,2)*100 + 15
  32. else
  33. rpm = rpm/14
  34. end
  35.  
  36. if mag_size < 5 then
  37. rpm = 30
  38. end
  39.  
  40. return normalize(rpm)
  41. end
  42.  
  43. function GetDamage(section)
  44. local ltx = system_ini()
  45. local val = ltx:r_float(section,"hit_power")
  46.  
  47.  
  48. -- if val < 1.36 then
  49. -- val = val*100-46
  50. -- else
  51. -- val = 90 + math.pow(val/2.3,2)*10
  52. -- end
  53.  
  54. return normalize((100*val - 25) * (100/85) )
  55. end
  56.  
  57. function GetDamageMP(section)
  58. local ltx = system_ini()
  59. local val = ltx:r_float(section,"hit_power")
  60.  
  61. if val < 1.05 then
  62. val = val*100-30
  63. else
  64. val = 75 + math.pow(val/4,2)*25
  65. end
  66.  
  67. return normalize(val)
  68. end
  69.  
  70. function GetHandling(section)
  71. local ltx = system_ini()
  72. local val
  73. local control_inertion_factor
  74.  
  75. if ltx:line_exist(section,"control_inertion_factor") then
  76. control_inertion_factor = ltx:r_float(section,"control_inertion_factor")
  77. else
  78. control_inertion_factor = 1
  79. end
  80.  
  81. local PDM_disp_base = read_if_exist(ltx, section, "PDM_disp_base", 1)
  82. local PDM_disp_vel_factor = read_if_exist(ltx, section, "PDM_disp_vel_factor", 1)
  83.  
  84. if control_inertion_factor < 2 and PDM_disp_base < 1.5 then
  85. val = (1 - math.pow(PDM_disp_vel_factor - 0.5, 2) + math.pow(2 - control_inertion_factor,2))*50
  86. else
  87. val = 15 - (2*PDM_disp_base + control_inertion_factor)
  88. end
  89.  
  90. return normalize(val)
  91. end
  92.  
  93. function GetAccuracy(section)
  94. local ltx = system_ini()
  95.  
  96. local fire_dispersion_base = ltx:r_float(section,"fire_dispersion_base")
  97. local cam_dispersion = ltx:r_float(section,"cam_dispersion")
  98. local cam_dispersion_inc = read_if_exist(ltx, section, "cam_dispertion_inc", 0)
  99. local cam_dispersion_frac = read_if_exist(ltx, section, "cam_dispertion_frac", 1)
  100. local cam_step_angle_horz = ltx:r_float(section,"cam_step_angle_horz")
  101. local rpm = ltx:r_float(section,"rpm")
  102. local ammo_list = ltx:r_string(section,"ammo_class")
  103.  
  104. local pos = string.find(ammo_list,",",1)
  105. local k_disp
  106. if nil ~= pos then
  107. local ammo = string.sub(ammo_list,1,pos - 1)
  108. k_disp = ltx:r_float(ammo, "k_disp");
  109. else
  110. k_disp = ltx:r_float(ammo_list, "k_disp");
  111. end
  112.  
  113. local val
  114. if show_single_fire_accuracy then
  115. if k_disp > 3.5 then -- shotgun pellets = 10
  116. k_disp = 1.0
  117. end
  118. local accfactor = fire_dispersion_base*k_disp
  119. if accfactor > 1.5 then accfactor = 1.5 end
  120. val = 100 - accfactor/0.015
  121. val = val * val / 100
  122. -- dbglog("first_shot_acc_%s=%f",section,val)
  123. else
  124. if k_disp > 3.5 then -- shotgun pellets = 10
  125. k_disp = 0.3
  126. end
  127.  
  128. local fir = math.log10(1/(fire_dispersion_base*k_disp))
  129. local inc = math.log10(1/(cam_dispersion/10 + cam_dispersion_inc))
  130. local dis = math.log10(1/(cam_dispersion*cam_step_angle_horz))
  131. local fra = math.pow(cam_dispersion_frac,1.5)
  132.  
  133. val = 30*fir + 15*dis*fra + 0.02*rpm*inc*fra
  134. -- dbglog("acc_%s=%f",section,val)
  135. end
  136.  
  137. return normalize(val)
  138. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement