172 lines
6.3 KiB
GDScript
172 lines
6.3 KiB
GDScript
extends Node
|
|
|
|
const SWUtils = preload("res://addons/silent_wolf/utils/SWUtils.gd")
|
|
const SWLogger = preload("res://addons/silent_wolf/utils/SWLogger.gd")
|
|
|
|
signal sw_save_player_data_complete
|
|
signal sw_get_player_data_complete
|
|
signal sw_delete_player_data_complete
|
|
|
|
var GetPlayerData = null
|
|
var SavePlayerData = null
|
|
var DeletePlayerData = null
|
|
|
|
# wekrefs
|
|
var wrGetPlayerData = null
|
|
var wrSavePlayerData = null
|
|
var wrDeletePlayerData = null
|
|
|
|
var player_name = null
|
|
var player_data = null
|
|
|
|
|
|
func save_player_data(player_name: String, player_data: Dictionary, overwrite: bool=true) -> Node:
|
|
if player_name == "":
|
|
SWLogger.error("player_name cannot be empty when calling SilentWolf.Players.save_player_data(player_name, player_data)")
|
|
elif typeof(player_data) != TYPE_DICTIONARY:
|
|
SWLogger.error("Player data should be of type Dictionary, instead it is of type: " + str(typeof(player_data)))
|
|
else:
|
|
var prepared_http_req = SilentWolf.prepare_http_request()
|
|
SavePlayerData = prepared_http_req.request
|
|
wrSavePlayerData = prepared_http_req.weakref
|
|
SavePlayerData.request_completed.connect(_on_SavePlayerData_request_completed)
|
|
SWLogger.info("Calling SilentWolf to post player data")
|
|
var payload = { "game_id": SilentWolf.config.game_id, "player_name": player_name, "player_data": player_data, "overwrite": overwrite }
|
|
var request_url = "https://api.silentwolf.com/push_player_data"
|
|
SilentWolf.send_post_request(SavePlayerData, request_url, payload)
|
|
return self
|
|
|
|
|
|
func _on_SavePlayerData_request_completed(result, response_code, headers, body) -> void:
|
|
var status_check = SWUtils.check_http_response(response_code, headers, body)
|
|
if is_instance_valid(SavePlayerData):
|
|
SilentWolf.free_request(wrSavePlayerData, SavePlayerData)
|
|
|
|
if status_check:
|
|
var json_body = JSON.parse_string(body.get_string_from_utf8())
|
|
var sw_result: Dictionary = SilentWolf.build_result(json_body)
|
|
if json_body.success:
|
|
SWLogger.info("SilentWolf save player data success for player: " + str(json_body.player_name))
|
|
var player_name = json_body.player_name
|
|
#sw_result["player_name"] = player_name
|
|
else:
|
|
SWLogger.error("SilentWolf save player data failure: " + str(json_body.error))
|
|
sw_save_player_data_complete.emit(sw_result)
|
|
|
|
|
|
func get_player_data(player_name: String) -> Node:
|
|
if player_name == "":
|
|
SWLogger.error("player_name cannot be empty when calling SilentWolf.Players.get_player_data(player_name)")
|
|
else:
|
|
var prepared_http_req = SilentWolf.prepare_http_request()
|
|
GetPlayerData = prepared_http_req.request
|
|
wrGetPlayerData = prepared_http_req.weakref
|
|
GetPlayerData.request_completed.connect(_on_GetPlayerData_request_completed)
|
|
SWLogger.info("Calling SilentWolf to get player data")
|
|
var request_url = "https://api.silentwolf.com/get_player_data/" + str(SilentWolf.config.game_id) + "/" + str(player_name)
|
|
SilentWolf.send_get_request(GetPlayerData, request_url)
|
|
return self
|
|
|
|
|
|
func _on_GetPlayerData_request_completed(result, response_code, headers, body) -> void:
|
|
var status_check = SWUtils.check_http_response(response_code, headers, body)
|
|
if is_instance_valid(GetPlayerData):
|
|
SilentWolf.free_request(wrGetPlayerData, GetPlayerData)
|
|
|
|
if status_check:
|
|
var json_body = JSON.parse_string(body.get_string_from_utf8())
|
|
var sw_result: Dictionary = SilentWolf.build_result(json_body)
|
|
if json_body.success:
|
|
SWLogger.info("SilentWolf get player data success for player: " + str(json_body.player_name))
|
|
player_name = json_body.player_name
|
|
player_data = json_body.player_data
|
|
SWLogger.debug("Player data: " + str(player_data))
|
|
sw_result["player_data"] = player_data
|
|
else:
|
|
SWLogger.error("SilentWolf get player data failure: " + str(json_body.error))
|
|
sw_get_player_data_complete.emit(sw_result)
|
|
|
|
|
|
func delete_player_weapons(player_name: String) -> void:
|
|
var weapons = { "Weapons": [] }
|
|
delete_player_data(player_name, weapons)
|
|
|
|
|
|
func remove_player_money(player_name: String) -> void:
|
|
var money = { "Money": 0 }
|
|
delete_player_data(player_name, money)
|
|
|
|
|
|
func delete_player_items(player_name: String, item_name: String) -> void:
|
|
var item = { item_name: "" }
|
|
delete_player_data(player_name, item)
|
|
|
|
|
|
func delete_all_player_data(player_name: String) -> void:
|
|
delete_player_data(player_name, {})
|
|
|
|
|
|
func delete_player_data(player_name: String, player_data: Dictionary) -> Node:
|
|
var prepared_http_req = SilentWolf.prepare_http_request()
|
|
DeletePlayerData = prepared_http_req.request
|
|
wrDeletePlayerData = prepared_http_req.weakref
|
|
DeletePlayerData.request_completed.connect(_on_DeletePlayerData_request_completed)
|
|
SWLogger.info("Calling SilentWolf to remove player data")
|
|
var payload = { "game_id": SilentWolf.config.game_id, "player_name": player_name, "player_data": player_data }
|
|
var query = JSON.stringify(payload)
|
|
var request_url = "https://api.silentwolf.com/remove_player_data"
|
|
SilentWolf.send_post_request(DeletePlayerData, request_url, payload)
|
|
return self
|
|
|
|
|
|
func _on_DeletePlayerData_request_completed(result, response_code, headers, body) -> void:
|
|
var status_check = SWUtils.check_http_response(response_code, headers, body)
|
|
if is_instance_valid(DeletePlayerData):
|
|
DeletePlayerData.queue_free()
|
|
|
|
if status_check:
|
|
var json_body = JSON.parse_string(body.get_string_from_utf8())
|
|
var sw_result: Dictionary = SilentWolf.build_result(json_body)
|
|
if json_body.success:
|
|
SWLogger.info("SilentWolf delete player data success for player: " + str(json_body.player_name))
|
|
var player_name = json_body.player_name
|
|
# return player_data after (maybe partial) removal
|
|
var player_data = json_body.player_data
|
|
sw_result["player_name"] = player_name
|
|
sw_result["player_data"] = player_data
|
|
else:
|
|
SWLogger.error("SilentWolf delete player data failure: " + str(json_body.error))
|
|
sw_delete_player_data_complete.emit(sw_result)
|
|
|
|
|
|
func get_stats() -> Dictionary:
|
|
var stats = null
|
|
if player_data:
|
|
stats = {
|
|
"strength": player_data.strength,
|
|
"speed": player_data.speed,
|
|
"reflexes": player_data.reflexes,
|
|
"max_health": player_data.max_health,
|
|
"career": player_data.career
|
|
}
|
|
return stats
|
|
|
|
|
|
func get_inventory() -> Dictionary:
|
|
var inventory = null
|
|
if player_data:
|
|
inventory = {
|
|
"weapons": player_data.weapons,
|
|
"gold": player_data.gold
|
|
}
|
|
return inventory
|
|
|
|
|
|
func set_player_data(new_player_data: Dictionary) -> void:
|
|
player_data = new_player_data
|
|
|
|
|
|
func clear_player_data() -> void:
|
|
player_name = null
|
|
player_data = null
|