Legacy leaderboards

This commit is contained in:
2025-08-28 12:19:13 -07:00
parent 3999f810a3
commit 015de48e34
2 changed files with 1205 additions and 2 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -18,6 +18,7 @@ public class LeaderboardsMenu : MonoBehaviour
public Button selectionScoreButton;
public Button selectionBerryButton;
public Button selectionCoinButton;
public Button selectionLegacyButton;
public GameObject scorePanel;
public GameObject scoreContent;
@@ -32,6 +33,10 @@ public class LeaderboardsMenu : MonoBehaviour
public GameObject coinContent;
public GameObject coinSampleObject;
public GameObject legacyPanel;
public GameObject legacyContent;
public GameObject legacySampleObject;
public Dictionary<string, string> customIcons;
void Awake()
@@ -39,6 +44,7 @@ public class LeaderboardsMenu : MonoBehaviour
selectionScoreButton.onClick.AddListener(() => SwitchMenu(1));
selectionBerryButton.onClick.AddListener(() => SwitchMenu(2));
selectionCoinButton.onClick.AddListener(() => SwitchMenu(3));
selectionLegacyButton.onClick.AddListener(() => SwitchMenu(4));
berryShowTypeDropdown.onValueChanged.AddListener(value => GetTopPlayersBerry(value));
@@ -46,13 +52,14 @@ public class LeaderboardsMenu : MonoBehaviour
backButton.onClick.AddListener(async () =>
{
if (selectionPanel.activeSelf) await SceneManager.LoadSceneAsync("MainMenu");
else if (scorePanel.activeSelf || berryPanel.activeSelf || coinPanel.activeSelf) SwitchMenu(0);
else if (scorePanel.activeSelf || berryPanel.activeSelf || coinPanel.activeSelf || legacyPanel.activeSelf) SwitchMenu(0);
});
refreshButton.onClick.AddListener(() =>
{
if (scorePanel.activeSelf) GetTopPlayersScore();
else if (berryPanel.activeSelf) GetTopPlayersBerry(berryShowTypeDropdown.value);
else if (coinPanel.activeSelf) GetTopPlayersCoin();
else if (legacyPanel.activeSelf) GetTopPlayersLegacy();
});
}
@@ -89,6 +96,16 @@ public class LeaderboardsMenu : MonoBehaviour
}
}
}
else if (legacyPanel.activeSelf)
{
foreach (Transform item in coinContent.transform)
{
if (item.gameObject.activeSelf)
{
Destroy(item.gameObject);
}
}
}
switch (menu)
{
@@ -98,6 +115,7 @@ public class LeaderboardsMenu : MonoBehaviour
scorePanel.SetActive(false);
berryPanel.SetActive(false);
coinPanel.SetActive(false);
legacyPanel.SetActive(false);
break;
case 1:
refreshButton.transform.localPosition = new UnityEngine.Vector2(-402.5f, -282.33f);
@@ -107,6 +125,7 @@ public class LeaderboardsMenu : MonoBehaviour
scorePanel.SetActive(true);
berryPanel.SetActive(false);
coinPanel.SetActive(false);
legacyPanel.SetActive(false);
break;
case 2:
refreshButton.transform.localPosition = new UnityEngine.Vector2(402.5f, 282.33f);
@@ -117,6 +136,7 @@ public class LeaderboardsMenu : MonoBehaviour
scorePanel.SetActive(false);
berryPanel.SetActive(true);
coinPanel.SetActive(false);
legacyPanel.SetActive(false);
break;
case 3:
refreshButton.transform.localPosition = new UnityEngine.Vector2(-402.5f, -282.33f);
@@ -126,6 +146,17 @@ public class LeaderboardsMenu : MonoBehaviour
scorePanel.SetActive(false);
berryPanel.SetActive(false);
coinPanel.SetActive(true);
legacyPanel.SetActive(false);
break;
case 4:
refreshButton.transform.localPosition = new UnityEngine.Vector2(-402.5f, -282.33f);
refreshButton.gameObject.SetActive(true);
GetTopPlayersLegacy();
selectionPanel.SetActive(false);
scorePanel.SetActive(false);
berryPanel.SetActive(false);
coinPanel.SetActive(false);
legacyPanel.SetActive(true);
break;
}
}
@@ -511,6 +542,132 @@ public class LeaderboardsMenu : MonoBehaviour
refreshButton.interactable = true;
}
async void GetTopPlayersLegacy()
{
backButton.interactable = false;
refreshButton.interactable = false;
foreach (Transform item in legacyContent.transform)
{
if (item.gameObject.activeSelf)
{
Destroy(item.gameObject);
}
}
UpdateStatus(true, "Loading...");
EncryptedWWWForm dataForm = new();
dataForm.AddField("type", "3");
using UnityWebRequest request = UnityWebRequest.Post(SensitiveInfo.SERVER_DATABASE_PREFIX + "getTopPlayers.php", dataForm.form);
request.SetRequestHeader("Requester", "BerryDashClient");
request.SetRequestHeader("ClientVersion", Application.version);
request.SetRequestHeader("ClientPlatform", Application.platform.ToString());
await request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
UpdateStatus(false);
string response = SensitiveInfo.Decrypt(request.downloadHandler.text, SensitiveInfo.SERVER_RECEIVE_TRANSFER_KEY);
if (response == "-999")
{
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 entries = (JArray)jsonResponse["entries"];
customIcons = jsonResponse["customIcons"].ToObject<Dictionary<string, string>>();
for (int i = 0; i < entries.Count; i++)
{
var entry = JObject.Parse(entries[i].ToString());
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((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 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;
highScoreText.color = Color.aquamarine;
}
usernameText.text = $"{username} (#{i + 1})";
highScoreText.text += Tools.FormatWithCommas(highScore);
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);
}
entryInfo.SetActive(true);
}
}
}
else
{
UpdateStatus(true, "Failed to fetch leaderboard stats");
}
backButton.interactable = true;
refreshButton.interactable = true;
}
private void UpdateStatus(bool enabled, string message = "")
{
statusText.gameObject.SetActive(enabled);