Make leaderboards work with new servers

This commit is contained in:
2026-01-15 14:42:17 -07:00
parent bf08b3ecf4
commit 75f86ce905
3 changed files with 411 additions and 447 deletions

View File

@@ -208,9 +208,7 @@ public class LeaderboardsMenu : MonoBehaviour
} }
} }
UpdateStatus(true, "Loading..."); UpdateStatus(true, "Loading...");
WWWForm dataForm = new(); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_SCORE_ENDPOINT);
dataForm.AddField("type", "0");
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "berrydash/getTopPlayers.php", dataForm);
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
@@ -219,106 +217,98 @@ public class LeaderboardsMenu : MonoBehaviour
{ {
UpdateStatus(false); UpdateStatus(false);
string response = request.downloadHandler.text; string response = request.downloadHandler.text;
if (response == "-999") try
{
UpdateStatus(true, "Server error while fetching data");
}
else if (response == "-998")
{
UpdateStatus(true, "Client version too outdated to access servers");
}
else if (response == "-997")
{
UpdateStatus(true, "Encryption/decryption issues");
}
else if (response == "-996")
{
UpdateStatus(true, "Can't send requests on self-built instance");
}
else if (response == "-1")
{
UpdateStatus(true, "No entries for this leaderboard found!");
}
else
{ {
var jsonResponse = JObject.Parse(response); var jsonResponse = JObject.Parse(response);
var entries = (JArray)jsonResponse["entries"]; if ((bool)jsonResponse["success"])
customIcons = jsonResponse["customIcons"].ToObject<Dictionary<string, string>>();
for (int i = 0; i < entries.Count; i++)
{ {
var entry = JObject.Parse(entries[i].ToString()); var entries = (JObject)jsonResponse["data"]["entries"];
var username = (string)entry["username"]; customIcons = jsonResponse["data"]["customIcons"].ToObject<Dictionary<string, string>>();
var highScore = BigInteger.Parse((string)entry["value"]); foreach (var prop in entries.Properties())
var icon = (int)entry["icon"];
var overlay = (int)entry["overlay"];
var uid = BigInteger.Parse((string)entry["userid"]);
var birdColor = (JArray)entry["birdColor"];
var overlayColor = (JArray)entry["overlayColor"];
var customIcon = (string)entry["customIcon"];
var entryInfo = Instantiate(scoreSampleObject, scoreContent.transform);
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
if (BazookaManager.Instance.GetAccountID() == uid)
{ {
usernameText.color = Color.aquamarine; JObject entry = (JObject)prop.Value;
highScoreText.color = Color.aquamarine; var username = (string)entry["username"];
} var highScore = BigInteger.Parse((string)entry["value"]);
var icon = (int)entry["icon"];
var overlay = (int)entry["overlay"];
var uid = BigInteger.Parse(prop.Name);
var birdColor = (JArray)entry["birdColor"];
var overlayColor = (JArray)entry["overlayColor"];
var customIcon = (string)entry["customIcon"];
usernameText.text = $"{username} (#{i + 1})"; var entryInfo = Instantiate(scoreSampleObject, scoreContent.transform);
highScoreText.text += Tools.FormatWithCommas(highScore); var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
if (customIcon == null) var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
{ var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon); var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
if (icon == 1) var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
usernameText.text = $"{username} (#{uid + 1})";
highScoreText.text += Tools.FormatWithCommas(highScore);
if (BazookaManager.Instance.GetAccountID() == uid)
{ {
playerIcon.sprite = Tools.GetIconForUser(uid); usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
highScoreText.text = $"<color=#7FFFD4>{highScoreText.text}</color>";
} }
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay == 0) if (customIcon == null)
{ {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
if (icon == 1)
{
playerIcon.sprite = Tools.GetIconForUser(uid);
}
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay == 0)
{
playerOverlayIcon.gameObject.SetActive(false);
}
else if (overlay == 8)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
}
else if (overlay == 11)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
}
else if (overlay == 13)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
}
try
{
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
}
catch (Exception)
{
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
}
else
{
Tools.RenderFromBase64(customIcons[customIcon], playerIcon);
playerOverlayIcon.gameObject.SetActive(false); playerOverlayIcon.gameObject.SetActive(false);
} }
else if (overlay == 8) playerIconButton.onClick.AddListener(async () =>
{ {
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f); var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
} clone.SetActive(true);
else if (overlay == 11) await clone.GetComponent<ProfileMenu>().Init(uid);
{ });
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f); entryInfo.SetActive(true);
}
else if (overlay == 13)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
}
try
{
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
}
catch (Exception)
{
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} }
else
{
Tools.RenderFromBase64(customIcons[customIcon], playerIcon);
playerOverlayIcon.gameObject.SetActive(false);
}
playerIconButton.onClick.AddListener(async () =>
{
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(uid);
});
entryInfo.SetActive(true);
} }
else
{
UpdateStatus(true, (string)jsonResponse["message"]);
}
}
catch (Exception e)
{
UpdateStatus(true, "Failed to fetch leaderboard stats: " + e);
} }
} }
else else
@@ -344,8 +334,7 @@ public class LeaderboardsMenu : MonoBehaviour
UpdateStatus(true, "Loading..."); UpdateStatus(true, "Loading...");
WWWForm dataForm = new(); WWWForm dataForm = new();
dataForm.AddField("showType", showAmount.ToString()); dataForm.AddField("showType", showAmount.ToString());
dataForm.AddField("type", "1"); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_BERRY_ENDPOINT);
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "berrydash/getTopPlayers.php", dataForm);
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
@@ -354,106 +343,98 @@ public class LeaderboardsMenu : MonoBehaviour
{ {
UpdateStatus(false); UpdateStatus(false);
string response = request.downloadHandler.text; string response = request.downloadHandler.text;
if (response == "-999") try
{
UpdateStatus(true, "Server error while fetching data");
}
else if (response == "-998")
{
UpdateStatus(true, "Client version too outdated to access servers");
}
else if (response == "-997")
{
UpdateStatus(true, "Encryption/decryption issues");
}
else if (response == "-996")
{
UpdateStatus(true, "Can't send requests on self-built instance");
}
else if (response == "-1")
{
UpdateStatus(true, "No entries for this leaderboard found!");
}
else
{ {
var jsonResponse = JObject.Parse(response); var jsonResponse = JObject.Parse(response);
var entries = (JArray)jsonResponse["entries"]; if ((bool)jsonResponse["success"])
customIcons = jsonResponse["customIcons"].ToObject<Dictionary<string, string>>();
for (int i = 0; i < entries.Count; i++)
{ {
var entry = JObject.Parse(entries[i].ToString()); var entries = (JObject)jsonResponse["data"]["entries"];
var username = (string)entry["username"]; customIcons = jsonResponse["data"]["customIcons"].ToObject<Dictionary<string, string>>();
var highScore = BigInteger.Parse((string)entry["value"]); foreach (var prop in entries.Properties())
var icon = (int)entry["icon"];
var overlay = (int)entry["overlay"];
var uid = BigInteger.Parse((string)entry["userid"]);
var birdColor = (JArray)entry["birdColor"];
var overlayColor = (JArray)entry["overlayColor"];
var customIcon = (string)entry["customIcon"];
var entryInfo = Instantiate(berrySampleObject, berryContent.transform);
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
if (BazookaManager.Instance.GetAccountID() == uid)
{ {
usernameText.color = Color.aquamarine; JObject entry = (JObject)prop.Value;
highScoreText.color = Color.aquamarine; var username = (string)entry["username"];
} var highScore = BigInteger.Parse((string)entry["value"]);
var icon = (int)entry["icon"];
var overlay = (int)entry["overlay"];
var uid = BigInteger.Parse(prop.Name);
var birdColor = (JArray)entry["birdColor"];
var overlayColor = (JArray)entry["overlayColor"];
var customIcon = (string)entry["customIcon"];
usernameText.text = $"{username} (#{i + 1})"; var entryInfo = Instantiate(berrySampleObject, berryContent.transform);
highScoreText.text += Tools.FormatWithCommas(highScore); var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
if (customIcon == null) var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
{ var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon); var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
if (icon == 1) var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
usernameText.text = $"{username} (#{uid + 1})";
highScoreText.text += Tools.FormatWithCommas(highScore);
if (BazookaManager.Instance.GetAccountID() == uid)
{ {
playerIcon.sprite = Tools.GetIconForUser(uid); usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
highScoreText.text = $"<color=#7FFFD4>{highScoreText.text}</color>";
} }
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay == 0) if (customIcon == null)
{ {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
if (icon == 1)
{
playerIcon.sprite = Tools.GetIconForUser(uid);
}
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay == 0)
{
playerOverlayIcon.gameObject.SetActive(false);
}
else if (overlay == 8)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
}
else if (overlay == 11)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
}
else if (overlay == 13)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
}
try
{
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
}
catch (Exception)
{
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
}
else
{
Tools.RenderFromBase64(customIcons[customIcon], playerIcon);
playerOverlayIcon.gameObject.SetActive(false); playerOverlayIcon.gameObject.SetActive(false);
} }
else if (overlay == 8) playerIconButton.onClick.AddListener(async () =>
{ {
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f); var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
} clone.SetActive(true);
else if (overlay == 11) await clone.GetComponent<ProfileMenu>().Init(uid);
{ });
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f); entryInfo.SetActive(true);
}
else if (overlay == 13)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
}
try
{
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
}
catch (Exception)
{
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} }
else
{
Tools.RenderFromBase64(customIcons[customIcon], playerIcon);
playerOverlayIcon.gameObject.SetActive(false);
}
playerIconButton.onClick.AddListener(async () =>
{
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(uid);
});
entryInfo.SetActive(true);
} }
else
{
UpdateStatus(true, (string)jsonResponse["message"]);
}
}
catch (Exception e)
{
UpdateStatus(true, "Failed to fetch leaderboard stats: " + e);
} }
} }
else else
@@ -477,9 +458,7 @@ public class LeaderboardsMenu : MonoBehaviour
} }
} }
UpdateStatus(true, "Loading..."); UpdateStatus(true, "Loading...");
WWWForm dataForm = new(); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_COIN_ENDPOINT);
dataForm.AddField("type", "2");
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "berrydash/getTopPlayers.php", dataForm);
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
@@ -488,106 +467,98 @@ public class LeaderboardsMenu : MonoBehaviour
{ {
UpdateStatus(false); UpdateStatus(false);
string response = request.downloadHandler.text; string response = request.downloadHandler.text;
if (response == "-999") try
{
UpdateStatus(true, "Server error while fetching data");
}
else if (response == "-998")
{
UpdateStatus(true, "Client version too outdated to access servers");
}
else if (response == "-997")
{
UpdateStatus(true, "Encryption/decryption issues");
}
else if (response == "-996")
{
UpdateStatus(true, "Can't send requests on self-built instance");
}
else if (response == "-1")
{
UpdateStatus(true, "No entries for this leaderboard found!");
}
else
{ {
var jsonResponse = JObject.Parse(response); var jsonResponse = JObject.Parse(response);
var entries = (JArray)jsonResponse["entries"]; if ((bool)jsonResponse["success"])
customIcons = jsonResponse["customIcons"].ToObject<Dictionary<string, string>>();
for (int i = 0; i < entries.Count; i++)
{ {
var entry = JObject.Parse(entries[i].ToString()); var entries = (JObject)jsonResponse["data"]["entries"];
var username = (string)entry["username"]; customIcons = jsonResponse["data"]["customIcons"].ToObject<Dictionary<string, string>>();
var highScore = BigInteger.Parse((string)entry["value"]); foreach (var prop in entries.Properties())
var icon = (int)entry["icon"];
var overlay = (int)entry["overlay"];
var uid = BigInteger.Parse((string)entry["userid"]);
var birdColor = (JArray)entry["birdColor"];
var overlayColor = (JArray)entry["overlayColor"];
var customIcon = (string)entry["customIcon"];
var entryInfo = Instantiate(coinSampleObject, coinContent.transform);
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
if (BazookaManager.Instance.GetAccountID() == uid)
{ {
usernameText.color = Color.aquamarine; JObject entry = (JObject)prop.Value;
highScoreText.color = Color.aquamarine; var username = (string)entry["username"];
} var highScore = BigInteger.Parse((string)entry["value"]);
var icon = (int)entry["icon"];
var overlay = (int)entry["overlay"];
var uid = BigInteger.Parse(prop.Name);
var birdColor = (JArray)entry["birdColor"];
var overlayColor = (JArray)entry["overlayColor"];
var customIcon = (string)entry["customIcon"];
usernameText.text = $"{username} (#{i + 1})"; var entryInfo = Instantiate(coinSampleObject, coinContent.transform);
highScoreText.text += Tools.FormatWithCommas(highScore); var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
if (customIcon == null) var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
{ var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon); var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
if (icon == 1) var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
usernameText.text = $"{username} (#{uid + 1})";
highScoreText.text += Tools.FormatWithCommas(highScore);
if (BazookaManager.Instance.GetAccountID() == uid)
{ {
playerIcon.sprite = Tools.GetIconForUser(uid); usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
highScoreText.text = $"<color=#7FFFD4>{highScoreText.text}</color>";
} }
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay == 0) if (customIcon == null)
{ {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
if (icon == 1)
{
playerIcon.sprite = Tools.GetIconForUser(uid);
}
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay == 0)
{
playerOverlayIcon.gameObject.SetActive(false);
}
else if (overlay == 8)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
}
else if (overlay == 11)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
}
else if (overlay == 13)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
}
try
{
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
}
catch (Exception)
{
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
}
else
{
Tools.RenderFromBase64(customIcons[customIcon], playerIcon);
playerOverlayIcon.gameObject.SetActive(false); playerOverlayIcon.gameObject.SetActive(false);
} }
else if (overlay == 8) playerIconButton.onClick.AddListener(async () =>
{ {
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f); var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
} clone.SetActive(true);
else if (overlay == 11) await clone.GetComponent<ProfileMenu>().Init(uid);
{ });
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f); entryInfo.SetActive(true);
}
else if (overlay == 13)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
}
try
{
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
}
catch (Exception)
{
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} }
else
{
Tools.RenderFromBase64(customIcons[customIcon], playerIcon);
playerOverlayIcon.gameObject.SetActive(false);
}
playerIconButton.onClick.AddListener(async () =>
{
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(uid);
});
entryInfo.SetActive(true);
} }
else
{
UpdateStatus(true, (string)jsonResponse["message"]);
}
}
catch (Exception e)
{
UpdateStatus(true, "Failed to fetch leaderboard stats: " + e);
} }
} }
else else
@@ -610,9 +581,7 @@ public class LeaderboardsMenu : MonoBehaviour
} }
} }
UpdateStatus(true, "Loading..."); UpdateStatus(true, "Loading...");
WWWForm dataForm = new(); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_LEGACY_ENDPOINT);
dataForm.AddField("type", "3");
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "berrydash/getTopPlayers.php", dataForm);
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
@@ -621,106 +590,98 @@ public class LeaderboardsMenu : MonoBehaviour
{ {
UpdateStatus(false); UpdateStatus(false);
string response = request.downloadHandler.text; string response = request.downloadHandler.text;
if (response == "-999") try
{
UpdateStatus(true, "Server error while fetching data");
}
else if (response == "-998")
{
UpdateStatus(true, "Client version too outdated to access servers");
}
else if (response == "-997")
{
UpdateStatus(true, "Encryption/decryption issues");
}
else if (response == "-996")
{
UpdateStatus(true, "Can't send requests on self-built instance");
}
else if (response == "-1")
{
UpdateStatus(true, "No entries for this leaderboard found!");
}
else
{ {
var jsonResponse = JObject.Parse(response); var jsonResponse = JObject.Parse(response);
var entries = (JArray)jsonResponse["entries"]; if ((bool)jsonResponse["success"])
customIcons = jsonResponse["customIcons"].ToObject<Dictionary<string, string>>();
for (int i = 0; i < entries.Count; i++)
{ {
var entry = JObject.Parse(entries[i].ToString()); var entries = (JObject)jsonResponse["data"]["entries"];
var username = (string)entry["username"]; customIcons = jsonResponse["data"]["customIcons"].ToObject<Dictionary<string, string>>();
var highScore = BigInteger.Parse((string)entry["value"]); foreach (var prop in entries.Properties())
var icon = (int)entry["icon"];
var overlay = (int)entry["overlay"];
var uid = BigInteger.Parse((string)entry["userid"]);
var birdColor = (JArray)entry["birdColor"];
var overlayColor = (JArray)entry["overlayColor"];
var customIcon = (string)entry["customIcon"];
var entryInfo = Instantiate(legacySampleObject, legacyContent.transform);
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
if (BazookaManager.Instance.GetAccountID() == uid)
{ {
usernameText.color = Color.aquamarine; JObject entry = (JObject)prop.Value;
highScoreText.color = Color.aquamarine; var username = (string)entry["username"];
} var highScore = BigInteger.Parse((string)entry["value"]);
var icon = (int)entry["icon"];
var overlay = (int)entry["overlay"];
var uid = BigInteger.Parse(prop.Name);
var birdColor = (JArray)entry["birdColor"];
var overlayColor = (JArray)entry["overlayColor"];
var customIcon = (string)entry["customIcon"];
usernameText.text = $"{username} (#{i + 1})"; var entryInfo = Instantiate(legacySampleObject, legacyContent.transform);
highScoreText.text += Tools.FormatWithCommas(highScore); var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
if (customIcon == null) var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
{ var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon); var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
if (icon == 1) var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
usernameText.text = $"{username} (#{uid + 1})";
highScoreText.text += Tools.FormatWithCommas(highScore);
if (BazookaManager.Instance.GetAccountID() == uid)
{ {
playerIcon.sprite = Tools.GetIconForUser(uid); usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
highScoreText.text = $"<color=#7FFFD4>{highScoreText.text}</color>";
} }
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay == 0) if (customIcon == null)
{ {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
if (icon == 1)
{
playerIcon.sprite = Tools.GetIconForUser(uid);
}
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay == 0)
{
playerOverlayIcon.gameObject.SetActive(false);
}
else if (overlay == 8)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
}
else if (overlay == 11)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
}
else if (overlay == 13)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
}
try
{
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
}
catch (Exception)
{
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
}
else
{
Tools.RenderFromBase64(customIcons[customIcon], playerIcon);
playerOverlayIcon.gameObject.SetActive(false); playerOverlayIcon.gameObject.SetActive(false);
} }
else if (overlay == 8) playerIconButton.onClick.AddListener(async () =>
{ {
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f); var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
} clone.SetActive(true);
else if (overlay == 11) await clone.GetComponent<ProfileMenu>().Init(uid);
{ });
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f); entryInfo.SetActive(true);
}
else if (overlay == 13)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
}
try
{
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
}
catch (Exception)
{
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} }
else
{
Tools.RenderFromBase64(customIcons[customIcon], playerIcon);
playerOverlayIcon.gameObject.SetActive(false);
}
playerIconButton.onClick.AddListener(async () =>
{
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(uid);
});
entryInfo.SetActive(true);
} }
else
{
UpdateStatus(true, (string)jsonResponse["message"]);
}
}
catch (Exception e)
{
UpdateStatus(true, "Failed to fetch leaderboard stats: " + e);
} }
} }
else else
@@ -745,7 +706,7 @@ public class LeaderboardsMenu : MonoBehaviour
UpdateStatus(true, "Loading..."); UpdateStatus(true, "Loading...");
WWWForm dataForm = new(); WWWForm dataForm = new();
dataForm.AddField("type", "4"); dataForm.AddField("type", "4");
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "berrydash/getTopPlayers.php", dataForm); using UnityWebRequest request = UnityWebRequest.Get(Endpoints.LEADERBOARDS_TOTAL_ENDPOINT);
request.SetRequestHeader("Requester", "BerryDashClient"); request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version); request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString()); request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
@@ -754,106 +715,98 @@ public class LeaderboardsMenu : MonoBehaviour
{ {
UpdateStatus(false); UpdateStatus(false);
string response = request.downloadHandler.text; string response = request.downloadHandler.text;
if (response == "-999") try
{
UpdateStatus(true, "Server error while fetching data");
}
else if (response == "-998")
{
UpdateStatus(true, "Client version too outdated to access servers");
}
else if (response == "-997")
{
UpdateStatus(true, "Encryption/decryption issues");
}
else if (response == "-996")
{
UpdateStatus(true, "Can't send requests on self-built instance");
}
else if (response == "-1")
{
UpdateStatus(true, "No entries for this leaderboard found!");
}
else
{ {
var jsonResponse = JObject.Parse(response); var jsonResponse = JObject.Parse(response);
var entries = (JArray)jsonResponse["entries"]; if ((bool)jsonResponse["success"])
customIcons = jsonResponse["customIcons"].ToObject<Dictionary<string, string>>();
for (int i = 0; i < entries.Count; i++)
{ {
var entry = JObject.Parse(entries[i].ToString()); var entries = (JObject)jsonResponse["data"]["entries"];
var username = (string)entry["username"]; customIcons = jsonResponse["data"]["customIcons"].ToObject<Dictionary<string, string>>();
var highScore = BigInteger.Parse((string)entry["value"]); foreach (var prop in entries.Properties())
var icon = (int)entry["icon"];
var overlay = (int)entry["overlay"];
var uid = BigInteger.Parse((string)entry["userid"]);
var birdColor = (JArray)entry["birdColor"];
var overlayColor = (JArray)entry["overlayColor"];
var customIcon = (string)entry["customIcon"];
var entryInfo = Instantiate(totalBerriesSampleObject, totalBerriesContent.transform);
var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
if (BazookaManager.Instance.GetAccountID() == uid)
{ {
usernameText.color = Color.aquamarine; JObject entry = (JObject)prop.Value;
highScoreText.color = Color.aquamarine; var username = (string)entry["username"];
} var highScore = BigInteger.Parse((string)entry["value"]);
var icon = (int)entry["icon"];
var overlay = (int)entry["overlay"];
var uid = BigInteger.Parse(prop.Name);
var birdColor = (JArray)entry["birdColor"];
var overlayColor = (JArray)entry["overlayColor"];
var customIcon = (string)entry["customIcon"];
usernameText.text = $"{username} (#{i + 1})"; var entryInfo = Instantiate(totalBerriesSampleObject, totalBerriesContent.transform);
highScoreText.text += Tools.FormatWithCommas(highScore); var usernameText = entryInfo.transform.GetChild(0).GetComponent<TMP_Text>();
if (customIcon == null) var playerIcon = usernameText.transform.GetChild(0).GetComponent<Image>();
{ var playerIconButton = usernameText.transform.GetChild(0).GetComponent<Button>();
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon); var playerOverlayIcon = playerIcon.transform.GetChild(0).GetComponent<Image>();
if (icon == 1) var highScoreText = entryInfo.transform.GetChild(1).GetComponent<TMP_Text>();
usernameText.text = $"{username} (#{uid + 1})";
highScoreText.text += Tools.FormatWithCommas(highScore);
if (BazookaManager.Instance.GetAccountID() == uid)
{ {
playerIcon.sprite = Tools.GetIconForUser(uid); usernameText.text = $"<color=#7FFFD4>{usernameText.text}</color>";
highScoreText.text = $"<color=#7FFFD4>{highScoreText.text}</color>";
} }
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay == 0) if (customIcon == null)
{ {
playerIcon.sprite = Resources.Load<Sprite>("Icons/Icons/bird_" + icon);
if (icon == 1)
{
playerIcon.sprite = Tools.GetIconForUser(uid);
}
playerOverlayIcon.sprite = Resources.Load<Sprite>("Icons/Overlays/overlay_" + overlay);
if (overlay == 0)
{
playerOverlayIcon.gameObject.SetActive(false);
}
else if (overlay == 8)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f);
}
else if (overlay == 11)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f);
}
else if (overlay == 13)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
}
try
{
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
}
catch (Exception)
{
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
}
else
{
Tools.RenderFromBase64(customIcons[customIcon], playerIcon);
playerOverlayIcon.gameObject.SetActive(false); playerOverlayIcon.gameObject.SetActive(false);
} }
else if (overlay == 8) playerIconButton.onClick.AddListener(async () =>
{ {
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.56f, 14.81f); var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
} clone.SetActive(true);
else if (overlay == 11) await clone.GetComponent<ProfileMenu>().Init(uid);
{ });
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-14.74451f, 20.39122f); entryInfo.SetActive(true);
}
else if (overlay == 13)
{
playerOverlayIcon.transform.localPosition = new UnityEngine.Vector2(-16.54019f, 14.70365f);
}
try
{
playerIcon.color = new Color((int)birdColor[0] / 255f, (int)birdColor[1] / 255f, (int)birdColor[2] / 255f);
playerOverlayIcon.color = new Color((int)overlayColor[0] / 255f, (int)overlayColor[1] / 255f, (int)overlayColor[2] / 255f);
}
catch (Exception)
{
playerIcon.color = Color.white;
playerOverlayIcon.color = Color.white;
}
} }
else
{
Tools.RenderFromBase64(customIcons[customIcon], playerIcon);
playerOverlayIcon.gameObject.SetActive(false);
}
playerIconButton.onClick.AddListener(async () =>
{
var clone = Instantiate(profilePrefab.gameObject, profilePrefab.gameObject.transform.parent);
clone.SetActive(true);
await clone.GetComponent<ProfileMenu>().Init(uid);
});
entryInfo.SetActive(true);
} }
else
{
UpdateStatus(true, (string)jsonResponse["message"]);
}
}
catch (Exception e)
{
UpdateStatus(true, "Failed to fetch leaderboard stats: " + e);
} }
} }
else else

View File

@@ -0,0 +1,9 @@
public class Endpoints
{
public static readonly string BASE_URL = "https://games.lncvrt.xyz/api";
public static readonly string LEADERBOARDS_SCORE_ENDPOINT = BASE_URL + "/berrydash/leaderboards/score";
public static readonly string LEADERBOARDS_BERRY_ENDPOINT = BASE_URL + "/berrydash/leaderboards/berry";
public static readonly string LEADERBOARDS_COIN_ENDPOINT = BASE_URL + "/berrydash/leaderboards/coin";
public static readonly string LEADERBOARDS_LEGACY_ENDPOINT = BASE_URL + "/berrydash/leaderboards/legacy";
public static readonly string LEADERBOARDS_TOTAL_ENDPOINT = BASE_URL + "/berrydash/leaderboards/total";
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 0bd49a8a30eae454ab076e86982db0d5