2016-01-10 03:05:22 -05:00
using MySql.Data.MySqlClient ;
2015-09-25 18:52:25 -04:00
using Dapper ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
2016-06-12 20:12:59 +01:00
using FFXIVClassic.Common ;
2016-01-10 00:00:50 -05:00
using FFXIVClassic_Map_Server.utils ;
2016-08-22 10:43:04 -04:00
2016-01-10 01:19:46 -05:00
using FFXIVClassic_Map_Server.packets.send.player ;
2016-02-11 22:14:40 -05:00
using FFXIVClassic_Map_Server.dataobjects ;
2016-06-08 22:29:04 +01:00
using FFXIVClassic_Map_Server.Actors ;
2016-02-13 14:12:05 -05:00
using FFXIVClassic_Map_Server.actors.chara.player ;
2016-08-18 22:58:09 -05:00
using FFXIVClassic_Map_Server.packets.receive.supportdesk ;
2017-07-15 19:33:47 +01:00
using FFXIVClassic_Map_Server.actors.chara.ai ;
2015-09-25 18:52:25 -04:00
2016-06-08 22:29:04 +01:00
namespace FFXIVClassic_Map_Server
2015-09-25 18:52:25 -04:00
{
class Database
{
2016-01-17 01:51:02 -05:00
2016-06-14 21:29:10 +01:00
public static uint GetUserIdFromSession ( String sessionId )
2015-09-25 18:52:25 -04:00
{
uint id = 0 ;
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 ( ) ;
MySqlCommand cmd = new MySqlCommand ( "SELECT * FROM sessions WHERE id = @sessionId AND expiration > NOW()" , conn ) ;
cmd . Parameters . AddWithValue ( "@sessionId" , sessionId ) ;
using ( MySqlDataReader Reader = cmd . ExecuteReader ( ) )
{
2016-08-18 23:36:04 -05:00
while ( Reader . Read ( ) )
{
id = Reader . GetUInt32 ( "userId" ) ;
}
2015-09-25 18:52:25 -04:00
}
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2015-09-25 18:52:25 -04:00
finally
{
conn . Dispose ( ) ;
2016-08-18 23:36:04 -05:00
}
2015-09-25 18:52:25 -04:00
}
return id ;
}
2016-06-14 21:29:10 +01:00
public static List < Npc > GetNpcList ( )
2015-09-25 18:52:25 -04:00
{
using ( var 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 ) ) )
{
2016-01-02 14:05:37 -05:00
List < Npc > npcList = null ;
2015-09-25 18:52:25 -04:00
try
{
conn . Open ( ) ;
2016-01-02 14:05:37 -05:00
npcList = conn . Query < Npc > ( "SELECT * FROM npc_list" ) . ToList ( ) ;
2015-09-25 18:52:25 -04:00
}
catch ( MySqlException e )
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2015-09-25 18:52:25 -04:00
}
finally
{
conn . Dispose ( ) ;
}
2016-01-02 14:05:37 -05:00
return npcList ;
2015-09-25 18:52:25 -04:00
}
}
2017-06-24 14:12:52 -04:00
public static Dictionary < uint , ItemData > GetItemGamedata ( )
2016-02-21 16:34:29 -05:00
{
using ( var 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 ) ) )
{
2017-06-24 14:12:52 -04:00
Dictionary < uint , ItemData > gamedataItems = new Dictionary < uint , ItemData > ( ) ;
2016-02-21 16:34:29 -05:00
try
{
conn . Open ( ) ;
string query = @ "
SELECT
2016-02-21 21:44:11 -05:00
*
FROM gamedata_items
2017-07-09 11:39:17 -04:00
LEFT JOIN gamedata_items_equipment ON gamedata_items . catalogID = gamedata_items_equipment . catalogID
LEFT JOIN gamedata_items_accessory ON gamedata_items . catalogID = gamedata_items_accessory . catalogID
LEFT JOIN gamedata_items_armor ON gamedata_items . catalogID = gamedata_items_armor . catalogID
LEFT JOIN gamedata_items_weapon ON gamedata_items . catalogID = gamedata_items_weapon . catalogID
LEFT JOIN gamedata_items_graphics ON gamedata_items . catalogID = gamedata_items_graphics . catalogID
LEFT JOIN gamedata_items_graphics_extra ON gamedata_items . catalogID = gamedata_items_graphics_extra . catalogID
2016-02-21 21:44:11 -05:00
";
2016-02-21 16:34:29 -05:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
uint id = reader . GetUInt32 ( "catalogID" ) ;
2017-06-24 14:12:52 -04:00
ItemData item = null ;
2016-02-21 16:34:29 -05:00
2017-06-24 14:12:52 -04:00
if ( ItemData . IsWeapon ( id ) )
2016-02-21 16:34:29 -05:00
item = new WeaponItem ( reader ) ;
2017-06-24 14:12:52 -04:00
else if ( ItemData . IsArmor ( id ) )
2016-02-21 16:34:29 -05:00
item = new ArmorItem ( reader ) ;
2017-06-24 14:12:52 -04:00
else if ( ItemData . IsAccessory ( id ) )
2016-02-21 16:34:29 -05:00
item = new AccessoryItem ( reader ) ;
else
2017-06-24 14:12:52 -04:00
item = new ItemData ( reader ) ;
2016-02-21 16:34:29 -05:00
gamedataItems . Add ( item . catalogID , item ) ;
}
}
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-02-21 16:34:29 -05:00
finally
{
conn . Dispose ( ) ;
}
2015-09-25 18:52:25 -04:00
2016-02-21 16:34:29 -05:00
return gamedataItems ;
}
}
2017-06-24 14:12:52 -04:00
public static Dictionary < uint , GuildleveData > GetGuildleveGamedata ( )
{
using ( var 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 ) ) )
{
Dictionary < uint , GuildleveData > gamedataGuildleves = new Dictionary < uint , GuildleveData > ( ) ;
try
{
conn . Open ( ) ;
string query = @ "
SELECT
*
FROM gamedata_guildleves
";
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
uint id = reader . GetUInt32 ( "id" ) ;
GuildleveData guildleve = new GuildleveData ( reader ) ;
gamedataGuildleves . Add ( guildleve . id , guildleve ) ;
}
}
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
return gamedataGuildleves ;
}
}
2016-06-14 21:29:10 +01:00
public static void SavePlayerAppearance ( Player player )
2016-03-06 17:55:42 -05:00
{
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_appearance SET
mainHand = @mainHand ,
offHand = @offHand ,
head = @head ,
body = @body ,
legs = @legs ,
hands = @hands ,
feet = @feet ,
waist = @waist ,
leftFinger = @leftFinger ,
rightFinger = @rightFinger ,
leftEar = @leftEar ,
rightEar = @rightEar
WHERE characterId = @charaId
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@mainHand" , player . appearanceIds [ Character . MAINHAND ] ) ;
cmd . Parameters . AddWithValue ( "@offHand" , player . appearanceIds [ Character . OFFHAND ] ) ;
cmd . Parameters . AddWithValue ( "@head" , player . appearanceIds [ Character . HEADGEAR ] ) ;
cmd . Parameters . AddWithValue ( "@body" , player . appearanceIds [ Character . BODYGEAR ] ) ;
cmd . Parameters . AddWithValue ( "@legs" , player . appearanceIds [ Character . LEGSGEAR ] ) ;
cmd . Parameters . AddWithValue ( "@hands" , player . appearanceIds [ Character . HANDSGEAR ] ) ;
cmd . Parameters . AddWithValue ( "@feet" , player . appearanceIds [ Character . FEETGEAR ] ) ;
cmd . Parameters . AddWithValue ( "@waist" , player . appearanceIds [ Character . WAISTGEAR ] ) ;
cmd . Parameters . AddWithValue ( "@leftFinger" , player . appearanceIds [ Character . L_RINGFINGER ] ) ;
cmd . Parameters . AddWithValue ( "@rightFinger" , player . appearanceIds [ Character . R_RINGFINGER ] ) ;
cmd . Parameters . AddWithValue ( "@leftEar" , player . appearanceIds [ Character . L_EAR ] ) ;
cmd . Parameters . AddWithValue ( "@rightEar" , player . appearanceIds [ Character . R_EAR ] ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-03-06 17:55:42 -05:00
finally
{
conn . Dispose ( ) ;
}
}
}
2016-06-14 21:29:10 +01:00
public static void SavePlayerCurrentClass ( Player player )
2016-03-19 10:22:20 -04:00
{
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_parametersave SET
mainSkill = @classId ,
mainSkillLevel = @classLevel
WHERE characterId = @charaId
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@classId" , player . charaWork . parameterSave . state_mainSkill [ 0 ] ) ;
cmd . Parameters . AddWithValue ( "@classLevel" , player . charaWork . parameterSave . state_mainSkillLevel ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-03-19 10:22:20 -04:00
finally
{
conn . Dispose ( ) ;
}
}
}
2016-06-14 21:29:10 +01:00
public static void SavePlayerPosition ( Player player )
2016-03-06 17:55:42 -05:00
{
2016-08-18 23:36:04 -05:00
string query ;
2016-03-06 17:55:42 -05:00
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 SET
positionX = @x ,
positionY = @y ,
positionZ = @z ,
rotation = @rot ,
2016-12-03 12:19:59 -05:00
destinationZoneId = @destZone ,
destinationSpawnType = @destSpawn ,
2017-03-07 00:09:37 -05:00
currentZoneId = @zoneId ,
currentPrivateArea = @privateArea ,
currentPrivateAreaType = @privateAreaType
2016-03-06 17:55:42 -05:00
WHERE id = @charaId
";
2016-08-18 23:36:04 -05:00
2016-03-06 17:55:42 -05:00
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@x" , player . positionX ) ;
cmd . Parameters . AddWithValue ( "@y" , player . positionY ) ;
cmd . Parameters . AddWithValue ( "@z" , player . positionZ ) ;
cmd . Parameters . AddWithValue ( "@rot" , player . rotation ) ;
cmd . Parameters . AddWithValue ( "@zoneId" , player . zoneId ) ;
2017-03-07 00:09:37 -05:00
cmd . Parameters . AddWithValue ( "@privateArea" , player . privateArea ) ;
cmd . Parameters . AddWithValue ( "@privateAreaType" , player . privateAreaType ) ;
2016-12-03 12:19:59 -05:00
cmd . Parameters . AddWithValue ( "@destZone" , player . destinationZone ) ;
cmd . Parameters . AddWithValue ( "@destSpawn" , player . destinationSpawnType ) ;
2016-03-06 17:55:42 -05:00
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-03-06 17:55:42 -05:00
finally
{
conn . Dispose ( ) ;
}
}
}
2016-06-14 21:29:10 +01:00
public static void SavePlayerPlayTime ( Player player )
2016-03-06 17:55:42 -05:00
{
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 SET
playTime = @playtime
WHERE id = @charaId
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
2016-06-14 21:29:10 +01:00
cmd . Parameters . AddWithValue ( "@playtime" , player . GetPlayTime ( true ) ) ;
2016-03-06 17:55:42 -05:00
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-03-06 17:55:42 -05:00
finally
{
conn . Dispose ( ) ;
}
}
}
2017-05-01 22:30:43 -04:00
public static void SavePlayerHomePoints ( Player player )
{
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 SET
homepoint = @homepoint ,
homepointInn = @homepointInn
WHERE id = @charaId
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@homepoint" , player . homepoint ) ;
cmd . Parameters . AddWithValue ( "@homepointInn" , player . homepointInn ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
2016-06-14 21:29:10 +01:00
public static void SaveQuest ( Player player , Quest quest )
2016-04-10 13:11:12 -04:00
{
2016-06-14 21:29:10 +01:00
int slot = player . GetQuestSlot ( quest . actorId ) ;
2016-04-10 13:11:12 -04:00
if ( slot = = - 1 )
{
2016-06-14 05:09:30 +01:00
Program . Log . Error ( "Tried saving quest player didn't have: Player: {0:x}, QuestId: {0:x}" , player . actorId , quest . actorId ) ;
2016-04-10 13:11:12 -04:00
return ;
}
else
2016-06-14 21:29:10 +01:00
SaveQuest ( player , quest , slot ) ;
2016-04-10 13:11:12 -04:00
}
2016-06-14 21:29:10 +01:00
public static void SaveQuest ( Player player , Quest quest , int slot )
2016-04-10 13:11:12 -04:00
{
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_quest_scenario
2017-03-07 21:44:57 -05:00
( characterId , slot , questId , currentPhase , questData , questFlags )
2016-04-10 13:11:12 -04:00
VALUES
2017-03-07 21:44:57 -05:00
( @charaId , @slot , @questId , @phase , @questData , @questFlags )
2016-04-10 13:11:12 -04:00
ON DUPLICATE KEY UPDATE
2017-03-07 21:44:57 -05:00
questId = @questId , currentPhase = @phase , questData = @questData , questFlags = @questFlags
2016-04-10 13:11:12 -04:00
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@slot" , slot ) ;
2016-04-17 19:09:01 -04:00
cmd . Parameters . AddWithValue ( "@questId" , 0xFFFFF & quest . actorId ) ;
2017-03-07 21:44:57 -05:00
cmd . Parameters . AddWithValue ( "@phase" , quest . GetPhase ( ) ) ;
2016-04-10 13:11:12 -04:00
cmd . Parameters . AddWithValue ( "@questData" , quest . GetSerializedQuestData ( ) ) ;
cmd . Parameters . AddWithValue ( "@questFlags" , quest . GetQuestFlags ( ) ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-04-10 13:11:12 -04:00
finally
{
conn . Dispose ( ) ;
}
}
}
2017-04-02 23:50:51 -04:00
2017-06-25 23:02:20 -04:00
public static void MarkGuildleve ( Player player , uint glId , bool isAbandoned , bool isCompleted )
{
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_quest_guildleve_regional
SET abandoned = @abandoned , completed = @completed
WHERE characterId = @charaId and guildleveId = @guildleveId
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@guildleveId" , glId ) ;
cmd . Parameters . AddWithValue ( "@abandoned" , isAbandoned ) ;
cmd . Parameters . AddWithValue ( "@completed" , isCompleted ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
2017-06-24 12:07:27 -04:00
public static void SaveGuildleve ( Player player , uint glId , int slot )
{
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_quest_guildleve_regional
( characterId , slot , guildleveId , abandoned , completed )
VALUES
( @charaId , @slot , @guildleveId , @abandoned , @completed )
ON DUPLICATE KEY UPDATE
guildleveId = @guildleveId , abandoned = @abandoned , completed = @completed
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@slot" , slot ) ;
cmd . Parameters . AddWithValue ( "@guildleveId" , glId ) ;
cmd . Parameters . AddWithValue ( "@abandoned" , 0 ) ;
cmd . Parameters . AddWithValue ( "@completed" , 0 ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
public static void RemoveGuildleve ( Player player , uint glId )
{
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 = @ "
DELETE FROM characters_quest_guildleve_regional
WHERE characterId = @charaId and guildleveId = @guildleveId
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@guildleveId" , glId ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
2017-04-02 23:50:51 -04:00
public static void RemoveQuest ( Player player , uint questId )
{
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 = @ "
DELETE FROM characters_quest_scenario
WHERE characterId = @charaId and questId = @questId
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@questId" , 0xFFFFF & questId ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
public static void CompleteQuest ( Player player , uint questId )
{
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_quest_completed
( characterId , questId )
VALUES
( @charaId , @questId )
ON DUPLICATE KEY UPDATE characterId = characterId
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@questId" , 0xFFFFF & questId ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
2017-03-28 18:03:16 -04:00
2017-04-02 23:50:51 -04:00
public static bool IsQuestCompleted ( Player player , uint questId )
2017-03-28 18:03:16 -04:00
{
bool isCompleted = 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 ( ) ;
MySqlCommand cmd = new MySqlCommand ( "SELECT * FROM characters_quest_completed WHERE characterId = @charaId and questId = @questId" , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@questId" , questId ) ;
2017-04-02 23:50:51 -04:00
isCompleted = cmd . ExecuteScalar ( ) ! = null ;
2017-03-28 18:03:16 -04:00
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
return isCompleted ;
}
2016-04-10 13:11:12 -04:00
2016-06-14 21:29:10 +01:00
public static void LoadPlayerCharacter ( Player player )
2016-08-18 23:36:04 -05:00
{
2016-01-09 23:22:10 -05:00
string query ;
2016-08-18 23:36:04 -05:00
MySqlCommand cmd ;
2016-01-09 23:22:10 -05:00
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 ) ) )
2015-10-06 00:39:18 -04:00
{
try
{
conn . Open ( ) ;
2016-01-02 14:05:37 -05:00
2016-01-10 01:19:46 -05:00
//Load basic info
query = @ "
SELECT
2016-03-06 17:55:42 -05:00
name ,
2016-01-10 01:19:46 -05:00
positionX ,
positionY ,
positionZ ,
rotation ,
actorState ,
2016-03-19 10:22:20 -04:00
currentZoneId ,
2016-01-10 01:19:46 -05:00
gcCurrent ,
gcLimsaRank ,
gcGridaniaRank ,
gcUldahRank ,
currentTitle ,
guardian ,
birthDay ,
birthMonth ,
initialTown ,
tribe ,
restBonus ,
2016-03-06 17:55:42 -05:00
achievementPoints ,
2016-12-03 12:19:59 -05:00
playTime ,
destinationZoneId ,
2017-03-07 00:09:37 -05:00
destinationSpawnType ,
currentPrivateArea ,
2017-05-01 22:30:43 -04:00
currentPrivateAreaType ,
homepoint ,
homepointInn
2016-01-10 01:19:46 -05:00
FROM characters WHERE id = @charId ";
2016-01-09 23:22:10 -05:00
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
2016-01-10 01:19:46 -05:00
if ( reader . Read ( ) )
2016-01-09 23:22:10 -05:00
{
2016-01-10 01:19:46 -05:00
player . displayNameId = 0xFFFFFFFF ;
player . customDisplayName = reader . GetString ( 0 ) ;
player . oldPositionX = player . positionX = reader . GetFloat ( 1 ) ;
player . oldPositionY = player . positionY = reader . GetFloat ( 2 ) ;
player . oldPositionZ = player . positionZ = reader . GetFloat ( 3 ) ;
player . oldRotation = player . rotation = reader . GetFloat ( 4 ) ;
player . currentMainState = reader . GetUInt16 ( 5 ) ;
2016-01-17 11:48:55 -05:00
player . zoneId = reader . GetUInt32 ( 6 ) ;
2016-12-03 12:19:59 -05:00
player . isZoning = true ;
2016-03-19 10:22:20 -04:00
player . gcCurrent = reader . GetByte ( 7 ) ;
player . gcRankLimsa = reader . GetByte ( 8 ) ;
player . gcRankGridania = reader . GetByte ( 9 ) ;
player . gcRankUldah = reader . GetByte ( 10 ) ;
player . currentTitle = reader . GetUInt32 ( 11 ) ;
player . playerWork . guardian = reader . GetByte ( 12 ) ;
player . playerWork . birthdayDay = reader . GetByte ( 13 ) ;
player . playerWork . birthdayMonth = reader . GetByte ( 14 ) ;
player . playerWork . initialTown = reader . GetByte ( 15 ) ;
player . playerWork . tribe = reader . GetByte ( 16 ) ;
2016-05-29 15:14:09 -04:00
player . playerWork . restBonusExpRate = reader . GetInt32 ( 17 ) ;
player . achievementPoints = reader . GetUInt32 ( 18 ) ;
player . playTime = reader . GetUInt32 ( 19 ) ;
2017-05-01 22:30:43 -04:00
player . homepoint = reader . GetUInt32 ( "homepoint" ) ;
player . homepointInn = reader . GetByte ( "homepointInn" ) ;
2016-12-03 12:19:59 -05:00
player . destinationZone = reader . GetUInt32 ( "destinationZoneId" ) ;
player . destinationSpawnType = reader . GetByte ( "destinationSpawnType" ) ;
2017-03-07 00:09:37 -05:00
if ( ! reader . IsDBNull ( reader . GetOrdinal ( "currentPrivateArea" ) ) )
player . privateArea = reader . GetString ( "currentPrivateArea" ) ;
player . privateAreaType = reader . GetUInt32 ( "currentPrivateAreaType" ) ;
2016-12-03 12:19:59 -05:00
if ( player . destinationZone ! = 0 )
player . zoneId = player . destinationZone ;
2017-03-07 00:09:37 -05:00
if ( player . privateArea ! = null & & ! player . privateArea . Equals ( "" ) )
player . zone = Server . GetWorldManager ( ) . GetPrivateArea ( player . zoneId , player . privateArea , player . privateAreaType ) ;
else
player . zone = Server . GetWorldManager ( ) . GetZone ( player . zoneId ) ;
2016-01-09 23:22:10 -05:00
}
}
2016-08-18 23:36:04 -05:00
2016-03-19 19:21:16 -04:00
//Get class levels
2016-01-10 13:36:36 -05:00
query = @ "
SELECT
2016-03-19 19:21:16 -04:00
pug ,
gla ,
mrd ,
arc ,
lnc ,
thm ,
cnj ,
crp ,
bsm ,
arm ,
gsm ,
ltw ,
wvr ,
alc ,
cul ,
min ,
btn ,
fsh
FROM characters_class_levels WHERE characterId = @charId ";
2016-01-10 13:36:36 -05:00
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
if ( reader . Read ( ) )
{
2016-08-18 23:36:04 -05:00
player . charaWork . battleSave . skillLevel [ Player . CLASSID_PUG - 1 ] = reader . GetInt16 ( "pug" ) ;
2016-03-19 19:21:16 -04:00
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" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_LNC - 1 ] = reader . GetInt16 ( "lnc" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_THM - 1 ] = reader . GetInt16 ( "thm" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_CNJ - 1 ] = reader . GetInt16 ( "cnj" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_CRP - 1 ] = reader . GetInt16 ( "crp" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_BSM - 1 ] = reader . GetInt16 ( "bsm" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_ARM - 1 ] = reader . GetInt16 ( "arm" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_GSM - 1 ] = reader . GetInt16 ( "gsm" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_LTW - 1 ] = reader . GetInt16 ( "ltw" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_WVR - 1 ] = reader . GetInt16 ( "wvr" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_ALC - 1 ] = reader . GetInt16 ( "alc" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_CUL - 1 ] = reader . GetInt16 ( "cul" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_MIN - 1 ] = reader . GetInt16 ( "min" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_BTN - 1 ] = reader . GetInt16 ( "btn" ) ;
player . charaWork . battleSave . skillLevel [ Player . CLASSID_FSH - 1 ] = reader . GetInt16 ( "fsh" ) ;
2016-01-10 13:36:36 -05:00
}
}
2016-03-19 19:21:16 -04:00
//Load Saved Parameters
2016-01-10 13:36:36 -05:00
query = @ "
SELECT
hp ,
hpMax ,
mp ,
2016-03-19 10:22:20 -04:00
mpMax ,
2016-03-19 19:21:16 -04:00
mainSkill
2016-01-10 13:36:36 -05:00
FROM characters_parametersave WHERE characterId = @charId ";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
if ( reader . Read ( ) )
{
player . charaWork . parameterSave . hp [ 0 ] = reader . GetInt16 ( 0 ) ;
player . charaWork . parameterSave . hpMax [ 0 ] = reader . GetInt16 ( 1 ) ;
player . charaWork . parameterSave . mp = reader . GetInt16 ( 2 ) ;
2016-03-19 10:22:20 -04:00
player . charaWork . parameterSave . mpMax = reader . GetInt16 ( 3 ) ;
player . charaWork . parameterSave . state_mainSkill [ 0 ] = reader . GetByte ( 4 ) ;
2016-03-19 19:21:16 -04:00
player . charaWork . parameterSave . state_mainSkillLevel = player . charaWork . battleSave . skillLevel [ reader . GetByte ( 4 ) - 1 ] ;
2016-01-10 13:36:36 -05:00
}
}
2016-08-18 23:36:04 -05:00
2016-01-09 23:22:10 -05:00
//Load appearance
query = @ "
SELECT
2016-01-10 01:19:46 -05:00
baseId ,
2016-01-09 23:22:10 -05:00
size ,
voice ,
skinColor ,
hairStyle ,
hairColor ,
hairHighlightColor ,
eyeColor ,
2016-01-10 00:00:50 -05:00
characteristics ,
characteristicsColor ,
2016-01-09 23:22:10 -05:00
faceType ,
2016-01-10 00:00:50 -05:00
ears ,
2016-01-09 23:22:10 -05:00
faceMouth ,
faceFeatures ,
2016-01-10 00:00:50 -05:00
faceNose ,
faceEyeShape ,
faceIrisSize ,
faceEyebrows ,
2016-01-09 23:22:10 -05:00
mainHand ,
offHand ,
head ,
body ,
legs ,
2016-02-18 22:38:54 -05:00
hands ,
2016-01-09 23:22:10 -05:00
feet ,
waist ,
leftFinger ,
rightFinger ,
2016-02-18 22:38:54 -05:00
leftEar ,
rightEar
2016-01-09 23:22:10 -05:00
FROM characters_appearance WHERE characterId = @charId ";
2016-01-10 00:01:33 -05:00
2016-01-09 23:22:10 -05:00
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
2016-01-10 01:19:46 -05:00
if ( reader . Read ( ) )
{
if ( reader . GetUInt32 ( 0 ) = = 0xFFFFFFFF )
2016-06-14 21:29:10 +01:00
player . modelId = CharacterUtils . GetTribeModel ( player . playerWork . tribe ) ;
2016-01-10 01:19:46 -05:00
else
2016-01-17 11:53:52 -05:00
player . modelId = reader . GetUInt32 ( 0 ) ;
player . appearanceIds [ Character . SIZE ] = reader . GetByte ( 1 ) ;
player . appearanceIds [ Character . COLORINFO ] = ( uint ) ( reader . GetUInt16 ( 3 ) | ( reader . GetUInt16 ( 5 ) < < 10 ) | ( reader . GetUInt16 ( 7 ) < < 20 ) ) ;
2016-06-14 21:29:10 +01:00
player . appearanceIds [ Character . FACEINFO ] = PrimitiveConversion . ToUInt32 ( CharacterUtils . GetFaceInfo ( reader . GetByte ( 8 ) , reader . GetByte ( 9 ) , reader . GetByte ( 10 ) , reader . GetByte ( 11 ) , reader . GetByte ( 12 ) , reader . GetByte ( 13 ) , reader . GetByte ( 14 ) , reader . GetByte ( 15 ) , reader . GetByte ( 16 ) , reader . GetByte ( 17 ) ) ) ;
2016-01-17 11:53:52 -05:00
player . appearanceIds [ Character . HIGHLIGHT_HAIR ] = ( uint ) ( reader . GetUInt16 ( 6 ) | reader . GetUInt16 ( 4 ) < < 10 ) ;
player . appearanceIds [ Character . VOICE ] = reader . GetByte ( 2 ) ;
2016-03-06 17:55:42 -05:00
player . appearanceIds [ Character . MAINHAND ] = reader . GetUInt32 ( 18 ) ;
player . appearanceIds [ Character . OFFHAND ] = reader . GetUInt32 ( 19 ) ;
2016-01-17 11:53:52 -05:00
player . appearanceIds [ Character . HEADGEAR ] = reader . GetUInt32 ( 20 ) ;
player . appearanceIds [ Character . BODYGEAR ] = reader . GetUInt32 ( 21 ) ;
player . appearanceIds [ Character . LEGSGEAR ] = reader . GetUInt32 ( 22 ) ;
player . appearanceIds [ Character . HANDSGEAR ] = reader . GetUInt32 ( 23 ) ;
player . appearanceIds [ Character . FEETGEAR ] = reader . GetUInt32 ( 24 ) ;
player . appearanceIds [ Character . WAISTGEAR ] = reader . GetUInt32 ( 25 ) ;
player . appearanceIds [ Character . R_EAR ] = reader . GetUInt32 ( 26 ) ;
player . appearanceIds [ Character . L_EAR ] = reader . GetUInt32 ( 27 ) ;
2016-03-06 17:55:42 -05:00
player . appearanceIds [ Character . R_RINGFINGER ] = reader . GetUInt32 ( 28 ) ;
player . appearanceIds [ Character . L_RINGFINGER ] = reader . GetUInt32 ( 29 ) ;
2016-01-10 01:19:46 -05:00
}
2016-01-09 23:22:10 -05:00
}
//Load Status Effects
query = @ "
SELECT
statusId ,
2017-07-15 19:33:47 +01:00
duration ,
magnitude ,
tick ,
tier ,
extra
2016-01-10 00:00:50 -05:00
FROM characters_statuseffect WHERE characterId = @charId ";
2016-01-09 23:22:10 -05:00
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
int count = 0 ;
while ( reader . Read ( ) )
{
2017-07-15 19:33:47 +01:00
var id = reader . GetUInt32 ( 0 ) ;
var duration = reader . GetUInt32 ( 1 ) ;
var magnitude = reader . GetUInt64 ( 2 ) ;
var tick = reader . GetUInt32 ( 3 ) ;
var tier = reader . GetByte ( 4 ) ;
var extra = reader . GetUInt64 ( 5 ) ;
2016-01-09 23:22:10 -05:00
player . charaWork . status [ count ] = reader . GetUInt16 ( 0 ) ;
player . charaWork . statusShownTime [ count ] = reader . GetUInt32 ( 1 ) ;
2017-07-15 19:33:47 +01:00
var effect = Server . GetWorldManager ( ) . GetStatusEffect ( id ) ;
if ( effect ! = null )
{
effect . SetDurationMs ( duration ) ;
effect . SetMagnitude ( magnitude ) ;
effect . SetTickMs ( tick ) ;
effect . SetTier ( tier ) ;
effect . SetExtra ( extra ) ;
// dont wanna send ton of messages on login (i assume retail doesnt)
2017-07-27 22:19:20 +01:00
player . statusEffects . AddStatusEffect ( effect , null , true ) ;
2017-07-15 19:33:47 +01:00
}
2016-01-09 23:22:10 -05:00
}
}
//Load Chocobo
query = @ "
SELECT
hasChocobo ,
hasGoobbue ,
chocoboAppearance ,
chocoboName
FROM characters_chocobo WHERE characterId = @charId ";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
2016-01-10 01:19:46 -05:00
if ( reader . Read ( ) )
{
player . hasChocobo = reader . GetBoolean ( 0 ) ;
player . hasGoobbue = reader . GetBoolean ( 1 ) ;
player . chocoboAppearance = reader . GetByte ( 2 ) ;
player . chocoboName = reader . GetString ( 3 ) ;
}
2016-01-09 23:22:10 -05:00
}
//Load Timers
query = @ "
SELECT
thousandmaws ,
dzemaeldarkhold ,
bowlofembers_hard ,
bowlofembers ,
thornmarch ,
aurumvale ,
cutterscry ,
battle_aleport ,
battle_hyrstmill ,
battle_goldenbazaar ,
howlingeye_hard ,
howlingeye ,
castrumnovum ,
bowlofembers_extreme ,
rivenroad ,
rivenroad_hard ,
behests ,
companybehests ,
returntimer ,
2016-01-10 01:19:46 -05:00
skirmish
2016-01-09 23:22:10 -05:00
FROM characters_timers WHERE characterId = @charId ";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
2016-01-10 01:19:46 -05:00
if ( reader . Read ( ) )
{
for ( int i = 0 ; i < player . timers . Length ; i + + )
player . timers [ i ] = reader . GetUInt32 ( i ) ;
}
2016-01-09 23:22:10 -05:00
}
2017-07-07 21:53:44 -05:00
//Load Hotbar
LoadHotbar ( player ) ;
2016-01-09 23:22:10 -05:00
//Load Scenario Quests
query = @ "
SELECT
2016-01-10 01:19:46 -05:00
slot ,
2016-04-10 13:11:12 -04:00
questId ,
questData ,
2017-04-04 01:42:34 -04:00
questFlags ,
currentPhase
2016-01-10 00:00:50 -05:00
FROM characters_quest_scenario WHERE characterId = @charId ";
2016-08-18 23:36:04 -05:00
2016-01-10 01:19:46 -05:00
cmd = new MySqlCommand ( query , conn ) ;
2016-01-10 14:15:46 -05:00
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
2016-01-09 23:22:10 -05:00
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
int index = reader . GetUInt16 ( 0 ) ;
2016-01-10 14:15:46 -05:00
player . playerWork . questScenario [ index ] = 0xA0F00000 | reader . GetUInt32 ( 1 ) ;
2016-04-10 13:11:12 -04:00
string questData = null ;
uint questFlags = 0 ;
2017-04-04 01:42:34 -04:00
uint currentPhase = 0 ;
2016-04-10 13:11:12 -04:00
if ( ! reader . IsDBNull ( 2 ) )
questData = reader . GetString ( 2 ) ;
else
questData = "{}" ;
if ( ! reader . IsDBNull ( 3 ) )
questFlags = reader . GetUInt32 ( 3 ) ;
else
questFlags = 0 ;
2016-03-28 11:31:21 -04:00
2017-04-04 01:42:34 -04:00
if ( ! reader . IsDBNull ( 4 ) )
currentPhase = reader . GetUInt32 ( 4 ) ;
2016-06-14 21:29:10 +01:00
string questName = Server . GetStaticActors ( player . playerWork . questScenario [ index ] ) . actorName ;
2017-04-04 01:42:34 -04:00
player . questScenario [ index ] = new Quest ( player , player . playerWork . questScenario [ index ] , questName , questData , questFlags , currentPhase ) ;
2016-01-09 23:22:10 -05:00
}
}
2016-01-10 14:15:46 -05:00
//Load Local Guildleves
2016-01-09 23:22:10 -05:00
query = @ "
SELECT
2016-01-10 01:19:46 -05:00
slot ,
2016-01-09 23:22:10 -05:00
questId ,
abandoned ,
completed
2016-01-10 14:15:46 -05:00
FROM characters_quest_guildleve_local WHERE characterId = @charId ";
2016-01-09 23:22:10 -05:00
2016-01-10 01:19:46 -05:00
cmd = new MySqlCommand ( query , conn ) ;
2016-01-10 14:15:46 -05:00
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
2016-01-09 23:22:10 -05:00
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
int index = reader . GetUInt16 ( 0 ) ;
2016-01-10 14:15:46 -05:00
player . playerWork . questGuildleve [ index ] = 0xA0F00000 | reader . GetUInt32 ( 1 ) ;
}
}
//Load Regional Guildleve Quests
query = @ "
SELECT
slot ,
guildleveId ,
abandoned ,
completed
FROM characters_quest_guildleve_regional WHERE characterId = @charId ";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
int index = reader . GetUInt16 ( 0 ) ;
player . work . guildleveId [ index ] = reader . GetUInt16 ( 1 ) ;
2016-01-09 23:22:10 -05:00
player . work . guildleveDone [ index ] = reader . GetBoolean ( 2 ) ;
player . work . guildleveChecked [ index ] = reader . GetBoolean ( 3 ) ;
}
}
//Load NPC Linkshell
query = @ "
SELECT
npcLinkshellId ,
isCalling ,
isExtra
2016-01-10 01:19:46 -05:00
FROM characters_npclinkshell WHERE characterId = @charId ";
2016-01-09 23:22:10 -05:00
2016-01-10 01:19:46 -05:00
cmd = new MySqlCommand ( query , conn ) ;
2016-01-10 14:15:46 -05:00
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
2016-01-09 23:22:10 -05:00
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
int npcLSId = reader . GetUInt16 ( 0 ) ;
player . playerWork . npcLinkshellChatCalling [ npcLSId ] = reader . GetBoolean ( 1 ) ;
2016-08-18 23:36:04 -05:00
player . playerWork . npcLinkshellChatExtra [ npcLSId ] = reader . GetBoolean ( 2 ) ;
2016-01-09 23:22:10 -05:00
}
}
2016-06-14 21:29:10 +01:00
player . GetInventory ( Inventory . NORMAL ) . InitList ( GetInventory ( player , 0 , Inventory . NORMAL ) ) ;
player . GetInventory ( Inventory . KEYITEMS ) . InitList ( GetInventory ( player , 0 , Inventory . KEYITEMS ) ) ;
player . GetInventory ( Inventory . CURRENCY ) . InitList ( GetInventory ( player , 0 , Inventory . CURRENCY ) ) ;
player . GetInventory ( Inventory . BAZAAR ) . InitList ( GetInventory ( player , 0 , Inventory . BAZAAR ) ) ;
player . GetInventory ( Inventory . MELDREQUEST ) . InitList ( GetInventory ( player , 0 , Inventory . MELDREQUEST ) ) ;
player . GetInventory ( Inventory . LOOT ) . InitList ( GetInventory ( player , 0 , Inventory . LOOT ) ) ;
2016-02-11 22:14:40 -05:00
2016-06-14 21:29:10 +01:00
player . GetEquipment ( ) . SetEquipment ( GetEquipment ( player , player . charaWork . parameterSave . state_mainSkill [ 0 ] ) ) ;
2016-02-11 22:14:40 -05:00
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-02-11 22:14:40 -05:00
finally
{
conn . Dispose ( ) ;
}
}
}
2016-06-14 21:29:10 +01:00
public static InventoryItem [ ] GetEquipment ( Player player , ushort classId )
2016-02-11 22:14:40 -05:00
{
2016-06-14 21:29:10 +01:00
InventoryItem [ ] equipment = new InventoryItem [ player . GetEquipment ( ) . GetCapacity ( ) ] ;
2016-02-21 14:06:23 -05:00
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
equipSlot ,
2016-03-12 02:52:34 -05:00
itemId
2016-02-21 14:06:23 -05:00
FROM characters_inventory_equipment
2016-03-12 10:54:08 -05:00
WHERE characterId = @charId AND ( classId = @classId OR classId = 0 ) ORDER BY equipSlot ";
2016-02-21 14:06:23 -05:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
2016-03-12 02:52:34 -05:00
cmd . Parameters . AddWithValue ( "@classId" , classId ) ;
2016-02-21 14:06:23 -05:00
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
ushort equipSlot = reader . GetUInt16 ( 0 ) ;
2016-03-12 02:52:34 -05:00
ulong uniqueItemId = reader . GetUInt16 ( 1 ) ;
2016-08-21 18:16:54 -04:00
InventoryItem item = player . GetInventory ( Inventory . NORMAL ) . GetItemByUniqueId ( uniqueItemId ) ;
2016-03-12 02:52:34 -05:00
equipment [ equipSlot ] = item ;
2016-02-21 14:06:23 -05:00
}
}
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-02-21 14:06:23 -05:00
finally
{
conn . Dispose ( ) ;
}
}
return equipment ;
}
2016-06-14 21:29:10 +01:00
public static void EquipItem ( Player player , ushort equipSlot , ulong uniqueItemId )
2016-02-21 14:06:23 -05:00
{
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 = @ "
INSERT INTO characters_inventory_equipment
2016-03-12 02:52:34 -05:00
( characterId , classId , equipSlot , itemId )
2016-02-21 14:06:23 -05:00
VALUES
2016-03-12 02:52:34 -05:00
( @characterId , @classId , @equipSlot , @uniqueItemId )
ON DUPLICATE KEY UPDATE itemId = @uniqueItemId ;
2016-02-21 14:06:23 -05:00
";
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@characterId" , player . actorId ) ;
2016-03-12 10:54:08 -05:00
cmd . Parameters . AddWithValue ( "@classId" , ( equipSlot = = Equipment . SLOT_UNDERSHIRT | | equipSlot = = Equipment . SLOT_UNDERGARMENT ) ? 0 : player . charaWork . parameterSave . state_mainSkill [ 0 ] ) ;
2016-02-21 14:06:23 -05:00
cmd . Parameters . AddWithValue ( "@equipSlot" , equipSlot ) ;
2016-03-12 02:52:34 -05:00
cmd . Parameters . AddWithValue ( "@uniqueItemId" , uniqueItemId ) ;
2016-02-21 14:06:23 -05:00
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-02-21 14:06:23 -05:00
finally
{
conn . Dispose ( ) ;
}
}
}
2016-06-14 21:29:10 +01:00
public static void UnequipItem ( Player player , ushort equipSlot )
2016-02-21 14:06:23 -05:00
{
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 = @ "
DELETE FROM characters_inventory_equipment
2016-03-12 02:52:34 -05:00
WHERE characterId = @characterId AND classId = @classId AND equipSlot = @equipSlot ;
2016-02-21 14:06:23 -05:00
";
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@characterId" , player . actorId ) ;
2016-03-12 02:52:34 -05:00
cmd . Parameters . AddWithValue ( "@classId" , player . charaWork . parameterSave . state_mainSkill [ 0 ] ) ;
2016-02-21 14:06:23 -05:00
cmd . Parameters . AddWithValue ( "@equipSlot" , equipSlot ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-02-21 14:06:23 -05:00
finally
{
conn . Dispose ( ) ;
}
}
}
2017-07-07 21:53:44 -05:00
public static void EquipAbility ( Player player , ushort hotbarSlot , uint commandId , uint recastTime )
{
//2700083201 is where abilities start. 2700083200 is for unequipping abilities. Trying to put this in the hotbar will crash the game, need to put 0 instead
if ( commandId > 2700083200 )
{
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 ( ) ;
MySqlCommand cmd ;
string query = @ "
INSERT INTO characters_hotbar
( characterId , classId , hotbarSlot , commandId , recastTime )
VALUES
( @charId , @classId , @hotbarSlot , @commandId , @recastTime )
ON DUPLICATE KEY UPDATE commandId = @commandId , recastTime = @recastTime ;
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@classId" , player . charaWork . parameterSave . state_mainSkill [ 0 ] ) ;
cmd . Parameters . AddWithValue ( "@commandId" , commandId ) ;
cmd . Parameters . AddWithValue ( "@hotbarSlot" , hotbarSlot ) ;
cmd . Parameters . AddWithValue ( "@recastTime" , recastTime ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
}
//Unequipping is done by sending an equip packet with 2700083200 as the ability and the hotbar slot of the action being unequipped
public static void UnequipAbility ( Player player , ushort hotbarSlot )
{
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 ( ) ;
MySqlCommand cmd ;
string query = "" ;
//Drop
List < Tuple < ushort , uint > > hotbarList = new List < Tuple < ushort , uint > > ( ) ;
query = @ "
DELETE FROM characters_hotbar
WHERE characterId = @charId AND classId = @classId AND hotbarSlot = @hotbarSlot
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@classId" , player . charaWork . parameterSave . state_mainSkill [ 0 ] ) ;
2017-08-22 14:50:53 -05:00
cmd . Parameters . AddWithValue ( "@hotbarSlot" , hotbarSlot ) ;
2017-07-07 21:53:44 -05:00
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
public static void LoadHotbar ( Player player )
{
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 ( ) ;
//Load Hotbar
query = @ "
SELECT
hotbarSlot ,
commandId ,
recastTime
FROM characters_hotbar WHERE characterId = @charId AND classId = @classId
ORDER BY hotbarSlot ";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@classId" , player . charaWork . parameterSave . state_mainSkill [ 0 ] ) ;
player . charaWork . commandBorder = 32 ;
for ( int i = player . charaWork . commandBorder ; i < player . charaWork . commandCategory . Length ; i + + )
{
player . charaWork . command [ i ] = 0 ;
player . charaWork . commandCategory [ i ] = 0 ;
player . charaWork . parameterSave . commandSlot_recastTime [ i - player . charaWork . commandBorder ] = 0 ;
}
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
int index = reader . GetUInt16 ( 0 ) ;
2017-08-22 14:50:53 -05:00
uint trueCommandId = reader . GetUInt32 ( 1 ) ;
player . charaWork . command [ index ] = trueCommandId ;
2017-07-07 21:53:44 -05:00
player . charaWork . commandCategory [ index ] = 1 ;
player . charaWork . parameterSave . commandSlot_recastTime [ index - player . charaWork . commandBorder ] = reader . GetUInt32 ( 2 ) ;
2017-08-22 14:50:53 -05:00
//Recast timer
Ability ability = Server . GetWorldManager ( ) . GetAbility ( ( ushort ) ( trueCommandId ^ 2700083200 ) ) ;
player . charaWork . parameterTemp . maxCommandRecastTime [ index - player . charaWork . commandBorder ] = ( ushort ) ( ability ! = null ? ability . recastTimeSeconds : 1 ) ;
//Previous recast timer
player . charaWork . parameterSave . commandSlot_recastTime [ index - player . charaWork . commandBorder ] = reader . GetUInt32 ( 2 ) ;
2017-07-07 21:53:44 -05:00
}
}
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
2016-02-21 14:06:23 -05:00
2016-06-14 21:29:10 +01:00
public static List < InventoryItem > GetInventory ( Player player , uint slotOffset , uint type )
2016-02-21 14:06:23 -05:00
{
List < InventoryItem > items = new List < InventoryItem > ( ) ;
2016-02-11 22:14:40 -05:00
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
serverItemId ,
itemId ,
quantity ,
slot ,
2016-02-22 22:33:52 -05:00
itemType ,
2016-02-11 22:14:40 -05:00
quality ,
durability ,
spiritBind ,
materia1 ,
materia2 ,
materia3 ,
materia4 ,
materia5
FROM characters_inventory
INNER JOIN server_items ON serverItemId = server_items . id
WHERE characterId = @charId AND inventoryType = @type AND slot > = @slot ORDER BY slot ";
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@slot" , slotOffset ) ;
cmd . Parameters . AddWithValue ( "@type" , type ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
2016-08-18 23:36:04 -05:00
{
2016-02-11 22:14:40 -05:00
while ( reader . Read ( ) )
{
uint uniqueId = reader . GetUInt32 ( 0 ) ;
uint itemId = reader . GetUInt32 ( 1 ) ;
int quantity = reader . GetInt32 ( 2 ) ;
2016-02-13 16:33:33 -05:00
ushort slot = reader . GetUInt16 ( 3 ) ;
2016-02-11 22:14:40 -05:00
2016-02-21 21:44:11 -05:00
byte itemType = reader . GetByte ( 4 ) ;
2016-02-11 22:14:40 -05:00
byte qualityNumber = reader . GetByte ( 5 ) ;
2016-02-22 22:33:52 -05:00
int durability = reader . GetInt32 ( 6 ) ;
2016-02-11 22:14:40 -05:00
ushort spiritBind = reader . GetUInt16 ( 7 ) ;
byte materia1 = reader . GetByte ( 8 ) ;
byte materia2 = reader . GetByte ( 9 ) ;
byte materia3 = reader . GetByte ( 10 ) ;
byte materia4 = reader . GetByte ( 11 ) ;
byte materia5 = reader . GetByte ( 12 ) ;
2016-02-21 21:44:11 -05:00
items . Add ( new InventoryItem ( uniqueId , itemId , quantity , slot , itemType , qualityNumber , durability , spiritBind , materia1 , materia2 , materia3 , materia4 , materia5 ) ) ;
2016-02-11 22:14:40 -05:00
}
}
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-02-11 22:14:40 -05:00
finally
{
conn . Dispose ( ) ;
}
}
return items ;
}
2016-06-14 21:29:10 +01:00
public static InventoryItem AddItem ( Player player , uint itemId , int quantity , byte quality , byte itemType , int durability , ushort type )
2016-02-11 22:14:40 -05:00
{
2016-02-21 14:06:23 -05:00
InventoryItem insertedItem = null ;
2016-02-11 22:14:40 -05:00
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 ( ) ;
2016-08-18 23:36:04 -05:00
2016-02-11 22:14:40 -05:00
string query = @ "
INSERT INTO server_items
2016-02-22 22:33:52 -05:00
( itemId , quality , itemType , durability )
2016-02-11 22:14:40 -05:00
VALUES
2016-02-22 22:33:52 -05:00
( @itemId , @quality , @itemType , @durability ) ;
2016-02-11 22:14:40 -05:00
";
2016-02-14 12:09:18 -05:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
2016-02-11 22:14:40 -05:00
string query2 = @ "
INSERT INTO characters_inventory
( characterId , slot , inventoryType , serverItemId , quantity )
2016-02-14 12:09:18 -05:00
SELECT @charId , IFNULL ( MAX ( SLOT ) + 1 , 0 ) , @inventoryType , LAST_INSERT_ID ( ) , @quantity FROM characters_inventory WHERE characterId = @charId AND inventoryType = @inventoryType ;
2016-02-11 22:14:40 -05:00
";
2016-02-14 12:09:18 -05:00
MySqlCommand cmd2 = new MySqlCommand ( query2 , conn ) ;
2016-08-18 23:36:04 -05:00
2016-02-11 22:14:40 -05:00
cmd . Parameters . AddWithValue ( "@itemId" , itemId ) ;
cmd . Parameters . AddWithValue ( "@quality" , quality ) ;
2016-02-21 21:44:11 -05:00
cmd . Parameters . AddWithValue ( "@itemType" , itemType ) ;
2016-02-11 22:14:40 -05:00
cmd . Parameters . AddWithValue ( "@durability" , durability ) ;
2016-02-14 12:09:18 -05:00
cmd2 . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
cmd2 . Parameters . AddWithValue ( "@inventoryType" , type ) ;
cmd2 . Parameters . AddWithValue ( "@quantity" , quantity ) ;
2016-02-11 22:14:40 -05:00
cmd . ExecuteNonQuery ( ) ;
2016-02-14 12:09:18 -05:00
cmd2 . ExecuteNonQuery ( ) ;
2016-02-11 22:14:40 -05:00
2016-06-14 21:29:10 +01:00
insertedItem = new InventoryItem ( ( uint ) cmd . LastInsertedId , itemId , quantity , ( ushort ) player . GetInventory ( type ) . GetNextEmptySlot ( ) , itemType , quality , durability , 0 , 0 , 0 , 0 , 0 , 0 ) ;
2016-02-11 22:14:40 -05:00
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-02-11 22:14:40 -05:00
finally
{
conn . Dispose ( ) ;
}
}
return insertedItem ;
}
2016-06-14 21:29:10 +01:00
public static void SetQuantity ( Player player , uint slot , ushort type , int quantity )
2016-02-11 22:14:40 -05:00
{
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 ( ) ;
2016-08-18 23:36:04 -05:00
string query = @ "
2016-02-11 22:14:40 -05:00
UPDATE characters_inventory
2016-02-13 21:14:49 -05:00
SET quantity = @quantity
2016-02-14 12:09:18 -05:00
WHERE characterId = @charId AND slot = @slot AND inventoryType = @type ;
2016-02-11 22:14:40 -05:00
";
2016-08-18 23:36:04 -05:00
2016-02-11 22:14:40 -05:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@quantity" , quantity ) ;
2016-02-13 14:12:05 -05:00
cmd . Parameters . AddWithValue ( "@slot" , slot ) ;
2016-02-14 12:09:18 -05:00
cmd . Parameters . AddWithValue ( "@type" , type ) ;
2016-02-11 22:14:40 -05:00
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-02-11 22:14:40 -05:00
finally
{
conn . Dispose ( ) ;
}
}
}
2016-06-14 21:29:10 +01:00
public static void RemoveItem ( Player player , ulong serverItemId , ushort type )
2016-02-13 21:14:49 -05:00
{
2016-02-13 22:25:40 -05:00
using ( MySqlConnection conn = new MySqlConnection ( String . Format ( "Server={0}; Port={1}; Database={2}; UID={3}; Password={4}; Allow User Variables=True" , ConfigConstants . DATABASE_HOST , ConfigConstants . DATABASE_PORT , ConfigConstants . DATABASE_NAME , ConfigConstants . DATABASE_USERNAME , ConfigConstants . DATABASE_PASSWORD ) ) )
2016-02-13 21:14:49 -05:00
{
try
{
conn . Open ( ) ;
string query = @ "
SELECT slot INTO @slotToDelete FROM characters_inventory WHERE serverItemId = @serverItemId ;
UPDATE characters_inventory
SET slot = slot - 1
2016-02-14 12:09:18 -05:00
WHERE characterId = @charId AND slot > @slotToDelete AND inventoryType = @type ;
2016-02-13 22:25:40 -05:00
2016-02-13 21:14:49 -05:00
DELETE FROM characters_inventory
2016-02-14 12:09:18 -05:00
WHERE serverItemId = @serverItemId AND inventoryType = @type ;
2016-02-13 22:25:40 -05:00
DELETE FROM server_items
WHERE id = @serverItemId ;
2016-08-18 23:36:04 -05:00
";
2016-02-13 21:14:49 -05:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@serverItemId" , serverItemId ) ;
2016-02-14 12:09:18 -05:00
cmd . Parameters . AddWithValue ( "@type" , type ) ;
2016-02-13 21:14:49 -05:00
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-02-13 21:14:49 -05:00
finally
{
conn . Dispose ( ) ;
}
}
}
2016-06-14 21:29:10 +01:00
public static void RemoveItem ( Player player , ushort slot , ushort type )
2016-02-11 22:14:40 -05:00
{
2016-02-13 22:25:40 -05:00
using ( MySqlConnection conn = new MySqlConnection ( String . Format ( "Server={0}; Port={1}; Database={2}; UID={3}; Password={4}; Allow User Variables=True" , ConfigConstants . DATABASE_HOST , ConfigConstants . DATABASE_PORT , ConfigConstants . DATABASE_NAME , ConfigConstants . DATABASE_USERNAME , ConfigConstants . DATABASE_PASSWORD ) ) )
2016-02-11 22:14:40 -05:00
{
try
{
conn . Open ( ) ;
string query = @ "
2016-02-13 22:25:40 -05:00
SELECT serverItemId INTO @serverItemId FROM characters_inventory WHERE characterId = @charId AND slot = @slot ;
DELETE FROM characters_inventory
2016-02-14 12:09:18 -05:00
WHERE characterId = @charId AND slot = @slot AND inventoryType = @type ;
2016-02-13 22:25:40 -05:00
2016-02-11 22:14:40 -05:00
DELETE FROM server_items
2016-02-13 22:25:40 -05:00
WHERE id = @serverItemId ;
2016-02-11 22:14:40 -05:00
2016-02-13 22:25:40 -05:00
UPDATE characters_inventory
2016-02-11 22:14:40 -05:00
SET slot = slot - 1
2016-02-14 12:09:18 -05:00
WHERE characterId = @charId AND slot > @slot AND inventoryType = @type ;
2016-02-11 22:14:40 -05:00
";
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
2016-02-13 21:14:49 -05:00
cmd . Parameters . AddWithValue ( "@slot" , slot ) ;
2016-02-14 12:09:18 -05:00
cmd . Parameters . AddWithValue ( "@type" , type ) ;
2016-02-11 22:14:40 -05:00
cmd . ExecuteNonQuery ( ) ;
2015-10-06 00:39:18 -04:00
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2015-10-06 00:39:18 -04:00
finally
{
conn . Dispose ( ) ;
}
}
2016-01-20 23:18:10 -05:00
2015-10-06 00:39:18 -04:00
}
2016-06-14 21:29:10 +01:00
public static SubPacket GetLatestAchievements ( Player player )
2015-12-04 02:00:05 -05:00
{
2016-01-16 18:38:49 -05:00
uint [ ] latestAchievements = new uint [ 5 ] ;
2016-01-10 01:19:46 -05:00
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 ) ) )
2015-12-04 02:00:05 -05:00
{
try
{
conn . Open ( ) ;
2016-08-18 23:36:04 -05:00
2016-01-10 01:19:46 -05:00
//Load Last 5 Completed
string query = @ "
SELECT
2016-01-16 18:38:49 -05:00
characters_achievements . achievementId FROM characters_achievements
INNER JOIN gamedata_achievements ON characters_achievements . achievementId = gamedata_achievements . achievementId
WHERE characterId = @charId AND rewardPoints < > 0 ORDER BY timeDone LIMIT 5 ";
2016-01-10 01:19:46 -05:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
int count = 0 ;
while ( reader . Read ( ) )
2016-01-16 18:38:49 -05:00
{
2016-08-18 23:36:04 -05:00
uint id = reader . GetUInt32 ( 0 ) ;
2016-01-16 18:38:49 -05:00
latestAchievements [ count + + ] = id ;
2016-01-16 11:26:35 -05:00
}
2016-01-10 01:19:46 -05:00
}
2015-12-04 02:00:05 -05:00
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2015-12-04 02:00:05 -05:00
finally
{
conn . Dispose ( ) ;
}
}
2016-01-10 01:19:46 -05:00
2016-06-14 21:29:10 +01:00
return SetLatestAchievementsPacket . BuildPacket ( player . actorId , latestAchievements ) ;
2015-12-04 02:00:05 -05:00
}
2016-06-14 21:29:10 +01:00
public static SubPacket GetAchievementsPacket ( Player player )
2016-01-02 14:05:37 -05:00
{
2016-01-16 18:38:49 -05:00
SetCompletedAchievementsPacket cheevosPacket = new SetCompletedAchievementsPacket ( ) ;
2016-01-10 01:19:46 -05:00
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 ) ) )
2016-01-02 14:05:37 -05:00
{
try
{
conn . Open ( ) ;
2016-08-18 23:36:04 -05:00
2016-01-10 01:19:46 -05:00
string query = @ "
2016-01-16 18:38:49 -05:00
SELECT packetOffsetId
FROM characters_achievements
INNER JOIN gamedata_achievements ON characters_achievements . achievementId = gamedata_achievements . achievementId
WHERE characterId = @charId AND timeDone IS NOT NULL ";
2016-01-10 01:19:46 -05:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charId" , player . actorId ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
2016-08-18 23:36:04 -05:00
{
2016-01-16 18:38:49 -05:00
uint offset = reader . GetUInt32 ( 0 ) ;
if ( offset < 0 | | offset > = cheevosPacket . achievementFlags . Length )
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( "SQL Error; achievement flag offset id out of range: " + offset ) ;
2016-01-16 18:38:49 -05:00
continue ;
}
2016-08-18 23:36:04 -05:00
cheevosPacket . achievementFlags [ offset ] = true ;
2016-01-16 18:38:49 -05:00
}
2016-01-10 01:19:46 -05:00
}
2016-01-02 14:05:37 -05:00
}
catch ( MySqlException e )
2016-06-08 22:29:04 +01:00
{
2016-06-12 20:12:59 +01:00
Program . Log . Error ( e . ToString ( ) ) ;
2016-06-08 22:29:04 +01:00
}
2016-01-10 01:19:46 -05:00
finally
2016-01-02 14:05:37 -05:00
{
2016-01-10 01:19:46 -05:00
conn . Dispose ( ) ;
2016-01-02 14:05:37 -05:00
}
2016-01-10 01:19:46 -05:00
}
2016-06-14 21:29:10 +01:00
return cheevosPacket . BuildPacket ( player . actorId ) ;
2016-01-10 01:19:46 -05:00
}
2016-12-11 23:31:13 -05:00
public static bool CreateLinkshell ( Player player , string lsName , ushort lsCrest )
{
bool success = 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 = @ "
INSERT INTO server_linkshells
( name , master , crest )
VALUES
( @lsName , @master , @crest )
;
";
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@lsName" , lsName ) ;
cmd . Parameters . AddWithValue ( "@master" , player . actorId ) ;
2017-08-26 13:53:23 -04:00
cmd . Parameters . AddWithValue ( "@crest" , lsCrest ) ;
2016-12-11 23:31:13 -05:00
cmd . ExecuteNonQuery ( ) ;
success = true ;
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
return success ;
}
2016-03-06 17:55:42 -05:00
2017-04-09 12:48:27 -04:00
public static void SaveNpcLS ( Player player , uint npcLSId , bool isCalling , bool isExtra )
{
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_npclinkshell
( characterId , npcLinkshellId , isCalling , isExtra )
VALUES
( @charaId , @lsId , @calling , @extra )
ON DUPLICATE KEY UPDATE
characterId = @charaId , npcLinkshellId = @lsId , isCalling = @calling , isExtra = @extra
";
cmd = new MySqlCommand ( query , conn ) ;
cmd . Parameters . AddWithValue ( "@charaId" , player . actorId ) ;
cmd . Parameters . AddWithValue ( "@lsId" , npcLSId ) ;
cmd . Parameters . AddWithValue ( "@calling" , isCalling ? 1 : 0 ) ;
cmd . Parameters . AddWithValue ( "@extra" , isExtra ? 1 : 0 ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
2017-07-15 19:33:47 +01:00
2016-08-21 18:16:54 -04:00
public static bool SaveSupportTicket ( GMSupportTicketPacket gmTicket , string playerName )
2016-08-18 22:58:09 -05:00
{
string query ;
MySqlCommand cmd ;
2016-08-21 18:16:54 -04:00
bool wasError = false ;
2016-08-18 22:58:09 -05:00
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
2016-08-21 18:16:54 -04:00
( name , title , body , langCode )
2016-08-18 22:58:09 -05:00
VALUES
2016-08-21 18:16:54 -04:00
( @name , @title , @body , @langCode ) ";
2016-08-18 22:58:09 -05:00
cmd = new MySqlCommand ( query , conn ) ;
2016-08-21 18:16:54 -04:00
cmd . Parameters . AddWithValue ( "@name" , playerName ) ;
2016-08-18 22:58:09 -05:00
cmd . Parameters . AddWithValue ( "@title" , gmTicket . ticketTitle ) ;
cmd . Parameters . AddWithValue ( "@body" , gmTicket . ticketBody ) ;
cmd . Parameters . AddWithValue ( "@langCode" , gmTicket . langCode ) ;
cmd . ExecuteNonQuery ( ) ;
}
catch ( MySqlException e )
2016-08-21 18:16:54 -04:00
{
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 )
2016-08-18 22:58:09 -05:00
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
2016-08-20 19:16:33 -04:00
public static string [ ] getFAQNames ( uint langCode = 1 )
2016-08-18 22:58:09 -05:00
{
string [ ] faqs = null ;
List < string > raw = new List < string > ( ) ;
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
2016-08-20 19:16:33 -04:00
title
2016-08-18 22:58:09 -05:00
FROM supportdesk_faqs
2016-08-20 19:16:33 -04:00
WHERE languageCode = @langCode
ORDER BY slot
";
2016-08-18 22:58:09 -05:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
2016-08-20 19:16:33 -04:00
cmd . Parameters . AddWithValue ( "@langCode" , langCode ) ;
2016-08-18 22:58:09 -05:00
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
2016-08-20 19:16:33 -04:00
string label = reader . GetString ( 0 ) ;
2016-08-18 22:58:09 -05:00
raw . Add ( label ) ;
}
}
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
faqs = raw . ToArray ( ) ;
}
}
return faqs ;
}
2016-03-06 17:55:42 -05:00
2016-08-20 19:16:33 -04:00
public static string getFAQBody ( uint slot , uint langCode = 1 )
2016-08-18 22:58:09 -05:00
{
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
2016-08-20 19:16:33 -04:00
WHERE slot = @slot and languageCode = @langCode ";
2016-08-18 22:58:09 -05:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
2016-08-20 19:16:33 -04:00
cmd . Parameters . AddWithValue ( "@slot" , slot ) ;
cmd . Parameters . AddWithValue ( "@langCode" , langCode ) ;
2016-08-18 22:58:09 -05:00
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
2016-08-18 23:36:04 -05:00
body = reader . GetString ( 0 ) ;
2016-08-18 22:58:09 -05:00
}
}
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
return body ;
}
public static string [ ] getIssues ( uint lanCode = 1 )
{
string [ ] issues = null ;
List < string > raw = new List < string > ( ) ;
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
2016-08-20 19:16:33 -04:00
title
2016-08-18 22:58:09 -05:00
FROM supportdesk_issues
2016-08-20 19:16:33 -04:00
ORDER BY slot ";
2016-08-18 22:58:09 -05:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
2016-08-20 19:16:33 -04:00
string label = reader . GetString ( 0 ) ;
2016-08-18 22:58:09 -05:00
raw . Add ( label ) ;
}
}
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
issues = raw . ToArray ( ) ;
}
}
return issues ;
}
2016-08-19 14:40:43 -05:00
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 ( ) ;
}
}
}
2016-08-21 18:16:54 -04:00
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 ( ) ;
}
}
}
2017-08-26 13:53:23 -04:00
2017-07-15 19:33:47 +01:00
public static Dictionary < uint , StatusEffect > LoadGlobalStatusEffectList ( )
{
var effects = new Dictionary < uint , StatusEffect > ( ) ;
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 ( ) ;
var query = @"SELECT id, name, flags, overwrite FROM status_effects;" ;
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
var id = reader . GetUInt32 ( 0 ) ;
var name = reader . GetString ( 1 ) ;
var flags = reader . GetUInt32 ( 2 ) ;
var overwrite = reader . GetUInt32 ( 3 ) ;
var effect = new StatusEffect ( id , name , flags , overwrite ) ;
effects . Add ( id , effect ) ;
}
}
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
return effects ;
}
2017-07-16 17:35:10 +01:00
public static void SavePlayerStatusEffects ( Player player )
{
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 ( ) ;
// we'll run them all at once instead of one at a time
string queries = "" ;
foreach ( var effect in player . statusEffects . GetStatusEffects ( ) )
{
var duration = effect . GetDurationMs ( ) + effect . GetStartTime ( ) . Millisecond - Program . Tick . Millisecond ;
2017-07-27 03:58:42 +01:00
queries + = Environment . NewLine + $"REPLACE INTO characters_statuseffect(characterId, statusId, magnitude, duration, tick, tier, extra) VALUES ({player.actorId}, {effect.GetStatusEffectId()}, {effect.GetMagnitude()}, {duration}, {effect.GetTickMs()}, {effect.GetTier()}, {effect.GetExtra()});" ;
}
if ( queries . Length > 0 )
{
MySqlCommand cmd = new MySqlCommand ( queries , conn ) ;
cmd . ExecuteNonQuery ( ) ;
2017-07-16 17:35:10 +01:00
}
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
}
2017-08-02 23:06:11 +01:00
public static Dictionary < ushort , Ability > LoadGlobalAbilityList ( )
{
var abilities = new Dictionary < ushort , Ability > ( ) ;
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 ( ) ;
2017-08-22 19:47:54 +01:00
var query = ( "SELECT `id`, name, classJob, lvl, requirements, validTarget, aoeType, numHits, positionBonus, procRequirement, `range`, buffDuration, debuffDuration, " +
"castType, castTime, recastTime, mpCost, tpCost, animationType, effectAnimation, modelAnimation, animationDuration FROM abilities;" ) ;
2017-08-02 23:06:11 +01:00
MySqlCommand cmd = new MySqlCommand ( query , conn ) ;
using ( MySqlDataReader reader = cmd . ExecuteReader ( ) )
{
while ( reader . Read ( ) )
{
var id = reader . GetUInt16 ( 0 ) ;
var name = reader . GetString ( 1 ) ;
var ability = new Ability ( id , name ) ;
ability . job = reader . GetByte ( 2 ) ;
ability . level = reader . GetByte ( 3 ) ;
ability . requirements = ( AbilityRequirements ) reader . GetUInt16 ( 4 ) ;
2017-08-22 19:47:54 +01:00
ability . validTarget = ( ValidTarget ) reader . GetByte ( 5 ) ;
ability . aoeType = ( TargetFindAOEType ) reader . GetByte ( 6 ) ;
ability . numHits = reader . GetByte ( 7 ) ;
ability . positionBonus = ( AbilityPositionBonus ) reader . GetByte ( 8 ) ;
ability . procRequirement = ( AbilityProcRequirement ) reader . GetByte ( 9 ) ;
ability . range = reader . GetInt32 ( 10 ) ;
ability . debuffDurationSeconds = reader . GetUInt32 ( 11 ) ;
ability . buffDurationSeconds = reader . GetUInt32 ( 12 ) ;
ability . castType = reader . GetByte ( 13 ) ;
ability . castTimeSeconds = reader . GetUInt32 ( 14 ) ;
ability . recastTimeSeconds = reader . GetUInt32 ( 15 ) ;
ability . mpCost = reader . GetUInt16 ( 16 ) ;
ability . tpCost = reader . GetUInt16 ( 17 ) ;
ability . animationType = reader . GetByte ( 18 ) ;
ability . effectAnimation = reader . GetUInt16 ( 19 ) ;
ability . modelAnimation = reader . GetUInt16 ( 20 ) ;
ability . animationDurationSeconds = reader . GetUInt16 ( 21 ) ;
2017-08-25 03:52:43 +01:00
ability . battleAnimation = ( uint ) ( ( ability . animationType < < 24 ) | ( ability . modelAnimation < < 12 ) | ( ability . effectAnimation ) ) ;
2017-08-02 23:06:11 +01:00
abilities . Add ( id , ability ) ;
}
}
}
catch ( MySqlException e )
{
Program . Log . Error ( e . ToString ( ) ) ;
}
finally
{
conn . Dispose ( ) ;
}
}
return abilities ;
}
2017-08-26 20:17:16 +01:00
2015-09-25 18:52:25 -04:00
}
2016-12-11 23:31:13 -05:00
2015-09-25 18:52:25 -04:00
}