-
-
Save josephdevelops/d783573397a7d1f7829aadd19f794d7e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| extends Node | |
| # Use this game API key if you want to test it with a functioning leaderboard | |
| # "987dbd0b9e5eb3749072acc47a210996eea9feb0" | |
| var game_API_key = "your-game-API-key-here" | |
| var development_mode = true | |
| var leaderboard_key = "leaderboardKey" | |
| var session_token = "" | |
| var score = 0 | |
| # HTTP Request node can only handle one call per node | |
| var auth_http = HTTPRequest.new() | |
| var leaderboard_http = HTTPRequest.new() | |
| var submit_score_http = HTTPRequest.new() | |
| func _ready(): | |
| _authentication_request() | |
| func _process(_delta): | |
| if(Input.is_action_just_pressed("ui_up")): | |
| score += 1 | |
| print("CurrentScore:"+str(score)) | |
| if(Input.is_action_just_pressed("ui_down")): | |
| score -= 1 | |
| print("CurrentScore:"+str(score)) | |
| # Upload score when pressing enter | |
| if(Input.is_action_just_pressed("ui_accept")): | |
| _upload_score(score) | |
| # Get score when pressing spacebar | |
| if(Input.is_action_just_pressed("ui_select")): | |
| _get_leaderboards() | |
| func _authentication_request(): | |
| # Check if a player session has been saved | |
| var player_session_exists = false | |
| var file = FileAccess.open("user://Lootlocker.data", FileAccess.READ) | |
| var player_identifier = str(file) | |
| # print(file) | |
| file = null | |
| if(player_identifier.length() > 1): | |
| player_session_exists = true | |
| ## Convert data to json string: | |
| var data = { "game_key": game_API_key, "game_version": "0.0.0.1", "development_mode": true } | |
| # If a player session already exists, send with the player identifier | |
| if(player_session_exists == true): | |
| data = { "game_key": game_API_key, "player_identifier":player_identifier, "game_version": "0.0.0.1", "development_mode": true } | |
| # Add 'Content-Type' header: | |
| var headers = ["Content-Type: application/json"] | |
| # Create a HTTPRequest node for authentication | |
| auth_http = HTTPRequest.new() | |
| add_child(auth_http) | |
| auth_http.request_completed.connect(_on_authentication_request_completed) | |
| # Send request | |
| auth_http.request | |
| auth_http.request("https://api.lootlocker.io/game/v2/session/guest", headers, \ | |
| HTTPClient.METHOD_POST, JSON.stringify(data)) | |
| # Print what we're sending, for debugging purposes: | |
| # print(data) | |
| func _on_authentication_request_completed(result, response_code, headers, body): | |
| var json = JSON.parse_string(body.get_string_from_utf8()) | |
| # Save player_identifier to file | |
| var file = FileAccess.open("user://LootLocker.data", FileAccess.WRITE) | |
| print(json.player_identifier) | |
| file.store_string(json.player_identifier) | |
| file.close() | |
| # Save session_token to memory | |
| session_token = json.session_token | |
| # Print server response | |
| print(json) | |
| # Clear node | |
| auth_http.queue_free() | |
| # Get leaderboards | |
| _get_leaderboards() | |
| func _get_leaderboards(): | |
| print("Getting leaderboards") | |
| var url = "https://api.lootlocker.io/game/leaderboards/"+leaderboard_key+"/list?count=10" | |
| var headers = ["Content-Type: application/json", "x-session-token:"+session_token] | |
| # Create a request node for getting the highscore | |
| leaderboard_http = HTTPRequest.new() | |
| add_child(leaderboard_http) | |
| leaderboard_http.request_completed.connect(_on_leaderboard_request_completed) | |
| # Send request | |
| leaderboard_http.request(url, headers, HTTPClient.METHOD_GET, "") | |
| func _on_leaderboard_request_completed(result, response_code, headers, body): | |
| var json = JSON.parse_string(body.get_string_from_utf8()) | |
| # Print data | |
| print(json) | |
| # Formatting as a leaderboard | |
| var leaderboardFormatted = "" | |
| for n in json.items.size(): | |
| leaderboardFormatted += str(json.items[n].rank)+str(". ") | |
| leaderboardFormatted += str(json.items[n].player.id)+str(" - ") | |
| leaderboardFormatted += str(json.items[n].score)+str("\n") | |
| # Print the formatted leaderboard to the console | |
| print(leaderboardFormatted) | |
| # Clear node | |
| leaderboard_http.queue_free() | |
| func _upload_score(score): | |
| var data = { "score": str(score) } | |
| var headers = ["Content-Type: application/json", "x-session-token:"+session_token] | |
| submit_score_http = HTTPRequest.new() | |
| add_child(submit_score_http) | |
| submit_score_http.request_completed.connect(_on_upload_score_request_completed) | |
| # Send request | |
| submit_score_http.request("https://api.lootlocker.io/game/leaderboards/"+leaderboard_key+"/submit", headers, HTTPClient.METHOD_POST, JSON.stringify(data)) | |
| # Print what we're sending, for debugging purposes: | |
| print(data) | |
| func _on_upload_score_request_completed(result, response_code, headers, body) : | |
| var json = JSON.parse_string(body.get_string_from_utf8()) | |
| # Print data | |
| print(json) | |
| # Clear node | |
| submit_score_http.queue_free() |
Author
Make a correction on GitHub. I am not sure but I will look into it.
I can add you as a call contributor if you want to help.
…On Fri, Jun 23, 2023, 9:13 AM (Totally Real) Penguin < ***@***.***> wrote:
***@***.**** commented on this gist.
------------------------------
I believe you have a mistake on line 41
you have put
var player_identifier = str(file)
i'm pretty sure it should be
var player_identifier = file.get_as_text()
—
Reply to this email directly, view it on GitHub
<https://gist.github.com/josephdevelops/d783573397a7d1f7829aadd19f794d7e#gistcomment-4608631>
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AHQQQ6WJ4QLRMUMMLAH6X33XMXTD5BFKMF2HI4TJMJ2XIZLTSKBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4DFQKSXMYLMOVS2I5DSOVS2I3TBNVS3W5DIOJSWCZC7OBQXE5DJMNUXAYLOORPWCY3UNF3GS5DZVRZXKYTKMVRXIX3UPFYGLK2HNFZXIQ3PNVWWK3TUUZ2G64DJMNZZDAVEOR4XAZNEM5UXG5FFOZQWY5LFVEYTEMRWG44DKMBQU52HE2LHM5SXFJTDOJSWC5DF>
.
You are receiving this email because you authored the thread.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>
.
Author
I appreciate that comment. I actually skipped this part in my life in-game build... crazy to see that I made it and them skipped it... I'll go back and set it up. :D
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I believe you have a mistake on line 41
you have put
var player_identifier = str(file)i'm pretty sure it should be
var player_identifier = file.get_as_text()