Advertisement
cpscps

Untitled

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