Merge branch 'master' into develop

# Conflicts:
#	FFXIVClassic Lobby Server/FFXIVClassic Lobby Server.csproj
#	FFXIVClassic Map Server/Database.cs
#	FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
#	FFXIVClassic Map Server/PacketProcessor.cs
#	FFXIVClassic Map Server/WorldManager.cs
#	FFXIVClassic Map Server/actors/Actor.cs
#	FFXIVClassic Map Server/actors/area/Area.cs
#	FFXIVClassic Map Server/actors/chara/player/Player.cs
#	FFXIVClassic Map Server/lua/LuaPlayer.cs
#	data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua
#	data/scripts/commands/gm/speed.lua
#	data/scripts/commands/gm/warp.lua
#	data/scripts/global.lua
#	data/scripts/player.lua
#	data/scripts/unique/fst0Town01a/PopulaceStandard/khuma_moshroca.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/ahldskyf.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/angry_river.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/ansgor.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/arnegis.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/arthurioux.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/astrid.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/audaine.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/bango_zango.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/bayard.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/bloemerl.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/bmallpa.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/bnhapla.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/chichiroon.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/drowsy-eyed_adventurer.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/eugennoix.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/fickle_beggar.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/hob.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/ivan.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/maetistym.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/mharelak.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/muscle-bound_deckhand.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/pasty-faced_adventurer.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/pearly-toothed_porter.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/ptahjha.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/suspicious-looking_traveler.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/syhrdaeg.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/syngsmyd.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/tatasako.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/tefh_moshroca.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/thata_khamazom.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/thosinbaen.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/tittering_traveler.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/totoruto.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/triaine.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/trinne.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/unconscious_adventurer.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/undsatz.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/vhynho.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/waekbyrt.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/whahtoa.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/wyra_khamazom.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/wyrstmann.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/xavalien.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/zonggo.lua
#	data/scripts/unique/sea0Town01a/PopulaceStandard/zuzule.lua
#	sql/server_zones_spawnlocations.sql
This commit is contained in:
Filip Maj 2017-08-26 13:53:23 -04:00
commit 74ce5a2fe1
56 changed files with 805 additions and 271 deletions

View file

