Advertisement
Guest User

Untitled

a guest
Dec 10th, 2016
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.40 KB | None | 0 0
  1. import os
  2. import json
  3. import re
  4. import psycopg2
  5. import time
  6. import socket
  7. import datetime
  8.  
  9. """Run parsing batch files"""
  10. # if socket.gethostname() == "OP1":
  11. # os.system('.\\createjsondata.bat')
  12. # postgres_host ='127.0.0.1'
  13. # else:
  14. # os.system('.\\createjsondatatest.bat')
  15. # postgres_host ='objectivelyperfect.com'
  16.  
  17. """Establish Postgres Connection"""
  18. def pgsql_connect():
  19. global conn, cur
  20. conn = psycopg2.connect(
  21. database='your_database_name_here',
  22. user='your_user_here',
  23. password='your_password_here!',
  24. host='127.0.0.1',
  25. port='your_port')
  26. cur = conn.cursor()
  27.  
  28. def CreatureParse():
  29. class CreatureClass:
  30. x = None
  31. y = None
  32. z = None
  33. lat = None
  34. lon = None
  35. id = None
  36. female = None
  37. color0 = None
  38. color1 = None
  39. color2 = None
  40. color3 = None
  41. color4 = None
  42. color5 = None
  43. tamedAtTime = None
  44. tamedTime = None
  45. tribe = None
  46. tamer = None
  47. name = None
  48. baseLevel = None
  49. wildLevels_health = None
  50. wildLevels_stamina = None
  51. wildLevels_oxygen = None
  52. wildLevels_food = None
  53. wildLevels_weight = None
  54. wildLevels_melee = None
  55. wildLevels_speed = None
  56. fullLevel = None
  57. tamedLevels_health = None
  58. tamedLevels_stamina = None
  59. tamedLevels_oxygen = None
  60. tamedLevels_food = None
  61. tamedLevels_weight = None
  62. tamedLevels_melee = None
  63. tamedLevels_speed = None
  64. tamed = None
  65. imprinter = None
  66. experience = None
  67. imprintingQuality = None
  68.  
  69. bypass_creatures = ['Ant_Character_BP_C',
  70. 'Leech_Character_C',
  71. 'FlyingAnt_Character_BP_C',
  72. 'Coel_Character_BP_C',
  73. 'Bat_Character_BP_C',
  74. 'Piranha_Character_BP_C',
  75. 'Salmon_Character_BP_C',
  76. 'Trilobite_Character_C',
  77. 'Dragonfly_Character_BP_C',
  78. 'Euryp_Character_C',
  79. 'BoaFrill_Character_BP_C'
  80. ]
  81.  
  82. files = os.listdir("./creatures")
  83.  
  84. classes = json.load(open('./creatures/classes.json'))
  85. files.remove('classes.json')
  86.  
  87. classdict = {}
  88. for item in classes:
  89. name = item.pop('cls')
  90. classdict[name] = item
  91.  
  92.  
  93. for file in files:
  94. path = './creatures/'+file
  95. if file[:-5] not in bypass_creatures:
  96. with open(path) as data_file:
  97. creatures = json.load(data_file)
  98. print "Processing " + str(file)[:-5] + ":",
  99. for creature in creatures:
  100. critter = CreatureClass()
  101. try:
  102. critter.species = re.search(r'(.+?)_', file).group(1)
  103. except:
  104. critter.species = None
  105.  
  106. for key in dir(critter):
  107. if "tamedLevels" in key:
  108. try:
  109. actual_key = key[12:]
  110. setattr(critter, key, creature[u'tamedLevels'][unicode(actual_key)])
  111. except:
  112. pass
  113. elif "wildLevels" in key:
  114. try:
  115. actual_key = key[11:]
  116. setattr(critter, key, creature[u'wildLevels'][unicode(actual_key)])
  117. except:
  118. pass
  119. elif key.startswith("__"):
  120. pass
  121. else:
  122. try:
  123. setattr(critter, key, creature[unicode(key)])
  124. except:
  125. pass
  126.  
  127. cur.execute("""INSERT INTO creatures (
  128. runtime,
  129. species,
  130. x_coord,
  131. y_coord,
  132. z_coord,
  133. lat,
  134. lon,
  135. creature_id,
  136. female,
  137. color0,
  138. color1,
  139. color2,
  140. color3,
  141. color4,
  142. color5,
  143. tamedAtTime,
  144. tamedTime,
  145. tribe,
  146. tamer,
  147. name,
  148. baseLevel,
  149. wild_health,
  150. wild_stamina,
  151. wild_oxygen,
  152. wild_food,
  153. wild_weight,
  154. wild_melee,
  155. wild_speed,
  156. fullLevel,
  157. tamed_health,
  158. tamed_stamina,
  159. tamed_oxygen,
  160. tamed_food,
  161. tamed_weight,
  162. tamed_melee,
  163. tamed_speed,
  164. tamed,
  165. experience,
  166. imprinter,
  167. imprintingQuality) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);""", (
  168. runtime,
  169. classdict[file[:-5]]['name'],
  170. critter.x,
  171. critter.y,
  172. critter.z,
  173. critter.lat,
  174. critter.lon,
  175. critter.id,
  176. critter.female,
  177. critter.color0,
  178. critter.color1,
  179. critter.color2,
  180. critter.color3,
  181. critter.color4,
  182. critter.color5,
  183. critter.tamedAtTime,
  184. critter.tamedTime,
  185. critter.tribe,
  186. critter.tamer,
  187. critter.name,
  188. critter.baseLevel,
  189. critter.wildLevels_health,
  190. critter.wildLevels_stamina,
  191. critter.wildLevels_oxygen,
  192. critter.wildLevels_food,
  193. critter.wildLevels_weight,
  194. critter.wildLevels_melee,
  195. critter.wildLevels_speed,
  196. critter.fullLevel,
  197. critter.tamedLevels_health,
  198. critter.tamedLevels_stamina,
  199. critter.tamedLevels_oxygen,
  200. critter.tamedLevels_food,
  201. critter.tamedLevels_weight,
  202. critter.tamedLevels_melee,
  203. critter.tamedLevels_speed,
  204. critter.tamed,
  205. critter.experience,
  206. critter.imprinter,
  207. critter.imprintingQuality))
  208. print " Processed"
  209. conn.commit()
  210.  
  211. def TribeParse():
  212. class itemClass:
  213. name = None
  214. durability = None
  215. rating = None
  216. quality = None
  217. armorMultiplier = None
  218. durabilityMultiplier = None
  219. damageMultiplier = None
  220. quantity = 1
  221. hypoMultiplier = None
  222. hyperMultiplier = None
  223. customName = None
  224. customDescription = None
  225.  
  226. files = os.listdir("./tribes")
  227.  
  228. for file in files:
  229. path = './tribes/'+file
  230.  
  231. with open(path) as data_file:
  232. tribe = json.load(data_file)
  233. print "Processing " + tribe['name'] + ": ",
  234.  
  235. """ Upload Tribe Members/Admins data """
  236. admins = []
  237. try:
  238. admins = tribe['admins']
  239. except:
  240. pass
  241.  
  242. for member in tribe['members']:
  243. admin = False
  244. owner = False
  245. if member in admins:
  246. admin = True
  247. if member == tribe['owner']:
  248. owner = True
  249.  
  250. cur.execute("""INSERT INTO tribes (
  251. runtime,
  252. tribeId,
  253. Name,
  254. Members,
  255. Owner,
  256. Admins) VALUES (%s,%s,%s,%s,%s,%s);""", (
  257. runtime,
  258. file[:-5],
  259. tribe['name'],
  260. member,
  261. owner,
  262. admin))
  263. conn.commit()
  264.  
  265. """ Upload Tribe Item Data """
  266. for item in tribe[u'items']:
  267. item_object = itemClass()
  268. for key in dir(item_object):
  269. try:
  270. setattr(item_object, key, item[unicode(key)])
  271. except:
  272. pass
  273. cur.execute("""INSERT INTO items (
  274. runtime,
  275. name,
  276. durability,
  277. rating,
  278. quality,
  279. armorMultiplier,
  280. durabilityMultiplier,
  281. damageMultiplier,
  282. quantity,
  283. hypoMultiplier,
  284. hyperMultiplier,
  285. customName,
  286. customDescription,
  287. tribeId) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);""", (
  288. runtime,
  289. item_object.name,
  290. item_object.durability,
  291. item_object.rating,
  292. item_object.quality,
  293. item_object.armorMultiplier,
  294. item_object.durabilityMultiplier,
  295. item_object.damageMultiplier,
  296. item_object.quantity,
  297. item_object.hypoMultiplier,
  298. item_object.hyperMultiplier,
  299. item_object.customName,
  300. item_object.customDescription,
  301. file[:-5]))
  302. conn.commit()
  303.  
  304. for item in tribe[u'blueprints']:
  305. item_object = itemClass()
  306. for key in dir(item_object):
  307. try:
  308. setattr(item_object, key, item[unicode(key)])
  309. except:
  310. pass
  311. cur.execute("""INSERT INTO items (
  312. runtime,
  313. name,
  314. durability,
  315. rating,
  316. quality,
  317. durabilityMultiplier,
  318. damageMultiplier,
  319. quantity,
  320. hypoMultiplier,
  321. hyperMultiplier,
  322. customName,
  323. customDescription,
  324. blueprint,
  325. tribeId) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);""", (
  326. runtime,
  327. item_object.name,
  328. item_object.durability,
  329. item_object.rating,
  330. item_object.quality,
  331. item_object.durabilityMultiplier,
  332. item_object.damageMultiplier,
  333. item_object.quantity,
  334. item_object.hypoMultiplier,
  335. item_object.hyperMultiplier,
  336. item_object.customName,
  337. item_object.customDescription,
  338. True,
  339. file[:-5]))
  340. conn.commit()
  341.  
  342. """Upload Tribe Structure Data"""
  343. for structure in tribe[u'structures']:
  344. cur.execute("""INSERT INTO structures (
  345. runtime,
  346. tribeId,
  347. Name,
  348. Count) VALUES (%s,%s,%s,%s);""",(
  349. runtime,
  350. file[:-5],
  351. structure['name'],
  352. structure['count']))
  353. conn.commit()
  354. print "Processed"
  355.  
  356. def PlayerParse():
  357. class playerClass:
  358. engrams = None
  359. tribeName = None
  360. name = None
  361. level = None
  362. steamName = None
  363. tribeId = None
  364. experience = None
  365. inventory = None
  366. tribeOwner = None
  367. stat_melee = None
  368. stat_speed = None
  369. stat_health = None
  370. stat_weight = None
  371. stat_oxygen = None
  372. stat_stamina = None
  373. stat_fortitude = None
  374. stat_water = None
  375. stat_crafting = None
  376. stat_food = None
  377. player_id = None
  378. x = None
  379. y = None
  380. z = None
  381. lat = None
  382. lon = None
  383.  
  384. files = os.listdir("./players")
  385.  
  386. for file in files:
  387. path = './players/'+file
  388.  
  389. with open(path) as data_file:
  390. playerjson = json.load(data_file)
  391.  
  392. player = playerClass()
  393.  
  394. print "Processsing " + playerjson['name'] + ": ",
  395.  
  396. for key in dir(player):
  397. if "stat_" in key:
  398. try:
  399. actual_key = key[5:]
  400. setattr(player, key, playerjson['attributes'][unicode(actual_key)])
  401. except:
  402. pass
  403. elif key.startswith("__"):
  404. pass
  405. else:
  406. try:
  407. setattr(player, key, playerjson[unicode(key)])
  408. except:
  409. pass
  410. statbuf = os.stat(path)
  411. last_login = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(statbuf.st_mtime))
  412.  
  413. """ Upload Player data """
  414.  
  415. cur.execute("""INSERT INTO players (
  416. runtime,
  417. x_coord,
  418. y_coord,
  419. z_coord,
  420. lat,
  421. lon,
  422. tribe,
  423. player,
  424. level,
  425. tribeId,
  426. experience,
  427. tribeOwner,
  428. melee,
  429. speed,
  430. health,
  431. weight,
  432. oxygen,
  433. stamina,
  434. fortitude,
  435. water,
  436. crafting,
  437. food,
  438. player_id,
  439. last_login) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);""", (
  440. runtime,
  441. player.x,
  442. player.y,
  443. player.z,
  444. player.lat,
  445. player.lon,
  446. player.tribeName,
  447. player.name,
  448. player.level,
  449. player.tribeId,
  450. player.experience,
  451. player.tribeOwner,
  452. player.stat_melee,
  453. player.stat_speed,
  454. player.stat_health,
  455. player.stat_weight,
  456. player.stat_oxygen,
  457. player.stat_stamina,
  458. player.stat_fortitude,
  459. player.stat_water,
  460. player.stat_crafting,
  461. player.stat_food,
  462. file[:-5],
  463. last_login))
  464. conn.commit()
  465.  
  466. """ Upload Player Item data """
  467. class itemClass:
  468. name = None
  469. durability = None
  470. rating = None
  471. quality = None
  472. armorMultiplier = None
  473. durabilityMultiplier = None
  474. damageMultiplier = None
  475. quantity = 1
  476. hypoMultiplier = None
  477. hyperMultiplier = None
  478. customName = None
  479. customDescription = None
  480.  
  481. try:
  482. for item in player.inventory:
  483. item_object = itemClass()
  484. for key in dir(item_object):
  485. try:
  486. setattr(item_object, key, item[unicode(key)])
  487. except:
  488. pass
  489. cur.execute("""INSERT INTO items (
  490. runtime,
  491. name,
  492. durability,
  493. rating,
  494. quality,
  495. armorMultiplier,
  496. durabilityMultiplier,
  497. damageMultiplier,
  498. quantity,
  499. hypoMultiplier,
  500. hyperMultiplier,
  501. customName,
  502. customDescription,
  503. player_id) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s);""", (
  504. runtime,
  505. item_object.name,
  506. item_object.durability,
  507. item_object.rating,
  508. item_object.quality,
  509. item_object.armorMultiplier,
  510. item_object.durabilityMultiplier,
  511. item_object.damageMultiplier,
  512. item_object.quantity,
  513. item_object.hypoMultiplier,
  514. item_object.hyperMultiplier,
  515. item_object.customName,
  516. item_object.customDescription,
  517. file[:-5]))
  518. conn.commit()
  519. except:
  520. pass
  521. """ Upload Player Engram data """
  522.  
  523. print "Processed"
  524. def main():
  525. global runtime
  526. print "Omni Initialized"
  527.  
  528. runtime = datetime.datetime.now()
  529. pgsql_connect()
  530. os.system('.\\createjsondata.bat')
  531. CreatureParse()
  532. TribeParse()
  533. PlayerParse()
  534. cur.close()
  535. conn.close()
  536.  
  537. path_to_watch = ".\ShooterGame\Saved\SavedArks\TheIsland.ark"
  538.  
  539. before = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.stat(path_to_watch).st_mtime))
  540. while 1:
  541. time.sleep (10)
  542. after = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(os.stat(path_to_watch).st_mtime))
  543. if before != after:
  544. runtime = datetime.datetime.now()
  545. pgsql_connect()
  546. os.system('.\\createjsondata.bat')
  547.  
  548. CreatureParse()
  549. TribeParse()
  550. PlayerParse()
  551.  
  552. cur.close()
  553. conn.close()
  554. before = after
  555.  
  556. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement