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); | ||||
|                             ulong uniqueItemId = reader.GetUInt16(1); | ||||
|                             InventoryItem item = player.GetInventory(Inventory.NORMAL).GetItemById(uniqueItemId); | ||||
|                             InventoryItem item = player.GetInventory(Inventory.NORMAL).GetItemByUniqueId(uniqueItemId); | ||||
|                             equipment[equipSlot] = item; | ||||
|                         } | ||||
|                     } | ||||
| @@ -1247,10 +1247,11 @@ namespace FFXIVClassic_Map_Server | ||||
|             return cheevosPacket.BuildPacket(player.actorId); | ||||
|         } | ||||
|  | ||||
|         public static void SaveSupportTicket(GMSupportTicketPacket gmTicket) | ||||
|         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))) | ||||
|             { | ||||
| @@ -1260,11 +1261,12 @@ namespace FFXIVClassic_Map_Server | ||||
|  | ||||
|                     query = @" | ||||
|                     INSERT INTO supportdesk_tickets | ||||
|                     (title, body, langCode) | ||||
|                     (name, title, body, langCode) | ||||
|                     VALUES | ||||
|                     (@title, @body, @langCode)"; | ||||
|                     (@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); | ||||
| @@ -1272,6 +1274,81 @@ namespace FFXIVClassic_Map_Server | ||||
|                     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()); | ||||
|                 } | ||||
| @@ -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; | ||||
|                         //Request if GM ticket exists | ||||
|                         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; | ||||
|                         //Request for GM response message | ||||
|                         case 0x01D4: | ||||
| @@ -398,11 +398,16 @@ namespace FFXIVClassic_Map_Server | ||||
|                         case 0x01D5: | ||||
|                             GMSupportTicketPacket gmTicket = new GMSupportTicketPacket(subpacket.data); | ||||
|                             Program.Log.Info("Got GM Ticket: \n" + gmTicket.ticketTitle + "\n" + gmTicket.ticketBody); | ||||
|                             Database.SaveSupportTicket(gmTicket); | ||||
|                             client.QueuePacket(BasePacket.CreatePacket(GMTicketSentResponsePacket.BuildPacket(player.actorID, true), true, false)); | ||||
|                             bool wasError = Database.SaveSupportTicket(gmTicket, player.GetActor().customDisplayName); | ||||
|                             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; | ||||
|                         //Request to end ticket | ||||
|                         case 0x01D6: | ||||
|                             Database.closeTicket(player.GetActor().customDisplayName); | ||||
|                             client.QueuePacket(BasePacket.CreatePacket(EndGMTicketPacket.BuildPacket(player.actorID), true, false)); | ||||
|                             break; | ||||
|                         default: | ||||
|   | ||||
| @@ -46,11 +46,21 @@ 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; | ||||
|   | ||||
| @@ -959,6 +959,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) | ||||
| @@ -1270,5 +1278,11 @@ namespace FFXIVClassic_Map_Server.Actors | ||||
|             chocoboAppearance = appearanceId; | ||||
|             chocoboName = nameResponse; | ||||
|         } | ||||
|  | ||||
|         public void ChangeChocoboAppearance(byte appearanceId) | ||||
|         { | ||||
|             Database.ChangePlayerChocoboAppearance(this, appearanceId); | ||||
|             chocoboAppearance = appearanceId; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user