@ -10,6 +10,7 @@ using FFXIVClassic_Map_Server.packets.send.player;
using FFXIVClassic_Map_Server.dataobjects;
using FFXIVClassic_Map_Server.Actors;
using FFXIVClassic_Map_Server.actors.chara.player;
using FFXIVClassic_Map_Server.packets.receive.supportdesk;
namespace FFXIVClassic_Map_Server
{
@ -29,10 +30,10 @@ namespace FFXIVClassic_Map_Server
cmd.Parameters.AddWithValue("@sessionId", sessionId);
using (MySqlDataReader Reader = cmd.ExecuteReader())
{
while (Reader.Read())
{
id = Reader.GetUInt32("userId");
}
while (Reader.Read())
{
id = Reader.GetUInt32("userId");
}
}
}
catch (MySqlException e)
@ -42,10 +43,10 @@ namespace FFXIVClassic_Map_Server
finally
{
conn.Dispose();
}
}
}
return id;
}
}
public static List<Npc> GetNpcList()
{
@ -122,7 +123,7 @@ namespace FFXIVClassic_Map_Server
{
conn.Dispose();
}
return gamedataItems;
}
}
@ -262,7 +263,7 @@ namespace FFXIVClassic_Map_Server
public static void SavePlayerPosition(Player player)
{
string query;
string query;
MySqlCommand cmd;
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
@ -284,7 +285,7 @@ namespace FFXIVClassic_Map_Server
currentPrivateAreaType = @privateAreaType
WHERE id = @charaId
";
cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charaId", player.actorId);
cmd.Parameters.AddWithValue("@x", player.positionX);
@ -637,9 +638,9 @@ namespace FFXIVClassic_Map_Server
}
public static void LoadPlayerCharacter(Player player)
{
{
string query;
MySqlCommand cmd;
MySqlCommand cmd;
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
{
@ -724,7 +725,7 @@ namespace FFXIVClassic_Map_Server
player.zone = Server.GetWorldManager().GetZone(player.zoneId);
}
}
//Get class levels
query = @"
SELECT
@ -757,7 +758,7 @@ namespace FFXIVClassic_Map_Server
{
if (reader.Read())
{
player.charaWork.battleSave.skillLevel[Player.CLASSID_PUG-1] = reader.GetInt16("pug");
player.charaWork.battleSave.skillLevel[Player.CLASSID_PUG - 1] = reader.GetInt16("pug");
player.charaWork.battleSave.skillLevel[Player.CLASSID_GLA - 1] = reader.GetInt16("gla");
player.charaWork.battleSave.skillLevel[Player.CLASSID_MRD - 1] = reader.GetInt16("mrd");
player.charaWork.battleSave.skillLevel[Player.CLASSID_ARC - 1] = reader.GetInt16("arc");
@ -806,7 +807,7 @@ namespace FFXIVClassic_Map_Server
player.charaWork.parameterSave.state_mainSkillLevel = player.charaWork.battleSave.skillLevel[reader.GetByte(4) - 1];
}
}
//Load appearance
query = @"
SELECT
@ -949,7 +950,7 @@ namespace FFXIVClassic_Map_Server
player.timers[i] = reader.GetUInt32(i);
}
}
//Load Hotbar
query = @"
SELECT
@ -962,11 +963,11 @@ namespace FFXIVClassic_Map_Server
cmd.Parameters.AddWithValue("@charId", player.actorId);
cmd.Parameters.AddWithValue("@classId", player.charaWork.parameterSave.state_mainSkill[0]);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
{
while (reader.Read())
{
int index = reader.GetUInt16(0);
player.charaWork.command[index+32] = reader.GetUInt32(1);
player.charaWork.command[index + 32] = reader.GetUInt32(1);
player.charaWork.parameterSave.commandSlot_recastTime[index] = reader.GetUInt32(2);
}
}
@ -980,7 +981,7 @@ namespace FFXIVClassic_Map_Server
questFlags,
currentPhase
FROM characters_quest_scenario WHERE characterId = @charId";
cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player.actorId);
using (MySqlDataReader reader = cmd.ExecuteReader())
@ -1069,7 +1070,7 @@ namespace FFXIVClassic_Map_Server
{
int npcLSId = reader.GetUInt16(0);
player.playerWork.npcLinkshellChatCalling[npcLSId] = reader.GetBoolean(1);
player.playerWork.npcLinkshellChatExtra[npcLSId] = reader.GetBoolean(2);
player.playerWork.npcLinkshellChatExtra[npcLSId] = reader.GetBoolean(2);
}
}
@ -1121,7 +1122,7 @@ namespace FFXIVClassic_Map_Server
{
ushort equipSlot = reader.GetUInt16(0);
ulong uniqueItemId = reader.GetUInt16(1);
InventoryItem item = player.GetInventory(Inventory.NORMAL).GetItemById(uniqueItemId);
InventoryItem item = player.GetInventory(Inventory.NORMAL).GetItemByUniqueId(uniqueItemId);
equipment[equipSlot] = item;
}
}
@ -1244,7 +1245,7 @@ namespace FFXIVClassic_Map_Server
cmd.Parameters.AddWithValue("@type", type);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
{
while (reader.Read())
{
uint uniqueId = reader.GetUInt32(0);
@ -1291,7 +1292,7 @@ namespace FFXIVClassic_Map_Server
{
conn.Open();
string query = @"
INSERT INTO server_items
@ -1309,7 +1310,7 @@ namespace FFXIVClassic_Map_Server
";
MySqlCommand cmd2 = new MySqlCommand(query2, conn);
cmd.Parameters.AddWithValue("@itemId", itemId);
cmd.Parameters.AddWithValue("@quality", quality);
cmd.Parameters.AddWithValue("@itemType", itemType);
@ -1345,12 +1346,12 @@ namespace FFXIVClassic_Map_Server
{
conn.Open();
string query = @"
string query = @"
UPDATE characters_inventory
SET quantity = @quantity
WHERE characterId = @charId AND slot = @slot AND inventoryType = @type;
";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player.actorId);
cmd.Parameters.AddWithValue("@quantity", quantity);
@ -1390,7 +1391,7 @@ namespace FFXIVClassic_Map_Server
DELETE FROM server_items
WHERE id = @serverItemId;
";
";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@charId", player.actorId);
@ -1460,7 +1461,7 @@ namespace FFXIVClassic_Map_Server
try
{
conn.Open();
//Load Last 5 Completed
string query = @"
SELECT
@ -1475,7 +1476,7 @@ namespace FFXIVClassic_Map_Server
int count = 0;
while (reader.Read())
{
uint id = reader.GetUInt32(0);
uint id = reader.GetUInt32(0);
latestAchievements[count++] = id;
}
}
@ -1502,7 +1503,7 @@ namespace FFXIVClassic_Map_Server
try
{
conn.Open();
string query = @"
SELECT packetOffsetId
FROM characters_achievements
@ -1514,7 +1515,7 @@ namespace FFXIVClassic_Map_Server
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
{
uint offset = reader.GetUInt32(0);
if (offset < 0 || offset >= cheevosPacket.achievementFlags.Length)
@ -1522,7 +1523,7 @@ namespace FFXIVClassic_Map_Server
Program.Log.Error("SQL Error; achievement flag offset id out of range: " + offset);
continue;
}
cheevosPacket.achievementFlags[offset] = true;
cheevosPacket.achievementFlags[offset] = true;
}
}
}
@ -1538,7 +1539,6 @@ namespace FFXIVClassic_Map_Server
return cheevosPacket.BuildPacket(player.actorId);
}
public static bool CreateLinkshell(Player player, string lsName, ushort lsCrest)
{
bool success = false;
@ -1559,7 +1559,7 @@ namespace FFXIVClassic_Map_Server
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@lsName", lsName);
cmd.Parameters.AddWithValue("@master", player.actorId);
cmd.Parameters.AddWithValue("@crest", lsCrest);
cmd.Parameters.AddWithValue("@crest", lsCrest);
cmd.ExecuteNonQuery();
success = true;
@ -1615,6 +1615,315 @@ namespace FFXIVClassic_Map_Server
}
}
}
public static bool SaveSupportTicket(GMSupportTicketPacket gmTicket, string playerName)
{
string query;
MySqlCommand cmd;
bool wasError = false;
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
{
try
{
conn.Open();
query = @"
INSERT INTO supportdesk_tickets
(name, title, body, langCode)
VALUES
(@name, @title, @body, @langCode)";
cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@name", playerName);
cmd.Parameters.AddWithValue("@title", gmTicket.ticketTitle);
cmd.Parameters.AddWithValue("@body", gmTicket.ticketBody);
cmd.Parameters.AddWithValue("@langCode", gmTicket.langCode);
cmd.ExecuteNonQuery();
}
catch (MySqlException e)
{
Program.Log.Error(e.ToString());
wasError = true;
}
finally
{
conn.Dispose();
}
}
return wasError;
}
public static bool isTicketOpen(string playerName)
{
bool isOpen = false;
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
{
try
{
conn.Open();
string query = @"
SELECT
isOpen
FROM supportdesk_tickets
WHERE name = @name
";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@name", playerName);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
isOpen = reader.GetBoolean(0);
}
}
}
catch (MySqlException e)
{
Program.Log.Error(e.ToString());
}
finally
{
conn.Dispose();
}
}
return isOpen;
}
public static void closeTicket(string playerName)
{
bool isOpen = false;
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
{
try
{
conn.Open();
string query = @"
UPDATE
supportdesk_tickets
SET isOpen = 0
WHERE name = @name
";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@name", playerName);
cmd.ExecuteNonQuery();
}
catch (MySqlException e)
{
Program.Log.Error(e.ToString());
}
finally
{
conn.Dispose();
}
}
}
public static string[] getFAQNames(uint langCode = 1)
{
string[] faqs = null;
List<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
title
FROM supportdesk_faqs
WHERE languageCode = @langCode
ORDER BY slot
";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@langCode", langCode);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
string label = reader.GetString(0);
raw.Add(label);
}
}
}
catch (MySqlException e)
{
Program.Log.Error(e.ToString());
}
finally
{
conn.Dispose();
faqs = raw.ToArray();
}
}
return faqs;
}
public static string getFAQBody(uint slot, uint langCode = 1)
{
string body = string.Empty;
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
{
try
{
conn.Open();
string query = @"
SELECT
body
FROM supportdesk_faqs
WHERE slot=@slot and languageCode=@langCode";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@slot", slot);
cmd.Parameters.AddWithValue("@langCode", langCode);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
body = reader.GetString(0);
}
}
}
catch (MySqlException e)
{
Program.Log.Error(e.ToString());
}
finally
{
conn.Dispose();
}
}
return body;
}
public static string[] getIssues(uint lanCode = 1)
{
string[] issues = null;
List<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
title
FROM supportdesk_issues
ORDER BY slot";
MySqlCommand cmd = new MySqlCommand(query, conn);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
string label = reader.GetString(0);
raw.Add(label);
}
}
}
catch (MySqlException e)
{
Program.Log.Error(e.ToString());
}
finally
{
conn.Dispose();
issues = raw.ToArray();
}
}
return issues;
}
public static void IssuePlayerChocobo(Player player, byte appearanceId, string name)
{
string query;
MySqlCommand cmd;
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
{
try
{
conn.Open();
query = @"
INSERT INTO characters_chocobo
(characterId, hasChocobo, chocoboAppearance, chocoboName)
VALUES
(@characterId, @hasChocobo, @chocoboAppearance, @chocoboName)
ON DUPLICATE KEY UPDATE
hasChocobo=@hasChocobo, chocoboAppearance=@chocoboAppearance, chocoboName=@chocoboName";
cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@characterId", player.actorId);
cmd.Parameters.AddWithValue("@hasChocobo", 1);
cmd.Parameters.AddWithValue("@chocoboAppearance", appearanceId);
cmd.Parameters.AddWithValue("@chocoboName", name);
cmd.ExecuteNonQuery();
}
catch (MySqlException e)
{
Program.Log.Error(e.ToString());
}
finally
{
conn.Dispose();
}
}
}
public static void ChangePlayerChocoboAppearance(Player player, byte appearanceId)
{
string query;
MySqlCommand cmd;
using (MySqlConnection conn = new MySqlConnection(String.Format("Server={0}; Port={1}; Database={2}; UID={3}; Password={4}", ConfigConstants.DATABASE_HOST, ConfigConstants.DATABASE_PORT, ConfigConstants.DATABASE_NAME, ConfigConstants.DATABASE_USERNAME, ConfigConstants.DATABASE_PASSWORD)))
{
try
{
conn.Open();
query = @"
UPDATE characters_chocobo
SET
chocoboAppearance=@chocoboAppearance
WHERE
characterId = @characterId";
cmd = new MySqlCommand(query, conn);
cmd.Parameters.AddWithValue("@characterId", player.actorId);
cmd.Parameters.AddWithValue("@chocoboAppearance", appearanceId);
cmd.ExecuteNonQuery();
}
catch (MySqlException e)
{
Program.Log.Error(e.ToString());
}
finally
{
conn.Dispose();
}
}
}
}
}

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\Microsoft.Net.Compilers.2.0.0-beta3\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.0.0-beta3\build\Microsoft.Net.Compilers.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<Import Project="..\packages\Microsoft.Net.Compilers.2.0.0-beta3\build\Microsoft.Net.Compilers.props" Condition="Exists('..\packages\Microsoft.Net.Compilers.2.0.0-beta3\build\Microsoft.Net.Compilers.props') AND '$(OS)' == 'Windows_NT'" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props') AND '$(OS)' == 'Windows_NT'" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@ -223,19 +223,19 @@
<Compile Include="packets\send\groups\ContentMembersX64Packet.cs" />
<Compile Include="packets\send\groups\GroupMembersX64Packet.cs" />
<Compile Include="packets\send\groups\SynchGroupWorkValuesPacket.cs" />
<Compile Include="packets\send\player\InfoRequestResponsePacket.cs" />
<Compile Include="packets\send\player\GenericDataPacket.cs" />
<Compile Include="packets\send\player\SendAchievementRatePacket.cs" />
<Compile Include="packets\send\player\SetCurrentJobPacket.cs" />
<Compile Include="packets\send\player\SetCurrentMountGoobbuePacket.cs" />
<Compile Include="packets\send\player\SetCurrentMountChocoboPacket.cs" />
<Compile Include="packets\send\player\SetGrandCompanyPacket.cs" />
<Compile Include="packets\send\actor\SetActorNamePacket.cs" />
<Compile Include="packets\send\actor\SetActorPropetyPacket.cs" />
<Compile Include="packets\send\actor\SetActorSpeedPacket.cs" />
<Compile Include="packets\send\actor\SetActorStatePacket.cs" />
<Compile Include="packets\send\actor\SetActorTargetAnimatedPacket.cs" />
<Compile Include="packets\send\actor\SetActorTargetPacket.cs" />
<Compile Include="packets\send\actor\SetActorStatusAllPacket.cs" />
<Compile Include="packets\send\Actor\SetActorNamePacket.cs" />
<Compile Include="packets\send\Actor\SetActorPropetyPacket.cs" />
<Compile Include="packets\send\Actor\SetActorSpeedPacket.cs" />
<Compile Include="packets\send\Actor\SetActorStatePacket.cs" />
<Compile Include="packets\send\Actor\SetActorTargetAnimatedPacket.cs" />
<Compile Include="packets\send\Actor\SetActorTargetPacket.cs" />
<Compile Include="packets\send\Actor\SetActorStatusAllPacket.cs" />
<Compile Include="packets\send\login\0x2Packet.cs" />
<Compile Include="packets\send\actor\AddActorPacket.cs" />
<Compile Include="packets\send\actor\MoveActorToPositionPacket.cs" />

