Advertisement
Guest User

Untitled

a guest
Sep 5th, 2013
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 72.63 KB | None | 0 0
  1. #how to start quests:
  2. #find which customers can gain levels
  3. #work out the class masks
  4. #find where current quest data is
  5. #Read mail; send/recieve requests
  6. global Verbose
  7. Verbose=0
  8. global Reserve
  9. Reserve=1000000
  10. global MaxPrice
  11. MaxPrice=1000000
  12. import sys
  13. global PIndex
  14. import time
  15. import random
  16. global FromConsole
  17. FromConsole=0
  18.  
  19.  
  20. PIndex=9
  21.  
  22. if len(sys.argv)>1:
  23. PIndex=int(sys.argv[1])
  24. FromConsole=1
  25. if not FromConsole:
  26. Verbose=3
  27. #aeno33, davliu
  28.  
  29. global PlayerData
  30. global playerID
  31. global client
  32.  
  33. global DesiredClasses
  34. #DesiredClasses={'barbarian':1121532}
  35.  
  36. def GetPlayerData():
  37. global ID
  38. global PlayerData
  39. global playerID
  40. global client
  41. ID=7
  42. client='f726152cfa9b491960ad89d0df0'+str(random.randint(10000,99999))
  43. if PIndex==0:#aeno33
  44. playerID='5802223'
  45. PlayerData='{"method":"KongregateLogin","params":[{"user_id":6121613,"anonymous_id":"7a48e3eb48ff71783462ac6b671d7578","game_auth_token":"2ce2c54f7f1549787a245f67a6b4717e10b0df62cbc3cca424885fb8f7b05a03"}],"client_version":"16412","id":2,"time":'+str(int(time.time()*1000))+',"client_id":"'+client+'"}'
  46. elif PIndex==1:#JohnC
  47. playerID='0'
  48. PlayerData='######'
  49. elif PIndex==2:#dauntilus
  50. playerID='0'
  51. PlayerData='######'
  52. elif PIndex==3:#Town King?
  53. playerID='5860622'
  54. PlayerData='{"method":"KongregateLogin","params":[{"game_auth_token":"8dabfddd4dae5c4b3ad33a2295940964938d98b8dcadce4b09be8d65ac7c197c","user_id":12852015}],"client_version":"16412","id":2,"time":'+str(int(time.time()*1000))+',"client_id":"'+client+'"}'
  55. elif PIndex==4:#Gorkalax
  56. playerID='5860680'
  57. PlayerData='{"method":"KongregateLogin","params":[{"game_auth_token":"11915f2a6a194c6f93346e1d0fb7d913f82cc90a83de33a28435241851254110","user_id":12852226}],"client_version":"16412","id":2,"time":'+str(int(time.time()*1000))+',"client_id":"'+client+'"}'
  58. elif PIndex==5:#Belzbut
  59. playerID='5852643'
  60. PlayerData='{"method":"KongregateLogin","params":[{"user_id":12879476,"anonymous_id":"7a48e3eb48ff71783462ac6b671d7578","game_auth_token":"d39b0d505e911137b6ff6b1cb20f3b3d817cfda28857a2cbb3e15961ca725a69"}]'
  61. PlayerData+=',"client_version":"16412","id":2,"time":'+str(int(time.time()*1000))+',"client_id":"'+client+'"}'
  62. elif PIndex==6:#wtfgoingon
  63. playerID='5871027'
  64. PlayerData='{"method":"KongregateLogin","params":[{"user_id":12879576,"anonymous_id":"7a48e3eb48ff71783462ac6b671d7578","game_auth_token":"7aa0997ed5ca9aefdfe5d5a2609e103db55fd82ac6ee41b21928c31acd92b626"}]'
  65. PlayerData+=',"client_version":"16412","id":2,"time":'+str(int(time.time()*1000))+',"client_id":"'+client+'"}'
  66. elif PIndex==7:#lastlmgof
  67. playerID='5871038'
  68. PlayerData='{"method":"KongregateLogin","params":[{"user_id":12879606,"anonymous_id":"7a48e3eb48ff71783462ac6b671d7578","game_auth_token":"732c8970632522314532fba0b42151b355f556ea962566ed3d5c0c5f96feede9"}]'
  69. PlayerData+=',"client_version":"16412","id":2,"time":'+str(int(time.time()*1000))+',"client_id":"'+client+'"}'
  70. elif PIndex==8:#dalmon
  71. playerID='5887736'
  72. PlayerData='{"method":"KongregateLogin","params":[{"user_id":12930844,"anonymous_id":"7a48e3eb48ff71783462ac6b671d7578","game_auth_token":"cdc542ead607ec594aa4e537955a14aff8a82cbc63f200339fb942b66462abc9"}]'
  73. PlayerData+=',"client_version":"16412","id":2,"time":'+str(int(time.time()*1000))+',"client_id":"'+client+'"}'
  74. elif PIndex==9:#guestacct
  75. playerID='5897053'
  76. PlayerData='{"client_id":"'+client+'","params":[{"username":"a2578a96750203e647171801ebfe4bb8","password":"a2578a96750203e647171801ebfe4bb8"}]'
  77. PlayerData+=',"client_version":"16412","id":2,"time":'+str(int(time.time()*1000))+',"method":"GuestLogin"}'
  78. return PlayerData#
  79. def vPrint(x):
  80. if Verbose:
  81. print x
  82.  
  83. class PriorityQueue:
  84. """
  85. Implements a priority queue data structure. Each inserted item
  86. has a priority associated with it and the client is usually interested
  87. in quick retrieval of the lowest-priority item in the queue. This
  88. data structure allows O(1) access to the lowest-priority item.
  89. """
  90.  
  91. def __init__(self):
  92. """
  93. heap: A binomial heap storing [priority,item]
  94. lists.
  95.  
  96. dict: Dictionary storing item -> [priorirty,item]
  97. maps so we can reach into heap for a given
  98. item and update the priorirty and heapify
  99. """
  100. self.heap = []
  101. self.dict = {}
  102.  
  103. def push(self,item,priority):
  104. """
  105. Sets the priority of the 'item' to
  106. priority. If the 'item' is already
  107. in the queue, then its key is changed
  108. to the new priority, regardless if it
  109. is higher or lower than the current
  110. priority.
  111. """
  112. if item in self.dict:
  113. self.dict[item][0] = priority
  114. heapq.heapify(self.heap)
  115. else:
  116. pair = [priority,item]
  117. heapq.heappush(self.heap,pair)
  118. self.dict[item] = pair
  119.  
  120. def getPriority(self,item):
  121. """
  122. Get priority of 'item'. If
  123. 'item' is not in the queue returns None
  124. """
  125. if not item in self.dict:
  126. return None
  127. return self.dict[item][0]
  128.  
  129. def pop(self):
  130. """
  131. Returns lowest-priority item in priority queue, or
  132. None if the queue is empty
  133. """
  134. if self.isEmpty(): return None
  135. (priority,item) = heapq.heappop(self.heap)
  136. del self.dict[item]
  137. return item
  138.  
  139. def isEmpty(self):
  140. """
  141. Returns True if the queue is empty
  142. """
  143. return len(self.heap) == 0
  144.  
  145. def RefreshSession():
  146.  
  147. data='input='+codify(GetPlayerData())
  148. url='http://www.edgebee.com/shopr2/client_action'
  149. q=mecGet(url,data)
  150. q=q.read()
  151. global NightData
  152. try:
  153. NightData=json.loads(q)
  154. except:
  155. q=zlib.decompress(q, 16+zlib.MAX_WBITS)
  156. NightData=json.loads(q)
  157. if ('result' not in NightData) or len(NightData['result'])==1:
  158. print NightData
  159. return 0
  160. global InstancetoCatID
  161. InstancetoCatID={}
  162. global itemMap
  163. global IDtoCat
  164. for i in NightData['result']['player']['item_instances']:
  165. itemMap[IDtoCat[i['item_id']]][i['item_id']].instance=i['id']
  166. itemMap[IDtoCat[i['item_id']]][i['item_id']].count=i['count']
  167. InstancetoCatID[i['id']]=[IDtoCat[i['item_id']],i['item_id']]
  168. global ses
  169. global ID
  170. ses=str(NightData['result']['session'])
  171. ID=3
  172.  
  173. NewData=NightData
  174. global Cash
  175. Cash=NightData['result']['player']['money']
  176. global MaxPrice
  177. MaxPrice=Cash
  178. global Level
  179. global Reserve
  180. Level=NightData['result']['player']['level']
  181. Exp=NightData['result']['player']['_xp']
  182. print PIndex, Level, Cash, Exp
  183. if Level<40:
  184. Reserve=10000
  185. if Level<40:
  186. Reserve=0
  187. global Modules
  188. global AllRecipes
  189. global Unresearched
  190. global ResearchNow
  191. #Modules={}
  192. AllRecipes={}
  193. Unresearched=[]
  194. ResearchNow={}
  195. global ActiveWorkers
  196. global ActiveCodenames
  197. global AllCodenames
  198. global resource
  199. resource=getResource(NightData)
  200. ActiveWorkers={}
  201. ActiveCodenames={}
  202. AllCodenames={}
  203. global AllWorkers
  204. AllWorkers={}
  205. global Protected
  206. global ProtectedQuantity
  207. Protected=[]
  208. global DesiredItems
  209. DesiredItems=[]
  210. if PIndex==1:
  211. needed=[90]
  212. for i in needed:
  213. if itemMap[IDtoCat[i]][i].count<150:
  214. DesiredItems.append(i)
  215. Protected.append(i)
  216.  
  217. global DesiredClasses
  218. DesiredClasses={}
  219. if NightData['result']['player']['group']['name']=="BestVilleUSA":
  220. for i in NightData['result']['player']['group']['improvement_instances']:
  221. if i['state']==1:
  222. impID=i['improvement_id']
  223. for k in StaticData['result']['improvements'][impID-1]['requirements']:
  224. if k['character_codename']!=None:
  225. DesiredClasses[k['character_codename']]=i['id']
  226. if k['item_id']!=0:
  227. if itemMap[IDtoCat[k['item_id']]][k['item_id']].count<k['amount']:
  228. DesiredItems.append(k['item_id'])
  229. global longRunDesired
  230. longRunDesired={}
  231. if PIndex==3:
  232. for i in StaticData['result']['improvements'] :
  233. for j in i['requirements']:
  234. if j['item_id']!=0:
  235. longRunDesired[j['item_id']]=j['amount']
  236.  
  237. vPrint(DesiredClasses)
  238. global ModuleFamilies
  239. global ModuleFamilyMap
  240. ModuleFamilies=[]
  241. ModuleFamilyMap={}
  242. for i in StaticData['result']['modules']:
  243. if i['parent_id']!= 0 and i['disabled']==False:
  244. ID1=i['parent_id']
  245. ID2=i['id']
  246. if ID1 in ModuleFamilyMap:
  247. if not ID2 in ModuleFamilyMap[ID1]:
  248. ModuleFamilyMap[ID1].append(ID2)
  249. ModuleFamilyMap[ID2]=ModuleFamilyMap[ID1]
  250. elif ID2 in ModuleFamilyMap:
  251. ModuleFamilyMap[ID2].append(ID1)
  252. ModuleFamilyMap[ID1]=ModuleFamilyMap[ID2]
  253. else:
  254. ModuleFamilies.append([ID1,ID2])
  255. ModuleFamilyMap[ID1]=ModuleFamilies[-1]
  256. ModuleFamilyMap[ID2]=ModuleFamilies[-1]
  257.  
  258. for worker in NewData['result']['player']['worker_instances']:
  259. if worker['is_hired']:
  260. ActiveWorkers[worker['worker_id']]=Worker(worker['worker_id'], worker['id'], StaticData['result']['character_classes'][StaticData['result']['workers'][worker['worker_id']-1]['character_class_id']-1]['codename'])
  261. ActiveCodenames[StaticData['result']['character_classes'][StaticData['result']['workers'][worker['worker_id']-1]['character_class_id']-1]['codename']]=worker['worker_id']
  262. AllCodenames[StaticData['result']['character_classes'][StaticData['result']['workers'][worker['worker_id']-1]['character_class_id']-1]['codename']]=worker['worker_id']
  263. AllWorkers[worker['worker_id']]=Worker(worker['worker_id'], worker['id'], StaticData['result']['character_classes'][StaticData['result']['workers'][worker['worker_id']-1]['character_class_id']-1]['codename'])
  264.  
  265. global MyModules
  266. MyModules=[]
  267. global MyModulesMap
  268. MyModulesMap={}
  269. global MyModulesInstanceMap
  270. MyModulesInstanceMap={}
  271. for module in NewData['result']['player']['module_instances']:
  272. ModuleID=module['module_id']
  273. MyModulesInstanceMap[module['id']]=[module['module_id'],module['level']]
  274. if not ModuleID in MyModulesMap:
  275. MyModules.append([Module(module['module_id'], module['level'],module['id'])])
  276. if ModuleID in ModuleFamilyMap:
  277. for i in ModuleFamilyMap[ModuleID]:
  278. MyModulesMap[i]=MyModules[-1]
  279. else:
  280. MyModulesMap[ModuleID]=MyModules[-1]
  281. else:
  282. MyModulesMap[ModuleID].append(Module(module['module_id'], module['level'],module['id']))
  283. for recipe in NewData['result']['player']['recipe_instances']:
  284. if recipe['researched_count']==0:
  285. Unresearched.append(recipe['recipe_id'])
  286. AllRecipes[recipe['recipe_id']]=Recipe(recipe['id'],recipe['researched_count'])
  287. for item in NewData['result']['player']['item_instances']:
  288. if item['item_id'] in AllRecipes:
  289. AllRecipes[item['item_id']].crafted=item['crafted']
  290. AllRecipes[item['item_id']].itemLongID=item['id']
  291. for i in Unresearched:
  292. recipeData=StaticData['result']['recipes'][i-1]
  293. if recipeData['worker_codename'] in ActiveCodenames:
  294. ModuleID=recipeData['module_id']
  295. if ModuleID in MyModulesMap:
  296. for j in MyModulesMap[ModuleID]:
  297. if j.ModuleID > ModuleID:
  298. ResearchNow[i]=recipeData
  299. elif j.ModuleID==ModuleID and j.ModuleLevel>=recipeData['module_level']:
  300. ResearchNow[i]=recipeData
  301. for i in ResearchNow:
  302. 1
  303. vPrint("Research "+str(itemMap[IDtoCat[i]][i].name))
  304.  
  305. global WhatToMake
  306. WhatToMake=[[],[],[]]
  307. for unlock in StaticData['result']['recipe_unlocks']:
  308. if unlock['crafted_item_id'] in AllRecipes and not unlock['recipe_id'] in AllRecipes:
  309. WhatToMake[0].append(unlock['crafted_item_id'])
  310.  
  311. for i in longRunDesired:
  312. Protected.append(i)
  313. if itemMap[IDtoCat[i]][i].count < longRunDesired[i]:
  314. WhatToMake[0].insert(0,i)
  315. for i in DesiredItems:
  316. WhatToMake[0].insert(0,i)
  317. Protected.append(i)
  318. ProtectedQuantity={}
  319. global ListofJobs
  320. ListofJobs=[]
  321.  
  322. for unlock in StaticData['result']['recipe_unlocks']:
  323. if not unlock['recipe_id'] in AllRecipes:
  324. NeedToMake=unlock['crafted_item_id']
  325. Quantity=unlock['crafted_item_count']
  326. Parts=StaticData['result']['recipes'][NeedToMake-1]['components']
  327. for i in Parts:
  328. if i['resource_id']==0:
  329. ComponentItem=i['item_id']
  330. Q2=Quantity*i['quantity']
  331. if not ComponentItem in ProtectedQuantity:
  332. ProtectedQuantity[ComponentItem]=Q2
  333. else:
  334. ProtectedQuantity[ComponentItem]+=Q2
  335. for ComponentItem in ProtectedQuantity:
  336. if itemMap[IDtoCat[ComponentItem]][ComponentItem].count<ProtectedQuantity[ComponentItem]:
  337. Protected.append(ComponentItem)
  338. for i in Protected:
  339. recipe=StaticData['result']['recipes'][i-1]
  340. for part in recipe['components']:
  341. if part['resource_id']==0:
  342. if not part['item_id'] in Protected:
  343. Protected.append(part['item_id'])
  344. UsedResources=[]
  345. global Burn
  346. Burn=[]
  347. for i in resource:
  348. if resource[i]>MaxRes[i]*0.8 and not i in Burn:
  349. Burn.append(i)
  350. if (Level<75 and PIndex!=3):
  351. Burn=range(1,16)
  352. SearchingWide=0
  353. #print Burn
  354. while 1:
  355. potential=[]
  356. ItemQueue=PriorityQueue()
  357. for i in AllRecipes:
  358. if SearchingWide or i in Protected:
  359. recipeData=StaticData['result']['recipes'][i-1]
  360. #if can make
  361. if recipeData['worker_codename'] in ActiveCodenames:
  362. ModuleID=recipeData['module_id']
  363. if ModuleID in MyModulesMap:
  364. for j in MyModulesMap[ModuleID]:
  365. if j.ModuleID > ModuleID or (j.ModuleID==ModuleID and j.ModuleLevel>=recipeData['module_level']):
  366. BadFlag=0
  367. for j in recipeData['components']:
  368. if j['resource_id']==0:
  369. BadFlag=1
  370. if j['resource_id'] not in Burn:
  371. BadFlag=1
  372. if BadFlag:
  373. continue
  374. price=StaticData['result']['items'][i-1]['price']
  375. ItemQueue.push(i,-price)
  376. while not ItemQueue.isEmpty():
  377. i=ItemQueue.pop()
  378. WhatToMake[2].append(i)
  379. if SearchingWide:
  380. break
  381. else:
  382. SearchingWide=1
  383. ## i=ItemQueue.pop()
  384. ## if i ==None:
  385. ## if SearchingWide:
  386. ## break
  387. ## else:
  388. ## SearchingWide=1
  389. ## continue
  390. ## WhatToMake[2].append(i)
  391. ## for j in StaticData['result']['recipes'][i-1]['components']:
  392. ## Burn.remove(j['resource_id'])
  393. #Assign modules to workers
  394. # WhatToMake[0].append(169)
  395. global WorkerNeeds
  396. WorkerNeeds={}
  397. for WhatSub in WhatToMake:
  398. for i in WhatSub:
  399. recipeData=StaticData['result']['recipes'][i-1]
  400. Components=[]
  401. for j in recipeData['components']:
  402. if j['resource_id']==0:
  403. Components.append(j['item_id'])
  404. if len(Components)>0:
  405. BadFlag=0
  406. for j in range(501,515):
  407. if j in Components:
  408. BadFlag=1
  409. if BadFlag:
  410. #print "Skipping Rare Ingredient"
  411. continue
  412. for j in Components:
  413. if itemMap[IDtoCat[j]][j].count<5 and j not in WhatToMake[1]:
  414. #print itemMap[IDtoCat[j]][j].count
  415. #print itemMap[IDtoCat[j]][j].name +' to make '+itemMap[IDtoCat[i]][i].name
  416. WhatToMake[1].append(j)
  417. if AllCodenames[recipeData['worker_codename']] in ActiveWorkers:
  418. WorkerID=AllWorkers[AllCodenames[recipeData['worker_codename']]].ID
  419. ModuleID=recipeData['module_id']
  420. ModuleLevel=recipeData['module_level']
  421. if not WorkerID in WorkerNeeds:
  422. WorkerNeeds[WorkerID]=[]
  423. if not (ModuleID,ModuleLevel) in WorkerNeeds[WorkerID]:
  424. WorkerNeeds[WorkerID].append((ModuleID,ModuleLevel))
  425.  
  426. global ModuleAssignments
  427. #print WorkerNeeds
  428. ModuleAssignments={}
  429. TakenModules=[]
  430. WorkerList=[]
  431. for i in ActiveWorkers:
  432. WorkerList.append(i)
  433. random.shuffle(WorkerList)
  434. #print WorkerList
  435. #print WorkerList
  436. #print WorkerNeeds
  437. for i in WorkerList:
  438. WorkerLongID=AllWorkers[i].longID
  439. if not WorkerLongID in ModuleAssignments:
  440. ModuleAssignments[WorkerLongID]={}
  441. while 1:
  442. if i not in WorkerNeeds or len(WorkerNeeds[i])==0:
  443. break
  444. need = max(WorkerNeeds[i])
  445. WorkerNeeds[i].remove(need)
  446. if need[0] in ModuleAssignments[WorkerLongID] or (need[0] not in MyModulesMap):
  447. continue
  448. else:
  449. PotentialModules=MyModulesMap[need[0]]
  450. ModuleQueue=PriorityQueue()
  451. for j in PotentialModules:
  452. if not j.InstanceID in TakenModules:
  453. if j.ModuleID>need[0] or (j.ModuleID==need[0] and j.ModuleLevel>= need[1]):
  454. ModuleQueue.push(j, (100*j.ModuleID + j.ModuleLevel))
  455. BestModule=ModuleQueue.pop()
  456. if BestModule==None:
  457. 1
  458. else:
  459. MatchingModules=ModuleFamilyMap[need[0]]
  460. for j in MatchingModules:
  461. if j<= BestModule.ModuleID:
  462. ModuleAssignments[WorkerLongID][j]=BestModule.InstanceID
  463. TakenModules.append(BestModule.InstanceID)
  464.  
  465. #print ModuleAssignments
  466. for WhatSub in WhatToMake:
  467. for i in WhatSub:
  468. recipeData=StaticData['result']['recipes'][i-1]
  469. RecipeID=i
  470. if (RecipeID not in AllRecipes) or (AllRecipes[RecipeID].researched==0):
  471. continue
  472. WorkerInstanceID=AllWorkers[AllCodenames[recipeData['worker_codename']]].longID
  473. ResourceTypes=[]
  474. ResourceQuantity=[]
  475. Components=[]
  476. for j in recipeData['components']:
  477. if j['resource_id']>0:
  478. ResourceTypes.append(j['resource_id'])
  479. ResourceQuantity.append(j['quantity'])
  480. else:
  481. Components.append(j['item_id'])
  482. if len(Components)>0:
  483. temp=[]
  484. BadFlag=0
  485. for j in range(501,515):
  486. if j in Components:
  487. BadFlag=1
  488. if BadFlag:
  489. #print "Skipping Rare Ingredient"
  490. continue
  491. for j in Components:
  492. if itemMap[IDtoCat[j]][j].count<5 and j not in WhatToMake[1]:
  493. #print itemMap[IDtoCat[j]][j].count
  494. #print itemMap[IDtoCat[j]][j].name +' to make '+itemMap[IDtoCat[RecipeID]][RecipeID].name
  495. WhatToMake[1].append(j)
  496. if not j in Protected:
  497. Protected.append(j)
  498. temp.append([itemMap[IDtoCat[j]][j].instance,0])
  499. Components=temp
  500. RecipeInstanceID=AllRecipes[RecipeID].longID
  501. #What ModuleInstanceID, if any, can we use?
  502. if WorkerInstanceID in ModuleAssignments and recipeData['module_id'] in ModuleAssignments[WorkerInstanceID]:
  503. AssignedModule=MyModulesInstanceMap[ModuleAssignments[WorkerInstanceID][recipeData['module_id']]]
  504. if AssignedModule[0]>recipeData['module_id'] or (AssignedModule[0]==recipeData['module_id'] and AssignedModule[1]>=recipeData['module_level']):
  505. #p#rint [MyModulesInstanceMap[ModuleAssignments[WorkerInstanceID][recipeData['module_id']]], recipeData['module_level']]
  506. ModuleInstanceID=ModuleAssignments[WorkerInstanceID][recipeData['module_id']]
  507. else:
  508. continue
  509. else:
  510. #p#rint Name(RecipeID)
  511. continue
  512. ItemInstanceID=itemMap[IDtoCat[RecipeID]][RecipeID].instance
  513. Time=StaticData['result']['recipes'][i-1]['crafting_time']*100+100
  514. if Time==500:
  515. Time=700
  516. if Time==600:
  517. Time=1000
  518. #what im making
  519. #print [WorkerInstanceID,ResourceTypes,ResourceQuantity,1,RecipeID,RecipeInstanceID,ModuleInstanceID,0,ItemInstanceID,Time,Components,str(itemMap[IDtoCat[RecipeID]][RecipeID].name)]
  520. ListofJobs.append([WorkerInstanceID,ResourceTypes,ResourceQuantity,1,RecipeID,RecipeInstanceID,ModuleInstanceID,0,ItemInstanceID,Time,Components,str(itemMap[IDtoCat[RecipeID]][RecipeID].name)])
  521. #Possible List:
  522. MakeList=set(WhatToMake[0]+WhatToMake[1])
  523. global WorkerUsefulness
  524. WorkerUsefulness={}
  525. for i in MakeList:
  526. recipeData=StaticData['result']['recipes'][i-1]
  527. moduleID=recipeData['module_id']
  528. moduleLevel=recipeData['module_level']
  529. if not moduleID in MyModulesMap:
  530. continue
  531. potentialModules=MyModulesMap[moduleID]
  532. for j in potentialModules:
  533. if j.ModuleID>moduleID or (j.ModuleID==moduleID and j.ModuleLevel>= moduleLevel):
  534. havemats=1
  535. for component in recipeData['components']:
  536. if component['resource_id']==0:
  537. item=component['item_id']
  538. if itemMap[IDtoCat[item]][item].count<5:
  539. havemats=0
  540. if havemats:
  541. if not recipeData['worker_codename'] in WorkerUsefulness:
  542. WorkerUsefulness[recipeData['worker_codename']]=1
  543. else:
  544. WorkerUsefulness[recipeData['worker_codename']]+=1
  545. break
  546. else:
  547. 1
  548. #print "no mats"
  549. for i in Unresearched:
  550. recipeData=StaticData['result']['recipes'][i-1]
  551. if recipeData['worker_codename'] in AllCodenames:
  552. ModuleID=recipeData['module_id']
  553. if ModuleID in MyModulesMap:
  554. for j in MyModulesMap[ModuleID]:
  555. if j.ModuleID > ModuleID or (j.ModuleID==ModuleID and j.ModuleLevel>=recipeData['module_level']):
  556. if not recipeData['worker_codename'] in WorkerUsefulness:
  557. WorkerUsefulness[recipeData['worker_codename']]=1
  558. else:
  559. WorkerUsefulness[recipeData['worker_codename']]+=1
  560. break
  561. global sellBonusGold
  562. global sellBonusXP
  563. global craftBonus
  564.  
  565. sellBonusGold=0
  566. sellBonusXP=0
  567. craftBonus=0
  568. for i in NightData['result']['player']['module_instances']:
  569. for j in StaticData['result']['modules'][i['module_id']-1]['modifiers']:
  570. if j['modifies']=='craft_xp.all':
  571. craftBonus+=j['add']
  572. if 'add_level' in j:
  573. craftBonus+=j['add_level']*i['level']
  574. if j['modifies']=='sell_xp.all':
  575. sellBonusXP+=j['add']
  576. if 'add_level' in j:
  577. sellBonusXP+=j['add_level']*i['level']
  578. if j['modifies']=='sell_price.all':
  579. sellBonusGold+=j['add']
  580. if 'add_level' in j:
  581. sellBonusGold+=j['add_level']*i['level']
  582. #print [sellBonusGold, sellBonusXP, craftBonus]
  583. #refend
  584. huntcount=0
  585. global validhunts
  586. validhunts={}
  587. AllHunts=[]
  588. global QuestingCustomers
  589. QuestingCustomers=[]
  590. for i in NightData['result']['player']['hunt_instances']:
  591. if i['customer_id']!=0:
  592. huntcount+=1
  593. else:
  594. validhunts[i['hunt_id']]=i['id']
  595. AllHunts.append(i['hunt_id'])
  596. if huntcount<3:
  597. vPrint((3-huntcount," hunts available"))
  598. for i in StaticData['result']['hunts']:
  599. if i['id'] not in AllHunts and i['unlock_fame_level']<Level:
  600. GetNewQuest(i['id'])
  601. BestCustomers=PriorityQueue()
  602. for i in NightData['result']['player']['customer_instances']:
  603. if i['max_level']>5:
  604. #print i['customer_id'],i['max_level'],i['level']
  605. BestCustomers.push(i['customer_id'],-(i['max_level']-i['level'])*i['max_level'])
  606. while (not BestCustomers.isEmpty()) and (len(QuestingCustomers)<6):
  607. QuestingCustomers.append(BestCustomers.pop())
  608. global CustomerAffs
  609. CustomerAffs={}
  610. for i in NightData['result']['player']['customer_instances']:
  611. CustomerAffs[i['customer_id']]=i['shop_affinity']
  612. return 1
  613.  
  614. import os
  615. import sys
  616. import json
  617. import Queue
  618. import zlib
  619. import urllib2
  620. import gzip
  621. import mechanize
  622. import time
  623. import urllib
  624. global br
  625. global craftBonus
  626. global sellBonusXP
  627. global sellBonusGold
  628. sellBonusGold=4
  629. sellBonusXP=3
  630. craftBonus=2
  631. import copy
  632.  
  633. class Module:
  634. def __init__(self,moduleID, moduleLevel,instanceID):
  635. self.ModuleID=moduleID
  636. self.ModuleLevel=moduleLevel
  637. self.InstanceID=instanceID
  638.  
  639. class Item:
  640. def __init__(self, Id, price, level, sellXP, buyPrice, name, craftXP):
  641. self.id=Id
  642. self.price=price
  643. self.level=level
  644. self.sellXP=sellXP
  645. self.count=0
  646. self.instance=0
  647. self.buyPrice=buyPrice
  648. self.name=name
  649. self.craftXP=craftXP
  650.  
  651.  
  652. global itemMap
  653. global IDtoCat
  654. global NameDict
  655. itemMap={}
  656. IDtoCat={}
  657. NameDict={}
  658. StaticData=json.loads(open('realdata.txt','r').read())
  659. for i in StaticData['result']['assets']:
  660. NameDict[i['id']]=i['value']
  661. for i in StaticData['result']['items']:
  662. if not i['type'] in itemMap:
  663. itemMap[i['type']]={}
  664. name=NameDict[i["name_id"]]
  665. itemMap[i['type']][i['id']]=Item(i['id'],i['price'],i['level'],i['sell_xp'],i['purchase_price'],name, i['craft_xp'])
  666. IDtoCat[i['id']]=i['type']
  667.  
  668. global ClassesUse
  669. ClassesUse={}
  670. for i in StaticData['result']['character_classes']:
  671. if i['items_mask']!=0:
  672. if not i['id'] in ClassesUse:
  673. ClassesUse[i['id']]=[]
  674. n=0
  675. valid=bin(i['items_mask'])[2:]
  676. while n<len(valid):
  677. if valid[-n-1]=='1':
  678. ClassesUse[i['id']].append(2**n)
  679. n+=1
  680.  
  681. br = mechanize._mechanize.Browser()
  682. #br.set_proxies({"http":'localhost:8888'})
  683. cj = mechanize.LWPCookieJar()
  684. br.set_cookiejar(cj)
  685. br.set_handle_robots(False)
  686. def codify(S):
  687. S=urllib.quote(S)
  688. S=S.replace("_",'%5F')
  689. return S
  690. def mecGet(url, data='', cookies=0):
  691. #print data
  692. if data=='':
  693. req=mechanize.Request(url)
  694. else:
  695. req=mechanize.Request(url, data)
  696. req.add_header('Content-Length',len(data))
  697. if cookies!=0:
  698. req.add_header('Cookie',cookies)
  699. req.add_header('Host','www.edgebee.com')
  700. req.add_header('Connection','keep-alive')
  701.  
  702. req.add_header('Origin','http://dluw3bk7cxwyu.cloudfront.net')
  703. req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36")
  704. req.add_header('content-type', 'application/x-www-form-urlencoded')
  705. req.add_header('Accept', '*/*')
  706. req.add_header("Referer", "http://dluw3bk7cxwyu.cloudfront.net/static/shopr2_flash_16412.swf")
  707.  
  708. req.add_header('Accept-Encoding', 'gzip,deflate,sdch')
  709. req.add_header('Accept-Language','en-US,en;q=0.8')
  710. while 1:
  711. try:
  712. response = br.open(req, timeout=15)
  713. break
  714. except:
  715. continue
  716. return response
  717.  
  718. global ID
  719. global ses
  720.  
  721. global index
  722. global prodIndex
  723. index=-1
  724. prodIndex=0
  725. global tick
  726. tick=5
  727.  
  728. def Name(n):
  729. return itemMap[IDtoCat[n]][n].name
  730. def Count(n):
  731. return itemMap[IDtoCat[n]][n].count
  732. def Maker(n):
  733. return StaticData['result']['recipes'][i-1]['worker_codename']
  734. import random
  735.  
  736. class Recipe:
  737. def __init__(self, longID, researched):
  738. self.longID=longID
  739. self.researched=researched
  740. class Worker:
  741. def __init__(self, ID, longID, codeName):
  742. self.longID=longID
  743. self.ID=ID
  744. self.codeName=codeName
  745.  
  746.  
  747.  
  748.  
  749. def Inc():
  750. global ID
  751. ID=ID+1
  752. global index
  753. index=index+1
  754. def ProdInc():
  755. global prodIndex
  756. prodIndex=prodIndex+1
  757.  
  758. def SellItem(price, instance, itemID, xp, customer):
  759. Inc()
  760. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"price":%i,"item_instance_id":%i,"item_instance_temp_id":0,"item_id":%i,"xp":%i,"customer_id":%i},"player_id":%s,"index":%i,"event":"SellItemEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick),price, instance, itemID, xp, customer,playerID,index,client)
  761. #print data
  762. data='input='+codify(data)
  763. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  764.  
  765. def SellSuggest(price, instance, itemID, xp, customer):
  766. Inc()
  767. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"price":%i,"item_instance_id":%i,"item_instance_temp_id":0,"item_id":%i,"xp":%i,"customer_id":%i},"player_id":%s,"index":%i,"event":"SuggestItemEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick),price, instance, itemID, xp, customer,playerID,index,client)
  768. #print data
  769. data='input='+codify(data)
  770. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  771.  
  772. def BuyItem(price, instance,customer):
  773. Inc()
  774. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"price":%i,"item_instance_temp_id":0,"item_instance_id":%i,"customer_id":%i},"player_id":%s,"index":%i,"event":"CustomerBuyItemEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick),price, instance, customer,playerID,index,client)
  775. #print data
  776. data='input='+codify(data)
  777. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  778.  
  779. def BuyNewItem(price,customer):
  780. Inc()
  781. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"price":%i,"item_instance_temp_id":1,"item_instance_id":0,"customer_id":%i},"player_id":%s,"index":%i,"event":"CustomerBuyItemEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick),price, customer,playerID,index,client)
  782. #print data
  783. data='input='+codify(data)
  784. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  785.  
  786.  
  787. def ResearchStart(worker, recipeID, recipeInstance, moduleInstance, itemInstance):
  788. global tick
  789. #print index
  790. Inc()
  791. ProdInc()
  792. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"is_research":true,"component_item_instance_ids":[],"resource_ids":[],"index":%i,"resource_amounts":[],"recipe_id":%i,"worker_instance_id":%i,"recipe_instance_id":[%i,0]},"player_id":%s,"index":%i,"event":"QueueCraftingEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick),prodIndex, recipeID, worker, recipeInstance,playerID,index,client)
  793. #print data
  794. data='input='+codify(data)
  795. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  796.  
  797. tick=tick+5
  798. Inc()
  799. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"is_research":true,"queue_slot_index":%i,"module_instance_id":%i,"recipe_id":%i,"worker_instance_id":%i,"recipe_instance_id":[%i,0]},"player_id":%s,"index":%i,"event":"StartCraftingEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick), prodIndex,moduleInstance, recipeID, worker, recipeInstance,playerID,index,client)
  800. #print data
  801. data='input='+codify(data)
  802. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  803.  
  804.  
  805. def ResearchEnd(worker, recipeID, recipeInstance, moduleInstance, itemInstance):
  806. Inc()
  807. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"worker_instance_id":%i,"xp":0,"item_instance_id":[%i,0],"recipe_instance_id":%i},"player_id":%s,"index":%i,"event":"EndCraftingEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick),worker, itemInstance,recipeInstance,playerID,index,client)
  808. #print data
  809. data='input='+codify(data)
  810. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  811.  
  812. def ContributeCustomer(customer, module):
  813. Inc()
  814. data='{"method":"AddPredictedCommand","params":[{"tick":%i,"data":{"requirement_index":0,"improvement_id":%i,"customer_id":%i},"player_id":%s,"index":%i,"session":%s,"event":"SendOnCityEvent"}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'\
  815. %(tick,module,customer,playerID,ID,ses,ID,str(int(time.time()*1000)),client)
  816. data='input='+codify(data)
  817. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  818.  
  819.  
  820.  
  821.  
  822. def MakeItemCompoundQueue(X):
  823. resourceID,recipe1,worker,recipe2,module,XP,itemIndex,components=X
  824. resourceAmount=str(range(150, 150+len(resourceID)))
  825. #print index
  826. Inc()
  827. ProdInc()
  828. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"is_research":false,"component_item_instance_ids":%s,"resource_ids":%s,"index":%i,"resource_amounts":%s,"recipe_id":%i,"worker_instance_id":%i,"recipe_instance_id":[%i,0]},"player_id":%s,"index":%i,"event":"QueueCraftingEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick),str(components),str(resourceID), prodIndex,resourceAmount,recipe1,worker,recipe2,playerID,index,client)
  829. #print data
  830. data='input='+codify(data)
  831. #print [index,prodIndex]
  832. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  833. def GetNewQuest(questID):
  834. Inc()
  835. data='{"method":"AddPredictedCommand","params":[{"session":%s,"data":{"hunt_id":%i},"index":%i,"tick":1,"player_id":%s,"event":"AckNewHuntEvent"}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(ses, questID,index, playerID, ID, str(int(time.time()*1000)), client)
  836. #data='{"method":"AddPredictedCommand","params":[{"session":%s,"data":{"quest_id":%i, "improvement_id":0},"index":%i,"tick":1,"player_id":%s,"event":"AckNewQuestEvent"}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(ses, questID,index, playerID, ID, str(int(time.time()*1000)), client)
  837. data='input='+codify(data)
  838. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  839.  
  840.  
  841. def MakeItemStart(X,prodID):
  842. resourceID,recipe1,worker,recipe2,module,XP,itemIndex,components=X
  843. Inc()
  844. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"is_research":false,"queue_slot_index":%i,"module_instance_id":%i,"recipe_id":%i,"worker_instance_id":%i,"recipe_instance_id":[%i,0]},"player_id":%s,"index":%i,"event":"StartCraftingEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick), prodID,module,recipe1,worker,recipe2,playerID,index,client)
  845. data='input='+codify(data)
  846. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  847. def MakeItemEnd(X):
  848. resourceID,recipe1,worker,recipe2,module,XP,itemIndex,components=X
  849. Inc()
  850. if itemIndex>0:
  851. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"worker_instance_id":%i,"xp":%i,"item_instance_id":[%i,0],"recipe_instance_id":%i},"player_id":%s,"index":%i,"event":"EndCraftingEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick),worker, XP, itemIndex,recipe2,playerID,index,client)
  852. else:
  853. #print "NEW ITEM!!!"
  854. data='{"client_version":"16412","id":%s,"time":%s,"params":[{"session":%s,"tick":%s,"data":{"worker_instance_id":%i,"xp":%i,"item_instance_id":[%i,1],"recipe_instance_id":%i},"player_id":%s,"index":%i,"event":"EndCraftingEvent"}],"method":"AddPredictedCommand","client_id":"%s"}'%(str(ID),str(int(time.time()*1000)),ses,str(tick),worker, XP, itemIndex,recipe2,playerID,index,client)
  855.  
  856. data='input='+codify(data)
  857. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  858.  
  859. def StartDay():
  860. #print
  861. #print "Starting Day"
  862. Inc()
  863. global tick
  864. tick=10
  865. data='{"client_version":"16412","id":'+str(ID)+',"time":'+str(int(time.time()*1000))+',"params":[{"session":'+ses+'}],"method":"StartDay","client_id":"'+client+'"}'
  866. data='input='+codify(data)
  867. return mecGet('http://www.edgebee.com/shopr2/client_action',data)
  868.  
  869. def GetMail():
  870. Inc()
  871. data='{"method":"GetMessages","params":[{"session":%s}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(ses,ID,str(int(time.time()*1000)),client)
  872. data='input='+codify(data)
  873. q=mecGet('http://www.edgebee.com/shopr2/client_action',data).read()
  874. try:
  875. q=json.loads(q)
  876. except:
  877. q=zlib.decompress(q, 16+zlib.MAX_WBITS)
  878. q=json.loads(q)
  879. return q
  880.  
  881. def JoinLatestInvite():
  882. q=GetMail()['result']['messages']
  883. if q[-1]['subject']=="City Invitation" and len(q[-1]['attachments'])>0:
  884. Inc()
  885. data='{"method":"ExecuteAttachment","params":[{"attachment_id":%i,"session":%s,"data":1}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(q[-1]['attachments'][0]['id'],ses,ID,str(int(time.time()*1000)),client)
  886. data='input='+codify(data)
  887. mecGet('http://www.edgebee.com/shopr2/client_action',data)
  888. else:
  889. print "No valid invitation"
  890. def InviteToTown(player):
  891. Inc()
  892. data='{"method":"GroupInvitePlayer","params":[{"session":%s,"name":"%s"}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(ses,player,ID,str(int(time.time()*1000)),client)
  893. data='input='+codify(data)
  894. mecGet('http://www.edgebee.com/shopr2/client_action',data)
  895.  
  896.  
  897.  
  898. def EndDay():
  899. Inc()
  900. data='{"client_version":"16412","id":'+str(ID)+',"time":'+str(int(time.time()*1000+800000))+',"params":[{"session":'+ses+',"new_recipe_instances":[]}],"method":"EndDay","client_id":"'+client+'"}'
  901. data='input='+codify(data)
  902. q=mecGet('http://www.edgebee.com/shopr2/client_action',data).read()
  903. if len(q)<4000:
  904. print "failed"
  905. def getResource(data):
  906. global MaxRes
  907. MaxRes={}
  908. n=1
  909. vals={}
  910. for i in data['result']['events']:
  911. if i['__type__']=="ResourceUpdateEvent":
  912. MaxRes[n]=i['max_count']
  913. vals[n]=i['count']+2
  914. n=n+1
  915. return vals
  916. def GetQuest(cust, hunt, id1,id2,id3):
  917. Inc()
  918. i1='0,0'
  919. i2='0,0'
  920. i3='0,0'
  921. if id1!=0 and id1<500:
  922. i1=str(itemMap[IDtoCat[id1]][id1].instance)+',0'
  923. elif id1!=0 and id1>500:
  924. i1=str(itemMap[IDtoCat[id1]][id1].instance)+',0'
  925. if i1=='0,0':
  926. i1='0,1'
  927. if id2!=0 and id2<500:
  928. i2=str(itemMap[IDtoCat[id2]][id2].instance)+',0'
  929. elif id2!=0 and id2>500:
  930. i2=str(itemMap[IDtoCat[id2]][id2].instance)+',0'
  931. if i2=='0,0':
  932. i2='0,1'
  933. if id3!=0 and id3<500:
  934. i3=str(itemMap[IDtoCat[id3]][id3].instance)+',0'
  935. elif id3!=0 and id3>500:
  936. i3=str(itemMap[IDtoCat[id3]][id3].instance)+',0'
  937. if i3=='0,0':
  938. i3='0,1'
  939. data='{"method":"AddPredictedCommand","params":[{"tick":%s,"data":{"customer_id":%i,"item_instance3_id":[%s],"item_instance2_id":[%s],"hunt_id":%i,"item_instance1_id":[%s]},"player_id":%s,"index":%i,"session":%s,"event":"AckHuntResultEvent"}],"client_version":"16412","id":%s,"time":%s,"client_id":"%s"}'%(str(tick),cust,i3,i2, hunt, i1,playerID, index,ses,str(ID),str(int(time.time()*1000)),client)
  940. #print data
  941. data='input='+codify(data)
  942. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  943.  
  944. class Job():
  945. def __init__(self,time,params,duration,compl=0):
  946. self.type="J"
  947. self.state=0
  948. self.time=time
  949. self.params=params
  950. self.duration=duration
  951. self.compl=compl
  952. class Customer:
  953. def __init__(self, price, instance, itemID, sellXP, customerID, tick):
  954. self.type="C"
  955. self.price=price
  956. self.instance=instance
  957. self.itemID=itemID
  958. self.sellXP=sellXP
  959. self.customerID=customerID
  960. self.tick=tick
  961. def __repr__(self):
  962. return str([self.price, self.instance, self.itemID, self.sellXP, self.customerID, self.tick])
  963. def __str__(self):
  964. return self.__repr__()
  965. class Purchase:
  966. def __init__(self, price, instance, customerID, tick, itemID,new=0):
  967. self.type="P"
  968. self.price=price
  969. self.instance=instance
  970. self.customerID=customerID
  971. self.tick=tick
  972. self.new=new
  973. self.itemID=itemID
  974. class Quester:
  975. def __init__(self, customerID, huntID, ID1, ID2, ID3, tick):
  976. self.type="Q"
  977. self.customerID=customerID
  978. self.huntID=huntID
  979. self.ID1=ID1
  980. self.ID2=ID2
  981. self.ID3=ID3
  982. self.tick=tick
  983. class Contributer:
  984. def __init__(self, customerID, improvementID, tick):
  985. self.type="T"
  986. self.tick=tick
  987. self.customerID=customerID
  988. self.improvementID=improvementID
  989. class SendQuestor:
  990. def __init__(self,item1,item2,item3, huntID,customerID, tick):
  991. self.item1=item1
  992. self.item2=item2
  993. self.item3=item3
  994. self.huntID=huntID
  995. self.customerID=customerID
  996. self.tick=tick
  997. self.type="SQ"
  998. def SendQuesterPacket(i):
  999. Inc()
  1000. instance1=itemMap[IDtoCat[i.item1]][i.item1].instance
  1001. instance2=itemMap[IDtoCat[i.item2]][i.item2].instance
  1002. instance3=itemMap[IDtoCat[i.item3]][i.item3].instance
  1003. data='{"method":"AddPredictedCommand","params":[{"tick":%i,"data":{"item_instance3_temp_id":0,"item3_id":%i,"item_instance3_id":%i,"item_instance1_temp_id":0,"item_instance2_id":%i,"item_instance2_temp_id":0,"item_instance1_id":%i,"item2_id":%i,"hunt_id":%i,"item1_id":%i,"customer_id":%i},"player_id":%s,"index":%i,"session":%s,"event":"SendOnHuntEvent"}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(tick,i.item3, instance3, instance2,instance1, i.item2, i.huntID, i.item1, i.customerID, playerID, index, ses, ID, str(int(time.time()*1000)), client)
  1004. data='input='+codify(data)
  1005. mecGet('http://www.edgebee.com/shopr2/client_fast_action',data)
  1006.  
  1007.  
  1008. def Run():
  1009. finishProgressJobs()
  1010. global Cash
  1011. global resource
  1012. global tick
  1013. global itemMap
  1014. t=time.time()
  1015. q=StartDay()
  1016. q=q.read()
  1017. try:
  1018. data=json.loads(q)
  1019. except:
  1020. data=zlib.decompress(q, 16+zlib.MAX_WBITS)
  1021. data=json.loads(data)
  1022. resource=getResource(data)
  1023. #resource=[100,100,100,100,100,100,100,100,100,100,100,100,100,100,]
  1024. worker1Timer=5
  1025. stack=PriorityQueue()
  1026. stack2=PriorityQueue()
  1027. customers=data['result']['events'][0]['visiting_customers']
  1028. ClassModuleMap={}
  1029. for i in DesiredClasses:
  1030. for j in StaticData['result']['character_classes']:
  1031. if j['codename']==i:
  1032. ClassModuleMap[j['id']]=DesiredClasses[i]
  1033.  
  1034. SentToday=0
  1035. for i in customers:
  1036. itemStack=PriorityQueue()
  1037. cat=i['items_mask']
  1038.  
  1039. custID=i['customer_id']
  1040. #print custID
  1041. if (i['customer_id'] in QuestingCustomers) and (SentToday==0) and (len(validhunts)>0) and (i['type']!=6) and Level>10:
  1042. CustData=StaticData['result']['customers'][i['customer_id']-1]
  1043. CustClass=CustData['character_class_id']
  1044. CanUse=ClassesUse[CustClass]
  1045. QuestQueue=PriorityQueue()
  1046. for j in validhunts:
  1047. HuntData=StaticData['result']['hunts'][j-1]
  1048. if HuntData['min_level']<=i['level']+5:
  1049. #print j, HuntData['min_level']
  1050. QuestQueue.push(j, -HuntData['min_level'])
  1051. GoingTo=QuestQueue.pop()
  1052. if GoingTo==None:
  1053. continue
  1054. SentToday=1
  1055. ## [GoingTo, validhunts[GoingTo]]
  1056. #print i['customer_id']
  1057. #Find Armor:
  1058. UseItems=[]
  1059. for j in [[0,512],[1000,4194304],[16777216,268435456]]:
  1060. ItemQueue=PriorityQueue()
  1061. for useclass in CanUse:
  1062. if useclass>=j[0] and useclass<=j[1]:
  1063. for item in itemMap[useclass]:
  1064. if itemMap[useclass][item].count>0:
  1065. ItemQueue.push(item, -itemMap[useclass][item].price)
  1066. UseItems.append(ItemQueue.pop())
  1067. #print UseItems
  1068. #for j in UseItems:
  1069. # print Name(j)
  1070. vPrint("Sending Questor")
  1071. stack.push(SendQuestor(UseItems[0],UseItems[1],UseItems[2],GoingTo, i['customer_id'],i['enter_tick']+5),i['enter_tick']+5)
  1072.  
  1073. elif StaticData['result']['customers'][custID-1]['character_class_id'] in ClassModuleMap and (i['type']!=6):
  1074. print 'potential customer found'
  1075. stack.push(Contributer(i['customer_id'],ClassModuleMap[StaticData['result']['customers'][custID-1]['character_class_id']], i['enter_tick']+5), int(i['enter_tick']+5))
  1076. elif i['type']==1:
  1077. happ=CustomerAffs[i['customer_id']]
  1078. if happ<10:
  1079. thresh=.1
  1080. elif happ<25:
  1081. thresh=.25
  1082. elif happ<75:
  1083. thresh=.5
  1084. else:
  1085. thresh=.74
  1086.  
  1087. if i['suggest_roll']>thresh: #No suggest
  1088. for j in itemMap[cat]:
  1089. if itemMap[cat][j].count>1 and i['level']>=itemMap[cat][j].level and (not j in Protected or (Level<75 and PIndex!=3)):
  1090. itemStack.push(Customer(itemMap[cat][j].price+sellBonusGold,
  1091. itemMap[cat][j].instance,
  1092. itemMap[cat][j].id,
  1093. itemMap[cat][j].sellXP+sellBonusXP,
  1094. i['customer_id'],int(i['enter_tick']+5)), -itemMap[cat][j].price)
  1095. bestItem=itemStack.pop()
  1096. if bestItem==None:
  1097. #vPrint('cant sell')
  1098. #print cat,i['level']
  1099. continue
  1100. #print bestItem.sellXP
  1101. vPrint('selling '+Name(bestItem.itemID))
  1102. itemMap[cat][bestItem.itemID].count-=1
  1103. stack.push(bestItem, bestItem.tick)
  1104. else:
  1105. CustData=StaticData['result']['customers'][i['customer_id']-1]
  1106. valid=bin(CustData['items_mask'])[2:]
  1107. n=0
  1108. CanUse=[]
  1109. while n<len(valid):
  1110. if valid[-n-1]=='1':
  1111. CanUse.append(2**n)
  1112. n+=1
  1113. for cat in CanUse:
  1114. for j in itemMap[cat]:
  1115. if itemMap[cat][j].count>1 and i['level']>=itemMap[cat][j].level and (not j in Protected or (Level<75 and PIndex!=3)):
  1116. itemStack.push(Customer(itemMap[cat][j].price+sellBonusGold,
  1117. itemMap[cat][j].instance,
  1118. itemMap[cat][j].id,
  1119. itemMap[cat][j].sellXP+sellBonusXP,
  1120. i['customer_id'],int(i['enter_tick']+5)), -itemMap[cat][j].price)
  1121. bestItem=itemStack.pop()
  1122. if bestItem==None:
  1123. #vPrint('cant suggest!!')
  1124. #print CustData
  1125. #print i['level']
  1126. #print CanUse
  1127. #print cat,i['level']
  1128. continue
  1129. vPrint('suggesting '+Name(bestItem.itemID))
  1130. itemMap[IDtoCat[bestItem.itemID]][bestItem.itemID].count-=1
  1131. bestItem.type='S'
  1132. stack.push(bestItem, bestItem.tick)
  1133. elif i['type']==7:
  1134. if itemMap[IDtoCat[i['item_id']]][i['item_id']].buyPrice<Cash:
  1135. Cash-=itemMap[IDtoCat[i['item_id']]][i['item_id']].buyPrice
  1136. if itemMap[IDtoCat[i['item_id']]][i['item_id']].instance>0:
  1137. stack.push(Purchase(itemMap[IDtoCat[i['item_id']]][i['item_id']].buyPrice,itemMap[IDtoCat[i['item_id']]][i['item_id']].instance, i['customer_id'],int(i['enter_tick']+5),i['item_id']),int(i['enter_tick']+5))
  1138. else:
  1139. #print "New item"
  1140. #print itemMap[IDtoCat[i['item_id']]][i['item_id']].buyPrice
  1141. stack.push(Purchase(itemMap[IDtoCat[i['item_id']]][i['item_id']].buyPrice,-1,i['customer_id'],int(i['enter_tick']+5),i['item_id'],1),int(i['enter_tick']+5))
  1142. else:
  1143. 1
  1144. #print "not enough to buy for "+str(itemMap[IDtoCat[i['item_id']]][i['item_id']].buyPrice)
  1145. elif i['type']==6:
  1146. vPrint( "Quest returned")
  1147. custID=i['customer_id']
  1148. huntID=i['hunt_id']
  1149. loots=[i['hunt_instance']['loot1_awarded'],i['hunt_instance']['loot2_awarded'],i['hunt_instance']['loot3_awarded']]
  1150. lootData=StaticData['result']['hunts'][huntID-1]['loots']
  1151. ID1=0
  1152. ID2=0
  1153. ID3=0
  1154. if loots[0]==1 and lootData[0]['item_id']!=0:
  1155. ID1=lootData[0]['item_id']
  1156. if loots[1]==1 and lootData[1]['item_id']!=0:
  1157. ID2=lootData[1]['item_id']
  1158. if loots[2]==1 and lootData[2]['item_id']!=0:
  1159. ID3=lootData[2]['item_id']
  1160. stack.push(Quester(custID,huntID,ID1,ID2,ID3,i['enter_tick']+5),int(i['enter_tick']+5))
  1161. else:
  1162. 1
  1163. #print "New type?"
  1164. #print i['type']
  1165. # #print asdfk
  1166. workerTimer={}
  1167. resource=getResource(data)
  1168. for i in NightData['result']['player']['worker_instances']:
  1169. if i['is_hired']:
  1170. workerTimer[i['id']]=0
  1171. ## ListofJobs=[]
  1172. ## #ListofJobs.append([444752, [10, 4], [10, 4], 1, 187, 3226550, 8426388, 5, 0, 200, [], 'leather shoes']) #
  1173. ## ListofJobs.append([423257, [7], [2], 0, 244, 3226259, 8004431, 7, 0, 301, [], 'Suple Dust']) #Suple
  1174. ## ListofJobs.append([444752, [11, 10], [3, 1], 1, 208, 3229368, 8426388, 9, 4727448, 202, [], "apprentice's hat"]) #
  1175. ## ListofJobs.append([444752, [10], [4], 0, 163, 3226409, 8426388, 5, 0, 200, [], 'basic Tunic']) #
  1176. ## ListofJobs.append([423238, [1], [1], 0, 196, 3041887, 8004110, 4, 4451229, 200, [], 'iron bracers']) #
  1177. ## ListofJobs.append([423257, [4], [3], 0, 427, 3225597, 8004431, 5, 0, 200, []]) #basic staff
  1178. ## ListofJobs.append([423238, [1], [1], 0, 20, 3041888, 8004110, 4, 4451226, 200, []]) #dagger
  1179. ## #ListofJobs.append([444752, [4], [3], 0, 207, 3226408, 8426388, 4, 4726950, 200, [], 'circlet'])
  1180. ## #ListofJobs.append([423257, [7], [2], 0, 243, 3041995, 8004431, 4, 4451454, 200, []]) #bundle of herbs
  1181. ## #ListofJobs.append([444752, [10, 4], [1, 1], 1, 186, 3225637, 8426388, 4, 0, 200, []]) #Sandals
  1182. ## #ListofJobs.append([423238, [4], [1], 0, 376, 3041890, 8004110, 3, 4451227, 200, []]) #Club
  1183. for i in ListofJobs:
  1184. if len(i)==11:
  1185. worker, resources, ResQuantity, compl, recipe1, recipe2, module, temp, itemIndex, timer, components= i
  1186. name=''
  1187. else:
  1188. worker, resources, ResQuantity, compl, recipe1, recipe2, module, temp, itemIndex, timer, components, name= i
  1189. if not i[0] in workerTimer:
  1190. continue
  1191. ResourceCondition=1
  1192. for j in range(0,len(i[1])):
  1193. if resource[i[1][j]]<i[2][j]:
  1194. ResourceCondition=0
  1195. ComponentCondition=1
  1196. if len(components)>0:
  1197. for j in components:
  1198. componentInstance=j[0]
  1199. if componentInstance==0:
  1200. ComponentCondition=0
  1201. continue
  1202. cat, itemID = InstancetoCatID[componentInstance]
  1203. if itemMap[cat][itemID].count>2:
  1204. itemMap[cat][itemID].count=0
  1205. #print "componenets good"
  1206. continue
  1207. else:
  1208. ComponentCondition=0
  1209. while workerTimer[i[0]]<= (1000-i[9]) and ResourceCondition and ComponentCondition:
  1210. for j in range(0,len(i[1])):
  1211. resource[i[1][j]]-= i[2][j]
  1212. if resource[i[1][j]]<i[2][j]:
  1213. ResourceCondition=0
  1214. if len(components)>0:
  1215. for j in components:
  1216. componentInstance=j[0]
  1217. cat, itemID = InstancetoCatID[componentInstance]
  1218. if itemMap[cat][itemID].count>0:
  1219. itemMap[cat][itemID].count=0
  1220. itemMap[cat][itemID].count
  1221. continue
  1222. else:
  1223. ComponentCondition=0
  1224. vPrint("Making item "+name)
  1225. XP=itemMap[IDtoCat[recipe1]][recipe1].craftXP+craftBonus
  1226. stack.push(Job(workerTimer[i[0]],[resources, recipe1, worker, recipe2, module, XP, itemIndex, str(components)], timer, compl), workerTimer[i[0]])
  1227. workerTimer[i[0]]+= (timer+60)
  1228. while not stack.isEmpty():
  1229. i=stack.pop()
  1230. if i.type=="S":
  1231. vPrint("Suggesting " + itemMap[IDtoCat[i.itemID]][i.itemID].name)
  1232. tick=i.tick
  1233. SellSuggest(i.price, i.instance, i.itemID,i.sellXP,i.customerID)
  1234. if i.type=="SQ":
  1235. tick=i.tick
  1236. SendQuesterPacket(i)
  1237. if i.type=="T":
  1238. tick=i.tick
  1239. ContributeCustomer(i.customerID, i.improvementID)
  1240. if i.type=="Q":
  1241. tick=i.tick
  1242. GetQuest(i.customerID,i.huntID,i.ID1,i.ID2,i.ID3)
  1243. if i.type=="P":
  1244. vPrint("Buying " + itemMap[IDtoCat[i.itemID]][i.itemID].name)
  1245. #print i.price
  1246. tick=i.tick
  1247. if i.new:
  1248. #print "Buying new item"
  1249. BuyNewItem(i.price, i.customerID)
  1250. else:
  1251. BuyItem(i.price, i.instance, i.customerID)
  1252. if i.type=='J':
  1253. if i.state==0:
  1254. #print "Queue item",Name(i.params[1])
  1255. tick=i.time
  1256. MakeItemCompoundQueue(i.params)
  1257. i.state=1
  1258. i.prodID=prodIndex
  1259. stack.push(i,i.time)
  1260. elif i.state==1:
  1261. #print "Start item",Name(i.params[1])
  1262. tick=i.time
  1263. MakeItemStart(i.params, i.prodID)
  1264. i.state=2
  1265. stack.push(i,i.time+18+i.duration)
  1266. elif i.state==2:
  1267. #print "End item",Name(i.params[1])
  1268. tick=i.time+i.duration
  1269. MakeItemEnd(i.params)
  1270. itemMap[IDtoCat[i.params[1]]][i.params[1]].count += 1
  1271. #print itemMap[IDtoCat[i.params[1]]][i.params[1]].count #print [tick,ID, index, i.prodID, i.params[2],Name(i.params[1])]
  1272. if i.type=="C":
  1273. vPrint("Selling " + itemMap[IDtoCat[i.itemID]][i.itemID].name)
  1274. #print i.price
  1275. tick=i.tick
  1276. SellItem(i.price, i.instance, i.itemID,i.sellXP,i.customerID)
  1277. #
  1278. #time.sleep(0.2)
  1279. if time.time()-t<60:
  1280. 1
  1281. #print "Out of time or resources, sleeping"
  1282. # while time.time()-t<60:
  1283. # time.sleep(1)
  1284. # print "Ending day"
  1285. # EndDay()
  1286. #time.sleep(1)
  1287. #while 1:
  1288. # Run()
  1289.  
  1290.  
  1291. def DoAllResearch():
  1292. for i in ResearchNow:
  1293. RecipeID=i
  1294. i=ResearchNow[i]
  1295. WorkerInstanceID=ActiveWorkers[ActiveCodenames[i['worker_codename']]].longID
  1296. RecipeInstanceID=AllRecipes[RecipeID].longID
  1297.  
  1298. # ModuleInstanceID=ModuleAssignments[WorkerInstanceID][i['module_id']]
  1299.  
  1300. moduleID=i['module_id']
  1301. moduleLevel=i['module_level']
  1302. potentialModules=MyModulesMap[moduleID]
  1303. for j in potentialModules:
  1304. if j.ModuleID>moduleID or (j.ModuleID==moduleID and j.ModuleLevel>= moduleLevel):
  1305. ModuleInstanceID=j.InstanceID
  1306. break
  1307.  
  1308.  
  1309. ItemInstanceID=itemMap[IDtoCat[RecipeID]][RecipeID].instance
  1310. if ItemInstanceID==-1:
  1311. ItemInstanceID=0
  1312. ResearchStart(WorkerInstanceID, RecipeID, RecipeInstanceID, ModuleInstanceID, ItemInstanceID)
  1313. StartDay()
  1314. RefreshSession()
  1315. StartDay()
  1316. RefreshSession()
  1317. StartDay()
  1318. RefreshSession()
  1319. StartDay()
  1320. RefreshSession()
  1321. StartDay()
  1322. RefreshSession()
  1323. StartDay()
  1324. RefreshSession()
  1325. StartDay()
  1326. RefreshSession()
  1327. StartDay()
  1328. RefreshSession()
  1329. StartDay()
  1330. tick=999
  1331. ResearchEnd(WorkerInstanceID, RecipeID, RecipeInstanceID, ModuleInstanceID, ItemInstanceID)
  1332.  
  1333. #RefreshSession()
  1334. def MoveModules(Rotations, Upgrades):
  1335. #print "Move and Upgrades"
  1336. Inc()
  1337. if len(Upgrades)>0:
  1338. upgraded_module_instances='['
  1339. for i in range(0,len(Upgrades)):
  1340. upgraded_module_instances=upgraded_module_instances+'{"id":%i,"pay_with_hammers":false}'%Upgrades[i]
  1341. if i<len(Upgrades)-1:
  1342. upgraded_module_instances=upgraded_module_instances+','
  1343. else:
  1344. upgraded_module_instances=upgraded_module_instances+']'
  1345. else:
  1346. upgraded_module_instances='[]'
  1347. if len(Rotations)>0:
  1348. RotationData=[]
  1349. for i in Rotations:
  1350. RotationData.append('{"rotation_value":%i,"iso_x":%i,"id":%i,"iso_y":%i}'%(i[0],i[1],i[2],i[3]))
  1351. moved_module_instances='['
  1352. for i in range(0,len(RotationData)):
  1353. moved_module_instances=moved_module_instances+RotationData[i]
  1354. if i<len(RotationData)-1:
  1355. moved_module_instances=moved_module_instances+','
  1356. else:
  1357. moved_module_instances=moved_module_instances+']'
  1358. else:
  1359. moved_module_instances='[]'
  1360. data='''{"method":"EditShop","params":[{"upgraded_module_instances":%s,"session":%s,"new_module_instances":[],"deleted_module_instances":[],"moved_module_instances":%s}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'''\
  1361. %(upgraded_module_instances, ses, moved_module_instances, ID, str(int(time.time()*1000)), client)
  1362. #print data
  1363. data='input='+codify(data)
  1364. mecGet('http://www.edgebee.com/shopr2/client_action',data)
  1365. def BigModuleUpgrade(newID, oldInstance):
  1366. #print "Big Upgrade"
  1367. Inc()
  1368. data='{"method":"EditShop","params":[{"upgraded_module_instances":[],"session":%s,"new_module_instances":[{"temp_id":1,"iso_x":5,"pay_with_hammers":false,"rotation_value":0,"module_id":%i,"iso_y":5}],"deleted_module_instances":[%i],"moved_module_instances":[]}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(ses, newID,oldInstance,ID,str(int(time.time()*1000)), client)
  1369. #print data
  1370. data='input='+codify(data)
  1371. mecGet('http://www.edgebee.com/shopr2/client_action',data)
  1372. def BuyNewModules(NewModules):
  1373. #print "Buying New"
  1374. Inc()
  1375. n=1
  1376. NewModulesData=[]
  1377. for i in NewModules:
  1378. NewModulesData.append('{"iso_x":5,"pay_with_hammers":false,"rotation_value":0,"module_id":%i,"iso_y":5,"temp_id":%i}'%(i, n))
  1379. n=n+1
  1380. new_module_instances='['
  1381. for i in range(0,len(NewModulesData)):
  1382. new_module_instances=new_module_instances+NewModulesData[i]
  1383. if i<len(NewModulesData)-1:
  1384. new_module_instances=new_module_instances+','
  1385. else:
  1386. new_module_instances=new_module_instances+']'
  1387.  
  1388. data='''{"method":"EditShop","params":[{"upgraded_module_instances":[],"session":%s,"new_module_instances":%s,"deleted_module_instances":[],"moved_module_instances":[]}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'''\
  1389. %(ses, new_module_instances, ID, str(int(time.time()*1000)), client)
  1390. #print data
  1391. data='input='+codify(data)
  1392. mecGet('http://www.edgebee.com/shopr2/client_action',data)
  1393.  
  1394.  
  1395. def NightStuff():
  1396. global Cash
  1397. Cash=NightData['result']['player']['money']
  1398. global Level
  1399. Level=NightData['result']['player']['level']
  1400. Collate=1
  1401. if Collate:
  1402. m=[]
  1403. x=2
  1404. y=2
  1405. specialX=3
  1406. specialY=3
  1407. for i in NightData['result']['player']['module_instances']:
  1408. #if i['iso_y']>10:
  1409. # continue
  1410. if i['module_id']==118:
  1411. continue
  1412. if i['module_id']==124:
  1413. #m.append([0,5,i['id'],0])
  1414. continue
  1415. if i['module_id']==125:
  1416. #m.append([0,9,i['id'],0])
  1417. continue
  1418. ## m.append([0,specialX,i['id'],specialY])
  1419. ## specialX+=3
  1420. ## if specialX>32:
  1421. ## specialX=0
  1422. ## specialY+=3
  1423. ## if specialY==30:
  1424. ## specialY=0
  1425. else:
  1426. x=i['state']*5
  1427. if i['module_id']==64:
  1428. x=20
  1429. m.append([0,x,i['id'],5])
  1430. x=x+2
  1431. if x>29:
  1432. x=2
  1433. y=y+3
  1434. MoveModules(m,[])
  1435. for i in ActiveWorkers:
  1436. FireWorker(ActiveWorkers[i].longID)
  1437. for i in StaticData['result']['workers']:
  1438. if i['id'] not in AllWorkers:
  1439. if i['unlock_shop_fame']<=Level:
  1440. if i['cost']<Cash:
  1441. HireWorker(i['id'])
  1442. Cash-= i['cost']
  1443. for i in ActiveWorkers:
  1444. FireWorker(ActiveWorkers[i].longID)
  1445. RefreshSession()
  1446.  
  1447. ModuleCount={}
  1448. for i in NightData['result']['player']['module_instances']:
  1449. ModuleID=i['module_id']
  1450. if not ModuleID in ModuleCount:
  1451. ModuleCount[ModuleID]=1
  1452. else:
  1453. ModuleCount[ModuleID]+=1
  1454.  
  1455.  
  1456. BuildQueue=[]
  1457. n=0
  1458. for i in StaticData['result']['modules']:
  1459. if i['parent_id']==0 and i['disabled']==False and i['unlock_fame_level']<=Level:
  1460. Max=i['maximum']
  1461. Current=0
  1462. if i['id'] in ModuleFamilyMap:
  1463. family = ModuleFamilyMap[i['id']]
  1464. for j in family:
  1465. if j in ModuleCount:
  1466. Current=Current+ModuleCount[j]
  1467. elif i['id'] in ModuleCount:
  1468. Current=ModuleCount[i['id']]
  1469. while Current<Max and i['costs'][0]<Cash-Reserve and i['costs'][0]<MaxPrice:
  1470. Current=Current+1
  1471. Cash-=i['costs'][0]
  1472. #print i['codename']
  1473. BuildQueue.append(i['id'])
  1474. n=n+1
  1475. if len(BuildQueue)>0:
  1476. BuyNewModules(BuildQueue)
  1477.  
  1478. DoUpgrade=1
  1479. if DoUpgrade:
  1480. UpgradeList=[]
  1481. for i in NightData['result']['player']['module_instances']:
  1482. ModuleID=i['module_id']
  1483. if i['level']<StaticData['result']['modules'][ModuleID-1]['max_upgrade_level'] and i['state']==3 and i['is_extra']==0:
  1484. level=i['level']
  1485. if StaticData['result']['modules'][ModuleID-1]['costs'][level]>0 and StaticData['result']['modules'][ModuleID-1]['costs'][level]<Cash-Reserve and StaticData['result']['modules'][ModuleID-1]['costs'][level] <MaxPrice:
  1486. Cash-=StaticData['result']['modules'][ModuleID-1]['costs'][level]
  1487. UpgradeList.append(i['id'])
  1488. #print UpgradeList
  1489. if len(UpgradeList)>0:
  1490. MoveModules([],UpgradeList)
  1491. #print UpgradeList
  1492.  
  1493.  
  1494.  
  1495.  
  1496. #Upgrade BIG
  1497. UpgradeTree={}
  1498. for i in StaticData['result']['modules']:
  1499. if i['parent_id']!= 0 and i['disabled']==False:
  1500. UpgradeTree[i['parent_id']]=i['id']
  1501. for i in NightData['result']['player']['module_instances']:
  1502. ModuleID=i['module_id']
  1503. if i['level']==StaticData['result']['modules'][ModuleID-1]['max_upgrade_level'] and i['state']==3 and i['is_extra']==0:
  1504. if ModuleID in UpgradeTree:
  1505. if StaticData['result']['modules'][UpgradeTree[ModuleID]-1]['costs'][0]>0 and StaticData['result']['modules'][UpgradeTree[ModuleID]-1]['costs'][0]<Cash-Reserve and StaticData['result']['modules'][UpgradeTree[ModuleID]-1]['costs'][0]<MaxPrice:
  1506. Cash-=StaticData['result']['modules'][ModuleID-1]['costs'][0]
  1507. print str(ModuleID)+" upgrades to "+str(UpgradeTree[ModuleID])
  1508. BigModuleUpgrade(UpgradeTree[ModuleID],i['id'])
  1509. # RefreshSession()
  1510.  
  1511. for i in ActiveWorkers:
  1512. FireWorker(ActiveWorkers[i].longID)
  1513.  
  1514.  
  1515.  
  1516. bestQ=PriorityQueue()
  1517. for i in WorkerUsefulness:
  1518. bestQ.push(i,-WorkerUsefulness[i])
  1519. BestWorkers=[bestQ.pop(),bestQ.pop(),bestQ.pop()]
  1520. print BestWorkers
  1521. if not ('sorceress' in BestWorkers or 'druid' in BestWorkers):
  1522. if 'druid' in WorkerUsefulness:
  1523. BestWorkers.append('druid')
  1524. elif 'sorceress' in WorkerUsefulness:
  1525. BestWorkers.append('sorceress')
  1526. else:
  1527. BestWorkers.append('druid')
  1528. else: BestWorkers.append(bestQ.pop())
  1529. #print BestWorkers
  1530. for i in BestWorkers:
  1531. if i!=None:
  1532. HireWorker(AllCodenames[i])
  1533. for i in AllWorkers:
  1534. HireWorker(i)
  1535. def FireWorker(workerInstance):
  1536. Inc()
  1537. data='{"method":"FireWorker","params":[{"session":%s,"worker_instance_id":%i}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(ses, workerInstance,ID,str(int(time.time()*1000)), client)
  1538. data='input='+codify(data)
  1539. mecGet('http://www.edgebee.com/shopr2/client_action',data)
  1540. def HireWorker(workerID):
  1541. Inc()
  1542. data='{"method":"HireWorker","params":[{"improvement_id":0,"worker_id":%i,"session":%s,"pay_with_gold":true}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(workerID,ses,ID,str(int(time.time()*1000)), client)
  1543. data='input='+codify(data)
  1544. mecGet('http://www.edgebee.com/shopr2/client_action',data)
  1545.  
  1546. def ContributeGold(instanceID):
  1547. Inc()
  1548. data='{"method":"ImprovementContribute","params":[{"session":%s,"improvement_instance_id":%i,"payment_type":0}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(ses,instanceID,ID,str(int(time.time()*1000)),client)
  1549. data='input='+codify(data)
  1550. q= mecGet('http://www.edgebee.com/shopr2/client_action',data).read()
  1551.  
  1552. try:
  1553. q=zlib.decompress(q, 16+zlib.MAX_WBITS)
  1554. except:
  1555. 1
  1556. return q
  1557.  
  1558.  
  1559.  
  1560. def ResumeNight():
  1561. Inc()
  1562. data='{"method":"ResumeNight","params":[{"session":%s}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(ses, ID, str(int(time.time()*1000)), client)
  1563. data='input='+codify(data)
  1564. q=mecGet('http://www.edgebee.com/shopr2/client_action',data).read()
  1565. global NightData
  1566. try:
  1567. NightData=json.loads(q)
  1568. except:
  1569. q=zlib.decompress(q, 16+zlib.MAX_WBITS)
  1570. NightData=json.loads(q)
  1571.  
  1572. def ContributeAll():
  1573. if NightData['result']['player']['group']['name']=="BestVilleUSA":
  1574. ResumeNight()
  1575. for i in NightData['result']['events'][1]['city']['improvement_instances']:
  1576. if i['state']==1:
  1577. bug=0
  1578. for k in StaticData['result']['improvements'][i['improvement_id']-1]['requirements']:
  1579. if k['item_id']!=0:
  1580. if itemMap[IDtoCat[k['item_id']]][k['item_id']].count==0:
  1581. bug=1
  1582. if k['character_codename']!=None:
  1583. bug=1
  1584. if bug==0:
  1585. if k['amount']>4000:
  1586. k=max(40, k['amount']/10000)
  1587. else:
  1588. k=int(min(itemMap[IDtoCat[k['item_id']]][k['item_id']].count,k['amount'])/3)
  1589. #print i['id'],i['
  1590. print "Contributing ", k, " times"
  1591. for j in range(0,k):
  1592. q=ContributeGold(i['id'])
  1593. if len(q)<160:
  1594. break
  1595. def MoveandGive():
  1596. global PIndex
  1597. PIndex=3
  1598. RefreshSession()
  1599. InviteToTown("johnc188")
  1600. PIndex=1
  1601. RefreshSession()
  1602. JoinLatestInvite()
  1603. PIndex=4
  1604. RefreshSession()
  1605. InviteToTown("johnc188")
  1606. PIndex=1
  1607. RefreshSession()
  1608.  
  1609.  
  1610. def ClaimPrize():
  1611. Inc()
  1612. data='{"method":"ClaimGift","params":[{"session":%s}],"client_version":"16412","id":%i,"time":%s,"client_id":"%s"}'%(ses,ID,str(int(time.time()*1000)), client)
  1613. data='input='+codify(data)
  1614. mecGet('http://www.edgebee.com/shopr2/client_action',data)
  1615. #MoveModules(m)
  1616. #print "done"
  1617. #
  1618.  
  1619. #resourceID,recipe1,worker,recipe2,module,XP,itemIndex,components=X
  1620. def finishProgressJobs():
  1621. if len(NightData['result']['events'])==1:
  1622. ClaimPrize()
  1623. StartDay()
  1624. RefreshSession()
  1625. elif len(NightData['result']['events'])>0:
  1626. DayIndex=NightData['result']['events'][0]['day_index']
  1627. else:
  1628. StartDay()
  1629. RefreshSession()
  1630. DayIndex=NightData['result']['events'][0]['day_index']
  1631. NeedRefresh=0
  1632. for i in NightData['result']['player']['worker_instances']:
  1633. if i['is_hired'] and i['module_instance_id']!=0 and i['is_researching']==False:
  1634. print 'asdf'
  1635. if i['day_index']>DayIndex:
  1636. #print "Gotta wait a long time for this"
  1637. StartDay()
  1638. RefreshSession()
  1639. finishJobs()
  1640. else:
  1641. global tick
  1642. tick=i['day_tick']
  1643. RecipeID=i['recipe_id']
  1644. recipeLongID=AllRecipes[RecipeID].longID
  1645. XP=itemMap[IDtoCat[RecipeID]][RecipeID].craftXP+craftBonus
  1646. itemInstance=itemMap[IDtoCat[RecipeID]][RecipeID].instance
  1647. MakeItemEnd([0,0,i['id'], recipeLongID, i['module_instance_id'], XP, itemInstance,0])
  1648. print 'Finishing Old Stuff'
  1649. NeedRefresh=1
  1650. if NeedRefresh:
  1651. StartDay()
  1652. RefreshSession()
  1653. for i in NightData['result']['player']['queue']:
  1654. for j in ListofJobs:
  1655. if j[4]==i:
  1656. break
  1657. worker, resources, ResQuantity, compl, recipe1, recipe2, module, temp, itemIndex, timer, components, name= j
  1658. XP=itemMap[IDtoCat[recipe1]][recipe1].craftXP+craftBonus
  1659. MakeItemStart([resources, recipe1, worker, recipe2, module, XP, itemIndex, str(components)],i['index'])
  1660. RefreshSession()
  1661. finishProgressJobs()
  1662. break
  1663.  
  1664.  
  1665.  
  1666. #recipeLongID, XP, itemInstance
  1667.  
  1668. RefreshSession()
  1669. StartTime=time.time()
  1670. needTime=60*30
  1671. if Level<20:
  1672. needTime=10*60
  1673. if FromConsole:
  1674. for i in range(0,1000000):
  1675. try:
  1676. #CT+=1
  1677. #if CT>10 and FromConsole:
  1678.  
  1679. #os.system('cls')
  1680. #CT=0
  1681. while RefreshSession()==0:
  1682. 1
  1683. if len(ResearchNow)>0:
  1684. DoAllResearch()
  1685. Run()
  1686. if time.time()-StartTime>needTime:
  1687. StartTime=time.time()
  1688. time.sleep(70)
  1689. EndDay()
  1690. NightStuff()
  1691. ContributeAll()
  1692. days=1
  1693. break
  1694. except Exception, e:
  1695. print e
  1696. continue
  1697.  
  1698.  
  1699.  
  1700. ##
  1701. ##names={}
  1702. ##for i in StaticData['result']['assets']:
  1703. ## names[i['id']]=i['value']
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement