Advertisement
cpscps

Untitled

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