mirror of
				https://bitbucket.org/Ioncannon/project-meteor-server.git
				synced 2025-05-20 08:26:59 -04:00 
			
		
		
		
	GM tickets can now be in an open/closed state. Added some helper functions for currancy, and added functions to allow changing chocobo appearance.
This commit is contained in:
		| @@ -829,7 +829,7 @@ namespace FFXIVClassic_Map_Server | |||||||
|                         { |                         { | ||||||
|                             ushort equipSlot = reader.GetUInt16(0); |                             ushort equipSlot = reader.GetUInt16(0); | ||||||
|                             ulong uniqueItemId = reader.GetUInt16(1); |                             ulong uniqueItemId = reader.GetUInt16(1); | ||||||
|                             InventoryItem item = player.GetInventory(Inventory.NORMAL).GetItemById(uniqueItemId); |                             InventoryItem item = player.GetInventory(Inventory.NORMAL).GetItemByUniqueId(uniqueItemId); | ||||||
|                             equipment[equipSlot] = item; |                             equipment[equipSlot] = item; | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
| @@ -1247,10 +1247,11 @@ namespace FFXIVClassic_Map_Server | |||||||
|             return cheevosPacket.BuildPacket(player.actorId); |             return cheevosPacket.BuildPacket(player.actorId); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public static void SaveSupportTicket(GMSupportTicketPacket gmTicket) |         public static bool SaveSupportTicket(GMSupportTicketPacket gmTicket, string playerName) | ||||||
|         { |         { | ||||||
|             string query; |             string query; | ||||||
|             MySqlCommand cmd; |             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))) |             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))) | ||||||
|             { |             { | ||||||
| @@ -1260,11 +1261,12 @@ namespace FFXIVClassic_Map_Server | |||||||
|  |  | ||||||
|                     query = @" |                     query = @" | ||||||
|                     INSERT INTO supportdesk_tickets |                     INSERT INTO supportdesk_tickets | ||||||
|                     (title, body, langCode) |                     (name, title, body, langCode) | ||||||
|                     VALUES |                     VALUES | ||||||
|                     (@title, @body, @langCode)"; |                     (@name, @title, @body, @langCode)"; | ||||||
|  |  | ||||||
|                     cmd = new MySqlCommand(query, conn); |                     cmd = new MySqlCommand(query, conn); | ||||||
|  |                     cmd.Parameters.AddWithValue("@name", playerName); | ||||||
|                     cmd.Parameters.AddWithValue("@title", gmTicket.ticketTitle); |                     cmd.Parameters.AddWithValue("@title", gmTicket.ticketTitle); | ||||||
|                     cmd.Parameters.AddWithValue("@body", gmTicket.ticketBody); |                     cmd.Parameters.AddWithValue("@body", gmTicket.ticketBody); | ||||||
|                     cmd.Parameters.AddWithValue("@langCode", gmTicket.langCode); |                     cmd.Parameters.AddWithValue("@langCode", gmTicket.langCode); | ||||||
| @@ -1272,6 +1274,81 @@ namespace FFXIVClassic_Map_Server | |||||||
|                     cmd.ExecuteNonQuery(); |                     cmd.ExecuteNonQuery(); | ||||||
|                 } |                 } | ||||||
|                 catch (MySqlException e) |                 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()); |                     Program.Log.Error(e.ToString()); | ||||||
|                 } |                 } | ||||||
| @@ -1442,5 +1519,41 @@ namespace FFXIVClassic_Map_Server | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         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(); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |          | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -388,7 +388,7 @@ namespace FFXIVClassic_Map_Server | |||||||
|                             break; |                             break; | ||||||
|                         //Request if GM ticket exists |                         //Request if GM ticket exists | ||||||
|                         case 0x01D3: |                         case 0x01D3: | ||||||
|                             client.QueuePacket(BasePacket.CreatePacket(StartGMTicketPacket.BuildPacket(player.actorID, false), true, false)); |                             client.QueuePacket(BasePacket.CreatePacket(StartGMTicketPacket.BuildPacket(player.actorID, Database.isTicketOpen(player.GetActor().customDisplayName)), true, false)); | ||||||
|                             break; |                             break; | ||||||
|                         //Request for GM response message |                         //Request for GM response message | ||||||
|                         case 0x01D4: |                         case 0x01D4: | ||||||
| @@ -398,11 +398,16 @@ namespace FFXIVClassic_Map_Server | |||||||
|                         case 0x01D5: |                         case 0x01D5: | ||||||
|                             GMSupportTicketPacket gmTicket = new GMSupportTicketPacket(subpacket.data); |                             GMSupportTicketPacket gmTicket = new GMSupportTicketPacket(subpacket.data); | ||||||
|                             Program.Log.Info("Got GM Ticket: \n" + gmTicket.ticketTitle + "\n" + gmTicket.ticketBody); |                             Program.Log.Info("Got GM Ticket: \n" + gmTicket.ticketTitle + "\n" + gmTicket.ticketBody); | ||||||
|                             Database.SaveSupportTicket(gmTicket); |                             bool wasError = Database.SaveSupportTicket(gmTicket, player.GetActor().customDisplayName); | ||||||
|                             client.QueuePacket(BasePacket.CreatePacket(GMTicketSentResponsePacket.BuildPacket(player.actorID, true), true, false)); |                             client.QueuePacket(BasePacket.CreatePacket(GMTicketSentResponsePacket.BuildPacket(player.actorID, !wasError), true, false)); | ||||||
|  |  | ||||||
|  |                             if (!wasError) | ||||||
|  |                                 client.QueuePacket(BasePacket.CreatePacket(StartGMTicketPacket.BuildPacket(player.actorID, true), true, false)); | ||||||
|  |  | ||||||
|                             break; |                             break; | ||||||
|                         //Request to end ticket |                         //Request to end ticket | ||||||
|                         case 0x01D6: |                         case 0x01D6: | ||||||
|  |                             Database.closeTicket(player.GetActor().customDisplayName); | ||||||
|                             client.QueuePacket(BasePacket.CreatePacket(EndGMTicketPacket.BuildPacket(player.actorID), true, false)); |                             client.QueuePacket(BasePacket.CreatePacket(EndGMTicketPacket.BuildPacket(player.actorID), true, false)); | ||||||
|                             break; |                             break; | ||||||
|                         default: |                         default: | ||||||
|   | |||||||
| @@ -46,14 +46,24 @@ namespace FFXIVClassic_Map_Server.actors.chara.player | |||||||
|                 return null; |                 return null; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public InventoryItem GetItemById(ulong itemId) |         public InventoryItem GetItemByUniqueId(ulong uniqueItemId) | ||||||
|         { |         { | ||||||
|             foreach (InventoryItem item in list) |             foreach (InventoryItem item in list) | ||||||
|             { |             { | ||||||
|                 if (item.uniqueId == itemId) |                 if (item.uniqueId == uniqueItemId) | ||||||
|                     return item; |                     return item; | ||||||
|             } |             } | ||||||
|             return null; |             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) |         public void RefreshItem(InventoryItem item) | ||||||
|   | |||||||
| @@ -959,6 +959,14 @@ namespace FFXIVClassic_Map_Server.Actors | |||||||
|                 return null; |                 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) |         public Actor GetActorInInstance(uint actorId) | ||||||
|         { |         { | ||||||
|             foreach (Actor a in playerSession.actorInstanceList) |             foreach (Actor a in playerSession.actorInstanceList) | ||||||
| @@ -1270,5 +1278,11 @@ namespace FFXIVClassic_Map_Server.Actors | |||||||
|             chocoboAppearance = appearanceId; |             chocoboAppearance = appearanceId; | ||||||
|             chocoboName = nameResponse; |             chocoboName = nameResponse; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         public void ChangeChocoboAppearance(byte appearanceId) | ||||||
|  |         { | ||||||
|  |             Database.ChangePlayerChocoboAppearance(this, appearanceId); | ||||||
|  |             chocoboAppearance = appearanceId; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user