Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard/AchievementImpl.cs
gamer147 957af3d1ec feat(battle-engine): full Unity/VFX/god-object shims + expanded copy closure (2570 files)
Authored Unity primitive/object-model shim, VFX layer (control-flow-preserving, InstantVfx never invokes its action -- headless suppression), god-object stubs (GameMgr/EffectMgr/UIManager with faithfully-extracted nested enums), View/UI/Touch tree, LitJson+BetterList+Tuple copied, third-party stubs. Discovered Roslyn header-error masking: fixing class-header type errors unmasks body references, so the true copy closure is ~2570 files (was 782 under masking). Errors: masked-25720 -> 268; our shim files compile clean. Remaining: ~50 residual shim/external types, 24 NGUI UI-base overrides, static-type fixes, plus likely 1-2 more unmask waves.
2026-06-05 17:22:20 -04:00

392 lines
7.7 KiB
C#

using System;
using System.Collections.Generic;
using Cute;
using UnityEngine;
using UnityEngine.SocialPlatforms;
namespace Wizard;
public class AchievementImpl : MonoBehaviour
{
public enum eAchievementID
{
ELF10,
ELF25,
ELF40,
RYL10,
RYL25,
RYL40,
WCH10,
WCH25,
WCH40,
DGN10,
DGN25,
DGN40,
NCR10,
NCR25,
NCR40,
VMP10,
VMP25,
VMP40,
BSP10,
BSP25,
BSP40,
ARISA_CLR,
ERIKA_CLR,
ISABELLE_CLR,
ROWEN_CLR,
LUNA_CLR,
URIAS_CLR,
ERIS_CLR,
ALLSTORY_CLR,
RANK_D,
RANK_C,
RANK_B,
RANK_A,
NEM10,
NEM25,
NEM40
}
public class AchievementCallbackImpl : IAchievementCallback
{
private bool _bShowAchievementAfterSignIn;
public bool bShowAchievementAfterSignIn
{
set
{
_bShowAchievementAfterSignIn = value;
}
}
public void OnSignIn(bool success)
{
if (success)
{
instance.mIsSignIn = true;
if (_bShowAchievementAfterSignIn)
{
AchievementManager.ShowAchievementsUI();
}
PlayerPrefsWrapper.SetBool(PlayerPrefsWrapper.SOCIAL_ACHIEVEMENT_SIGNIN, flag: true);
}
else
{
PlayerPrefsWrapper.SetBool(PlayerPrefsWrapper.SOCIAL_ACHIEVEMENT_SIGNIN, flag: false);
}
_bShowAchievementAfterSignIn = false;
}
public void OnSignOut()
{
instance.mIsSignIn = false;
PlayerPrefsWrapper.SetBool(PlayerPrefsWrapper.SOCIAL_ACHIEVEMENT_SIGNIN, flag: false);
}
public void OnReleaseAchievement(bool success)
{
}
public void OnProceedAchievement(bool success)
{
}
public void OnLoadAchievements(IAchievement[] achievements)
{
}
public void OnLoadAchievementDescriptions(IAchievementDescription[] descriptions)
{
}
}
private readonly string[] mszAchievementID = new string[36]
{
"CgkIz8_azvQHEAIQAQ", "CgkIz8_azvQHEAIQAg", "CgkIz8_azvQHEAIQAw", "CgkIz8_azvQHEAIQBA", "CgkIz8_azvQHEAIQBQ", "CgkIz8_azvQHEAIQBg", "CgkIz8_azvQHEAIQBw", "CgkIz8_azvQHEAIQCA", "CgkIz8_azvQHEAIQCQ", "CgkIz8_azvQHEAIQCg",
"CgkIz8_azvQHEAIQCw", "CgkIz8_azvQHEAIQDA", "CgkIz8_azvQHEAIQDQ", "CgkIz8_azvQHEAIQDg", "CgkIz8_azvQHEAIQDw", "CgkIz8_azvQHEAIQEA", "CgkIz8_azvQHEAIQEQ", "CgkIz8_azvQHEAIQEg", "CgkIz8_azvQHEAIQEw", "CgkIz8_azvQHEAIQFA",
"CgkIz8_azvQHEAIQFQ", "CgkIz8_azvQHEAIQFg", "CgkIz8_azvQHEAIQFw", "CgkIz8_azvQHEAIQGA", "CgkIz8_azvQHEAIQGQ", "CgkIz8_azvQHEAIQGg", "CgkIz8_azvQHEAIQGw", "CgkIz8_azvQHEAIQHA", "CgkIz8_azvQHEAIQHQ", "CgkIz8_azvQHEAIQHg",
"CgkIz8_azvQHEAIQHw", "CgkIz8_azvQHEAIQIA", "CgkIz8_azvQHEAIQIQ", "CgkIz8_azvQHEAIQJA", "CgkIz8_azvQHEAIQJQ", "CgkIz8_azvQHEAIQJg"
};
private const int LEVEL_10 = 10;
private const int LEVEL_25 = 25;
private const int LEVEL_40 = 40;
private const int RANK_ID_D0 = 5;
private const int RANK_ID_C0 = 9;
private const int RANK_ID_B0 = 13;
private const int RANK_ID_A0 = 17;
private bool mIsSignIn;
private AchievementCallbackImpl mCallbackImpl;
public static AchievementImpl instance;
private void Awake()
{
Initialize();
}
public void Initialize()
{
if (mCallbackImpl == null)
{
mCallbackImpl = new AchievementCallbackImpl();
}
AchievementManager.Initialize(mCallbackImpl);
instance = this;
}
public void SignIn(Action<bool> callback = null)
{
if (mCallbackImpl != null)
{
mCallbackImpl.bShowAchievementAfterSignIn = false;
}
StartCoroutine(SocialServiceUtility.Instance.SignIn(delegate(bool success)
{
if (mCallbackImpl != null)
{
mCallbackImpl.OnSignIn(success);
}
if (callback != null)
{
callback(success);
}
}));
}
public void SignOut(Action callback = null)
{
SocialServiceUtility.Instance.SignOut(delegate
{
if (mCallbackImpl != null)
{
mCallbackImpl.OnSignOut();
}
if (callback != null)
{
callback();
}
});
mIsSignIn = false;
}
public void ShowAchievements(Action<bool> callback = null)
{
if (mCallbackImpl != null)
{
mCallbackImpl.bShowAchievementAfterSignIn = true;
}
StartCoroutine(SocialServiceUtility.Instance.SignIn(delegate(bool success)
{
if (success)
{
ReleaseAchievementShouldBeReleased();
}
if (mCallbackImpl != null)
{
mCallbackImpl.OnSignIn(success);
}
if (callback != null)
{
callback(success);
}
}));
}
public void ReleaseAchievement(eAchievementID id)
{
if (mIsSignIn)
{
AchievementManager.ReleaseAchievement(mszAchievementID[(int)id]);
}
}
public void ReleaseAchievement(string id)
{
if (mIsSignIn)
{
AchievementManager.ReleaseAchievement(id);
ReleaseAchievementShouldBeReleased();
}
}
private void ReleaseAchievementShouldBeReleased()
{
for (int i = 1; i < 9; i++)
{
ClassCharaPrm classPrm = GameMgr.GetIns().GetDataMgr().GetClassPrm(i);
Dictionary<int, eAchievementID> achievementIDsByClass = getAchievementIDsByClass((CardBasePrm.ClanType)i);
int classCharaLv = classPrm.GetClassCharaLv();
if (classCharaLv >= 10)
{
ReleaseAchievement(achievementIDsByClass[10]);
}
if (classCharaLv >= 25)
{
ReleaseAchievement(achievementIDsByClass[25]);
}
if (classCharaLv >= 40)
{
ReleaseAchievement(achievementIDsByClass[40]);
}
}
for (int j = 0; j < 2; j++)
{
int num = PlayerStaticData.UserRank((Format)j);
if (num >= 5)
{
ReleaseAchievement(eAchievementID.RANK_D);
}
if (num >= 9)
{
ReleaseAchievement(eAchievementID.RANK_C);
}
if (num >= 13)
{
ReleaseAchievement(eAchievementID.RANK_B);
}
if (num >= 17)
{
ReleaseAchievement(eAchievementID.RANK_A);
}
}
}
private Dictionary<int, eAchievementID> getAchievementIDsByClass(CardBasePrm.ClanType type)
{
return type switch
{
CardBasePrm.ClanType.MIN => new Dictionary<int, eAchievementID>
{
{
10,
eAchievementID.ELF10
},
{
25,
eAchievementID.ELF25
},
{
40,
eAchievementID.ELF40
}
},
CardBasePrm.ClanType.ROYAL => new Dictionary<int, eAchievementID>
{
{
10,
eAchievementID.RYL10
},
{
25,
eAchievementID.RYL25
},
{
40,
eAchievementID.RYL40
}
},
CardBasePrm.ClanType.WITCH => new Dictionary<int, eAchievementID>
{
{
10,
eAchievementID.WCH10
},
{
25,
eAchievementID.WCH25
},
{
40,
eAchievementID.WCH40
}
},
CardBasePrm.ClanType.DRAGON => new Dictionary<int, eAchievementID>
{
{
10,
eAchievementID.DGN10
},
{
25,
eAchievementID.DGN25
},
{
40,
eAchievementID.DGN40
}
},
CardBasePrm.ClanType.NECRO => new Dictionary<int, eAchievementID>
{
{
10,
eAchievementID.NCR10
},
{
25,
eAchievementID.NCR25
},
{
40,
eAchievementID.NCR40
}
},
CardBasePrm.ClanType.VAMPIRE => new Dictionary<int, eAchievementID>
{
{
10,
eAchievementID.VMP10
},
{
25,
eAchievementID.VMP25
},
{
40,
eAchievementID.VMP40
}
},
CardBasePrm.ClanType.BISHOP => new Dictionary<int, eAchievementID>
{
{
10,
eAchievementID.BSP10
},
{
25,
eAchievementID.BSP25
},
{
40,
eAchievementID.BSP40
}
},
CardBasePrm.ClanType.NEMESIS => new Dictionary<int, eAchievementID>
{
{
10,
eAchievementID.NEM10
},
{
25,
eAchievementID.NEM25
},
{
40,
eAchievementID.NEM40
}
},
_ => throw new Exception("bad ClanType: " + type),
};
}
}