Advertisement
Guest User

Untitled

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