diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs index 9f9dffeb..c76c6452 100644 --- a/FFXIVClassic Map Server/Database.cs +++ b/FFXIVClassic Map Server/Database.cs @@ -158,7 +158,7 @@ namespace FFXIVClassic_Lobby_Server } } - player.charaWork.parameterSave.state_mainSkillLevel = 1; + player.charaWork.parameterSave.state_mainSkillLevel = 49; /* //Get level of our classjob @@ -457,9 +457,8 @@ namespace FFXIVClassic_Lobby_Server } } - public static SubPacket getLatestAchievements(Player player) + public static void getLatestAchievements(Player player) { - uint[] latestAchievements = new uint[5]; 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))) { try @@ -469,8 +468,8 @@ namespace FFXIVClassic_Lobby_Server //Load Last 5 Completed string query = @" SELECT - achievementId - FROM characters_achievements WHERE characterId = @charId ORDER BY timeDone DESC LIMIT 5"; + achievementId + FROM characters_achievements WHERE characterId = @charId ORDER BY timeDone LIMIT 5"; MySqlCommand cmd = new MySqlCommand(query, conn); cmd.Parameters.AddWithValue("@charId", player.actorId); @@ -478,7 +477,12 @@ namespace FFXIVClassic_Lobby_Server { int count = 0; while (reader.Read()) - latestAchievements[count] = reader.GetUInt32(0); + { + player.latestAchievements[count++] = reader.GetUInt32(0); + } + + for (; count < player.latestAchievements.Length; count++) + player.latestAchievements[count] = 0; } } catch (MySqlException e) @@ -489,7 +493,6 @@ namespace FFXIVClassic_Lobby_Server } } - return SetLatestAchievementsPacket.buildPacket(player.actorId, latestAchievements); } public static SubPacket getAchievements(Player player) diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index b7c6ce90..300107f9 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -64,6 +64,8 @@ + + diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index e21a863e..1aae6736 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -182,18 +182,12 @@ namespace FFXIVClassic_Lobby_Server break; //Unknown case 0x0002: - BasePacket packet196 = new BasePacket("./packets/196"); - - BasePacket reply7 = new BasePacket("./packets/login/login7_data.bin"); BasePacket reply8 = new BasePacket("./packets/login/login8_data.bin"); BasePacket reply9 = new BasePacket("./packets/login/login9_zonesetup.bin"); BasePacket reply10 = new BasePacket("./packets/login/login10.bin"); BasePacket reply11 = new BasePacket("./packets/login/login11.bin"); BasePacket reply12 = new BasePacket("./packets/login/login12.bin"); - // BasePacket keyitems = new BasePacket("./packets/login/keyitems.bin"); - // BasePacket currancy = new BasePacket("./packets/login/currancy.bin"); - #region replaceid //currancy.replaceActorID(player.actorID); //keyitems.replaceActorID(player.actorID); @@ -233,10 +227,10 @@ namespace FFXIVClassic_Lobby_Server BasePacket partyListPacket = BasePacket.createPacket(ListUtils.createPartyList(player.actorID, 0xF4, 1, 0x8000000000696df2, partyListEntries), true, false); client.queuePacket(partyListPacket); + #region itemsetup ////////ITEMS//////// client.queuePacket(InventoryBeginChangePacket.buildPacket(player.actorID), true, false); - #region itemsetup //TEST List items = new List(); @@ -273,14 +267,14 @@ namespace FFXIVClassic_Lobby_Server setinvPackets.Add(beginInventory); setinvPackets.Add(setInventory); setinvPackets.Add(endInventory); - #endregion - - client.queuePacket(BasePacket.createPacket(setinvPackets, true, false)); //client.queuePacket(currancy); //client.queuePacket(keyitems); + #endregion + #region equipsetup + client.queuePacket(BasePacket.createPacket(setinvPackets, true, false)); EquipmentSetupPacket initialEqupmentPacket = new EquipmentSetupPacket(); initialEqupmentPacket.setItem(EquipmentSetupPacket.SLOT_BODY, 5); initialEqupmentPacket.setItem(EquipmentSetupPacket.SLOT_HEAD, 3); @@ -288,7 +282,6 @@ namespace FFXIVClassic_Lobby_Server initialEqupmentPacket.setItem(EquipmentSetupPacket.SLOT_UNDERGARMENT, 7); initialEqupmentPacket.setItem(EquipmentSetupPacket.SLOT_MAINHAND, 2); initialEqupmentPacket.setItem(EquipmentSetupPacket.SLOT_LEGS, 8); - #endregion //Equip Init client.queuePacket(InventorySetBeginPacket.buildPacket(player.actorID, 0x23, InventorySetBeginPacket.CODE_EQUIPMENT), true, false); @@ -296,55 +289,16 @@ namespace FFXIVClassic_Lobby_Server client.queuePacket(InventorySetEndPacket.buildPacket(player.actorID), true, false); client.queuePacket(InventoryEndChangePacket.buildPacket(player.actorID), true, false); - ////////ITEMS//////// + ////////ITEMS//////// - client.queuePacket(SetGrandCompanyPacket.buildPacket(player.actorID, player.actorID, 0x01, 0x1B, 0x1B, 0x1B), true, false); - client.queuePacket(SetPlayerTitlePacket.buildPacket(player.actorID, player.actorID, 0x00), true, false); - client.queuePacket(SetCurrentJobPacket.buildPacket(player.actorID, player.actorID, 0x13), true, false); - //client.queuePacket(packet196);//client.queuePacket(_0x196Packet.buildPacket(player.actorID, player.actorID), true, false); - client.queuePacket(SetChocoboNamePacket.buildPacket(player.actorID, player.actorID, "Boco"), true, false); - client.queuePacket(SetHasChocoboPacket.buildPacket(player.actorID, true), true, false); - client.queuePacket(SetHasGoobbuePacket.buildPacket(player.actorID, true), true, false); - - SetCompletedAchievementsPacket cheevos = new SetCompletedAchievementsPacket(); - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_BATTLE] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_CHARACTER] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_CURRENCY] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_DUNGEONS] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_EXPLORATION] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_GATHERING] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_GRAND_COMPANY] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_ITEMS] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_MATERIA] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_QUESTS] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_SEASONAL_EVENTS] = true; - cheevos.achievementFlags[SetCompletedAchievementsPacket.CATEGORY_SYNTHESIS] = true; - client.queuePacket(cheevos.buildPacket(player.actorID), true, false); - - client.queuePacket(SetLatestAchievementsPacket.buildPacket(player.actorID, new uint[5]), true, false); - client.queuePacket(SetAchievementPointsPacket.buildPacket(player.actorID, 0x00), true, false); - - SetCutsceneBookPacket book = new SetCutsceneBookPacket(); - for (int i = 0; i < book.cutsceneFlags.Length; i++) - book.cutsceneFlags[i] = true; - client.queuePacket(book.buildPacket(player.actorID), true, false); - - //client.queuePacket(SetPlayerDreamPacket.buildPacket(player.actorID, 11), true, false); + #endregion BasePacket tpacket = player.getActor().getInitPackets(player.actorID); tpacket.debugPrintPacket(); client.queuePacket(tpacket); - - //BasePacket packet1a5 = new BasePacket("./packets/1ax/1a5"); - //packet1a5.replaceActorID(player.actorID); - //client.queuePacket(packet1a5); - - //loadTest(client, player); - //return; inn.addActorToZone(player.getActor()); - //client.queuePacket(reply7); client.queuePacket(reply8); client.queuePacket(reply9); client.queuePacket(reply10); diff --git a/FFXIVClassic Map Server/Server.cs b/FFXIVClassic Map Server/Server.cs index 94c7880d..59add233 100644 --- a/FFXIVClassic Map Server/Server.cs +++ b/FFXIVClassic Map Server/Server.cs @@ -227,12 +227,15 @@ namespace FFXIVClassic_Lobby_Server public void testCodePacket(uint id, uint value, string target) { SetActorPropetyPacket changeProperty = new SetActorPropetyPacket(target); - changeProperty.addInt(id, value); + changeProperty.setTarget(target); + changeProperty.addInt(id, value); + changeProperty.addTarget(); foreach (KeyValuePair entry in mConnectedPlayerList) { SubPacket changePropertyPacket = changeProperty.buildPacket((entry.Value.actorID), (entry.Value.actorID)); + BasePacket packet = BasePacket.createPacket(changePropertyPacket, true, false); packet.debugPrintPacket(); if (entry.Value.getConnection1() != null) diff --git a/FFXIVClassic Map Server/actors/chara/AetheryteWork.cs b/FFXIVClassic Map Server/actors/chara/AetheryteWork.cs new file mode 100644 index 00000000..fd1f33b9 --- /dev/null +++ b/FFXIVClassic Map Server/actors/chara/AetheryteWork.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.dataobjects.chara +{ + class AetheryteWork + { + public int iconGil; + public short guildleveId; + public short clearTime; + public int missionBonus; + public int difficultyBonus; + + public byte factionNumber; + public int factionBonus; + public byte factionCredit; + + public int glRewardItem; + public int glRewardNumber; + public int glRewardSubItem; + public int glRewardSubNumber; + + public byte difficulty; + } +} diff --git a/FFXIVClassic Map Server/actors/chara/BattleSave.cs b/FFXIVClassic Map Server/actors/chara/BattleSave.cs index 86819aab..da2c38ac 100644 --- a/FFXIVClassic Map Server/actors/chara/BattleSave.cs +++ b/FFXIVClassic Map Server/actors/chara/BattleSave.cs @@ -9,10 +9,11 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara class BattleSave { public float potencial = 6.6f; - public int skillLevel; - public int skillLevelCap; - public int[] skillPoint; + public short[] skillLevel = new short[52]; + public short[] skillLevelCap = new short[52]; + public short[] skillPoint = new short[52]; + public short physicalLevel; public int physicalExp; public bool[] negotiationFlag= new bool[2]; diff --git a/FFXIVClassic Map Server/actors/chara/BattleTemp.cs b/FFXIVClassic Map Server/actors/chara/BattleTemp.cs index d3a45924..2c90f8f5 100644 --- a/FFXIVClassic Map Server/actors/chara/BattleTemp.cs +++ b/FFXIVClassic Map Server/actors/chara/BattleTemp.cs @@ -49,6 +49,6 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara public float[] castGauge_speed = { 1.0f, 0.25f}; public bool[] timingCommandFlag = new bool[4]; - public ushort[] generalParameter = new ushort[32]; + public ushort[] generalParameter = new ushort[35]; } } diff --git a/FFXIVClassic Map Server/actors/chara/CharaWork.cs b/FFXIVClassic Map Server/actors/chara/CharaWork.cs index 7438b733..49b999aa 100644 --- a/FFXIVClassic Map Server/actors/chara/CharaWork.cs +++ b/FFXIVClassic Map Server/actors/chara/CharaWork.cs @@ -18,17 +18,21 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara public EventSave eventSave = new EventSave(); public EventTemp eventTemp = new EventTemp(); + public bool gameParameter = false; + + public byte[] property = new byte[32]; public ushort[] status = new ushort[20]; public uint[] statusShownTime = new uint[20]; - public uint[] command = new uint[64]; + public uint[] command = new uint[64]; //ACTORS public byte[] commandCategory = new byte[64]; public byte commandBorder = 0x20; - public bool commandAcquired = false; - public bool[] additionalCommandAcquired = new bool[32]; + public bool[] commandAcquired = new bool[4096]; + public bool[] additionalCommandAcquired = new bool[36]; + public uint currentContentGroup; public uint depictionJudge = 0xa0f50911; } } diff --git a/FFXIVClassic Map Server/actors/chara/EventSave.cs b/FFXIVClassic Map Server/actors/chara/EventSave.cs index a0bf4328..7365aa11 100644 --- a/FFXIVClassic Map Server/actors/chara/EventSave.cs +++ b/FFXIVClassic Map Server/actors/chara/EventSave.cs @@ -10,6 +10,6 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara { public bool bazaar; public byte bazaarTax; - public int repairType; + public byte repairType; } } diff --git a/FFXIVClassic Map Server/actors/chara/ParameterSave.cs b/FFXIVClassic Map Server/actors/chara/ParameterSave.cs index 523a4ff9..1a4dab00 100644 --- a/FFXIVClassic Map Server/actors/chara/ParameterSave.cs +++ b/FFXIVClassic Map Server/actors/chara/ParameterSave.cs @@ -8,19 +8,30 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara { class ParameterSave { - public short[] hp = new short[1]; - public short[] hpMax = new short[1]; + public short[] hp = new short[8]; + public short[] hpMax = new short[8]; public short mp; public short mpMax; public byte[] state_mainSkill = new byte[4]; public ushort state_mainSkillLevel; - public int[] state_boostPointForSkill; - - public bool[] commandSlot_compatibility = new bool[40]; + public byte[] state_boostPointForSkill = new byte[4]; + public uint[] commandSlot_recastTime = new uint[40]; + public bool[] commandSlot_compatibility = new bool[40]; - public int[] giftCommandSlot_commandId; + public ushort[] giftCommandSlot_commandId = new ushort[10]; + + public ushort[] constanceCommandSlot_commandId = new ushort[10]; + + public byte abilityCostPoint_used; + public byte abilityCostPoint_max; + + public byte giftCostPoint_used; + public byte giftCostPoint_max; + + public byte constanceCostPoint_used; + public byte constanceCostPoint_max; } } diff --git a/FFXIVClassic Map Server/actors/chara/ParameterTemp.cs b/FFXIVClassic Map Server/actors/chara/ParameterTemp.cs index 6357af91..d912aec8 100644 --- a/FFXIVClassic Map Server/actors/chara/ParameterTemp.cs +++ b/FFXIVClassic Map Server/actors/chara/ParameterTemp.cs @@ -12,12 +12,12 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara public int targetInformation = 0; - public int[] maxCommandRecastTime = new int[40]; + public ushort[] maxCommandRecastTime = new ushort[40]; - public float[] forceControl_float_forClientSelf = { 1.0f, 1.0f}; + public float[] forceControl_float_forClientSelf = { 1.0f, 1.0f, 0.0f, 0.0f}; public short[] forceControl_int16_forClientSelf = { -1, -1 }; - public int[] otherClassAbilityCount = new int[2]; - public int[] giftCount = new int[2]; + public byte[] otherClassAbilityCount = new byte[2]; + public byte[] giftCount = new byte[2]; } } diff --git a/FFXIVClassic Map Server/actors/chara/Work.cs b/FFXIVClassic Map Server/actors/chara/Work.cs index 4cbfa626..4dd577b5 100644 --- a/FFXIVClassic Map Server/actors/chara/Work.cs +++ b/FFXIVClassic Map Server/actors/chara/Work.cs @@ -11,6 +11,9 @@ namespace FFXIVClassic_Map_Server.actors.chara public ushort[] guildleveId = new ushort[16]; public bool[] guildleveDone = new bool[16]; public bool[] guildleveChecked = new bool[16]; + public bool betacheck = false; + + public bool[] event_achieve_aetheryte = new bool[512]; } } diff --git a/FFXIVClassic Map Server/actors/chara/npc/NpcWork.cs b/FFXIVClassic Map Server/actors/chara/npc/NpcWork.cs new file mode 100644 index 00000000..c10b7047 --- /dev/null +++ b/FFXIVClassic Map Server/actors/chara/npc/NpcWork.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FFXIVClassic_Map_Server.dataobjects.chara +{ + class NpcWork + { + public short pushCommand; + public int pushCommandSub; + public byte pushCommandPriority; + public byte hateType; + } +} diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index e8329275..44d47784 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -3,6 +3,7 @@ using FFXIVClassic_Lobby_Server.common; using FFXIVClassic_Lobby_Server.packets; using FFXIVClassic_Map_Server.lua; using FFXIVClassic_Map_Server.packets.send.actor; +using FFXIVClassic_Map_Server.packets.send.player; using FFXIVClassic_Map_Server.utils; using MySql.Data.MySqlClient; using System; @@ -39,6 +40,8 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara public uint[] timers = new uint[20]; + public ushort currentJob; + public uint currentTitle; public byte gcCurrent; @@ -52,7 +55,7 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara public string chocoboName; public uint achievementPoints; - public ushort[] latestAchievements = new ushort[5]; + public uint[] latestAchievements = new uint[5]; public PlayerWork playerWork = new PlayerWork(); @@ -85,25 +88,19 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara charaWork.command[15] = 0xA0F00000 | 22015; charaWork.command[32] = 0xA0F00000 | 27155; - charaWork.command[33] = 0xA0F00000 | 27150; + //charaWork.command[33] = 0xA0F00000 | 27150; charaWork.command[34] = 0xA0F00000 | 27300; - charaWork.command[61] = 0xA0F00000 | 27300; - charaWork.command[36] = 0xA0F00000 | 27300; - //charaWork.command[35] = 0xA0F00000 | 27300; - //charaWork.command[35] = 0xA0F00000 | 27300; + charaWork.commandAcquired[27150 - 26000] = true; - /* - charaWork.additionalCommandAcquired[0] = true; - charaWork.additionalCommandAcquired[12] = true; - charaWork.additionalCommandAcquired[22] = true; - charaWork.additionalCommandAcquired[25] = true; - charaWork.additionalCommandAcquired[28] = true; - charaWork.additionalCommandAcquired[30] = true; + playerWork.questScenarioComplete[110001 - 110001] = true; + playerWork.questGuildleveComplete[120050 - 120001] = true; - charaWork.commandCategory[0] = 1; - charaWork.commandCategory[1] = 1; - */ + for (int i = 0; i < charaWork.additionalCommandAcquired.Length; i++ ) + charaWork.additionalCommandAcquired[i] = true; + + for (int i = 0; i < charaWork.commandCategory.Length; i++) + charaWork.commandCategory[i] = 1; charaWork.battleTemp.generalParameter[3] = 1; @@ -111,8 +108,10 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara charaWork.battleSave.potencial = 6.6f; charaWork.commandBorder = 0x20; - + Database.loadPlayerCharacter(this); + + Database.getLatestAchievements(this); } public List create0x132Packets(uint playerActorId) @@ -158,10 +157,62 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara subpackets.Add(createInitStatusPacket(playerActorId)); subpackets.Add(createSetActorIconPacket(playerActorId)); subpackets.Add(createIsZoneingPacket(playerActorId)); + subpackets.AddRange(createPlayerRelatedPackets(playerActorId)); subpackets.Add(createScriptBindPacket(playerActorId)); return BasePacket.createPacket(subpackets, true, false); } + public List createPlayerRelatedPackets(uint playerActorId) + { + List subpackets = new List(); + + if (gcCurrent != 0) + subpackets.Add(SetGrandCompanyPacket.buildPacket(actorId, playerActorId, gcCurrent, gcRankLimsa, gcRankGridania, gcRankUldah)); + + if (currentTitle != 0) + subpackets.Add(SetPlayerTitlePacket.buildPacket(actorId, playerActorId, currentTitle)); + + if (currentJob != 0) + subpackets.Add(SetCurrentJobPacket.buildPacket(actorId, playerActorId, currentJob)); + + if (isMyPlayer(playerActorId)) + { + subpackets.Add(_0x196Packet.buildPacket(playerActorId, playerActorId)); + + if (hasChocobo && chocoboName != null && !chocoboName.Equals("")) + { + subpackets.Add(SetChocoboNamePacket.buildPacket(actorId, playerActorId, chocoboName)); + subpackets.Add(SetHasChocoboPacket.buildPacket(playerActorId, hasChocobo)); + } + + if (hasGoobbue) + subpackets.Add(SetHasGoobbuePacket.buildPacket(playerActorId, hasGoobbue)); + + subpackets.Add(SetAchievementPointsPacket.buildPacket(playerActorId, achievementPoints)); + subpackets.Add(SetLatestAchievementsPacket.buildPacket(playerActorId, latestAchievements)); + + SetCompletedAchievementsPacket cheevos = new SetCompletedAchievementsPacket(); + for (int i = 0; i < cheevos.achievementFlags.Length; i++) + cheevos.achievementFlags[i] = true; + subpackets.Add(cheevos.buildPacket(playerActorId)); + + /* + if (isInn) + { + SetCutsceneBookPacket book = new SetCutsceneBookPacket(); + for (int i = 0; i < book.cutsceneFlags.Length; i++) + book.cutsceneFlags[i] = true; + client.queuePacket(book.buildPacket(player.actorID), true, false); + + // + //subpackets.Add(SetPlayerDreamPacket.buildPacket(playerActorId, ); + } + */ + } + + return subpackets; + } + public override BasePacket getInitPackets(uint playerActorId) { ActorPropertyPacketUtil propPacketUtil = new ActorPropertyPacketUtil("/_init", this, playerActorId); @@ -191,13 +242,7 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara if (charaWork.statusShownTime[i] != 0xFFFFFFFF) propPacketUtil.addProperty(String.Format("charaWork.statusShownTime[{0}]", i)); } - - for (int i = 0; i < charaWork.additionalCommandAcquired.Length; i++) - { - if (charaWork.additionalCommandAcquired[i] != false) - propPacketUtil.addProperty(String.Format("charaWork.additionalCommandAcquired[{0}]", i)); - } - + //General Parameters for (int i = 3; i < charaWork.battleTemp.generalParameter.Length; i++) { @@ -213,32 +258,48 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara //Commands propPacketUtil.addProperty("charaWork.commandBorder"); + for (int i = 0; i < charaWork.command.Length; i++) { if (charaWork.command[i] != 0) propPacketUtil.addProperty(String.Format("charaWork.command[{0}]", i)); } + /* for (int i = 0; i < charaWork.commandCategory.Length; i++) { + charaWork.commandCategory[i] = 1; if (charaWork.commandCategory[i] != 0) propPacketUtil.addProperty(String.Format("charaWork.commandCategory[{0}]", i)); } - - + + for (int i = 0; i < charaWork.commandAcquired.Length; i++) + { + if (charaWork.commandAcquired[i] != false) + propPacketUtil.addProperty(String.Format("charaWork.commandAcquired[{0}]", i)); + } + */ + + for (int i = 0; i < charaWork.additionalCommandAcquired.Length; i++) + { + if (charaWork.additionalCommandAcquired[i] != false) + propPacketUtil.addProperty(String.Format("charaWork.additionalCommandAcquired[{0}]", i)); + } for (int i = 0; i < charaWork.parameterSave.commandSlot_compatibility.Length; i++) { + charaWork.parameterSave.commandSlot_compatibility[i] = true; if (charaWork.parameterSave.commandSlot_compatibility[i]) propPacketUtil.addProperty(String.Format("charaWork.parameterSave.commandSlot_compatibility[{0}]", i)); } - for (int i = 0; i < charaWork.parameterSave.commandSlot_recastTime.Length; i++) - { - if (charaWork.parameterSave.commandSlot_recastTime[i] != 0) - propPacketUtil.addProperty(String.Format("charaWork.parameterSave.commandSlot_recastTime[{0}]", i)); - } - */ + /* + for (int i = 0; i < charaWork.parameterSave.commandSlot_recastTime.Length; i++) + { + if (charaWork.parameterSave.commandSlot_recastTime[i] != 0) + propPacketUtil.addProperty(String.Format("charaWork.parameterSave.commandSlot_recastTime[{0}]", i)); + } + */ //System propPacketUtil.addProperty("charaWork.parameterTemp.forceControl_float_forClientSelf[0]"); diff --git a/FFXIVClassic Map Server/actors/chara/player/PlayerWork.cs b/FFXIVClassic Map Server/actors/chara/player/PlayerWork.cs index 10e10a71..050ec57d 100644 --- a/FFXIVClassic Map Server/actors/chara/player/PlayerWork.cs +++ b/FFXIVClassic Map Server/actors/chara/player/PlayerWork.cs @@ -14,13 +14,13 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara public byte birthdayDay; public byte initialTown; - public int restBonusExpRate; + public float restBonusExpRate = 1.5f; public uint[] questScenario = new uint[16]; public uint[] questGuildleve = new uint[8]; - public int questScenarioComplete; - public int questGuildleveComplete; + public bool[] questScenarioComplete = new bool[2048]; + public bool[] questGuildleveComplete = new bool[2048]; public bool isContentsCommand; @@ -28,7 +28,7 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara public int castEndClient; public int[] comboNextCommandId = new int[2]; - public int comboCostBonusRate; + public float comboCostBonusRate; public bool isRemainBonusPoint; @@ -36,15 +36,15 @@ namespace FFXIVClassic_Map_Server.dataobjects.chara public bool[] npcLinkshellChatExtra = new bool[64]; public int variableCommandConfirmWarp; - public int variableCommandConfirmWarpSender; + public string variableCommandConfirmWarpSender; public int variableCommandConfirmWarpSenderByID; - public int variableCommandConfirmWarpSenderSex; + public byte variableCommandConfirmWarpSenderSex; public int variableCommandConfirmWarpPlace; public int variableCommandConfirmRaise; - public int variableCommandConfirmRaiseSender; + public string variableCommandConfirmRaiseSender; public int variableCommandConfirmRaiseSenderByID; - public int variableCommandConfirmRaiseSenderSex; + public byte variableCommandConfirmRaiseSenderSex; public int variableCommandConfirmRaisePlace; } diff --git a/FFXIVClassic Map Server/packets/send/player/SetGrandCompanyPacket.cs b/FFXIVClassic Map Server/packets/send/player/SetGrandCompanyPacket.cs index 1593fde6..5af08034 100644 --- a/FFXIVClassic Map Server/packets/send/player/SetGrandCompanyPacket.cs +++ b/FFXIVClassic Map Server/packets/send/player/SetGrandCompanyPacket.cs @@ -20,11 +20,11 @@ namespace FFXIVClassic_Map_Server.packets.send.actor using (MemoryStream mem = new MemoryStream(data)) { using (BinaryWriter binWriter = new BinaryWriter(mem)) - { - binWriter.Write((UInt16)currentAllegiance); - binWriter.Write((UInt16)rankLimsa); - binWriter.Write((UInt16)rankGridania); - binWriter.Write((UInt16)rankUldah); + { + binWriter.Write((Byte)currentAllegiance); + binWriter.Write((Byte)rankLimsa); + binWriter.Write((Byte)rankGridania); + binWriter.Write((Byte)rankUldah); } }