View file

@ -347,3 +347,4 @@ namespace FFXIVClassic_Map_Server
}
}

View file

@ -1116,7 +1116,5 @@ namespace FFXIVClassic_Map_Server
else
return null;
}
}
}

View file

@ -1,6 +1,5 @@
using FFXIVClassic_Map_Server;
using FFXIVClassic.Common;
using FFXIVClassic_Map_Server.actors.area;
using FFXIVClassic_Map_Server.actors.chara.npc;
using FFXIVClassic_Map_Server.dataobjects;
@ -282,6 +281,7 @@ namespace FFXIVClassic_Map_Server.Actors
}
}
}
//Remove players if isolation zone
if (isIsolated)
{
@ -410,7 +410,6 @@ namespace FFXIVClassic_Map_Server.Actors
Npc npc = new Npc(mActorList.Count + 1, actorClass, location.uniqueId, this, location.x, location.y, location.z, location.rot, location.state, location.animId, null);
npc.LoadEventConditions(actorClass.eventConditions);
AddActorToZone(npc);

View file

@ -52,8 +52,8 @@ namespace FFXIVClassic_Map_Server.Actors
LoadNpcAppearance(actorClass.actorClassId);
this.classPath = actorClass.classPath;
className = classPath.Substring(classPath.LastIndexOf("/")+1);
className = actorClass.classPath.Substring(actorClass.classPath.LastIndexOf("/") + 1);
this.classPath = String.Format("{0}/{1}", actorClass.classPath.Substring(0, actorClass.classPath.LastIndexOf('/')).ToLower(), className);
charaWork.battleSave.potencial = 1.0f;

View file

@ -46,14 +46,24 @@ namespace FFXIVClassic_Map_Server.actors.chara.player
return null;
}
public InventoryItem GetItemById(ulong itemId)
public InventoryItem GetItemByUniqueId(ulong uniqueItemId)
{
foreach (InventoryItem item in list)
{
if (item.uniqueId == itemId)
{
if (item.uniqueId == uniqueItemId)
return item;
}
return null;
}
public InventoryItem GetItemByCatelogId(ulong catelogId)
{
foreach (InventoryItem item in list)
{
if (item.itemId == catelogId)
return item;
}
return null;
}
public void RefreshItem(InventoryItem item)

View file

@ -1,5 +1,4 @@
using FFXIVClassic.Common;
using FFXIVClassic_Map_Server.actors.chara.player;
using FFXIVClassic_Map_Server.actors.director;
using FFXIVClassic_Map_Server.dataobjects;
@ -8,6 +7,9 @@ using FFXIVClassic_Map_Server.lua;
using FFXIVClassic_Map_Server.packets.send;
using FFXIVClassic_Map_Server.packets.send.actor;
using FFXIVClassic_Map_Server.packets.send.events;
using FFXIVClassic_Map_Server.packets.send.actor.events;
using FFXIVClassic_Map_Server.packets.send.actor.inventory;
using FFXIVClassic_Map_Server.packets.send.events;
using FFXIVClassic_Map_Server.packets.send.player;
using FFXIVClassic_Map_Server.utils;
using System;
@ -340,6 +342,7 @@ namespace FFXIVClassic_Map_Server.Actors
subpackets.Add(SetHasGoobbuePacket.BuildPacket(actorId, hasGoobbue));
subpackets.Add(SetAchievementPointsPacket.BuildPacket(actorId, achievementPoints));
subpackets.Add(Database.GetLatestAchievements(this));
subpackets.Add(Database.GetAchievementsPacket(this));
}
@ -543,6 +546,7 @@ namespace FFXIVClassic_Map_Server.Actors
playerSession.QueuePacket(worldMasterSpawn);
//Inn Packets (Dream, Cutscenes, Armoire)
if (zone.isInn)
{
SetCutsceneBookPacket cutsceneBookPacket = new SetCutsceneBookPacket();
@ -569,7 +573,6 @@ namespace FFXIVClassic_Map_Server.Actors
if (currentContentGroup != null)
currentContentGroup.SendGroupPackets(playerSession);
}
private void SendRemoveInventoryPackets(List<ushort> slots)
@ -600,6 +603,7 @@ namespace FFXIVClassic_Map_Server.Actors
}
public void QueuePacket(SubPacket packet)
{
playerSession.QueuePacket(packet);
}
@ -708,7 +712,7 @@ namespace FFXIVClassic_Map_Server.Actors
//Save Player
Database.SavePlayerPlayTime(this);
Database.SavePlayerPosition(this);
Database.SavePlayerPosition(this);
}
public Area GetZone()
@ -987,6 +991,7 @@ namespace FFXIVClassic_Map_Server.Actors
else
{
ItemData item = Server.GetItemGamedata(invItem.itemId);
if (item is EquipmentItem)
{
EquipmentItem eqItem = (EquipmentItem)item;
@ -1021,7 +1026,6 @@ namespace FFXIVClassic_Map_Server.Actors
}
Database.SavePlayerAppearance(this);
BroadcastPacket(CreateAppearancePacket(), true);
}
@ -1033,6 +1037,14 @@ namespace FFXIVClassic_Map_Server.Actors
return null;
}
public int GetCurrentGil()
{
if (GetInventory(Inventory.CURRENCY).HasItem(1000001))
return GetInventory(Inventory.CURRENCY).GetItemByCatelogId(1000001).quantity;
else
return 0;
}
public Actor GetActorInInstance(uint actorId)
{
foreach (Actor a in playerSession.actorInstanceList)
@ -1546,7 +1558,7 @@ namespace FFXIVClassic_Map_Server.Actors
public void SendDataPacket(params object[] parameters)
{
List<LuaParam> lParams = LuaUtils.CreateLuaParamList(parameters);
SubPacket spacket = InfoRequestResponsePacket.BuildPacket(actorId, lParams);
SubPacket spacket = GenericDataPacket.BuildPacket(actorId, lParams);
spacket.DebugPrintSubPacket();
QueuePacket(spacket);
}
@ -1702,5 +1714,18 @@ namespace FFXIVClassic_Map_Server.Actors
LuaEngine.GetInstance().CallLuaFunction(this, this, "OnUpdate", true, delta);
}
public void IssueChocobo(byte appearanceId, string nameResponse)
{
Database.IssuePlayerChocobo(this, appearanceId, nameResponse);
hasChocobo = true;
chocoboAppearance = appearanceId;
chocoboName = nameResponse;
}
public void ChangeChocoboAppearance(byte appearanceId)
{
Database.ChangePlayerChocoboAppearance(this, appearanceId);
chocoboAppearance = appearanceId;
}
}
}

View file

@ -6,7 +6,7 @@ using FFXIVClassic.Common;
namespace FFXIVClassic_Map_Server.packets.send.player
{
class InfoRequestResponsePacket
class GenericDataPacket
{
public const ushort OPCODE = 0x0133;
public const uint PACKET_SIZE = 0xE0;