mirror of
https://github.com/MikuLeaks/MikuSB.git
synced 2026-06-04 17:43:57 +00:00
Implement Weapon_Upgrade
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user