using System; using System.Threading; using GamecraftModdingAPI.App; using Unity.Collections; using Unity.Jobs; using Unity.Mathematics; using GamecraftModdingAPI.Utility; using Leadercraft.Server; namespace Leadercraft.Scoring { public struct UploadJob { private int points; private int time; private float[] location; private ulong player; private string playerName; private ulong game; public UploadJob(int score, double timespan, float3 position, ulong playerId, string playerName, ulong gameId) { this.points = score; this.time = (int)Math.Ceiling(timespan); this.location = new float[3] { position.x, position.y, position.z}; this.player = playerId; this.playerName = playerName; this.game = gameId; LeadercraftPlugin.BuildApi(); } public void RunInNewThread() { Thread job = new Thread(new ThreadStart(Execute)); job.Start(); } private void Execute() { if (Game.CurrentGame().Name == "Leadercraft's sucky game") game = 2; if (player < 1000 || game == 0) return; // offline game LeadercraftResult tokenResult = LeadercraftPlugin.Api.RequestPOSTToken(playerName); if (tokenResult.IsError) { Logging.LogWarning($"Leadercraft API token web request failed with status {tokenResult.StatusCode}"); try { Logging.LogWarning($"API Error Response: {tokenResult.ParseError().Items[0]}"); } catch (Exception) { } return; } string token = tokenResult.ParseResult().Items[0].Token; CriteriaStruct criteria = new CriteriaStruct { Location = new float[][] { location, location }, Time = time, GameID = game, PlayerID = player, Complete = true, Points = points }; LeadercraftResult criteriaResult = LeadercraftPlugin.Api.RequestPOSTCriteria(criteria, token); if (criteriaResult.IsError) { Logging.LogWarning($"Leadercraft API criteria web request failed with status {criteriaResult.StatusCode}"); try { Logging.LogWarning($"API Error Response: {criteriaResult.ParseError().Items[0]}"); } catch (Exception) { } return; } Logging.MetaLog($"Criteria request succeeded with status {criteriaResult.StatusCode}"); } } }