Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug fix/nre occured in combination slots #960

Merged
merged 4 commits into from
Nov 17, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions nekoyume/Assets/_Scripts/BlockChain/RPCAgent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ await GetStateAsync(Address) is Bencodex.Types.Dictionary agentDict
throw new FailedToInstantiateStateException<GameConfigState>();
}

// FIXME: BlockIndex may not initialized.
var weeklyArenaState = await ArenaHelper.GetThisWeekStateAsync(BlockIndex);
if (weeklyArenaState is null)
{
Expand Down
4 changes: 2 additions & 2 deletions nekoyume/Assets/_Scripts/Helper/Util.cs
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ public static int GetHourglassCount(Inventory inventory, long currentBlockIndex)
return count;
}

public static bool TryGetStoredSlotIndex(out int slotIndex)
public static bool TryGetStoredAvatarSlotIndex(out int slotIndex)
{
if (Game.Game.instance.Agent is null)
{
Expand All @@ -163,7 +163,7 @@ public static bool TryGetStoredSlotIndex(out int slotIndex)
return hasKey;
}

public static void SaveSlotIndex(int slotIndex)
public static void SaveAvatarSlotIndex(int slotIndex)
{
if (Game.Game.instance.Agent is null)
{
Expand Down
12 changes: 6 additions & 6 deletions nekoyume/Assets/_Scripts/State/States.cs
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ await UniTask.Run(async () =>
return;
}

SetCombinationSlotStates(curAvatarState);
await SetCombinationSlotStatesAsync(curAvatarState);
await AddOrReplaceAvatarStateAsync(curAvatarState, CurrentAvatarKey);
});
}
Expand All @@ -312,7 +312,7 @@ public void DeselectAvatar()
UpdateCurrentAvatarState(null);
}

private void SetCombinationSlotStates(AvatarState avatarState)
private async UniTask SetCombinationSlotStatesAsync(AvatarState avatarState)
{
if (avatarState is null)
{
Expand All @@ -321,7 +321,7 @@ private void SetCombinationSlotStates(AvatarState avatarState)
}

LocalLayer.Instance.InitializeCombinationSlotsByCurrentAvatarState(avatarState);
Parallel.For(0, avatarState.combinationSlotAddresses.Count, i =>
for (var i = 0; i < avatarState.combinationSlotAddresses.Count; i++)
{
var slotAddress = avatarState.address.Derive(
string.Format(
Expand All @@ -330,10 +330,10 @@ private void SetCombinationSlotStates(AvatarState avatarState)
i
)
);
var state = new CombinationSlotState(
(Dictionary) Game.Game.instance.Agent.GetState(slotAddress));
var stateValue = await Game.Game.instance.Agent.GetStateAsync(slotAddress);
var state = new CombinationSlotState((Dictionary) stateValue);
UpdateCombinationSlotState(i, state);
});
}
}

public void UpdateCombinationSlotState(int index, CombinationSlotState state)
Expand Down
2 changes: 1 addition & 1 deletion nekoyume/Assets/_Scripts/UI/Widget/LoginDetail.cs
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ private void BackClick()

private void OnDidAvatarStateLoaded(AvatarState avatarState)
{
Util.SaveSlotIndex(_selectedIndex);
Util.SaveAvatarSlotIndex(_selectedIndex);
if (_isCreateMode)
{
Close();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ public override async void Close(bool ignoreCloseAnimation = false)
{
PlayerFactory.Create();

if (Util.TryGetStoredSlotIndex(out var slotIndex))
if (Util.TryGetStoredAvatarSlotIndex(out var slotIndex) &&
States.Instance.AvatarStates.ContainsKey(slotIndex))
{
var avatarState = States.Instance.AvatarStates[slotIndex];
if (avatarState is null ||
avatarState?.inventory == null ||
if (avatarState?.inventory == null ||
avatarState.questList == null ||
avatarState.worldInformation == null)
{
Expand Down
2 changes: 1 addition & 1 deletion nekoyume/Assets/_Scripts/UI/Widget/Synopsis.cs
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ public override void Show(bool ignoreShowAnimation = false)
private async Task End()
{
PlayerFactory.Create();
if (Util.TryGetStoredSlotIndex(out var slotIndex))
if (Util.TryGetStoredAvatarSlotIndex(out var slotIndex))
{
await States.Instance.SelectAvatarAsync(slotIndex);
Game.Event.OnRoomEnter.Invoke(false);
Expand Down