Advertisement
cpscps

Untitled

May 25th, 2019
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.41 KB | None | 0 0
  1. import Character
  2. import Context
  3. import DataType
  4. import Inventory
  5. import Packet
  6. import time
  7. import GameState
  8.  
  9. # leroy.jenkins93
  10. # credit to @mahorori for star catching
  11. # last updated: v203
  12. # v203
  13.  
  14. # change this to the maximum number of stars you want.
  15. # set it to 100 if you want to go to the maximum number of stars
  16. starTo = 10
  17.  
  18. # change this to true if you want to use safeguard for stars 13-17
  19. safeguard = False
  20.  
  21. # change this to true if you want to star whatever item is in equip inventory slot 1
  22. fIStar = False
  23.  
  24. # change this to true if you want to star all items in your inventory
  25. aIStar = False
  26.  
  27. # change this to true if you want to star all equipped items
  28. eStar = True
  29.  
  30. # add the item id for items you want to ignore, separated by a comma
  31. # ex: whitelist = [111111, 222222, 333333]
  32. whitelist = []
  33.  
  34. # sf header and recv
  35. StarForceHeader = 0x0138
  36. StarForceRecv = 0x0150
  37. StarForceOpcode = 0x34
  38. StarCatchingOpcode = 0x35
  39.  
  40. ##############################################################################################
  41. ##############################################################################################
  42. ##############################################################################################
  43. # DO NOT MODIFY ANYTHING BELOW THIS POINT
  44. # DO NOT MODIFY ANYTHING BELOW THIS POINT
  45. # DO NOT MODIFY ANYTHING BELOW THIS POINT
  46. # DO NOT MODIFY ANYTHING BELOW THIS POINT
  47. # DO NOT MODIFY ANYTHING BELOW THIS POINT
  48. # DO NOT MODIFY ANYTHING BELOW THIS POINT
  49. # DO NOT MODIFY ANYTHING BELOW THIS POINT
  50. # DO NOT MODIFY ANYTHING BELOW THIS POINT
  51. # DO NOT MODIFY ANYTHING BELOW THIS POINT
  52. padding = 20
  53.  
  54. # CRand32
  55. class CRand32:
  56. def __init__(self, s1, s2, s3):
  57. self.m_s1 = s1
  58. self.m_past_s1 = s1
  59. self.m_s2 = s2
  60. self.m_past_s2 = s2
  61. self.m_s3 = s3
  62. self.m_past_s3 = s3
  63.  
  64. def Random(self):
  65. self.m_past_s1 = self.m_s1
  66. self.m_past_s2 = self.m_s2
  67. self.m_past_s3 = self.m_s3
  68. self.m_s1 = ((((self.m_s1 >> 6) ^ (self.m_s1 << 12)) & 0x00001FFF) ^ (self.m_s1 >> 19) ^ (self.m_s1 << 12)) & 0xFFFFFFFF
  69. self.m_s2 = ((((self.m_s2 >> 23) ^ (self.m_s2 << 4)) & 0x0000007F) ^ (self.m_s2 >> 25) ^ (self.m_s2 << 4)) & 0xFFFFFFFF
  70. self.m_s3 = ((((self.m_s3 << 17) ^ (self.m_s3 >> 8)) & 0x001FFFFF) ^ (self.m_s3 << 17) ^ (self.m_s3 >> 11)) & 0xFFFFFFFF
  71. return (self.m_s1 ^ self.m_s2 ^ self.m_s3) & 0xFFFFFFFF
  72.  
  73. def GenSecretCode(seed):
  74. seed *= 0x45C82BE5
  75. seed -= 0x2D09A4AB
  76. seed &= 0xFFFFFFFF
  77. msrand = CRand32(seed | 0x100000, seed | 0x1000, seed | 0x10)
  78. return msrand.Random()
  79.  
  80. def toHex(val, nbits):
  81. return ((val + (1 << nbits)) % (1 << nbits))
  82.  
  83. def starItem(pos, currStar, itemMaxStar, userMaxStar, itemid):
  84. print('{0} {1}'.format("Position: ".ljust(padding), str(pos)))
  85. slotStartingMeso = Character.GetMeso()
  86. slotStartingStar = currStar
  87. currCode = None
  88.  
  89. if itemid in whitelist:
  90. return
  91.  
  92. while currStar < userMaxStar and currStar < itemMaxStar and Inventory.GetItem(1, pos).valid:
  93. if GameState.IsInGame():
  94. print("#-----------------------Star-----------------------#")
  95. print('{0} {1}'.format("Starring From: ".ljust(padding), str(currStar)))
  96. print('{0} {1}'.format("User Max stars: ".ljust(padding), str(userMaxStar)))
  97. print('{0} {1}'.format("Item max stars: ".ljust(padding), str(itemMaxStar)))
  98. print('{0} {1}'.format("Item ID: ".ljust(padding), str(itemid)))
  99.  
  100. beforeMeso = Character.GetMeso()
  101.  
  102. cPacket = Packet.COutPacket(StarForceHeader)
  103. cPacket.Encode1(StarCatchingOpcode)
  104. Packet.SendPacket(cPacket)
  105.  
  106. ciPacket = Packet.WaitForRecv(StarForceRecv, 10000)
  107. if ciPacket.GetRemaining() != 6 or ciPacket.ReadLong(1) != StarCatchingOpcode:
  108. print('star catching packet error', flush=True)
  109. return
  110.  
  111. level = ciPacket.ReadLong(1)
  112. # 0130 01 053ADEC9 FFF5 [01] 678C8108 00000001 FFFFFFFF 01 00
  113. # 0130 01 058B16B9 FFF5 [01] 54A8F589 00000001 FFFFFFFF 00 00
  114. # star the item
  115. oPacket = Packet.COutPacket(StarForceHeader)
  116. oPacket.Encode1(1)
  117. oPacket.Encode4(int(time.monotonic()*1000))
  118. oPacket.Encode2(toHex(pos, 16))
  119. oPacket.Encode1(1)
  120. oPacket.Encode4(GenSecretCode(ciPacket.ReadLong(4)))
  121. oPacket.Encode4(1)
  122. oPacket.Encode4(0xFFFFFFFF)
  123. if safeguard and currStar in range(12, 17):
  124. oPacket.Encode1(1)
  125. print("SAFEGUARDING")
  126. else:
  127. oPacket.Encode1(0)
  128. oPacket.Encode1(1)
  129. Packet.SendPacket(oPacket)
  130.  
  131. # wait for recv
  132. iPacket = Packet.WaitForRecv(StarForceRecv, 10000)
  133.  
  134. afterMeso = Character.GetMeso()
  135. iCosted = beforeMeso - afterMeso
  136. print('{0} {1:,}'.format("Meso Cost of Star: ".ljust(padding), iCosted))
  137. print('{0} {1}'.format("iPacket remaining: ".ljust(padding), iPacket.GetRemaining()), flush = True)
  138.  
  139. # update current star counter
  140. currStar = Inventory.GetItem(1, pos).currentStar
  141.  
  142. # get max star again in case item blew up
  143. # item blown up means itemMaxStar = 0
  144. itemMaxStar = Inventory.GetItem(1, pos).maxStar
  145.  
  146. slotEndingMeso = Character.GetMeso()
  147. slotEndingStar = currStar
  148. slotTotalCost = slotStartingMeso - slotEndingMeso
  149. if (slotStartingMeso - slotEndingMeso) != 0:
  150. print('{0} {1:,} meso from star {2} to {3}\n'.format("Total Cost: ".ljust(padding), slotTotalCost, str(slotStartingStar), str(slotEndingStar)), flush = True)
  151.  
  152. def main():
  153. if GameState.IsInGame():
  154. if aIStar:
  155. items = Inventory.GetItems(1)
  156. for item in items:
  157. starItem(item.pos, item.currentStar, item.maxStar, starTo, item.id)
  158.  
  159. elif fIStar:
  160. # star first item in inventory
  161. item = Inventory.GetItem(1, 1)
  162. if item.valid:
  163. starItem(1, item.currentStar, item.maxStar, starTo, item.id)
  164.  
  165. if eStar:
  166. for x in range(-100, 0):
  167. item = Inventory.GetItem(1, x)
  168. if item.valid:
  169. starItem(x, item.currentStar, item.maxStar, starTo, item.id)
  170.  
  171. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement