PSO2SERVER/Server/Protocol/Packets/0B-QuestPacket/0B-16-QuestAvailablePacket.cs
2024-12-12 14:26:37 +08:00

450 lines
27 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PSO2SERVER.Models;
using System.Runtime.InteropServices;
using System.IO;
using PSO2SERVER.Json;
using PSO2SERVER.Database;
namespace PSO2SERVER.Protocol.Packets
{
public class QuestAvailablePacket : Packet
{
public ushort Unk1 { get; set; }
public ushort ExtremeCount { get; set; }
public ushort Unk2 { get; set; }
public ushort ArksCount { get; set; }
public ushort LimitedTimeCount { get; set; }
public ushort ExtremeDebugCount { get; set; }
public ushort Blank1Count { get; set; }
public ushort Unk3 { get; set; }
public ushort NetCafeCount { get; set; }
public ushort WarmingDebugCount { get; set; }
public ushort Blank2Count { get; set; }
public ushort AdvanceCount { get; set; }
public ushort ExpeditionCount { get; set; }
public ushort ExpeditionDebugCount { get; set; }
public ushort ArksDebugCount { get; set; }
public ushort Unk4Count { get; set; }
public ushort ChallengeCount { get; set; }
public ushort UrgentCount { get; set; }
public ushort UrgentDebugCount { get; set; }
public ushort TimeAttackCount { get; set; }
public ushort TimeAttackDebugCount { get; set; }
// Array of 9 ushort values (arks_debug2_count)
public ushort[] ArksDebug2Count { get; set; } = new ushort[9];
public ushort Blank3Count { get; set; }
public ushort Unk5 { get; set; }
public ushort RecommendedCount { get; set; }
public ushort Unk6 { get; set; }
public ushort UltimateDebugCount { get; set; }
public ushort AgpCount { get; set; }
public ushort BonusCount { get; set; }
public ushort Unk7 { get; set; }
// Array of 10 ushort values (training_count)
public ushort[] TrainingCount { get; set; } = new ushort[10];
public ushort TriggerCount { get; set; }
public ushort RidroidCount { get; set; }
public ushort NetCafeAgpCount { get; set; }
public ushort BattleBrokenCount { get; set; }
public ushort BusterDebugCount { get; set; }
public ushort Poka12Count { get; set; }
public ushort Unk8 { get; set; }
public ushort Unk9 { get; set; }
public ushort BusterCount { get; set; }
public ushort HeroTrainingCount { get; set; }
public ushort AmplifiedCount { get; set; }
public ushort Unk10 { get; set; }
public ushort Unk11 { get; set; }
public ushort DarkBlastTrainingCount { get; set; }
public ushort EndlessCount { get; set; }
public ushort Unk12 { get; set; }
public ushort Unk13 { get; set; }
public ushort PhantomTrainingCount { get; set; }
public ushort AisTrainingCount { get; set; }
public ushort Unk14 { get; set; }
public ushort DamageCalcCount { get; set; }
public ushort EtoileTrainingCount { get; set; }
public ushort DivideCount { get; set; }
// Unsure fields (stars1_count, stars2_count, stars3_count)
public ushort Stars1Count { get; set; }
public ushort Stars2Count { get; set; }
public ushort Stars3Count { get; set; }
// Array of 2 ushort values (unk15)
public ushort[] Unk15 { get; set; } = new ushort[2];
// NotOn attribute is specific to certain frameworks (e.g., Vita platform)
// You can use attributes like [Obsolete] in C# if needed
public ushort[] Unk16 { get; set; } = new ushort[2];
// AvailableQuestType values
public AvailableQuestType AvailableTypes { get; set; }
public AvailableQuestType Unk19 { get; set; }
// Round boost active flag
public uint RoundBoost { get; set; }
public uint Unk21 { get; set; }
// Constructor
public QuestAvailablePacket()
{
}
public QuestAvailablePacket(List<QuestData> quests)
{
var amount = new QuestAvailablePacket();
// 定义一个字典,映射 QuestType 到相应的更新方法
var questActions = new Dictionary<QuestType, Action<QuestAvailablePacket>>
{
{ QuestType.Unk0, packet => { Unk1++; AvailableTypes |= AvailableQuestType.UNK1; } },
{ QuestType.Extreme, packet => { ExtremeCount++; AvailableTypes |= AvailableQuestType.EXTREME; } },
{ QuestType.ARKS, packet => { ArksCount++; AvailableTypes |= AvailableQuestType.ARKS; } },
{ QuestType.LimitedTime, packet => { LimitedTimeCount++; AvailableTypes |= AvailableQuestType.LIMITED_TIME; } },
{ QuestType.ExtremeDebug, packet => { ExtremeDebugCount++; AvailableTypes |= AvailableQuestType.EXTREME_DEBUG; } },
{ QuestType.Blank1, packet => { Blank1Count++; AvailableTypes |= AvailableQuestType.BLANK1; } },
{ QuestType.NetCafe, packet => { NetCafeCount++; AvailableTypes |= AvailableQuestType.NET_CAFE; } },
{ QuestType.WarmingDebug, packet => { WarmingDebugCount++; AvailableTypes |= AvailableQuestType.WARMING_DEBUG; } },
{ QuestType.Blank2, packet => { Blank2Count++; AvailableTypes |= AvailableQuestType.BLANK2; } },
{ QuestType.Advance, packet => { AdvanceCount++; AvailableTypes |= AvailableQuestType.ADVANCE; } },
{ QuestType.Expedition, packet => { ExpeditionCount++; AvailableTypes |= AvailableQuestType.EXPEDITION; } },
{ QuestType.FreeDebug, packet => { ExpeditionDebugCount++; AvailableTypes |= AvailableQuestType.FREE_DEBUG; } },
{ QuestType.ArksDebug, packet => { ArksDebugCount++; AvailableTypes |= AvailableQuestType.ARKS_DEBUG; } },
{ QuestType.Challenge, packet => { ChallengeCount++; AvailableTypes |= AvailableQuestType.CHALLENGE; } },
{ QuestType.Urgent, packet => { UrgentCount++; AvailableTypes |= AvailableQuestType.URGENT; } },
{ QuestType.UrgentDebug, packet => { UrgentDebugCount++; AvailableTypes |= AvailableQuestType.URGENT_DEBUG; } },
{ QuestType.TimeAttack, packet => { TimeAttackCount++; AvailableTypes |= AvailableQuestType.TIME_ATTACK; } },
{ QuestType.TimeDebug, packet => { TimeAttackDebugCount++; AvailableTypes |= AvailableQuestType.TIME_DEBUG; } },
{ QuestType.ArksDebug2, packet => { ArksDebug2Count[0]++; AvailableTypes |= AvailableQuestType.ARKS_DEBUG2; } },
{ QuestType.ArksDebug3, packet => { ArksDebug2Count[1]++; AvailableTypes |= AvailableQuestType.ARKS_DEBUG3; } },
{ QuestType.ArksDebug4, packet => { ArksDebug2Count[2]++; AvailableTypes |= AvailableQuestType.ARKS_DEBUG4; } },
{ QuestType.ArksDebug5, packet => { ArksDebug2Count[3]++; AvailableTypes |= AvailableQuestType.ARKS_DEBUG5; } },
{ QuestType.ArksDebug6, packet => { ArksDebug2Count[4]++; AvailableTypes |= AvailableQuestType.ARKS_DEBUG6; } },
{ QuestType.ArksDebug7, packet => { ArksDebug2Count[5]++; AvailableTypes |= AvailableQuestType.ARKS_DEBUG7; } },
{ QuestType.ArksDebug8, packet => { ArksDebug2Count[6]++; AvailableTypes |= AvailableQuestType.ARKS_DEBUG8; } },
{ QuestType.ArksDebug9, packet => { ArksDebug2Count[7]++; AvailableTypes |= AvailableQuestType.ARKS_DEBUG9; } },
{ QuestType.ArksDebug10, packet => { ArksDebug2Count[8]++; AvailableTypes |= AvailableQuestType.ARKS_DEBUG10; } },
{ QuestType.Blank3, packet => { Blank3Count++; AvailableTypes |= AvailableQuestType.BLANK3; } },
{ QuestType.Ultimate, packet => { Unk6++; AvailableTypes |= AvailableQuestType.ULTIMATE; } },
{ QuestType.UltimateDebug, packet => { UltimateDebugCount++; AvailableTypes |= AvailableQuestType.ULTIMATE_DEBUG; } },
{ QuestType.AGP, packet => { AgpCount++; AvailableTypes |= AvailableQuestType.AGP; } },
{ QuestType.Bonus, packet => { BonusCount++; AvailableTypes |= AvailableQuestType.BONUS; } },
{ QuestType.StandardTraining, packet => { TrainingCount[0]++; AvailableTypes |= AvailableQuestType.STANDARD_TRAINING; } },
{ QuestType.HunterTraining, packet => { TrainingCount[1]++; AvailableTypes |= AvailableQuestType.HUNTER_TRAINING; } },
{ QuestType.RangerTraining, packet => { TrainingCount[2]++; AvailableTypes |= AvailableQuestType.RANGER_TRAINING; } },
{ QuestType.ForceTraining, packet => { TrainingCount[3]++; AvailableTypes |= AvailableQuestType.FORCE_TRAINING; } },
{ QuestType.FighterTraining, packet => { TrainingCount[4]++; AvailableTypes |= AvailableQuestType.FIGHTER_TRAINING; } },
{ QuestType.GunnerTraining, packet => { TrainingCount[5]++; AvailableTypes |= AvailableQuestType.GUNNER_TRAINING; } },
{ QuestType.TechterTraining, packet => { TrainingCount[6]++; AvailableTypes |= AvailableQuestType.TECHTER_TRAINING; } },
{ QuestType.BraverTraining, packet => { TrainingCount[7]++; AvailableTypes |= AvailableQuestType.BRAVER_TRAINING; } },
{ QuestType.BouncerTraining, packet => { TrainingCount[8]++; AvailableTypes |= AvailableQuestType.BOUNCER_TRAINING; } },
{ QuestType.SummonerTraining, packet => { TrainingCount[9]++; AvailableTypes |= AvailableQuestType.SUMMONER_TRAINING; } },
{ QuestType.AutoAccept, packet => { AvailableTypes |= AvailableQuestType.AUTO_ACCEPT; } },
{ QuestType.Ridroid, packet => { RidroidCount++; AvailableTypes |= AvailableQuestType.RIDROID; } },
{ QuestType.CafeAGP, packet => { NetCafeAgpCount++; AvailableTypes |= AvailableQuestType.NET_CAFE_AGP; } },
{ QuestType.BattleBroken, packet => { BattleBrokenCount++; AvailableTypes |= AvailableQuestType.BATTLE_BROKEN; } },
{ QuestType.BusterDebug, packet => { BusterDebugCount++; AvailableTypes |= AvailableQuestType.BUSTER_DEBUG; } },
{ QuestType.Poka12, packet => { Poka12Count++; AvailableTypes |= AvailableQuestType.POKA12; } },
{ QuestType.StoryEP1, packet => { Unk9++; AvailableTypes |= AvailableQuestType.STORY_EP1; } },
{ QuestType.Buster, packet => { BusterCount++; AvailableTypes |= AvailableQuestType.BUSTER; } },
{ QuestType.HeroTraining, packet => { HeroTrainingCount++; AvailableTypes |= AvailableQuestType.HERO_TRAINING; } },
{ QuestType.Amplified, packet => { AmplifiedCount++; AvailableTypes |= AvailableQuestType.AMPLIFIED; } },
{ QuestType.DarkBlastTraining, packet => { DarkBlastTrainingCount++; AvailableTypes |= AvailableQuestType.DARK_BLAST_TRAINING; } },
{ QuestType.Endless, packet => { EndlessCount++; AvailableTypes |= AvailableQuestType.ENDLESS; } },
{ QuestType.Blank4, packet => { Unk13++; AvailableTypes |= AvailableQuestType.BLANK4; } },
{ QuestType.PhantomTraining, packet => { PhantomTrainingCount++; AvailableTypes |= AvailableQuestType.PHANTOM_TRAINING; } },
{ QuestType.AISTraining, packet => { AisTrainingCount++; AvailableTypes |= AvailableQuestType.AIS_TRAINING; } },
{ QuestType.DamageCalculation, packet => { DamageCalcCount++; AvailableTypes |= AvailableQuestType.DAMAGE_CALC; } },
{ QuestType.EtoileTraining, packet => { EtoileTrainingCount++; AvailableTypes |= AvailableQuestType.ETOILE_TRAINING; } },
{ QuestType.Divide, packet => { DivideCount++; AvailableTypes |= AvailableQuestType.DIVIDE; } },
{ QuestType.Stars1, packet => { Stars1Count++; AvailableTypes |= AvailableQuestType.STARS1; } },
{ QuestType.Stars2, packet => { Stars2Count++; AvailableTypes |= AvailableQuestType.STARS2; } },
{ QuestType.Stars3, packet => { Stars3Count++; AvailableTypes |= AvailableQuestType.STARS3; } },
{ QuestType.Stars4, packet => { Unk15[0]++; AvailableTypes |= AvailableQuestType.STARS4; } },
{ QuestType.Stars5, packet => { Unk15[1]++; AvailableTypes |= AvailableQuestType.STARS5; } },
{ QuestType.Stars6, packet => { Unk16[0]++; AvailableTypes |= AvailableQuestType.STARS6; } },
};
// 处理每个 QuestData
foreach (var quest in quests)
{
if (quest?.QuestDefiniton == null)
{
Logger.WriteError("QuestAvailablePacket Load: Invalid quest definition.");
continue;
}
var questType = quest.QuestDefiniton.QuestType;
if (questActions.TryGetValue(questType, out var action))
{
try
{
action(amount);
}
catch (Exception ex)
{
Logger.WriteError($"Error processing quest type {questType}: {ex.Message}");
}
}
else
{
Logger.WriteWarning($"No action defined for quest type {questType}");
}
}
}
public static QuestAvailablePacket Load(List<QuestData> quests)
{
var amount = new QuestAvailablePacket();
// 定义一个字典,映射 QuestType 到相应的更新方法
var questActions = new Dictionary<QuestType, Action<QuestAvailablePacket>>
{
{ QuestType.Unk0, packet => { packet.Unk1++; packet.AvailableTypes |= AvailableQuestType.UNK1; } },
{ QuestType.Extreme, packet => { packet.ExtremeCount++; packet.AvailableTypes |= AvailableQuestType.EXTREME; } },
{ QuestType.ARKS, packet => { packet.ArksCount++; packet.AvailableTypes |= AvailableQuestType.ARKS; } },
{ QuestType.LimitedTime, packet => { packet.LimitedTimeCount++; packet.AvailableTypes |= AvailableQuestType.LIMITED_TIME; } },
{ QuestType.ExtremeDebug, packet => { packet.ExtremeDebugCount++; packet.AvailableTypes |= AvailableQuestType.EXTREME_DEBUG; } },
{ QuestType.Blank1, packet => { packet.Blank1Count++; packet.AvailableTypes |= AvailableQuestType.BLANK1; } },
{ QuestType.NetCafe, packet => { packet.NetCafeCount++; packet.AvailableTypes |= AvailableQuestType.NET_CAFE; } },
{ QuestType.WarmingDebug, packet => { packet.WarmingDebugCount++; packet.AvailableTypes |= AvailableQuestType.WARMING_DEBUG; } },
{ QuestType.Blank2, packet => { packet.Blank2Count++; packet.AvailableTypes |= AvailableQuestType.BLANK2; } },
{ QuestType.Advance, packet => { packet.AdvanceCount++; packet.AvailableTypes |= AvailableQuestType.ADVANCE; } },
{ QuestType.Expedition, packet => { packet.ExpeditionCount++; packet.AvailableTypes |= AvailableQuestType.EXPEDITION; } },
{ QuestType.FreeDebug, packet => { packet.ExpeditionDebugCount++; packet.AvailableTypes |= AvailableQuestType.FREE_DEBUG; } },
{ QuestType.ArksDebug, packet => { packet.ArksDebugCount++; packet.AvailableTypes |= AvailableQuestType.ARKS_DEBUG; } },
{ QuestType.Challenge, packet => { packet.ChallengeCount++; packet.AvailableTypes |= AvailableQuestType.CHALLENGE; } },
{ QuestType.Urgent, packet => { packet.UrgentCount++; packet.AvailableTypes |= AvailableQuestType.URGENT; } },
{ QuestType.UrgentDebug, packet => { packet.UrgentDebugCount++; packet.AvailableTypes |= AvailableQuestType.URGENT_DEBUG; } },
{ QuestType.TimeAttack, packet => { packet.TimeAttackCount++; packet.AvailableTypes |= AvailableQuestType.TIME_ATTACK; } },
{ QuestType.TimeDebug, packet => { packet.TimeAttackDebugCount++; packet.AvailableTypes |= AvailableQuestType.TIME_DEBUG; } },
{ QuestType.ArksDebug2, packet => { packet.ArksDebug2Count[0]++; packet.AvailableTypes |= AvailableQuestType.ARKS_DEBUG2; } },
{ QuestType.ArksDebug3, packet => { packet.ArksDebug2Count[1]++; packet.AvailableTypes |= AvailableQuestType.ARKS_DEBUG3; } },
{ QuestType.ArksDebug4, packet => { packet.ArksDebug2Count[2]++; packet.AvailableTypes |= AvailableQuestType.ARKS_DEBUG4; } },
{ QuestType.ArksDebug5, packet => { packet.ArksDebug2Count[3]++; packet.AvailableTypes |= AvailableQuestType.ARKS_DEBUG5; } },
{ QuestType.ArksDebug6, packet => { packet.ArksDebug2Count[4]++; packet.AvailableTypes |= AvailableQuestType.ARKS_DEBUG6; } },
{ QuestType.ArksDebug7, packet => { packet.ArksDebug2Count[5]++; packet.AvailableTypes |= AvailableQuestType.ARKS_DEBUG7; } },
{ QuestType.ArksDebug8, packet => { packet.ArksDebug2Count[6]++; packet.AvailableTypes |= AvailableQuestType.ARKS_DEBUG8; } },
{ QuestType.ArksDebug9, packet => { packet.ArksDebug2Count[7]++; packet.AvailableTypes |= AvailableQuestType.ARKS_DEBUG9; } },
{ QuestType.ArksDebug10, packet => { packet.ArksDebug2Count[8]++; packet.AvailableTypes |= AvailableQuestType.ARKS_DEBUG10; } },
{ QuestType.Blank3, packet => { packet.Blank3Count++; packet.AvailableTypes |= AvailableQuestType.BLANK3; } },
{ QuestType.Ultimate, packet => { packet.Unk6++; packet.AvailableTypes |= AvailableQuestType.ULTIMATE; } },
{ QuestType.UltimateDebug, packet => { packet.UltimateDebugCount++; packet.AvailableTypes |= AvailableQuestType.ULTIMATE_DEBUG; } },
{ QuestType.AGP, packet => { packet.AgpCount++; packet.AvailableTypes |= AvailableQuestType.AGP; } },
{ QuestType.Bonus, packet => { packet.BonusCount++; packet.AvailableTypes |= AvailableQuestType.BONUS; } },
{ QuestType.StandardTraining, packet => { packet.TrainingCount[0]++; packet.AvailableTypes |= AvailableQuestType.STANDARD_TRAINING; } },
{ QuestType.HunterTraining, packet => { packet.TrainingCount[1]++; packet.AvailableTypes |= AvailableQuestType.HUNTER_TRAINING; } },
{ QuestType.RangerTraining, packet => { packet.TrainingCount[2]++; packet.AvailableTypes |= AvailableQuestType.RANGER_TRAINING; } },
{ QuestType.ForceTraining, packet => { packet.TrainingCount[3]++; packet.AvailableTypes |= AvailableQuestType.FORCE_TRAINING; } },
{ QuestType.FighterTraining, packet => { packet.TrainingCount[4]++; packet.AvailableTypes |= AvailableQuestType.FIGHTER_TRAINING; } },
{ QuestType.GunnerTraining, packet => { packet.TrainingCount[5]++; packet.AvailableTypes |= AvailableQuestType.GUNNER_TRAINING; } },
{ QuestType.TechterTraining, packet => { packet.TrainingCount[6]++; packet.AvailableTypes |= AvailableQuestType.TECHTER_TRAINING; } },
{ QuestType.BraverTraining, packet => { packet.TrainingCount[7]++; packet.AvailableTypes |= AvailableQuestType.BRAVER_TRAINING; } },
{ QuestType.BouncerTraining, packet => { packet.TrainingCount[8]++; packet.AvailableTypes |= AvailableQuestType.BOUNCER_TRAINING; } },
{ QuestType.SummonerTraining, packet => { packet.TrainingCount[9]++; packet.AvailableTypes |= AvailableQuestType.SUMMONER_TRAINING; } },
{ QuestType.AutoAccept, packet => { packet.AvailableTypes |= AvailableQuestType.AUTO_ACCEPT; } },
{ QuestType.Ridroid, packet => { packet.RidroidCount++; packet.AvailableTypes |= AvailableQuestType.RIDROID; } },
{ QuestType.CafeAGP, packet => { packet.NetCafeAgpCount++; packet.AvailableTypes |= AvailableQuestType.NET_CAFE_AGP; } },
{ QuestType.BattleBroken, packet => { packet.BattleBrokenCount++; packet.AvailableTypes |= AvailableQuestType.BATTLE_BROKEN; } },
{ QuestType.BusterDebug, packet => { packet.BusterDebugCount++; packet.AvailableTypes |= AvailableQuestType.BUSTER_DEBUG; } },
{ QuestType.Poka12, packet => { packet.Poka12Count++; packet.AvailableTypes |= AvailableQuestType.POKA12; } },
{ QuestType.StoryEP1, packet => { packet.Unk9++; packet.AvailableTypes |= AvailableQuestType.STORY_EP1; } },
{ QuestType.Buster, packet => { packet.BusterCount++; packet.AvailableTypes |= AvailableQuestType.BUSTER; } },
{ QuestType.HeroTraining, packet => { packet.HeroTrainingCount++; packet.AvailableTypes |= AvailableQuestType.HERO_TRAINING; } },
{ QuestType.Amplified, packet => { packet.AmplifiedCount++; packet.AvailableTypes |= AvailableQuestType.AMPLIFIED; } },
{ QuestType.DarkBlastTraining, packet => { packet.DarkBlastTrainingCount++; packet.AvailableTypes |= AvailableQuestType.DARK_BLAST_TRAINING; } },
{ QuestType.Endless, packet => { packet.EndlessCount++; packet.AvailableTypes |= AvailableQuestType.ENDLESS; } },
{ QuestType.Blank4, packet => { packet.Unk13++; packet.AvailableTypes |= AvailableQuestType.BLANK4; } },
{ QuestType.PhantomTraining, packet => { packet.PhantomTrainingCount++; packet.AvailableTypes |= AvailableQuestType.PHANTOM_TRAINING; } },
{ QuestType.AISTraining, packet => { packet.AisTrainingCount++; packet.AvailableTypes |= AvailableQuestType.AIS_TRAINING; } },
{ QuestType.DamageCalculation, packet => { packet.DamageCalcCount++; packet.AvailableTypes |= AvailableQuestType.DAMAGE_CALC; } },
{ QuestType.EtoileTraining, packet => { packet.EtoileTrainingCount++; packet.AvailableTypes |= AvailableQuestType.ETOILE_TRAINING; } },
{ QuestType.Divide, packet => { packet.DivideCount++; packet.AvailableTypes |= AvailableQuestType.DIVIDE; } },
{ QuestType.Stars1, packet => { packet.Stars1Count++; packet.AvailableTypes |= AvailableQuestType.STARS1; } },
{ QuestType.Stars2, packet => { packet.Stars2Count++; packet.AvailableTypes |= AvailableQuestType.STARS2; } },
{ QuestType.Stars3, packet => { packet.Stars3Count++; packet.AvailableTypes |= AvailableQuestType.STARS3; } },
{ QuestType.Stars4, packet => { packet.Unk15[0]++; packet.AvailableTypes |= AvailableQuestType.STARS4; } },
{ QuestType.Stars5, packet => { packet.Unk15[1]++; packet.AvailableTypes |= AvailableQuestType.STARS5; } },
{ QuestType.Stars6, packet => { packet.Unk16[0]++; packet.AvailableTypes |= AvailableQuestType.STARS6; } },
};
// 遍历 quests 列表并执行相应的更新操作
for (int i = 0; i < quests.Count; i++)
{
var quest = quests[i];
// 确保 quest 和 QuestDefiniton 不为 null
if (quest?.QuestDefiniton == null)
{
Logger.WriteError($"队伍任务索引 {i} 无效 (QuestDefiniton 为空).");
continue; // 跳过当前无效的 quest
}
// 获取 quest type
var questType = quest.QuestDefiniton.QuestType;
// 如果字典中包含该 quest type则执行对应的操作
if (questActions.TryGetValue(questType, out var action))
{
try
{
action(amount); // 执行更新操作
}
catch (Exception ex)
{
Logger.WriteError($"Error executing action for QuestType {questType} at index {i}: {ex.Message}");
}
}
else
{
// 可以在此处处理未定义的 QuestType例如记录警告或错误
Logger.WriteWarning($"未知 QuestType {questType} 索引 {i}. 跳过.");
}
}
return amount;
}
//public short[] amount = new short[Enum.GetValues(typeof(QuestType)).Length];
public override byte[] Build()
{
PacketWriter pkt = new PacketWriter();
//// 使用反射获取所有枚举值,并合并它们
//ulong combinedFlags = 0;
//foreach (var value in Enum.GetValues(typeof(AvailableQuestType)))
//{
// combinedFlags |= (ulong)value;
//}
//// Filler/Padding?
//pkt.Write((UInt16)0);
//// Amounts
//for (int i = 0; i < amount.Length; i++)
//{
// amount[i] = 1; // Just for testing
// pkt.Write(amount[i]);
//}
//// Padding/Blank entries?
//for (int i = 0; i < 2; i++)
// pkt.Write((int)0);
//// Available Bitfield
//pkt.Write((UInt64)combinedFlags);
//// Filler/Padding?
//for (int i = 0; i < 2; i++)
// pkt.Write((int)0);
//return pkt.ToArray();
pkt.Write(Unk1);
pkt.Write(ExtremeCount);
pkt.Write(Unk2);
pkt.Write(ArksCount);
pkt.Write(LimitedTimeCount);
pkt.Write(ExtremeDebugCount);
pkt.Write(Blank1Count);
pkt.Write(Unk3);
pkt.Write(NetCafeCount);
pkt.Write(WarmingDebugCount);
pkt.Write(Blank2Count);
pkt.Write(AdvanceCount);
pkt.Write(ExpeditionCount);
pkt.Write(ExpeditionDebugCount);
pkt.Write(ArksDebugCount);
pkt.Write(Unk4Count);
pkt.Write(ChallengeCount);
pkt.Write(UrgentCount);
pkt.Write(UrgentDebugCount);
pkt.Write(TimeAttackCount);
pkt.Write(TimeAttackDebugCount);
// 写入 ArksDebug2Count 数组
foreach (var count in ArksDebug2Count)
{
pkt.Write(count);
}
pkt.Write(Blank3Count);
pkt.Write(Unk5);
pkt.Write(RecommendedCount);
pkt.Write(Unk6);
pkt.Write(UltimateDebugCount);
pkt.Write(AgpCount);
pkt.Write(BonusCount);
pkt.Write(Unk7);
// 写入 TrainingCount 数组
foreach (var count in TrainingCount)
{
pkt.Write(count);
}
pkt.Write(TriggerCount);
pkt.Write(RidroidCount);
pkt.Write(NetCafeAgpCount);
pkt.Write(BattleBrokenCount);
pkt.Write(BusterDebugCount);
pkt.Write(Poka12Count);
pkt.Write(Unk8);
pkt.Write(Unk9);
pkt.Write(BusterCount);
pkt.Write(HeroTrainingCount);
pkt.Write(AmplifiedCount);
pkt.Write(Unk10);
pkt.Write(Unk11);
pkt.Write(DarkBlastTrainingCount);
pkt.Write(EndlessCount);
pkt.Write(Unk12);
pkt.Write(Unk13);
pkt.Write(PhantomTrainingCount);
pkt.Write(AisTrainingCount);
pkt.Write(Unk14);
pkt.Write(DamageCalcCount);
pkt.Write(EtoileTrainingCount);
pkt.Write(DivideCount);
pkt.Write(Stars1Count);
pkt.Write(Stars2Count);
pkt.Write(Stars3Count);
// 写入 Unk15 数组
foreach (var count in Unk15)
{
pkt.Write(count);
}
// 写入 Unk16 数组
foreach (var count in Unk16)
{
pkt.Write(count);
}
// 写入 AvailableTypes 和 Unk19 (作为枚举类型,转换为整数)
pkt.Write((ulong)AvailableTypes);
pkt.Write((ulong)Unk19);
pkt.Write(RoundBoost);
pkt.Write(Unk21);
return pkt.ToArray();
}
public override PacketHeader GetHeader()
{
return new PacketHeader(0x0B, 0x16, PacketFlags.None);
}
}
}