From fb18c1fbe47a7d05063dbb3d64f4872361da9d89 Mon Sep 17 00:00:00 2001 From: Jordan Maxwell Date: Fri, 19 Aug 2016 14:40:43 -0500 Subject: [PATCH] Added DB Support for Chocobo Lenders --- FFXIVClassic Map Server/Database.cs | 38 ++++++++++++++ .../actors/chara/player/Player.cs | 17 +++++++ .../npc/populace/PopulaceChocoboLender.lua | 51 ++++++++++++++++--- 3 files changed, 100 insertions(+), 6 deletions(-) diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs index 6c210395..1860ba61 100644 --- a/FFXIVClassic Map Server/Database.cs +++ b/FFXIVClassic Map Server/Database.cs @@ -1406,5 +1406,43 @@ namespace FFXIVClassic_Map_Server } 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(); + } + } + } } } diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs index 6a0f5a22..98cc0cc0 100644 --- a/FFXIVClassic Map Server/actors/chara/player/Player.cs +++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs @@ -704,6 +704,11 @@ namespace FFXIVClassic_Map_Server.Actors QueuePacket(SetMusicPacket.BuildPacket(actorId, musicId, 1)); } + public void ChangeMusicWithEffect(ushort musicId, ushort effect) + { + QueuePacket(SetMusicPacket.BuildPacket(actorId, musicId, effect)); + } + public void SendChocoboAppearance() { BroadcastPacket(SetCurrentMountChocoboPacket.BuildPacket(actorId, chocoboAppearance), true); @@ -1263,5 +1268,17 @@ namespace FFXIVClassic_Map_Server.Actors } + public void issueChocobo(byte appearanceId, string name) + { + Database.IssuePlayerChocobo(this, appearanceId, name); + hasChocobo = true; + chocoboAppearance = appearanceId; + chocoboName = name; + } + + public void changeChocoboAppearance(int appearanceId) + { + + } } } diff --git a/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua b/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua index 0440d6da..62ba4f81 100644 --- a/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua +++ b/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua @@ -21,11 +21,50 @@ end function onEventStarted(player, npc, triggerName) - --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; + local hasIssuance = true; + local hasChocobo = player.hasChocobo; + + if (player.isGM and hasChocobo == false) then + hasIssuance = true; + end + + local rentPrice = 800; + local playerFunds = 0; --TODO: pull character's money + local hasFunds = (playerFunds >= rentPrice); + + callClientFunction(player, "eventTalkWelcome", player); + menuChoice = callClientFunction(player, "eventAskMainMenu", player, curLevel, hasFunds, hasIssuance, hasChocobo, hasChocobo, 4); + + if (menuChoice == 1) then -- Issuance option + callClientFunction(player, "eventTalkMyChocobo", player); + nameResponse = callClientFunction(player, "eventSetChocoboName", false); + + if (nameResponse == "") then -- Cancel Chocobo naming + callClientFunction(player, "eventCancelChocoboName", player); + end + + appearance = 1; -- TODO: pull correct appearance based on GC + --player:issueChocobo(appearance, nameResponse); + if (nameResponse ~= "") then -- Successfully named Chocobo + callClientFunction(player, "eventAfterChocoboName", player); + end + elseif(menuChoice == 2 and hasChocobo) then -- Summon Bird + player:ChangeMusic(83); + player:SendChocoboAppearance(); + player:SendGameMessage(player, worldMaster, 26001, 0x20); + player:SetMountState(1); + elseif(menuChoice == 3) then -- Change Barding + callClientFunction(player, "eventTalkStepBreak", player); + elseif(menuChoice == 5) then -- Rent Bird + if (hasFunds == false) then -- Not enough money + -- Do not enough money action?? + else + --Issue rental chocobo + end + else + callClientFunction(player, "eventTalkStepBreak", player); + end + player:EndEvent(); end \ No newline at end of file