Small command fixes

fix "You learn [command]." message not printing the name of the command
and enable message.

Make database save the short version of command id in hotbar table
This commit is contained in:
Yogurt 2019-06-08 21:11:51 -07:00
parent ec85cfd590
commit 32330d557c
3 changed files with 15 additions and 17 deletions

View File

@ -1247,7 +1247,7 @@ namespace FFXIVClassic_Map_Server
} }
public static void EquipAbility(Player player, byte classId, ushort hotbarSlot, uint commandId, uint recastTime) public static void EquipAbility(Player player, byte classId, ushort hotbarSlot, uint commandId, uint recastTime)
{ {
commandId ^= 0xA0F00000; commandId &= 0xFFFF;
if (commandId > 0) if (commandId > 0)
{ {
using (MySqlConnection conn = new MySqlConnection( using (MySqlConnection conn = new MySqlConnection(
@ -2374,7 +2374,7 @@ namespace FFXIVClassic_Map_Server
} }
} }
public static void LoadGlobalBattleCommandList(Dictionary<ushort, BattleCommand> battleCommandDict, Dictionary<Tuple<byte, short>, List<uint>> battleCommandIdByLevel) public static void LoadGlobalBattleCommandList(Dictionary<ushort, BattleCommand> battleCommandDict, Dictionary<Tuple<byte, short>, List<ushort>> battleCommandIdByLevel)
{ {
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD))) using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
{ {
@ -2469,7 +2469,7 @@ namespace FFXIVClassic_Map_Server
} }
else else
{ {
List<uint> list = new List<uint>() { id }; List<ushort> list = new List<ushort>() { id };
battleCommandIdByLevel.Add(tuple, list); battleCommandIdByLevel.Add(tuple, list);
} }
count++; count++;

View File

@ -33,7 +33,7 @@ namespace FFXIVClassic_Map_Server
private Dictionary<ulong, Party> currentPlayerParties = new Dictionary<ulong, Party>(); //GroupId, Party object private Dictionary<ulong, Party> currentPlayerParties = new Dictionary<ulong, Party>(); //GroupId, Party object
private Dictionary<uint, StatusEffect> statusEffectList = new Dictionary<uint, StatusEffect>(); private Dictionary<uint, StatusEffect> statusEffectList = new Dictionary<uint, StatusEffect>();
private Dictionary<ushort, BattleCommand> battleCommandList = new Dictionary<ushort, BattleCommand>(); private Dictionary<ushort, BattleCommand> battleCommandList = new Dictionary<ushort, BattleCommand>();
private Dictionary<Tuple<byte, short>, List<uint>> battleCommandIdByLevel = new Dictionary<Tuple<byte, short>, List<uint>>();//Holds battle command ids keyed by class id and level (in that order) private Dictionary<Tuple<byte, short>, List<ushort>> battleCommandIdByLevel = new Dictionary<Tuple<byte, short>, List<ushort>>();//Holds battle command ids keyed by class id and level (in that order)
private Dictionary<ushort, BattleTrait> battleTraitList = new Dictionary<ushort, BattleTrait>(); private Dictionary<ushort, BattleTrait> battleTraitList = new Dictionary<ushort, BattleTrait>();
private Dictionary<byte, List<ushort>> battleTraitIdsForClass = new Dictionary<byte, List<ushort>>(); private Dictionary<byte, List<ushort>> battleTraitIdsForClass = new Dictionary<byte, List<ushort>>();
private Dictionary<uint, ModifierList> battleNpcGenusMods = new Dictionary<uint, ModifierList>(); private Dictionary<uint, ModifierList> battleNpcGenusMods = new Dictionary<uint, ModifierList>();
@ -1967,10 +1967,10 @@ namespace FFXIVClassic_Map_Server
return battleCommandList.TryGetValue((ushort)id, out battleCommand) ? battleCommand.Clone() : null; return battleCommandList.TryGetValue((ushort)id, out battleCommand) ? battleCommand.Clone() : null;
} }
public List<uint> GetBattleCommandIdByLevel(byte classId, short level) public List<ushort> GetBattleCommandIdByLevel(byte classId, short level)
{ {
List<uint> ids; List<ushort> ids;
return battleCommandIdByLevel.TryGetValue(Tuple.Create(classId, level), out ids) ? ids : new List<uint>(); return battleCommandIdByLevel.TryGetValue(Tuple.Create(classId, level), out ids) ? ids : new List<ushort>();
} }
public BattleTrait GetBattleTrait(ushort id) public BattleTrait GetBattleTrait(ushort id)

View File

@ -2060,7 +2060,7 @@ namespace FFXIVClassic_Map_Server.Actors
public void EquipAbility(byte classId, uint commandId, ushort hotbarSlot, bool printMessage = true) public void EquipAbility(byte classId, uint commandId, ushort hotbarSlot, bool printMessage = true)
{ {
var ability = Server.GetWorldManager().GetBattleCommand(commandId); var ability = Server.GetWorldManager().GetBattleCommand(commandId);
uint trueCommandId = 0xA0F00000 + commandId; uint trueCommandId = 0xA0F00000 | commandId;
ushort lowHotbarSlot = (ushort)(hotbarSlot - charaWork.commandBorder); ushort lowHotbarSlot = (ushort)(hotbarSlot - charaWork.commandBorder);
ushort maxRecastTime = (ushort)(ability != null ? ability.maxRecastTimeSeconds : 5); ushort maxRecastTime = (ushort)(ability != null ? ability.maxRecastTimeSeconds : 5);
uint recastEnd = Utils.UnixTimeStampUTC() + maxRecastTime; uint recastEnd = Utils.UnixTimeStampUTC() + maxRecastTime;
@ -2441,7 +2441,7 @@ namespace FFXIVClassic_Map_Server.Actors
while (exp >= diff && GetLevel() < charaWork.battleSave.skillLevelCap[classId]) while (exp >= diff && GetLevel() < charaWork.battleSave.skillLevelCap[classId])
{ {
//Level up //Level up
LevelUp(classId); LevelUp(classId, actionList);
leveled = true; leveled = true;
//Reduce exp based on how much exp is needed to level //Reduce exp based on how much exp is needed to level
exp -= diff; exp -= diff;
@ -2459,8 +2459,6 @@ namespace FFXIVClassic_Map_Server.Actors
expPropertyPacket2.AddProperty("charaWork.parameterSave.state_mainSkillLevel"); expPropertyPacket2.AddProperty("charaWork.parameterSave.state_mainSkillLevel");
QueuePackets(expPropertyPacket2.Done()); QueuePackets(expPropertyPacket2.Done());
QueuePackets(expPropertyPacket3.Done()); QueuePackets(expPropertyPacket3.Done());
//play levelup animation (do this outside LevelUp so that it only plays once if multiple levels are earned
//also i dunno how to do this
Database.SetLevel(this, classId, GetLevel()); Database.SetLevel(this, classId, GetLevel());
Database.SavePlayerCurrentClass(this); Database.SavePlayerCurrentClass(this);
@ -2486,13 +2484,13 @@ namespace FFXIVClassic_Map_Server.Actors
charaWork.battleSave.skillLevel[classId - 1]++; charaWork.battleSave.skillLevel[classId - 1]++;
charaWork.parameterSave.state_mainSkillLevel++; charaWork.parameterSave.state_mainSkillLevel++;
//33909: You gain level [level] //33909: You attain level [level].
if (actionList != null) if (actionList != null)
actionList.Add(new CommandResult(actorId, 33909, 0, (ushort) charaWork.battleSave.skillLevel[classId - 1])); actionList.Add(new CommandResult(actorId, 33909, 0, (ushort)charaWork.battleSave.skillLevel[classId - 1]));
//If there's any abilites that unlocks at this level, equip them. //If there's any abilites that unlocks at this level, equip them.
List<uint> commandIds = Server.GetWorldManager().GetBattleCommandIdByLevel(classId, GetLevel()); List<ushort> commandIds = Server.GetWorldManager().GetBattleCommandIdByLevel(classId, GetLevel());
foreach(uint commandId in commandIds) foreach (ushort commandId in commandIds)
{ {
EquipAbilityInFirstOpenSlot(classId, commandId, false); EquipAbilityInFirstOpenSlot(classId, commandId, false);
byte jobId = ConvertClassIdToJobId(classId); byte jobId = ConvertClassIdToJobId(classId);
@ -2502,8 +2500,8 @@ namespace FFXIVClassic_Map_Server.Actors
//33926: You learn [command]. //33926: You learn [command].
if (actionList != null) if (actionList != null)
{ {
if(classId == GetCurrentClassOrJob() || jobId == GetCurrentClassOrJob()) if (classId == GetCurrentClassOrJob() || jobId == GetCurrentClassOrJob())
actionList.Add(new CommandResult(actorId, 33926, commandId)); actionList.Add(new CommandResult(actorId, 33926, 0, commandId));
} }
} }
} }