diff --git a/FFXIVClassic Common Class Lib/FFXIVClassic Common Class Lib.csproj b/FFXIVClassic Common Class Lib/FFXIVClassic Common Class Lib.csproj index a08e253f..5e54cb7e 100644 --- a/FFXIVClassic Common Class Lib/FFXIVClassic Common Class Lib.csproj +++ b/FFXIVClassic Common Class Lib/FFXIVClassic Common Class Lib.csproj @@ -1,7 +1,7 @@  - - + + Debug AnyCPU @@ -87,4 +87,4 @@ --> - \ No newline at end of file + diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs index 576ef116..d94443f9 100644 --- a/FFXIVClassic Map Server/Database.cs +++ b/FFXIVClassic Map Server/Database.cs @@ -10,6 +10,7 @@ using FFXIVClassic_Map_Server.packets.send.player; using FFXIVClassic_Map_Server.dataobjects; using FFXIVClassic_Map_Server.Actors; using FFXIVClassic_Map_Server.actors.chara.player; +using FFXIVClassic_Map_Server.packets.receive.supportdesk; namespace FFXIVClassic_Map_Server { @@ -29,10 +30,10 @@ namespace FFXIVClassic_Map_Server cmd.Parameters.AddWithValue("@sessionId", sessionId); using (MySqlDataReader Reader = cmd.ExecuteReader()) { - while (Reader.Read()) - { - id = Reader.GetUInt32("userId"); - } + while (Reader.Read()) + { + id = Reader.GetUInt32("userId"); + } } } catch (MySqlException e) @@ -42,10 +43,10 @@ namespace FFXIVClassic_Map_Server finally { conn.Dispose(); - } + } } return id; - } + } public static List GetNpcList() { @@ -122,7 +123,7 @@ namespace FFXIVClassic_Map_Server { conn.Dispose(); } - + return gamedataItems; } } @@ -262,7 +263,7 @@ namespace FFXIVClassic_Map_Server public static void SavePlayerPosition(Player player) { - string query; + string query; MySqlCommand cmd; 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))) @@ -284,7 +285,7 @@ namespace FFXIVClassic_Map_Server currentPrivateAreaType = @privateAreaType WHERE id = @charaId "; - + cmd = new MySqlCommand(query, conn); cmd.Parameters.AddWithValue("@charaId", player.actorId); cmd.Parameters.AddWithValue("@x", player.positionX); @@ -637,9 +638,9 @@ namespace FFXIVClassic_Map_Server } public static void LoadPlayerCharacter(Player player) - { + { string query; - MySqlCommand cmd; + MySqlCommand cmd; 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))) { @@ -724,7 +725,7 @@ namespace FFXIVClassic_Map_Server player.zone = Server.GetWorldManager().GetZone(player.zoneId); } } - + //Get class levels query = @" SELECT @@ -757,7 +758,7 @@ namespace FFXIVClassic_Map_Server { if (reader.Read()) { - player.charaWork.battleSave.skillLevel[Player.CLASSID_PUG-1] = reader.GetInt16("pug"); + player.charaWork.battleSave.skillLevel[Player.CLASSID_PUG - 1] = reader.GetInt16("pug"); player.charaWork.battleSave.skillLevel[Player.CLASSID_GLA - 1] = reader.GetInt16("gla"); player.charaWork.battleSave.skillLevel[Player.CLASSID_MRD - 1] = reader.GetInt16("mrd"); player.charaWork.battleSave.skillLevel[Player.CLASSID_ARC - 1] = reader.GetInt16("arc"); @@ -806,7 +807,7 @@ namespace FFXIVClassic_Map_Server player.charaWork.parameterSave.state_mainSkillLevel = player.charaWork.battleSave.skillLevel[reader.GetByte(4) - 1]; } } - + //Load appearance query = @" SELECT @@ -949,7 +950,7 @@ namespace FFXIVClassic_Map_Server player.timers[i] = reader.GetUInt32(i); } } - + //Load Hotbar query = @" SELECT @@ -962,11 +963,11 @@ namespace FFXIVClassic_Map_Server cmd.Parameters.AddWithValue("@charId", player.actorId); cmd.Parameters.AddWithValue("@classId", player.charaWork.parameterSave.state_mainSkill[0]); using (MySqlDataReader reader = cmd.ExecuteReader()) - { + { while (reader.Read()) { int index = reader.GetUInt16(0); - player.charaWork.command[index+32] = reader.GetUInt32(1); + player.charaWork.command[index + 32] = reader.GetUInt32(1); player.charaWork.parameterSave.commandSlot_recastTime[index] = reader.GetUInt32(2); } } @@ -980,7 +981,7 @@ namespace FFXIVClassic_Map_Server questFlags, currentPhase FROM characters_quest_scenario WHERE characterId = @charId"; - + cmd = new MySqlCommand(query, conn); cmd.Parameters.AddWithValue("@charId", player.actorId); using (MySqlDataReader reader = cmd.ExecuteReader()) @@ -1069,7 +1070,7 @@ namespace FFXIVClassic_Map_Server { int npcLSId = reader.GetUInt16(0); player.playerWork.npcLinkshellChatCalling[npcLSId] = reader.GetBoolean(1); - player.playerWork.npcLinkshellChatExtra[npcLSId] = reader.GetBoolean(2); + player.playerWork.npcLinkshellChatExtra[npcLSId] = reader.GetBoolean(2); } } @@ -1121,7 +1122,7 @@ namespace FFXIVClassic_Map_Server { ushort equipSlot = reader.GetUInt16(0); ulong uniqueItemId = reader.GetUInt16(1); - InventoryItem item = player.GetInventory(Inventory.NORMAL).GetItemById(uniqueItemId); + InventoryItem item = player.GetInventory(Inventory.NORMAL).GetItemByUniqueId(uniqueItemId); equipment[equipSlot] = item; } } @@ -1244,7 +1245,7 @@ namespace FFXIVClassic_Map_Server cmd.Parameters.AddWithValue("@type", type); using (MySqlDataReader reader = cmd.ExecuteReader()) - { + { while (reader.Read()) { uint uniqueId = reader.GetUInt32(0); @@ -1291,7 +1292,7 @@ namespace FFXIVClassic_Map_Server { conn.Open(); - + string query = @" INSERT INTO server_items @@ -1309,7 +1310,7 @@ namespace FFXIVClassic_Map_Server "; MySqlCommand cmd2 = new MySqlCommand(query2, conn); - + cmd.Parameters.AddWithValue("@itemId", itemId); cmd.Parameters.AddWithValue("@quality", quality); cmd.Parameters.AddWithValue("@itemType", itemType); @@ -1345,12 +1346,12 @@ namespace FFXIVClassic_Map_Server { conn.Open(); - string query = @" + string query = @" UPDATE characters_inventory SET quantity = @quantity WHERE characterId = @charId AND slot = @slot AND inventoryType = @type; "; - + MySqlCommand cmd = new MySqlCommand(query, conn); cmd.Parameters.AddWithValue("@charId", player.actorId); cmd.Parameters.AddWithValue("@quantity", quantity); @@ -1390,7 +1391,7 @@ namespace FFXIVClassic_Map_Server DELETE FROM server_items WHERE id = @serverItemId; - "; + "; MySqlCommand cmd = new MySqlCommand(query, conn); cmd.Parameters.AddWithValue("@charId", player.actorId); @@ -1460,7 +1461,7 @@ namespace FFXIVClassic_Map_Server try { conn.Open(); - + //Load Last 5 Completed string query = @" SELECT @@ -1475,7 +1476,7 @@ namespace FFXIVClassic_Map_Server int count = 0; while (reader.Read()) { - uint id = reader.GetUInt32(0); + uint id = reader.GetUInt32(0); latestAchievements[count++] = id; } } @@ -1502,7 +1503,7 @@ namespace FFXIVClassic_Map_Server try { conn.Open(); - + string query = @" SELECT packetOffsetId FROM characters_achievements @@ -1514,7 +1515,7 @@ namespace FFXIVClassic_Map_Server using (MySqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) - { + { uint offset = reader.GetUInt32(0); if (offset < 0 || offset >= cheevosPacket.achievementFlags.Length) @@ -1522,7 +1523,7 @@ namespace FFXIVClassic_Map_Server Program.Log.Error("SQL Error; achievement flag offset id out of range: " + offset); continue; } - cheevosPacket.achievementFlags[offset] = true; + cheevosPacket.achievementFlags[offset] = true; } } } @@ -1538,7 +1539,6 @@ namespace FFXIVClassic_Map_Server return cheevosPacket.BuildPacket(player.actorId); } - public static bool CreateLinkshell(Player player, string lsName, ushort lsCrest) { bool success = false; @@ -1559,7 +1559,7 @@ namespace FFXIVClassic_Map_Server MySqlCommand cmd = new MySqlCommand(query, conn); cmd.Parameters.AddWithValue("@lsName", lsName); cmd.Parameters.AddWithValue("@master", player.actorId); - cmd.Parameters.AddWithValue("@crest", lsCrest); + cmd.Parameters.AddWithValue("@crest", lsCrest); cmd.ExecuteNonQuery(); success = true; @@ -1615,6 +1615,315 @@ namespace FFXIVClassic_Map_Server } } } + + public static bool SaveSupportTicket(GMSupportTicketPacket gmTicket, string playerName) + { + string query; + MySqlCommand cmd; + bool wasError = false; + + 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 + { + conn.Open(); + + query = @" + INSERT INTO supportdesk_tickets + (name, title, body, langCode) + VALUES + (@name, @title, @body, @langCode)"; + + cmd = new MySqlCommand(query, conn); + cmd.Parameters.AddWithValue("@name", playerName); + cmd.Parameters.AddWithValue("@title", gmTicket.ticketTitle); + cmd.Parameters.AddWithValue("@body", gmTicket.ticketBody); + cmd.Parameters.AddWithValue("@langCode", gmTicket.langCode); + + cmd.ExecuteNonQuery(); + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + wasError = true; + } + finally + { + conn.Dispose(); + } + } + + return wasError; + } + + public static bool isTicketOpen(string playerName) + { + bool isOpen = false; + 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 + { + conn.Open(); + + string query = @" + SELECT + isOpen + FROM supportdesk_tickets + WHERE name = @name + "; + + MySqlCommand cmd = new MySqlCommand(query, conn); + + cmd.Parameters.AddWithValue("@name", playerName); + + using (MySqlDataReader reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + isOpen = reader.GetBoolean(0); + } + } + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + } + finally + { + conn.Dispose(); + } + } + + return isOpen; + } + + public static void closeTicket(string playerName) + { + bool isOpen = false; + 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 + { + conn.Open(); + + string query = @" + UPDATE + supportdesk_tickets + SET isOpen = 0 + WHERE name = @name + "; + + MySqlCommand cmd = new MySqlCommand(query, conn); + cmd.Parameters.AddWithValue("@name", playerName); + cmd.ExecuteNonQuery(); + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + } + finally + { + conn.Dispose(); + } + } + } + + public static string[] getFAQNames(uint langCode = 1) + { + string[] faqs = null; + List raw = new List(); + 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 + { + conn.Open(); + + string query = @" + SELECT + title + FROM supportdesk_faqs + WHERE languageCode = @langCode + ORDER BY slot + "; + + MySqlCommand cmd = new MySqlCommand(query, conn); + + cmd.Parameters.AddWithValue("@langCode", langCode); + + using (MySqlDataReader reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + string label = reader.GetString(0); + raw.Add(label); + } + } + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + } + finally + { + conn.Dispose(); + faqs = raw.ToArray(); + } + } + return faqs; + } + + public static string getFAQBody(uint slot, uint langCode = 1) + { + string body = string.Empty; + 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 + { + conn.Open(); + + string query = @" + SELECT + body + FROM supportdesk_faqs + WHERE slot=@slot and languageCode=@langCode"; + + MySqlCommand cmd = new MySqlCommand(query, conn); + cmd.Parameters.AddWithValue("@slot", slot); + cmd.Parameters.AddWithValue("@langCode", langCode); + + using (MySqlDataReader reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + body = reader.GetString(0); + } + } + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + } + finally + { + conn.Dispose(); + } + } + return body; + } + + public static string[] getIssues(uint lanCode = 1) + { + string[] issues = null; + List raw = new List(); + 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 + { + conn.Open(); + + string query = @" + SELECT + title + FROM supportdesk_issues + ORDER BY slot"; + + MySqlCommand cmd = new MySqlCommand(query, conn); + + using (MySqlDataReader reader = cmd.ExecuteReader()) + { + while (reader.Read()) + { + string label = reader.GetString(0); + raw.Add(label); + } + } + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + } + finally + { + conn.Dispose(); + issues = raw.ToArray(); + } + } + return issues; + } + + public static void IssuePlayerChocobo(Player player, byte appearanceId, string name) + { + string query; + MySqlCommand cmd; + + 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 + { + conn.Open(); + + query = @" + INSERT INTO characters_chocobo + (characterId, hasChocobo, chocoboAppearance, chocoboName) + VALUES + (@characterId, @hasChocobo, @chocoboAppearance, @chocoboName) + ON DUPLICATE KEY UPDATE + hasChocobo=@hasChocobo, chocoboAppearance=@chocoboAppearance, chocoboName=@chocoboName"; + + cmd = new MySqlCommand(query, conn); + cmd.Parameters.AddWithValue("@characterId", player.actorId); + cmd.Parameters.AddWithValue("@hasChocobo", 1); + cmd.Parameters.AddWithValue("@chocoboAppearance", appearanceId); + cmd.Parameters.AddWithValue("@chocoboName", name); + + cmd.ExecuteNonQuery(); + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + } + finally + { + conn.Dispose(); + } + } + } + + public static void ChangePlayerChocoboAppearance(Player player, byte appearanceId) + { + string query; + MySqlCommand cmd; + + 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 + { + conn.Open(); + + query = @" + UPDATE characters_chocobo + SET + chocoboAppearance=@chocoboAppearance + WHERE + characterId = @characterId"; + + cmd = new MySqlCommand(query, conn); + cmd.Parameters.AddWithValue("@characterId", player.actorId); + cmd.Parameters.AddWithValue("@chocoboAppearance", appearanceId); + + cmd.ExecuteNonQuery(); + } + catch (MySqlException e) + { + Program.Log.Error(e.ToString()); + } + finally + { + conn.Dispose(); + } + } + } + } } diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj index 89f7ce5b..757f98dc 100644 --- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj +++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj @@ -1,7 +1,7 @@  - - + + Debug AnyCPU @@ -223,19 +223,19 @@ - + - - - - - - - + + + + + + + diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 22a88476..09b7b7ab 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -347,3 +347,4 @@ namespace FFXIVClassic_Map_Server } } + diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs index cd0560ba..12e82dde 100644 --- a/FFXIVClassic Map Server/WorldManager.cs +++ b/FFXIVClassic Map Server/WorldManager.cs @@ -1116,7 +1116,5 @@ namespace FFXIVClassic_Map_Server else return null; } - } - } diff --git a/FFXIVClassic Map Server/actors/area/Area.cs b/FFXIVClassic Map Server/actors/area/Area.cs index 220ac86b..71ff41ee 100644 --- a/FFXIVClassic Map Server/actors/area/Area.cs +++ b/FFXIVClassic Map Server/actors/area/Area.cs @@ -1,6 +1,5 @@ using FFXIVClassic_Map_Server; using FFXIVClassic.Common; - using FFXIVClassic_Map_Server.actors.area; using FFXIVClassic_Map_Server.actors.chara.npc; using FFXIVClassic_Map_Server.dataobjects; @@ -282,6 +281,7 @@ namespace FFXIVClassic_Map_Server.Actors } } } + //Remove players if isolation zone if (isIsolated) { @@ -410,7 +410,6 @@ namespace FFXIVClassic_Map_Server.Actors Npc npc = new Npc(mActorList.Count + 1, actorClass, location.uniqueId, this, location.x, location.y, location.z, location.rot, location.state, location.animId, null); - npc.LoadEventConditions(actorClass.eventConditions); AddActorToZone(npc); diff --git a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs index bb6f4b28..edae3e77 100644 --- a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs +++ b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs @@ -52,8 +52,8 @@ namespace FFXIVClassic_Map_Server.Actors LoadNpcAppearance(actorClass.actorClassId); - this.classPath = actorClass.classPath; - className = classPath.Substring(classPath.LastIndexOf("/")+1); + className = actorClass.classPath.Substring(actorClass.classPath.LastIndexOf("/") + 1); + this.classPath = String.Format("{0}/{1}", actorClass.classPath.Substring(0, actorClass.classPath.LastIndexOf('/')).ToLower(), className); charaWork.battleSave.potencial = 1.0f; diff --git a/FFXIVClassic Map Server/actors/chara/player/Inventory.cs b/FFXIVClassic Map Server/actors/chara/player/Inventory.cs index 2066ad72..c33f15ff 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Inventory.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Inventory.cs @@ -46,14 +46,24 @@ namespace FFXIVClassic_Map_Server.actors.chara.player return null; } - public InventoryItem GetItemById(ulong itemId) + public InventoryItem GetItemByUniqueId(ulong uniqueItemId) { foreach (InventoryItem item in list) - { - if (item.uniqueId == itemId) + { + if (item.uniqueId == uniqueItemId) return item; } return null; + } + + public InventoryItem GetItemByCatelogId(ulong catelogId) + { + foreach (InventoryItem item in list) + { + if (item.itemId == catelogId) + return item; + } + return null; } public void RefreshItem(InventoryItem item) diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index 4018cbed..b1395149 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -1,5 +1,4 @@ using FFXIVClassic.Common; - using FFXIVClassic_Map_Server.actors.chara.player; using FFXIVClassic_Map_Server.actors.director; using FFXIVClassic_Map_Server.dataobjects; @@ -8,6 +7,9 @@ using FFXIVClassic_Map_Server.lua; using FFXIVClassic_Map_Server.packets.send; using FFXIVClassic_Map_Server.packets.send.actor; using FFXIVClassic_Map_Server.packets.send.events; +using FFXIVClassic_Map_Server.packets.send.actor.events; +using FFXIVClassic_Map_Server.packets.send.actor.inventory; +using FFXIVClassic_Map_Server.packets.send.events; using FFXIVClassic_Map_Server.packets.send.player; using FFXIVClassic_Map_Server.utils; using System; @@ -340,6 +342,7 @@ namespace FFXIVClassic_Map_Server.Actors subpackets.Add(SetHasGoobbuePacket.BuildPacket(actorId, hasGoobbue)); subpackets.Add(SetAchievementPointsPacket.BuildPacket(actorId, achievementPoints)); + subpackets.Add(Database.GetLatestAchievements(this)); subpackets.Add(Database.GetAchievementsPacket(this)); } @@ -543,6 +546,7 @@ namespace FFXIVClassic_Map_Server.Actors playerSession.QueuePacket(worldMasterSpawn); //Inn Packets (Dream, Cutscenes, Armoire) + if (zone.isInn) { SetCutsceneBookPacket cutsceneBookPacket = new SetCutsceneBookPacket(); @@ -569,7 +573,6 @@ namespace FFXIVClassic_Map_Server.Actors if (currentContentGroup != null) currentContentGroup.SendGroupPackets(playerSession); - } private void SendRemoveInventoryPackets(List slots) @@ -600,6 +603,7 @@ namespace FFXIVClassic_Map_Server.Actors } public void QueuePacket(SubPacket packet) + { playerSession.QueuePacket(packet); } @@ -708,7 +712,7 @@ namespace FFXIVClassic_Map_Server.Actors //Save Player Database.SavePlayerPlayTime(this); - Database.SavePlayerPosition(this); + Database.SavePlayerPosition(this); } public Area GetZone() @@ -987,6 +991,7 @@ namespace FFXIVClassic_Map_Server.Actors else { ItemData item = Server.GetItemGamedata(invItem.itemId); + if (item is EquipmentItem) { EquipmentItem eqItem = (EquipmentItem)item; @@ -1021,7 +1026,6 @@ namespace FFXIVClassic_Map_Server.Actors } Database.SavePlayerAppearance(this); - BroadcastPacket(CreateAppearancePacket(), true); } @@ -1033,6 +1037,14 @@ namespace FFXIVClassic_Map_Server.Actors return null; } + public int GetCurrentGil() + { + if (GetInventory(Inventory.CURRENCY).HasItem(1000001)) + return GetInventory(Inventory.CURRENCY).GetItemByCatelogId(1000001).quantity; + else + return 0; + } + public Actor GetActorInInstance(uint actorId) { foreach (Actor a in playerSession.actorInstanceList) @@ -1546,7 +1558,7 @@ namespace FFXIVClassic_Map_Server.Actors public void SendDataPacket(params object[] parameters) { List lParams = LuaUtils.CreateLuaParamList(parameters); - SubPacket spacket = InfoRequestResponsePacket.BuildPacket(actorId, lParams); + SubPacket spacket = GenericDataPacket.BuildPacket(actorId, lParams); spacket.DebugPrintSubPacket(); QueuePacket(spacket); } @@ -1702,5 +1714,18 @@ namespace FFXIVClassic_Map_Server.Actors LuaEngine.GetInstance().CallLuaFunction(this, this, "OnUpdate", true, delta); } + public void IssueChocobo(byte appearanceId, string nameResponse) + { + Database.IssuePlayerChocobo(this, appearanceId, nameResponse); + hasChocobo = true; + chocoboAppearance = appearanceId; + chocoboName = nameResponse; + } + + public void ChangeChocoboAppearance(byte appearanceId) + { + Database.ChangePlayerChocoboAppearance(this, appearanceId); + chocoboAppearance = appearanceId; + } } } diff --git a/FFXIVClassic Map Server/packets/send/player/InfoRequestResponsePacket.cs b/FFXIVClassic Map Server/packets/send/player/GenericDataPacket.cs similarity index 95% rename from FFXIVClassic Map Server/packets/send/player/InfoRequestResponsePacket.cs rename to FFXIVClassic Map Server/packets/send/player/GenericDataPacket.cs index 6af21e9e..1240c077 100644 --- a/FFXIVClassic Map Server/packets/send/player/InfoRequestResponsePacket.cs +++ b/FFXIVClassic Map Server/packets/send/player/GenericDataPacket.cs @@ -6,7 +6,7 @@ using FFXIVClassic.Common; namespace FFXIVClassic_Map_Server.packets.send.player { - class InfoRequestResponsePacket + class GenericDataPacket { public const ushort OPCODE = 0x0133; public const uint PACKET_SIZE = 0xE0; diff --git a/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua b/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua index e2cb475a..18163c85 100644 --- a/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua +++ b/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua @@ -15,17 +15,100 @@ eventTalkStepBreak(player) - Finishes talkTurn and says a goodbye require ("global") +local gcIssuances = { + [1500006] = 2001004, + [1500061] = 2001005, + [1000840] = 2001006 +}; + +local startAppearances = { + [1500006] = CHOCOBO_LIMSA1, + [1500061] = CHOCOBO_GRIDANIA1, + [1000840] = CHOCOBO_ULDAH1 +}; + +local cityExits = { + [1500006] = 15, + [1500061] = 14, + [1000840] = 16 +}; + function init(npc) return false, false, 0, 0; end function onEventStarted(player, npc, triggerName) - callClientFunction(player, "eventTalkWelcome", player); - callClientFunction(player, "eventAskMainMenu", player, 20, true, true, true, true, 4); + --callClientFunction(player, "eventTalkWelcome", player); + --callClientFunction(player, "eventAskMainMenu", player, 20, true, true, true, true, 4); --callClientFunction(player, "eventTalkMyChocobo", player); --callClientFunction(player, "eventSetChocoboName", false); --callClientFunction(player, "eventAfterChocoboName", player); + + local curLevel = 20; -- TODO: pull from character + local hasIssuance = player:GetInventory(INVENTORY_KEYITEMS):HasItem(gcIssuances[npc:GetActorClassId()]); + local hasChocobo = player.hasChocobo; + if (player.isGM and hasChocobo == false) then -- Let GMs auto have the issuance for debugging + hasIssuance = true; + end + + local rentPrice = 800; + local hasFunds = (player:GetCurrentGil() >= rentPrice); + + callClientFunction(player, "eventTalkWelcome", player); + + local menuChoice = callClientFunction(player, "eventAskMainMenu", player, curLevel, hasFunds, hasIssuance, true, true, player.chocoboAppearance); + + if (menuChoice == 1) then -- Issuance option + callClientFunction(player, "eventTalkMyChocobo", player); + local nameResponse = callClientFunction(player, "eventSetChocoboName", true); + + if (nameResponse == "") then -- Cancel Chocobo naming + callClientFunction(player, "eventCancelChocoboName", player); + callClientFunction(player, "eventTalkStepBreak", player); + player:EndEvent(); + return; + else + local appearance = startAppearances[npc:GetActorClassId()]; + player:IssueChocobo(appearance, nameResponse); + callClientFunction(player, "eventAfterChocoboName", player); + mountChocobo(player); + GetWorldManager():DoZoneChange(player, cityExits[npc:GetActorClassId()]); + player:SendGameMessage(player, GetWorldMaster(), 25248, 0x20, 2001007); + player:SendDataPacket("attention", GetWorldMaster(), "", 25248, 2001007); + + if (player:GetInventory(INVENTORY_KEYITEMS):HasItem(2001007) == false) then + player:GetInventory(INVENTORY_KEYITEMS):AddItem(2001007); + end + + player:GetInventory(INVENTORY_KEYITEMS):RemoveItem(gcIssuances[npc:GetActorClassId()], 1); + + player:EndEvent(); + return; + end + + elseif(menuChoice == 2) then -- Summon Bird + mountChocobo(player); + GetWorldManager():DoZoneChange(player, cityExits[npc:GetActorClassId()]); + elseif(menuChoice == 3) then -- Change Barding + callClientFunction(player, "eventTalkStepBreak", player); + elseif(menuChoice == 5) then -- Rent Bird + issueRentalChocobo(player); + else + callClientFunction(player, "eventTalkStepBreak", player); + end + player:EndEvent(); -end \ No newline at end of file +end + +function mountChocobo(player) + player:SendChocoboAppearance(); + player:SetMountState(1); + player:ChangeSpeed(0.0, 5.0, 10.0); + player:ChangeState(15); +end + +function issueRentalChocobo(player) + --TODO: Write issue rental chocobo code +end diff --git a/data/scripts/commands/gm/delcurrency.lua b/data/scripts/commands/gm/delcurrency.lua index 4eaaf4fe..28318d71 100644 --- a/data/scripts/commands/gm/delcurrency.lua +++ b/data/scripts/commands/gm/delcurrency.lua @@ -2,11 +2,16 @@ require("global"); properties = { permissions = 0, - parameters = "sssss", - description = "removes from , currency is removed from user if is nil", + parameters = "ssss", + description = +[[ +Removes currency from player or +!delcurrency | +!delcurrency | +]], } -function onTrigger(player, argc, currency, qty, location, name, lastName) +function onTrigger(player, argc, currency, qty, name, lastName) local sender = "[delcurrency] "; if name then @@ -19,12 +24,11 @@ function onTrigger(player, argc, currency, qty, location, name, lastName) if player then currency = tonumber(currency) or nil; - qty = 1; - location = INVENTORY_CURRENCY; + qty = tonumber(qty) or 1; - local removed = player:GetInventory(location):removecurrency(currency, qty); + local removed = player:GetInventory(INVENTORY_CURRENCY):RemoveItem(currency, qty); local messageID = MESSAGE_TYPE_SYSTEM_ERROR; - local message = "unable to remove currency"; + local message = "Attempting to remove currency" -- "unable to remove currency"; if currency and removed then message = string.format("removed currency %u from %s", currency, player:GetName()); diff --git a/data/scripts/commands/gm/delitem.lua b/data/scripts/commands/gm/delitem.lua index 90c89082..bdfcd761 100644 --- a/data/scripts/commands/gm/delitem.lua +++ b/data/scripts/commands/gm/delitem.lua @@ -3,11 +3,18 @@ require("global"); properties = { permissions = 0, parameters = "sssss", - description = "removes from for . and are optional, item is removed from user if is nil", + description = +[[ +Removes from for player or . +!delitem | +!delitem | +!delitem | +]], } function onTrigger(player, argc, item, qty, location, name, lastName) local sender = "[delitem] "; + local messageID = MESSAGE_TYPE_SYSTEM_ERROR; if name then if lastName then @@ -20,18 +27,29 @@ function onTrigger(player, argc, item, qty, location, name, lastName) if player then item = tonumber(item) or nil; qty = tonumber(qty) or 1; - location = tonumber(itemtype) or INVENTORY_NORMAL; - local removed = player:GetInventory(location):removeItem(item, qty); - local messageID = MESSAGE_TYPE_SYSTEM_ERROR; - local message = "unable to remove item"; + if location then + location = tonumber(location) or _G[string.upper(location)]; + + if location == nil then + player:SendMessage(messageID, sender, "Unknown item location."); + return; + end; + else + location = INVENTORY_NORMAL; + end; - if item and removed then - message = string.format("removed item %u from %s", item, player:GetName()); - end - player:SendMessage(messageID, sender, message); - print(message); + local removed = player:GetInventory(location):RemoveItem(item, qty); + + if removed then -- RemoveItem() currently returns nothing for verification, this statement can't work + message = string.format("Removed item %u of kind %u to %s", item, location, player:GetName()); + end; else - print(sender.."unable to remove item, ensure player name is valid."); + print(sender.."[giveitem] Unable to remove item, ensure player name is valid."); + return; end; + + local message = string.format("Attempting to remove item %u of kind %u from %s", item, location, player:GetName()); + player:SendMessage(messageID, sender, message); + print(message); end; \ No newline at end of file diff --git a/data/scripts/commands/gm/delkeyitem.lua b/data/scripts/commands/gm/delkeyitem.lua index 66ad8549..be763961 100644 --- a/data/scripts/commands/gm/delkeyitem.lua +++ b/data/scripts/commands/gm/delkeyitem.lua @@ -3,7 +3,12 @@ require("global"); properties = { permissions = 0, parameters = "ssss", - description = "removes from , keyitem is removed from user if is nil", + description = +[[ +Removes from player or . +!delkeyitem | +!delkeyitem | +]], } function onTrigger(player, argc, keyitem, qty, name, lastName) @@ -19,16 +24,16 @@ function onTrigger(player, argc, keyitem, qty, name, lastName) if player then keyitem = tonumber(keyitem) or nil; - qty = 1; - location = INVENTORY_KEYITEMS; - - local removed = player:GetInventory(location):removeItem(item, qty); + qty = tonumber(qty) or 1; + local location = INVENTORY_KEYITEMS; + + local removed = player:GetInventory(location):RemoveItem(keyitem, qty); local messageID = MESSAGE_TYPE_SYSTEM_ERROR; - local message = "unable to remove keyitem"; + local message = "Attempting to remove keyitem" -- "unable to remove keyitem"; - if keyitem and removed then + if removed then message = string.format("removed keyitem %u from %s", keyitem, player:GetName()); - end + end; player:SendMessage(messageID, sender, message); print(message); else diff --git a/data/scripts/commands/gm/givecurrency.lua b/data/scripts/commands/gm/givecurrency.lua index fea8f5fd..564dd73d 100644 --- a/data/scripts/commands/gm/givecurrency.lua +++ b/data/scripts/commands/gm/givecurrency.lua @@ -2,11 +2,16 @@ require("global"); properties = { permissions = 0, - parameters = "sss", - description = "adds to self or .", + parameters = "ssss", + description = +[[ +Adds currency to player or +!addcurrency | +!addcurrency | +]], } -function onTrigger(player, argc, currency, name, lastName) +function onTrigger(player, argc, currency, qty, name, lastName) local sender = "[givecurrency] "; if name then @@ -19,10 +24,10 @@ function onTrigger(player, argc, currency, name, lastName) if player then currency = tonumber(currency) or nil; - qty = 1; + qty = tonumber(qty) or 1; location = INVENTORY_CURRENCY; - local added = player:GetInventory(location):AddItem(currency, qty); + local added = player:GetInventory(location):AddItem(currency, qty, 1); local messageID = MESSAGE_TYPE_SYSTEM_ERROR; local message = "unable to add currency"; diff --git a/data/scripts/commands/gm/giveitem.lua b/data/scripts/commands/gm/giveitem.lua index 47c94a57..0b16b329 100644 --- a/data/scripts/commands/gm/giveitem.lua +++ b/data/scripts/commands/gm/giveitem.lua @@ -3,12 +3,20 @@ require("global"); properties = { permissions = 0, parameters = "sssss", - description = "adds to for . and are optional, item is added to user if is nil", + description = +[[ +Adds to for player or . +!giveitem | +!giveitem | +!giveitem | +]], } function onTrigger(player, argc, item, qty, location, name, lastName) local sender = "[giveitem] "; - + local messageID = MESSAGE_TYPE_SYSTEM_ERROR; + local message = string.format("Unable to add item %u", item); + if name then if lastName then player = GetWorldManager():GetPCInWorld(name.." "..lastName) or nil; @@ -20,17 +28,28 @@ function onTrigger(player, argc, item, qty, location, name, lastName) if player then item = tonumber(item) or nil; qty = tonumber(qty) or 1; - location = tonumber(itemtype) or INVENTORY_NORMAL; - local added = player:GetInventory(location):AddItem(item, qty); - local messageID = MESSAGE_TYPE_SYSTEM_ERROR; - local message = "unable to add item"; - if item and added then - message = string.format("added item %u to %s", item, player:GetName()); - end - player:SendMessage(messageID, sender, message); - print(message); + if location then + location = tonumber(location) or _G[string.upper(location)]; + + if not location then + player:SendMessage(messageID, sender, "Unknown item location."); + return; + end; + else + location = INVENTORY_NORMAL; + end; + + local added = player:getInventory(location):addItem(item, qty, 1); + + if added then + message = string.format("Added item %u of kind %u to %s", item, location, player:GetName()); + end; else - print(sender.."unable to add item, ensure player name is valid."); + print(sender.."[giveitem] Unable to add item, ensure player name is valid."); + return; end; + + player:SendMessage(messageID, sender, message); + print(message); end; \ No newline at end of file diff --git a/data/scripts/commands/gm/givekeyitem.lua b/data/scripts/commands/gm/givekeyitem.lua index af8aca70..9963005e 100644 --- a/data/scripts/commands/gm/givekeyitem.lua +++ b/data/scripts/commands/gm/givekeyitem.lua @@ -3,7 +3,12 @@ require("global"); properties = { permissions = 0, parameters = "sss", - description = "adds to self or .", + description = +[[ +Adds to player or . +!giveitem | +!giveitem | +]], } function onTrigger(player, argc, keyitem, name, lastName) @@ -22,7 +27,7 @@ function onTrigger(player, argc, keyitem, name, lastName) qty = 1; location = INVENTORY_KEYITEMS; - local added = player:GetInventory(location):AddItem(keyitem, qty); + local added = player:GetInventory(location):AddItem(keyitem, qty, 1); local messageID = MESSAGE_TYPE_SYSTEM_ERROR; local message = "unable to add keyitem"; diff --git a/data/scripts/commands/gm/graphic.lua b/data/scripts/commands/gm/graphic.lua index c577f305..33e70754 100644 --- a/data/scripts/commands/gm/graphic.lua +++ b/data/scripts/commands/gm/graphic.lua @@ -1,18 +1,31 @@ +require("global"); + properties = { permissions = 0, parameters = "sssss", - description = "changes appearance for equipment in . Parameters: , (idk what any of those mean either)", + description = +[[ +Changes appearance for equipment with given parameters. +!graphic +]], } function onTrigger(player, argc, slot, wId, eId, vId, cId) + local messageID = MESSAGE_TYPE_SYSTEM_ERROR; + local sender = "[graphic] "; + slot = tonumber(slot) or 0; wId = tonumber(wId) or 0; eId = tonumber(eId) or 0; vId = tonumber(vId) or 0; cId = tonumber(cId) or 0; - if player then + if player and argc > 0 then player:GraphicChange(slot, wId, eId, vId, cId); player:SendAppearance(); + player:SendMessage(messageID, sender, string.format("Changing appearance on slot %u", slot)); + else + player:SendMessage(messageID, sender, "No parameters sent! Usage: "..properties.description); end; + end; \ No newline at end of file diff --git a/data/scripts/commands/gm/music.lua b/data/scripts/commands/gm/music.lua index a55f697c..b1c56e74 100644 --- a/data/scripts/commands/gm/music.lua +++ b/data/scripts/commands/gm/music.lua @@ -1,7 +1,11 @@ properties = { permissions = 0, parameters = "s", - description = "plays music to player", + description = +[[ +Plays music to player. +!music +]], } function onTrigger(player, argc, music) diff --git a/data/scripts/commands/gm/sendpacket.lua b/data/scripts/commands/gm/sendpacket.lua index d506c3b4..78102d68 100644 --- a/data/scripts/commands/gm/sendpacket.lua +++ b/data/scripts/commands/gm/sendpacket.lua @@ -1,7 +1,12 @@ properties = { permissions = 0, parameters = "ssss", - description = " ", + description = +[[ +Sends a custom to player or +!sendpacket | +!sendpacket | +]], } function onTrigger(player, argc, path, name, lastName) diff --git a/data/scripts/commands/gm/speed.lua b/data/scripts/commands/gm/speed.lua index 8aa30f5d..1008eb2b 100644 --- a/data/scripts/commands/gm/speed.lua +++ b/data/scripts/commands/gm/speed.lua @@ -1,18 +1,36 @@ +require("global"); + properties = { permissions = 0, parameters = "sss", - description = " speed", + description = +[[ +Set movement speed for player. Enter no value to reset to default. +!speed | +!speed | +]] + } function onTrigger(player, argc, stop, walk, run) - stop = tonumber(stop) or 0; - walk = tonumber(walk) or 2; - run = tonumber(run) or 5; - if argc == 3 then - player:ChangeSpeed(stop, walk, run, run); - elseif argc == 1 then - player:ChangeSpeed(0, stop/2, stop, stop); - else - player:ChangeSpeed(0,2,5,5); + + if argc == 1 then + s = 0; + w = (tonumber(stop) / 2); + r = tonumber(stop); + player:ChangeSpeed(s, w, r); + player:SendMessage(MESSAGE_TYPE_SYSTEM_ERROR, "[speed]", string.format("Speed set to 0/%u/%u", w,r)); + elseif argc == 3 then + stop = tonumber(stop) or 0; + walk = tonumber(walk) or 2; + run = tonumber(run) or 5; + if argc == 3 then + player:ChangeSpeed(stop, walk, run, run); + elseif argc == 1 then + player:ChangeSpeed(0, stop/2, stop, stop); + else + player:ChangeSpeed(0,2,5,5); + end end + end \ No newline at end of file diff --git a/data/scripts/commands/gm/warp.lua b/data/scripts/commands/gm/warp.lua index 6d758bb9..381cb0ab 100644 --- a/data/scripts/commands/gm/warp.lua +++ b/data/scripts/commands/gm/warp.lua @@ -5,9 +5,10 @@ properties = { parameters = "sssssss", description = [[ - | - | - . +Warp player or to a location from a list, or enter a zoneID with coordinates. +!warp | +!warp | +!warp | ]], } @@ -47,6 +48,7 @@ function onTrigger(player, argc, p1, p2, p3, p4, privateArea, name, lastName) local z = tonumber(applyPositionOffset(p3, player_z)) or player_z; player:SendMessage(messageID, sender, string.format("setting coordinates X:%d Y:%d Z:%d within current zone (%d)", x, y, z, player_zone)); + worldManager:DoPlayerMoveInZone(player, x, y, z, player_rot, 0x00); else local zone = tonumber(applyPositionOffset(p1, player_zone)) or player_zone; @@ -65,9 +67,10 @@ end; function applyPositionOffset(str, offset) local s = str; - print(s); if s:find("@") then - s = tonumber(s:sub(s:find("@") + 1, s:len())) + offset; + s = tonumber(s:sub(s:find("@") + 1, s:len())); + if s then s = s + offset end; end + print(s); return s; end; \ No newline at end of file diff --git a/data/scripts/commands/gm/weather.lua b/data/scripts/commands/gm/weather.lua index 00d011f2..c8e21d9c 100644 --- a/data/scripts/commands/gm/weather.lua +++ b/data/scripts/commands/gm/weather.lua @@ -3,7 +3,12 @@ require("global"); properties = { permissions = 0, parameters = "ssss", - description = "usage: .", + description = +[[ +Change the weather visual to and optional for player. +!weather | +!weather | +]], } function onTrigger(player, argc, weather, updateTime, zonewide) @@ -16,12 +21,14 @@ function onTrigger(player, argc, weather, updateTime, zonewide) weather = tonumber(weather) or 0; updateTime = tonumber(updateTime) or 0; zonewide = tonumber(zonewide) or 0; - message = "changed weather to %u "; + message = string.format("changed weather to %u ", weather); + if zonewide ~= 0 then message = string.format(message.."for zone %u", player:GetZoneID()); else message = message..player:GetName(); end; + -- weatherid, updateTime player:GetZone():ChangeWeather(weather, updateTime, player, zonewide ~= 0); player:SendMessage(messageID, sender, message); diff --git a/data/scripts/global.lua b/data/scripts/global.lua index 2fe572bb..48f2cfe6 100644 --- a/data/scripts/global.lua +++ b/data/scripts/global.lua @@ -51,34 +51,30 @@ INVENTORY_KEYITEMS = 0x0064; --Max 0x500 INVENTORY_EQUIPMENT = 0x00FE; --Max 0x23 INVENTORY_EQUIPMENT_OTHERPLAYER = 0x00F9; --Max 0x23 --- NPC LS -NPCLS_GONE = 0; -NPCLS_INACTIVE = 1; -NPCLS_ACTIVE = 2; -NPCLS_ALERT = 3; +-- CHOCOBO APPEARANCE +CHOCOBO_NORMAL = 0; + +CHOCOBO_LIMSA1 = 0x1; +CHOCOBO_LIMSA2 = 0x2; +CHOCOBO_LIMSA3 = 0x3; +CHOCOBO_LIMSA4 = 0x4; + +CHOCOBO_GRIDANIA1 = 0x1F; +CHOCOBO_GRIDANIA2 = 0x20; +CHOCOBO_GRIDANIA3 = 0x21; +CHOCOBO_GRIDANIA4 = 0x22; + +CHOCOBO_ULDAH1 = 0x3D; +CHOCOBO_ULDAH2 = 0x3E; +CHOCOBO_ULDAH3 = 0x3F; +CHOCOBO_ULDAH4 = 0x40; --UTILS -function kickEventContinue(player, actor, trigger, ...) - player:kickEvent(actor, trigger, ...); - return coroutine.yield("_WAIT_EVENT", player); -end - function callClientFunction(player, functionName, ...) - player:RunEventFunction(functionName, ...); - return coroutine.yield("_WAIT_EVENT", player); -end - -function wait(seconds) - return coroutine.yield("_WAIT_TIME", seconds); -end - -function waitForSignal(signal) - return coroutine.yield("_WAIT_SIGNAL", signal); -end - -function sendSignal(signal) - GetLuaInstance():OnSignal(signal); + player:RunEventFunction(functionName, ...); + result = coroutine.yield(); + return result; end function printf(s, ...) diff --git a/data/scripts/unique/fst0Town01/PopulaceStandard/l'tandhaa.lua b/data/scripts/unique/fst0Town01/PopulaceStandard/l'tandhaa.lua index 37731274..d74d7a84 100644 --- a/data/scripts/unique/fst0Town01/PopulaceStandard/l'tandhaa.lua +++ b/data/scripts/unique/fst0Town01/PopulaceStandard/l'tandhaa.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithL'tandhaa_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithLtandhaa_001", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01/PopulaceStandard/nonco_menanco.lua b/data/scripts/unique/fst0Town01/PopulaceStandard/nonco_menanco.lua index 36c701a3..fddd2363 100644 --- a/data/scripts/unique/fst0Town01/PopulaceStandard/nonco_menanco.lua +++ b/data/scripts/unique/fst0Town01/PopulaceStandard/nonco_menanco.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithNonco_menanco_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithNoncomananco_001", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01/PopulaceStandard/serpent_private_hill.lua b/data/scripts/unique/fst0Town01/PopulaceStandard/serpent_private_hill.lua deleted file mode 100644 index 02e67d32..00000000 --- a/data/scripts/unique/fst0Town01/PopulaceStandard/serpent_private_hill.lua +++ /dev/null @@ -1,7 +0,0 @@ -require ("global") - -function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_hill_001", nil, nil, nil); - player:endEvent(); -end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01/PopulaceStandard/task_board.lua b/data/scripts/unique/fst0Town01/PopulaceStandard/task_board.lua deleted file mode 100644 index b7448428..00000000 --- a/data/scripts/unique/fst0Town01/PopulaceStandard/task_board.lua +++ /dev/null @@ -1,7 +0,0 @@ -require ("global") - -function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithTask_board_001", nil, nil, nil); - player:endEvent(); -end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/aubrenard.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/aubrenard.lua index 233f9974..8fcfb4e0 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/aubrenard.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/aubrenard.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithAubrenard (check cnstctr)_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithAUBRENARD_100", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/drystbrod.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/drystbrod.lua index 98d98a5f..1ea2fcd3 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/drystbrod.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/drystbrod.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithDrystbrod_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithDyrstbrod_001", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/eldid.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/eldid.lua index 189c2435..4ea6d7ee 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/eldid.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/eldid.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithEldid_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultFst, "downTownTalk", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/enie.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/enie.lua index d6c55f1d..82de1962 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/enie.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/enie.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithEnie_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkEnie_001", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/gagaroon.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/gagaroon.lua deleted file mode 100644 index 19143bdf..00000000 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/gagaroon.lua +++ /dev/null @@ -1,7 +0,0 @@ -require ("global") - -function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithGagaroon_001", nil, nil, nil); - player:endEvent(); -end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/khuma_moshroca.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/khuma_moshroca.lua index a2cdb9bc..06ffc4b7 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/khuma_moshroca.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/khuma_moshroca.lua @@ -45,9 +45,9 @@ function onEventStarted(player, npc) else callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithKhumamoshroca_001", nil, nil, nil); end - - + player:endEvent(); + end diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/louisoix.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/louisoix.lua deleted file mode 100644 index b0b08cd5..00000000 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/louisoix.lua +++ /dev/null @@ -1,7 +0,0 @@ -require ("global") - -function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithLouisoix_001", nil, nil, nil); - player:endEvent(); -end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/maisenta.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/maisenta.lua index 52d5b1e6..32477946 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/maisenta.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/maisenta.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithMaisenta_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithGuildleveClientG_001", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/prosperlain.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/prosperlain.lua index 365bf54c..e3be638d 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/prosperlain.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/prosperlain.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithProsperlain_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultFst, "tribeTalk", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/pukiki.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/pukiki.lua index 45ccf0ba..eeda46d7 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/pukiki.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/pukiki.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithPukiki_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithGuildleveClientG_002", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_lieutenant_marette.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_lieutenant_marette.lua index 86aeb54e..15668acc 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_lieutenant_marette.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_lieutenant_marette.lua @@ -1,7 +1,7 @@ require ("global") function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_lieutenant_marette_001", nil, nil, nil); + defaultFst = GetStaticActor("Spl000"); + callClientFunction(player, "delegateEvent", player, defaultFst, "processEventELNAURE", 1,1,1); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_carver.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_carver.lua deleted file mode 100644 index 0a24f7e7..00000000 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_carver.lua +++ /dev/null @@ -1,7 +0,0 @@ -require ("global") - -function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_carver_001", nil, nil, nil); - player:endEvent(); -end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_holmes.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_holmes.lua deleted file mode 100644 index fc7c975d..00000000 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_holmes.lua +++ /dev/null @@ -1,7 +0,0 @@ -require ("global") - -function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_holmes_001", nil, nil, nil); - player:endEvent(); -end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_kirk.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_kirk.lua deleted file mode 100644 index c7b840aa..00000000 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_kirk.lua +++ /dev/null @@ -1,7 +0,0 @@ -require ("global") - -function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_kirk_001", nil, nil, nil); - player:endEvent(); -end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_stone.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_stone.lua deleted file mode 100644 index d6d2ff82..00000000 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_stone.lua +++ /dev/null @@ -1,7 +0,0 @@ -require ("global") - -function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_stone_001", nil, nil, nil); - player:endEvent(); -end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_tristelle.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_tristelle.lua index 335222d0..6413be1a 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_tristelle.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_tristelle.lua @@ -1,7 +1,7 @@ require ("global") function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_tristelle_001", nil, nil, nil); + defaultFst = GetStaticActor("Spl000"); + callClientFunction(player, "delegateEvent", player, defaultFst, "processEventMERLIE", 1,1,1); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_white.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_white.lua deleted file mode 100644 index d66e5dad..00000000 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_white.lua +++ /dev/null @@ -1,7 +0,0 @@ -require ("global") - -function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_white_001", nil, nil, nil); - player:endEvent(); -end \ No newline at end of file diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_sergeant_frilaix.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_sergeant_frilaix.lua index 274ceccd..60f377c2 100644 --- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_sergeant_frilaix.lua +++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_sergeant_frilaix.lua @@ -1,7 +1,7 @@ require ("global") function onEventStarted(player, npc) - defaultFst = GetStaticActor("DftFst"); - callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_sergeant_frilaix_001", nil, nil, nil); + defaultFst = GetStaticActor("Spl000"); + callClientFunction(player, "delegateEvent", player, defaultFst, "processEventARISMONT", 1, 1, 1); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/muscle-bound_deckhand.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/muscle-bound_deckhand.lua index 9dbe9e62..b20100b1 100644 --- a/data/scripts/unique/sea0Town01a/PopulaceStandard/muscle-bound_deckhand.lua +++ b/data/scripts/unique/sea0Town01a/PopulaceStandard/muscle-bound_deckhand.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultSea = GetStaticActor("DftSea"); - callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithMuscle-bounddeckhand_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithSailor031_001", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/pasty-faced_adventurer.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/pasty-faced_adventurer.lua index d8794009..81e126b6 100644 --- a/data/scripts/unique/sea0Town01a/PopulaceStandard/pasty-faced_adventurer.lua +++ b/data/scripts/unique/sea0Town01a/PopulaceStandard/pasty-faced_adventurer.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultSea = GetStaticActor("DftSea"); - callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithPasty-facedadventurer_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithAdventurer030_001", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/pearly-toothed_porter.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/pearly-toothed_porter.lua index 5fb9fc21..b0c34235 100644 --- a/data/scripts/unique/sea0Town01a/PopulaceStandard/pearly-toothed_porter.lua +++ b/data/scripts/unique/sea0Town01a/PopulaceStandard/pearly-toothed_porter.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultSea = GetStaticActor("DftSea"); - callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithPearly-toothedporter_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithPorter001_001", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/ptahjha.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/ptahjha.lua index d1b19d1d..1cc825fc 100644 --- a/data/scripts/unique/sea0Town01a/PopulaceStandard/ptahjha.lua +++ b/data/scripts/unique/sea0Town01a/PopulaceStandard/ptahjha.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultSea = GetStaticActor("DftSea"); - callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithSkarnwaen_001", nil, nil, nil); + callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithP_tahjha_001", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/rubh_hob.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/rubh_hob.lua deleted file mode 100644 index 2b97c724..00000000 --- a/data/scripts/unique/sea0Town01a/PopulaceStandard/rubh_hob.lua +++ /dev/null @@ -1,7 +0,0 @@ -require ("global") - -function onEventStarted(player, npc) - defaultSea = GetStaticActor("DftSea"); - callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithRubh_hob_001", nil, nil, nil); - player:endEvent(); -end \ No newline at end of file diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/thosinbaen.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/thosinbaen.lua index fcc4f585..6b0116c8 100644 --- a/data/scripts/unique/sea0Town01a/PopulaceStandard/thosinbaen.lua +++ b/data/scripts/unique/sea0Town01a/PopulaceStandard/thosinbaen.lua @@ -2,6 +2,6 @@ require ("global") function onEventStarted(player, npc) defaultSea = GetStaticActor("DftSea"); - callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithSkarnwaen_001"); + callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithThosinbaen_001", nil, nil, nil); player:endEvent(); end \ No newline at end of file diff --git a/sql/import.sh b/sql/import.sh index a26f768b..93ea5e8c 100644 --- a/sql/import.sh +++ b/sql/import.sh @@ -1,25 +1,25 @@ -#!/bin/bash -IMPORT_PATH="C://coding//repositories//ffxiv related//ffxivclassic//ffxiv-classic-server//sql//" -USER=root -PASS=root -DBNAME=ffxiv_server - -ECHO Creating Database $DBNAME -mysqladmin -h localhost -u $USER -p$PASS DROP $DBNAME - -ECHO Creating Database $DBNAME -mysqladmin -h localhost -u $USER -p$PASS CREATE $DBNAME IF NOT EXISTS $DBNAME - -ECHO Loading $DBNAME tables into the database -sh cd $IMPORT_PATH - -for X in '*.sql'; -do - for Y in $X - do - echo Importing $Y; - "C:\program files\mysql\mysql server 5.7\bin\mysql" $DBNAME -h localhost -u $USER -p$PASS < $Y - done -done - -ECHO Finished! \ No newline at end of file +#!/bin/bash +IMPORT_PATH="path/to/ffxiv-classic-server/sql/" +USER=root +PASS=root +DBNAME=ffxiv_server + +echo Creating Database $DBNAME +mysql -h localhost -u $USER -p$PASS DROP $DBNAME + +echo Creating Database $DBNAME +mysql -h localhost -u $USER -p$PASS CREATE $DBNAME IF NOT EXISTS $DBNAME + +echo Loading $DBNAME tables into the database + +for X in $IMPORT_PATH'*.sql'; +do + for Y in $X + do + echo Importing $Y; + mysql $DBNAME -h localhost -u $USER -p$PASS < $Y + done +done + +echo Finished! + diff --git a/sql/supportdesk_faqs.sql b/sql/supportdesk_faqs.sql new file mode 100644 index 00000000..ed04b9e6 --- /dev/null +++ b/sql/supportdesk_faqs.sql @@ -0,0 +1,25 @@ +/* +MySQL Data Transfer +Source Host: localhost +Source Database: ffxiv_server +Target Host: localhost +Target Database: ffxiv_server +Date: 8/20/2016 7:15:35 PM +*/ + +SET FOREIGN_KEY_CHECKS=0; +-- ---------------------------- +-- Table structure for supportdesk_faqs +-- ---------------------------- +CREATE TABLE `supportdesk_faqs` ( + `slot` tinyint(4) NOT NULL, + `languageCode` tinyint(4) NOT NULL, + `title` varchar(128) NOT NULL, + `body` text NOT NULL, + PRIMARY KEY (`slot`,`languageCode`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- ---------------------------- +-- Records +-- ---------------------------- +INSERT INTO `supportdesk_faqs` VALUES ('0', '1', 'Welcome to FFXIV Classic', 'Welcome to the FFXIV 1.0 server emulator FFXIVClassic!\r\n\r\nThis is still currently a work in progress, and you may find bugs or issues as you play with this server. Keep in mind that this is not even remotely close to being finished, and that it is a work in progress.\r\n\r\nCheck out the blog at: \r\nhttp://ffxivclassic.fragmenterworks.com/ \r\nCheck out videos at: \r\nhttps://www.youtube.com/channel/UCr2703_er1Dj7Lx5pzpQpfg'); diff --git a/sql/supportdesk_issues.sql b/sql/supportdesk_issues.sql new file mode 100644 index 00000000..d8575dd8 --- /dev/null +++ b/sql/supportdesk_issues.sql @@ -0,0 +1,26 @@ +/* +MySQL Data Transfer +Source Host: localhost +Source Database: ffxiv_server +Target Host: localhost +Target Database: ffxiv_server +Date: 8/20/2016 7:15:41 PM +*/ + +SET FOREIGN_KEY_CHECKS=0; +-- ---------------------------- +-- Table structure for supportdesk_issues +-- ---------------------------- +CREATE TABLE `supportdesk_issues` ( + `slot` smallint(4) unsigned NOT NULL, + `title` varchar(50) NOT NULL, + PRIMARY KEY (`slot`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1; + +-- ---------------------------- +-- Records +-- ---------------------------- +INSERT INTO `supportdesk_issues` VALUES ('0', 'Report Harassment'); +INSERT INTO `supportdesk_issues` VALUES ('1', 'Report Cheating'); +INSERT INTO `supportdesk_issues` VALUES ('2', 'Report a Bug or Glitch'); +INSERT INTO `supportdesk_issues` VALUES ('3', 'Leave Suggestion'); diff --git a/sql/supportdesk_tickets.sql b/sql/supportdesk_tickets.sql new file mode 100644 index 00000000..93a2d7c9 --- /dev/null +++ b/sql/supportdesk_tickets.sql @@ -0,0 +1,26 @@ +/* +MySQL Data Transfer +Source Host: localhost +Source Database: ffxiv_server +Target Host: localhost +Target Database: ffxiv_server +Date: 8/21/2016 6:17:47 PM +*/ + +SET FOREIGN_KEY_CHECKS=0; +-- ---------------------------- +-- Table structure for supportdesk_tickets +-- ---------------------------- +CREATE TABLE `supportdesk_tickets` ( + `id` int(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(32) NOT NULL, + `title` varchar(128) NOT NULL, + `body` text NOT NULL, + `langCode` smallint(4) unsigned NOT NULL, + `isOpen` tinyint(1) unsigned NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; + +-- ---------------------------- +-- Records +-- ----------------------------