Advertisement
Guest User

Untitled

a guest
Jul 9th, 2023
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.11 KB | Gaming | 0 0
  1. `extends Node
  2.  
  3. # Use this game API key if you want to test it with a functioning leaderboard
  4. # "987dbd0b9e5eb3749072acc47a210996eea9feb0"
  5. var game_API_key = "your-game-API-key-here"
  6. var development_mode = true
  7. var leaderboard_key = "leaderboardKey"
  8. var session_token = ""
  9. var score = 0
  10.  
  11. # HTTP Request node can only handle one call per node
  12. var auth_http = HTTPRequest.new()
  13. var leaderboard_http = HTTPRequest.new()
  14. var submit_score_http = HTTPRequest.new()
  15.  
  16. func _ready():
  17. _authentication_request()
  18.  
  19.  
  20. func _process(_delta):
  21. if(Input.is_action_just_pressed("ui_up")):
  22. score += 1
  23. print("CurrentScore:"+str(score))
  24.  
  25. if(Input.is_action_just_pressed("ui_down")):
  26. score -= 1
  27. print("CurrentScore:"+str(score))
  28.  
  29. # Upload score when pressing enter
  30. if(Input.is_action_just_pressed("ui_accept")):
  31. _upload_score(score)
  32.  
  33. # Get score when pressing spacebar
  34. if(Input.is_action_just_pressed("ui_select")):
  35. _get_leaderboards()
  36.  
  37.  
  38.  
  39. func _authentication_request():
  40. var player_identifier : String
  41. # Check if a player session has been saved
  42. var player_session_exists = false
  43. var file = FileAccess.open("user://LootLocker.data", FileAccess.READ)
  44. if file != null:
  45. player_identifier = file.get_as_text()
  46. print("played ID="+player_identifier)
  47. file.close()
  48.  
  49. if player_identifier != null and player_identifier.length() > 1:
  50. print("player session exists, id="+player_identifier)
  51. player_session_exists = true
  52.  
  53. ## Convert data to json string:
  54. var data = { "game_key": game_API_key, "game_version": "0.0.0.1", "development_mode": true }
  55.  
  56. # If a player session already exists, send with the player identifier
  57. if(player_session_exists == true):
  58. data = { "game_key": game_API_key, "player_identifier":player_identifier, "game_version": "0.0.0.1", "development_mode": true }
  59.  
  60. # Add 'Content-Type' header:
  61. var headers = ["Content-Type: application/json"]
  62.  
  63. # Create a HTTPRequest node for authentication
  64. auth_http = HTTPRequest.new()
  65. add_child(auth_http)
  66. auth_http.request_completed.connect(_on_authentication_request_completed)
  67.  
  68. # Print what we're sending, for debugging purposes:
  69. print(data)
  70.  
  71. auth_http.request("https://api.lootlocker.io/game/v2/session/guest", headers, HTTPClient.METHOD_POST, JSON.stringify(data))
  72.  
  73.  
  74. func _on_authentication_request_completed(result, response_code, headers, body):
  75. var json = JSON.parse_string(body.get_string_from_utf8())
  76. print(json)
  77.  
  78. # Save player_identifier to file
  79. var file = FileAccess.open("user://LootLocker.data", FileAccess.WRITE)
  80. if file != null:
  81. print("file open for writing")
  82. if json.has("player_identifier"):
  83. print("store played id")
  84. file.store_string(json["player_identifier"])
  85. file.close()
  86.  
  87. # Save session_token to memory
  88. print("session token="+json["session_token"])
  89. session_token = json["session_token"]
  90. else:
  91. if json.has("error"):
  92. print("Error: "+json["error"])
  93.  
  94.  
  95. # Clear node
  96. auth_http.queue_free()
  97. # Get leaderboards
  98. _get_leaderboards()
  99.  
  100.  
  101. func _get_leaderboards():
  102. print("Getting leaderboards")
  103. var url = "https://api.lootlocker.io/game/leaderboards/"+leaderboard_key+"/list?count=10"
  104. var headers = ["Content-Type: application/json", "x-session-token:"+session_token]
  105.  
  106. # Create a request node for getting the highscore
  107. leaderboard_http = HTTPRequest.new()
  108. add_child(leaderboard_http)
  109. leaderboard_http.request_completed.connect(_on_leaderboard_request_completed)
  110. # Send request
  111. leaderboard_http.request(url, headers, HTTPClient.METHOD_GET, "")
  112.  
  113.  
  114. func _on_leaderboard_request_completed(result, response_code, headers, body):
  115. var json = JSON.parse_string(body.get_string_from_utf8())
  116.  
  117. print(json)
  118. if json.has("error"):
  119. print("Error: "+json["error"])
  120. else:
  121. # Formatting as a leaderboard
  122. var leaderboardFormatted = ""
  123. for n in json["items"].size():
  124. leaderboardFormatted += str(json["items"][n].rank)+str(". ")
  125. leaderboardFormatted += str(json["items"][n].player.id)+str(" - ")
  126. leaderboardFormatted += str(json["items"][n].score)
  127. if json["items"][n].metadata != null:
  128. print("add meta:"+json["items"][n].metadata)
  129. leaderboardFormatted += str(" - ")+json["items"][n].metadata
  130. leaderboardFormatted += str("\n")
  131.  
  132. # Print the formatted leaderboard to the console
  133. print(leaderboardFormatted)
  134.  
  135. # Clear node
  136. leaderboard_http.queue_free()
  137.  
  138.  
  139. func _upload_score(score: int):
  140. var data = { "score": str(score) }
  141. var headers = ["Content-Type: application/json", "x-session-token:"+session_token]
  142. submit_score_http = HTTPRequest.new()
  143. add_child(submit_score_http)
  144. submit_score_http.request_completed.connect(_on_upload_score_request_completed)
  145.  
  146. # Print what we're sending, for debugging purposes:
  147. print(data)
  148.  
  149. submit_score_http.request("https://api.lootlocker.io/game/leaderboards/"+leaderboard_key+"/submit", headers, HTTPClient.METHOD_POST, JSON.stringify(data))
  150.  
  151.  
  152. func _on_upload_score_request_completed(result, response_code, headers, body):
  153. var json = JSON.parse_string(body.get_string_from_utf8())
  154.  
  155. # Print data
  156. print("upload score result:"+str(json))
  157.  
  158. # Clear node
  159. submit_score_http.queue_free()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement