Advertisement
Guest User

Fixed Manual Reload Script

a guest
Jan 28th, 2016
2,368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.77 KB | None | 0 0
  1. scn ManualReloadObjectScript
  2.  
  3. short AmmoCount
  4. short ClipSize
  5. ref EquippedAmmo
  6. ref EquippedWeapon
  7. short EquippedWeaponModFlags
  8. short ExtendedClip
  9. short HasWeaponMod1
  10. short HasWeaponMod2
  11. short HasWeaponMod3
  12. short ItemCount
  13. ref NewEquippedWeapon
  14. short NewEquippedWeaponModFlags
  15. short ReloadAnim
  16. short Reloading
  17. float ReloadTimer
  18. short SavedAmmo
  19. short WeaponAmmoUse
  20. ref WeaponMod1
  21. ref WeaponMod2
  22. ref WeaponMod3
  23. short WeaponMod1Effect
  24. short WeaponMod2Effect
  25. short WeaponMod3Effect
  26. short WeaponType
  27.  
  28. begin MenuMode
  29. if EquippedWeapon
  30. if Player.GetClipSize EquippedWeapon == 0
  31. ; Reset the magazine size
  32. Player.SetClipSize ClipSize EquippedWeapon
  33. if ExtendedClip
  34. ; Reset the weapon mod flags if using an extended magazine
  35. Player.SetEquippedWeaponModFlags EquippedWeaponModFlags
  36. endif
  37. endif
  38. endif
  39. ; Detect if the player is in the inventory menu
  40. if MenuMode 1002
  41. ; Go straight to the weapon checking code in the next block
  42. Goto 77
  43. endif
  44. end
  45.  
  46. begin GameMode
  47. ; Detect if the player presses the quick load button or dies
  48. if IsControlPressed 26 || Player.GetDead
  49. if EquippedWeapon
  50. if Player.GetClipSize EquippedWeapon == 0
  51. ; Reset the magazine size
  52. Player.SetClipSize ClipSize EquippedWeapon
  53. endif
  54. endif
  55. endif
  56. ; Detect if the game has been restarted
  57. if GetGameRestarted
  58. if EquippedWeapon
  59. if ExtendedClip
  60. ; Reset the weapon mod flags if a weapon with an extended magazine was equipped from a previous session
  61. Player.SetEquippedWeaponModFlags EquippedWeaponModFlags
  62. endif
  63. endif
  64. endif
  65. ; Detect if the game has been loaded
  66. if GetGameLoaded
  67. ; Reset the equipped weapon so that the script can be restarted
  68. set EquippedWeapon to 0
  69. endif
  70. Label 77
  71. ; Check to see if the weapon has changed so that relevant data can be updated
  72. if EquippedWeapon != Player.GetEquippedObject 5
  73. ; make sure clip size is reset on weapon change
  74. Player.SetClipSize ClipSize EquippedWeapon
  75. set EquippedWeapon to Player.GetEquippedObject 5
  76. if EquippedWeapon
  77. set ClipSize to Player.GetClipSize EquippedWeapon
  78. set EquippedAmmo to GetPlayerCurrentAmmo
  79. set EquippedWeaponModFlags to -1
  80. set ReloadAnim to Player.GetReloadAnim EquippedWeapon
  81. set WeaponAmmoUse to Player.GetWeaponAmmoUse EquippedWeapon
  82. set WeaponType to Player.GetWeaponType EquippedWeapon
  83. ; Exclude melee weapons, grenades, mines, and others
  84. if WeaponType < 3 || WeaponType > 9
  85. set EquippedAmmo to 0
  86. endif
  87. if EquippedAmmo
  88. ; Exclude Microfusion breeder ammo
  89. if EquippedAmmo == AmmoMicroBreeder
  90. set EquippedAmmo to 0
  91. ; Exclude Archimedes II charge ammo
  92. elseif EquippedAmmo == AmmoNVArchimedesII
  93. set EquippedAmmo to 0
  94. endif
  95. endif
  96. if EquippedAmmo
  97. ; Exclude Microfusion breeder ammo
  98. if EquippedAmmo == AmmoMicroBreeder
  99. set EquippedAmmo to 0
  100. ; Exclude Archimedes II charge ammo
  101. elseif EquippedAmmo == AmmoNVArchimedesII
  102. set EquippedAmmo to 0
  103. endif
  104. endif
  105. ; Update the stored ammo count
  106. if EquippedAmmo
  107. set ItemCount to ManualReloadContainerRef.GetItemCount EquippedWeapon
  108. if ItemCount
  109. set AmmoCount to Player.GetItemCount EquippedAmmo
  110. set ItemCount to ItemCount -1
  111. if ItemCount <= AmmoCount
  112. SetPlayerCurrentAmmoRounds ItemCount
  113. endif
  114. set ItemCount to ItemCount +1
  115. else
  116. ManualReloadContainerRef.AddItem EquippedWeapon 1
  117. set ItemCount to 1
  118. endif
  119. endif
  120. ; Reset the long reload animation check
  121. if Reloading
  122. set Reloading to 0
  123. set SavedAmmo to 0
  124. endif
  125. endif
  126. endif
  127. ; Check to see if the weapon mod flags have been changed so that relevant data can be updated
  128. if EquippedWeaponModFlags != Player.GetEquippedWeaponModFlags
  129. if EquippedWeapon
  130. ; Make sure that this did not happen right after automatic reload cancellation
  131. if Player.GetClipSize EquippedWeapon
  132. set EquippedWeaponModFlags to Player.GetEquippedWeaponModFlags
  133. set ExtendedClip to 0
  134. set HasWeaponMod1 to 0
  135. set HasWeaponMod2 to 0
  136. set HasWeaponMod3 to 0
  137. set WeaponMod1 to GetWeaponItemMod 1 EquippedWeapon
  138. set WeaponMod2 to GetWeaponItemMod 2 EquippedWeapon
  139. set WeaponMod3 to GetWeaponItemMod 3 EquippedWeapon
  140. if WeaponMod1
  141. set HasWeaponMod1 to LogicalAnd EquippedWeaponModFlags 1
  142. set WeaponMod1Effect to GetWeaponItemModEffect 1 EquippedWeapon
  143. if HasWeaponMod1 && WeaponMod1Effect == 2
  144. set ExtendedClip to 1
  145. endif
  146. endif
  147. if WeaponMod2
  148. set HasWeaponMod2 to LogicalAnd EquippedWeaponModFlags 2
  149. set WeaponMod2Effect to GetWeaponItemModEffect 2 EquippedWeapon
  150. if HasWeaponMod2 && WeaponMod2Effect == 2
  151. set ExtendedClip to 1
  152. endif
  153. endif
  154. if WeaponMod3
  155. set HasWeaponMod3 to LogicalAnd EquippedWeaponModFlags 4
  156. set WeaponMod3Effect to GetWeaponItemModEffect 3 EquippedWeapon
  157. if HasWeaponMod3 && WeaponMod3Effect == 2
  158. set ExtendedClip to 1
  159. endif
  160. endif
  161. endif
  162. endif
  163. endif
  164. ; Check to see if a valid weapon with valid ammo is equipped before continuing with automatic reload cancellation
  165. if EquippedAmmo && EquippedWeapon
  166. ; Check if the player is not in a menu
  167. if MenuMode == 0
  168. ; Check if the player is nearly out of ammo, if the player is not in VATS mode, if the player has pressed the fire button, and if the player's weapon is out
  169. if GetPlayerCurrentAmmoRounds == WeaponAmmoUse && GetVATSMode == 0 && IsControlPressed 4 && Player.IsWeaponOut
  170. ; Set the magazine size to zero to stop automatic reloading
  171. Player.SetClipSize 0 EquippedWeapon
  172. ; Remove the extended magazine if it exists
  173. if ExtendedClip
  174. if HasWeaponMod1 && WeaponMod1Effect == 2
  175. set NewEquippedWeaponModFlags to EquippedWeaponModFlags -1
  176. Player.SetEquippedWeaponModFlags NewEquippedWeaponModFlags
  177. elseif HasWeaponMod2 && WeaponMod2Effect == 2
  178. set NewEquippedWeaponModFlags to EquippedWeaponModFlags -2
  179. Player.SetEquippedWeaponModFlags NewEquippedWeaponModFlags
  180. elseif HasWeaponMod3 && WeaponMod3Effect == 2
  181. set NewEquippedWeaponModFlags to EquippedWeaponModFlags -4
  182. Player.SetEquippedWeaponModFlags NewEquippedWeaponModFlags
  183. endif
  184. endif
  185. endif
  186. ; Check if the player is out of ammo, if the player has pressed the reload button, or if the player has pressed any of the hotkeys
  187. if GetPlayerCurrentAmmoRounds == 0 || IsControlPressed 7 || IsControlPressed 17 || IsControlPressed 18 || IsControlPressed 19 || IsControlPressed 20 || IsControlPressed 21 || IsControlPressed 22 || IsControlPressed 23 || IsControlPressed 24
  188. ; Reset the magazine size
  189. Player.SetClipSize ClipSize EquippedWeapon
  190. if ExtendedClip
  191. ; Reset the weapon mod flags if using an extended magazine
  192. Player.SetEquippedWeaponModFlags EquippedWeaponModFlags
  193. endif
  194. endif
  195. endif
  196. ; Detect if a long reload animation has started playing so that some checks can be run later
  197. if ReloadAnim > 19
  198. set Reloading to 1
  199. set SavedAmmo to 0
  200. endif
  201. ; Update the stored ammo count
  202. ManualReloadContainerRef.RemoveItem EquippedWeapon ItemCount
  203. set ItemCount to GetPlayerCurrentAmmoRounds +1
  204. ManualReloadContainerRef.AddItem EquippedWeapon ItemCount
  205. endif
  206. ; Check if a long reload animation is currently being played
  207. if Reloading
  208. ; Save the ammo count in case reloading is interrupted
  209. if GetPlayerCurrentAmmoRounds != 0
  210. set SavedAmmo to GetPlayerCurrentAmmoRounds
  211. else
  212. SetPlayerCurrentAmmoRounds SavedAmmo
  213. endif
  214. ; Keep the timer running until the reload animation has stopped
  215. if ReloadTimer < 0.25
  216. set ReloadTimer to ReloadTimer + GetSecondsPassed
  217. else
  218. if Player.GetAnimAction != 17
  219. set Reloading to 0
  220. set SavedAmmo to 0
  221. endif
  222. set ReloadTimer to 0
  223. endif
  224. endif
  225. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement