Implement Weapon_Upgrade

This commit is contained in:
Kei-Luna
2026-04-26 06:30:40 +09:00
parent f95468c8b8
commit 3460ad9185
12 changed files with 654 additions and 9 deletions

View File

@@ -57,4 +57,59 @@ public class CharacterManager(PlayerInstance player) : BasePlayerManager(player)
var templateId = GameResourceTemplateId.FromGdpl((uint)genre,(uint)detail,(uint)particular,1);
return CharacterData.Characters.Find(Character => Character.TemplateId == templateId);
}
}
public async ValueTask RepairCharacterWeapons()
{
var changed = false;
var equippedWeaponIds = new HashSet<uint>();
foreach (var character in CharacterData.Characters)
{
var weapon = Player.InventoryManager.GetWeaponItem(character.WeaponUniqueId);
if (weapon == null)
{
var cardData = GameData.CardData.Values.FirstOrDefault(x =>
GameResourceTemplateId.FromGdpl(x.Genre, x.Detail, x.Particular, x.Level) == character.TemplateId);
if (cardData?.DefaultWeaponGPDL.Count >= 4)
{
weapon = await Player.InventoryManager.AddWeaponItem(
(ItemTypeEnum)cardData.DefaultWeaponGPDL[0],
cardData.DefaultWeaponGPDL[1],
cardData.DefaultWeaponGPDL[2],
cardData.DefaultWeaponGPDL[3]);
if (weapon != null)
{
character.WeaponUniqueId = weapon.UniqueId;
changed = true;
}
}
}
if (weapon == null)
continue;
if (weapon.EquipAvatarId != character.Guid)
{
weapon.EquipAvatarId = character.Guid;
changed = true;
}
equippedWeaponIds.Add(weapon.UniqueId);
}
foreach (var weapon in Player.InventoryManager.InventoryData.Weapons.Values)
{
if (!equippedWeaponIds.Contains(weapon.UniqueId) && weapon.EquipAvatarId != 0)
{
weapon.EquipAvatarId = 0;
changed = true;
}
}
if (!changed)
return;
DatabaseHelper.SaveDatabaseType(CharacterData);
DatabaseHelper.SaveDatabaseType(Player.InventoryManager.InventoryData);
}
}

View File

@@ -22,6 +22,7 @@ public class InventoryManager(PlayerInstance player) : BasePlayerManager(player)
TemplateId = templateId,
UniqueId = InventoryData.NextUniqueUid++,
Level = level,
Break = weaponData.InitBreak,
ItemCount = 1
};
InventoryData.Weapons[weaponInfo.UniqueId] = weaponInfo;

View File

@@ -111,6 +111,7 @@ public class PlayerInstance(PlayerGameData data)
public async ValueTask OnEnterGame()
{
if (!Initialized) await InitialPlayerManager();
await CharacterManager.RepairCharacterWeapons();
}
public async ValueTask OnLogin()
@@ -218,6 +219,11 @@ public class PlayerInstance(PlayerGameData data)
yield return (178, 1, 1_700_000_000);
yield return (187, 1, 2);
// Cash.GetMoneyCount uses group 1 with sid = moneyId * 2 + 1 for most currencies.
// Fill a wide currency id range so every in-game currency starts effectively unlimited.
for (uint moneyId = 1; moneyId <= 200; moneyId++)
yield return (1, moneyId * 2 + 1, 999_999_999);
for (uint guideId = 1; guideId <= 150; guideId++)
yield return (4, guideId, 999);