diff --git a/FFXIVClassic Common Class Lib/FFXIVClassic Common Class Lib.csproj b/FFXIVClassic Common Class Lib/FFXIVClassic Common Class Lib.csproj
index a08e253f..5e54cb7e 100644
--- a/FFXIVClassic Common Class Lib/FFXIVClassic Common Class Lib.csproj
+++ b/FFXIVClassic Common Class Lib/FFXIVClassic Common Class Lib.csproj
@@ -1,7 +1,7 @@
-
-
+
+
Debug
AnyCPU
@@ -87,4 +87,4 @@
-->
-
\ No newline at end of file
+
diff --git a/FFXIVClassic Map Server/Database.cs b/FFXIVClassic Map Server/Database.cs
index 576ef116..d94443f9 100644
--- a/FFXIVClassic Map Server/Database.cs
+++ b/FFXIVClassic Map Server/Database.cs
@@ -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 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 raw = new List();
+ 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 raw = new List();
+ 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();
+ }
+ }
+ }
+
}
}
diff --git a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
index 89f7ce5b..757f98dc 100644
--- a/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
+++ b/FFXIVClassic Map Server/FFXIVClassic Map Server.csproj
@@ -1,7 +1,7 @@
-
-
+
+
Debug
AnyCPU
@@ -223,19 +223,19 @@
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs
index 22a88476..09b7b7ab 100644
--- a/FFXIVClassic Map Server/PacketProcessor.cs
+++ b/FFXIVClassic Map Server/PacketProcessor.cs
@@ -347,3 +347,4 @@ namespace FFXIVClassic_Map_Server
}
}
+
diff --git a/FFXIVClassic Map Server/WorldManager.cs b/FFXIVClassic Map Server/WorldManager.cs
index cd0560ba..12e82dde 100644
--- a/FFXIVClassic Map Server/WorldManager.cs
+++ b/FFXIVClassic Map Server/WorldManager.cs
@@ -1116,7 +1116,5 @@ namespace FFXIVClassic_Map_Server
else
return null;
}
-
}
-
}
diff --git a/FFXIVClassic Map Server/actors/area/Area.cs b/FFXIVClassic Map Server/actors/area/Area.cs
index 220ac86b..71ff41ee 100644
--- a/FFXIVClassic Map Server/actors/area/Area.cs
+++ b/FFXIVClassic Map Server/actors/area/Area.cs
@@ -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);
diff --git a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs
index bb6f4b28..edae3e77 100644
--- a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs
+++ b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs
@@ -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;
diff --git a/FFXIVClassic Map Server/actors/chara/player/Inventory.cs b/FFXIVClassic Map Server/actors/chara/player/Inventory.cs
index 2066ad72..c33f15ff 100644
--- a/FFXIVClassic Map Server/actors/chara/player/Inventory.cs
+++ b/FFXIVClassic Map Server/actors/chara/player/Inventory.cs
@@ -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)
diff --git a/FFXIVClassic Map Server/actors/chara/player/Player.cs b/FFXIVClassic Map Server/actors/chara/player/Player.cs
index 4018cbed..b1395149 100644
--- a/FFXIVClassic Map Server/actors/chara/player/Player.cs
+++ b/FFXIVClassic Map Server/actors/chara/player/Player.cs
@@ -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 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 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;
+ }
}
}
diff --git a/FFXIVClassic Map Server/packets/send/player/InfoRequestResponsePacket.cs b/FFXIVClassic Map Server/packets/send/player/GenericDataPacket.cs
similarity index 95%
rename from FFXIVClassic Map Server/packets/send/player/InfoRequestResponsePacket.cs
rename to FFXIVClassic Map Server/packets/send/player/GenericDataPacket.cs
index 6af21e9e..1240c077 100644
--- a/FFXIVClassic Map Server/packets/send/player/InfoRequestResponsePacket.cs
+++ b/FFXIVClassic Map Server/packets/send/player/GenericDataPacket.cs
@@ -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;
diff --git a/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua b/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua
index e2cb475a..18163c85 100644
--- a/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua
+++ b/data/scripts/base/chara/npc/populace/PopulaceChocoboLender.lua
@@ -15,17 +15,100 @@ eventTalkStepBreak(player) - Finishes talkTurn and says a goodbye
require ("global")
+local gcIssuances = {
+ [1500006] = 2001004,
+ [1500061] = 2001005,
+ [1000840] = 2001006
+};
+
+local startAppearances = {
+ [1500006] = CHOCOBO_LIMSA1,
+ [1500061] = CHOCOBO_GRIDANIA1,
+ [1000840] = CHOCOBO_ULDAH1
+};
+
+local cityExits = {
+ [1500006] = 15,
+ [1500061] = 14,
+ [1000840] = 16
+};
+
function init(npc)
return false, false, 0, 0;
end
function onEventStarted(player, npc, triggerName)
- callClientFunction(player, "eventTalkWelcome", player);
- callClientFunction(player, "eventAskMainMenu", player, 20, true, true, true, true, 4);
+ --callClientFunction(player, "eventTalkWelcome", player);
+ --callClientFunction(player, "eventAskMainMenu", player, 20, true, true, true, true, 4);
--callClientFunction(player, "eventTalkMyChocobo", player);
--callClientFunction(player, "eventSetChocoboName", false);
--callClientFunction(player, "eventAfterChocoboName", player);
+
+ local curLevel = 20; -- TODO: pull from character
+ local hasIssuance = player:GetInventory(INVENTORY_KEYITEMS):HasItem(gcIssuances[npc:GetActorClassId()]);
+ local hasChocobo = player.hasChocobo;
+ if (player.isGM and hasChocobo == false) then -- Let GMs auto have the issuance for debugging
+ hasIssuance = true;
+ end
+
+ local rentPrice = 800;
+ local hasFunds = (player:GetCurrentGil() >= rentPrice);
+
+ callClientFunction(player, "eventTalkWelcome", player);
+
+ local menuChoice = callClientFunction(player, "eventAskMainMenu", player, curLevel, hasFunds, hasIssuance, true, true, player.chocoboAppearance);
+
+ if (menuChoice == 1) then -- Issuance option
+ callClientFunction(player, "eventTalkMyChocobo", player);
+ local nameResponse = callClientFunction(player, "eventSetChocoboName", true);
+
+ if (nameResponse == "") then -- Cancel Chocobo naming
+ callClientFunction(player, "eventCancelChocoboName", player);
+ callClientFunction(player, "eventTalkStepBreak", player);
+ player:EndEvent();
+ return;
+ else
+ local appearance = startAppearances[npc:GetActorClassId()];
+ player:IssueChocobo(appearance, nameResponse);
+ callClientFunction(player, "eventAfterChocoboName", player);
+ mountChocobo(player);
+ GetWorldManager():DoZoneChange(player, cityExits[npc:GetActorClassId()]);
+ player:SendGameMessage(player, GetWorldMaster(), 25248, 0x20, 2001007);
+ player:SendDataPacket("attention", GetWorldMaster(), "", 25248, 2001007);
+
+ if (player:GetInventory(INVENTORY_KEYITEMS):HasItem(2001007) == false) then
+ player:GetInventory(INVENTORY_KEYITEMS):AddItem(2001007);
+ end
+
+ player:GetInventory(INVENTORY_KEYITEMS):RemoveItem(gcIssuances[npc:GetActorClassId()], 1);
+
+ player:EndEvent();
+ return;
+ end
+
+ elseif(menuChoice == 2) then -- Summon Bird
+ mountChocobo(player);
+ GetWorldManager():DoZoneChange(player, cityExits[npc:GetActorClassId()]);
+ elseif(menuChoice == 3) then -- Change Barding
+ callClientFunction(player, "eventTalkStepBreak", player);
+ elseif(menuChoice == 5) then -- Rent Bird
+ issueRentalChocobo(player);
+ else
+ callClientFunction(player, "eventTalkStepBreak", player);
+ end
+
player:EndEvent();
-end
\ No newline at end of file
+end
+
+function mountChocobo(player)
+ player:SendChocoboAppearance();
+ player:SetMountState(1);
+ player:ChangeSpeed(0.0, 5.0, 10.0);
+ player:ChangeState(15);
+end
+
+function issueRentalChocobo(player)
+ --TODO: Write issue rental chocobo code
+end
diff --git a/data/scripts/commands/gm/delcurrency.lua b/data/scripts/commands/gm/delcurrency.lua
index 4eaaf4fe..28318d71 100644
--- a/data/scripts/commands/gm/delcurrency.lua
+++ b/data/scripts/commands/gm/delcurrency.lua
@@ -2,11 +2,16 @@ require("global");
properties = {
permissions = 0,
- parameters = "sssss",
- description = "removes from , currency is removed from user if is nil",
+ parameters = "ssss",
+ description =
+[[
+Removes currency from player or
+!delcurrency - |
+!delcurrency
- |
+]],
}
-function onTrigger(player, argc, currency, qty, location, name, lastName)
+function onTrigger(player, argc, currency, qty, name, lastName)
local sender = "[delcurrency] ";
if name then
@@ -19,12 +24,11 @@ function onTrigger(player, argc, currency, qty, location, name, lastName)
if player then
currency = tonumber(currency) or nil;
- qty = 1;
- location = INVENTORY_CURRENCY;
+ qty = tonumber(qty) or 1;
- local removed = player:GetInventory(location):removecurrency(currency, qty);
+ local removed = player:GetInventory(INVENTORY_CURRENCY):RemoveItem(currency, qty);
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
- local message = "unable to remove currency";
+ local message = "Attempting to remove currency" -- "unable to remove currency";
if currency and removed then
message = string.format("removed currency %u from %s", currency, player:GetName());
diff --git a/data/scripts/commands/gm/delitem.lua b/data/scripts/commands/gm/delitem.lua
index 90c89082..bdfcd761 100644
--- a/data/scripts/commands/gm/delitem.lua
+++ b/data/scripts/commands/gm/delitem.lua
@@ -3,11 +3,18 @@ require("global");
properties = {
permissions = 0,
parameters = "sssss",
- description = "removes
- from for . and are optional, item is removed from user if is nil",
+ description =
+[[
+Removes
- from for player or .
+!delitem
- |
+!delitem
- |
+!delitem
- |
+]],
}
function onTrigger(player, argc, item, qty, location, name, lastName)
local sender = "[delitem] ";
+ local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
if name then
if lastName then
@@ -20,18 +27,29 @@ function onTrigger(player, argc, item, qty, location, name, lastName)
if player then
item = tonumber(item) or nil;
qty = tonumber(qty) or 1;
- location = tonumber(itemtype) or INVENTORY_NORMAL;
- local removed = player:GetInventory(location):removeItem(item, qty);
- local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
- local message = "unable to remove item";
+ if location then
+ location = tonumber(location) or _G[string.upper(location)];
+
+ if location == nil then
+ player:SendMessage(messageID, sender, "Unknown item location.");
+ return;
+ end;
+ else
+ location = INVENTORY_NORMAL;
+ end;
- if item and removed then
- message = string.format("removed item %u from %s", item, player:GetName());
- end
- player:SendMessage(messageID, sender, message);
- print(message);
+ local removed = player:GetInventory(location):RemoveItem(item, qty);
+
+ if removed then -- RemoveItem() currently returns nothing for verification, this statement can't work
+ message = string.format("Removed item %u of kind %u to %s", item, location, player:GetName());
+ end;
else
- print(sender.."unable to remove item, ensure player name is valid.");
+ print(sender.."[giveitem] Unable to remove item, ensure player name is valid.");
+ return;
end;
+
+ local message = string.format("Attempting to remove item %u of kind %u from %s", item, location, player:GetName());
+ player:SendMessage(messageID, sender, message);
+ print(message);
end;
\ No newline at end of file
diff --git a/data/scripts/commands/gm/delkeyitem.lua b/data/scripts/commands/gm/delkeyitem.lua
index 66ad8549..be763961 100644
--- a/data/scripts/commands/gm/delkeyitem.lua
+++ b/data/scripts/commands/gm/delkeyitem.lua
@@ -3,7 +3,12 @@ require("global");
properties = {
permissions = 0,
parameters = "ssss",
- description = "removes from , keyitem is removed from user if is nil",
+ description =
+[[
+Removes from player or .
+!delkeyitem |
+!delkeyitem |
+]],
}
function onTrigger(player, argc, keyitem, qty, name, lastName)
@@ -19,16 +24,16 @@ function onTrigger(player, argc, keyitem, qty, name, lastName)
if player then
keyitem = tonumber(keyitem) or nil;
- qty = 1;
- location = INVENTORY_KEYITEMS;
-
- local removed = player:GetInventory(location):removeItem(item, qty);
+ qty = tonumber(qty) or 1;
+ local location = INVENTORY_KEYITEMS;
+
+ local removed = player:GetInventory(location):RemoveItem(keyitem, qty);
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
- local message = "unable to remove keyitem";
+ local message = "Attempting to remove keyitem" -- "unable to remove keyitem";
- if keyitem and removed then
+ if removed then
message = string.format("removed keyitem %u from %s", keyitem, player:GetName());
- end
+ end;
player:SendMessage(messageID, sender, message);
print(message);
else
diff --git a/data/scripts/commands/gm/givecurrency.lua b/data/scripts/commands/gm/givecurrency.lua
index fea8f5fd..564dd73d 100644
--- a/data/scripts/commands/gm/givecurrency.lua
+++ b/data/scripts/commands/gm/givecurrency.lua
@@ -2,11 +2,16 @@ require("global");
properties = {
permissions = 0,
- parameters = "sss",
- description = "adds to self or .",
+ parameters = "ssss",
+ description =
+[[
+Adds currency to player or
+!addcurrency
- |
+!addcurrency
- |
+]],
}
-function onTrigger(player, argc, currency, name, lastName)
+function onTrigger(player, argc, currency, qty, name, lastName)
local sender = "[givecurrency] ";
if name then
@@ -19,10 +24,10 @@ function onTrigger(player, argc, currency, name, lastName)
if player then
currency = tonumber(currency) or nil;
- qty = 1;
+ qty = tonumber(qty) or 1;
location = INVENTORY_CURRENCY;
- local added = player:GetInventory(location):AddItem(currency, qty);
+ local added = player:GetInventory(location):AddItem(currency, qty, 1);
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
local message = "unable to add currency";
diff --git a/data/scripts/commands/gm/giveitem.lua b/data/scripts/commands/gm/giveitem.lua
index 47c94a57..0b16b329 100644
--- a/data/scripts/commands/gm/giveitem.lua
+++ b/data/scripts/commands/gm/giveitem.lua
@@ -3,12 +3,20 @@ require("global");
properties = {
permissions = 0,
parameters = "sssss",
- description = "adds
- to for . and are optional, item is added to user if is nil",
+ description =
+[[
+Adds
- to for player or .
+!giveitem
- |
+!giveitem
- |
+!giveitem
- |
+]],
}
function onTrigger(player, argc, item, qty, location, name, lastName)
local sender = "[giveitem] ";
-
+ local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
+ local message = string.format("Unable to add item %u", item);
+
if name then
if lastName then
player = GetWorldManager():GetPCInWorld(name.." "..lastName) or nil;
@@ -20,17 +28,28 @@ function onTrigger(player, argc, item, qty, location, name, lastName)
if player then
item = tonumber(item) or nil;
qty = tonumber(qty) or 1;
- location = tonumber(itemtype) or INVENTORY_NORMAL;
- local added = player:GetInventory(location):AddItem(item, qty);
- local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
- local message = "unable to add item";
- if item and added then
- message = string.format("added item %u to %s", item, player:GetName());
- end
- player:SendMessage(messageID, sender, message);
- print(message);
+ if location then
+ location = tonumber(location) or _G[string.upper(location)];
+
+ if not location then
+ player:SendMessage(messageID, sender, "Unknown item location.");
+ return;
+ end;
+ else
+ location = INVENTORY_NORMAL;
+ end;
+
+ local added = player:getInventory(location):addItem(item, qty, 1);
+
+ if added then
+ message = string.format("Added item %u of kind %u to %s", item, location, player:GetName());
+ end;
else
- print(sender.."unable to add item, ensure player name is valid.");
+ print(sender.."[giveitem] Unable to add item, ensure player name is valid.");
+ return;
end;
+
+ player:SendMessage(messageID, sender, message);
+ print(message);
end;
\ No newline at end of file
diff --git a/data/scripts/commands/gm/givekeyitem.lua b/data/scripts/commands/gm/givekeyitem.lua
index af8aca70..9963005e 100644
--- a/data/scripts/commands/gm/givekeyitem.lua
+++ b/data/scripts/commands/gm/givekeyitem.lua
@@ -3,7 +3,12 @@ require("global");
properties = {
permissions = 0,
parameters = "sss",
- description = "adds to self or .",
+ description =
+[[
+Adds to player or .
+!giveitem |
+!giveitem |
+]],
}
function onTrigger(player, argc, keyitem, name, lastName)
@@ -22,7 +27,7 @@ function onTrigger(player, argc, keyitem, name, lastName)
qty = 1;
location = INVENTORY_KEYITEMS;
- local added = player:GetInventory(location):AddItem(keyitem, qty);
+ local added = player:GetInventory(location):AddItem(keyitem, qty, 1);
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
local message = "unable to add keyitem";
diff --git a/data/scripts/commands/gm/graphic.lua b/data/scripts/commands/gm/graphic.lua
index c577f305..33e70754 100644
--- a/data/scripts/commands/gm/graphic.lua
+++ b/data/scripts/commands/gm/graphic.lua
@@ -1,18 +1,31 @@
+require("global");
+
properties = {
permissions = 0,
parameters = "sssss",
- description = "changes appearance for equipment in . Parameters: , (idk what any of those mean either)",
+ description =
+[[
+Changes appearance for equipment with given parameters.
+!graphic
+]],
}
function onTrigger(player, argc, slot, wId, eId, vId, cId)
+ local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
+ local sender = "[graphic] ";
+
slot = tonumber(slot) or 0;
wId = tonumber(wId) or 0;
eId = tonumber(eId) or 0;
vId = tonumber(vId) or 0;
cId = tonumber(cId) or 0;
- if player then
+ if player and argc > 0 then
player:GraphicChange(slot, wId, eId, vId, cId);
player:SendAppearance();
+ player:SendMessage(messageID, sender, string.format("Changing appearance on slot %u", slot));
+ else
+ player:SendMessage(messageID, sender, "No parameters sent! Usage: "..properties.description);
end;
+
end;
\ No newline at end of file
diff --git a/data/scripts/commands/gm/music.lua b/data/scripts/commands/gm/music.lua
index a55f697c..b1c56e74 100644
--- a/data/scripts/commands/gm/music.lua
+++ b/data/scripts/commands/gm/music.lua
@@ -1,7 +1,11 @@
properties = {
permissions = 0,
parameters = "s",
- description = "plays music to player",
+ description =
+[[
+Plays music to player.
+!music
+]],
}
function onTrigger(player, argc, music)
diff --git a/data/scripts/commands/gm/sendpacket.lua b/data/scripts/commands/gm/sendpacket.lua
index d506c3b4..78102d68 100644
--- a/data/scripts/commands/gm/sendpacket.lua
+++ b/data/scripts/commands/gm/sendpacket.lua
@@ -1,7 +1,12 @@
properties = {
permissions = 0,
parameters = "ssss",
- description = " ",
+ description =
+[[
+Sends a custom to player or
+!sendpacket |
+!sendpacket |
+]],
}
function onTrigger(player, argc, path, name, lastName)
diff --git a/data/scripts/commands/gm/speed.lua b/data/scripts/commands/gm/speed.lua
index 8aa30f5d..1008eb2b 100644
--- a/data/scripts/commands/gm/speed.lua
+++ b/data/scripts/commands/gm/speed.lua
@@ -1,18 +1,36 @@
+require("global");
+
properties = {
permissions = 0,
parameters = "sss",
- description = " speed",
+ description =
+[[
+Set movement speed for player. Enter no value to reset to default.
+!speed |
+!speed |
+]]
+
}
function onTrigger(player, argc, stop, walk, run)
- stop = tonumber(stop) or 0;
- walk = tonumber(walk) or 2;
- run = tonumber(run) or 5;
- if argc == 3 then
- player:ChangeSpeed(stop, walk, run, run);
- elseif argc == 1 then
- player:ChangeSpeed(0, stop/2, stop, stop);
- else
- player:ChangeSpeed(0,2,5,5);
+
+ if argc == 1 then
+ s = 0;
+ w = (tonumber(stop) / 2);
+ r = tonumber(stop);
+ player:ChangeSpeed(s, w, r);
+ player:SendMessage(MESSAGE_TYPE_SYSTEM_ERROR, "[speed]", string.format("Speed set to 0/%u/%u", w,r));
+ elseif argc == 3 then
+ stop = tonumber(stop) or 0;
+ walk = tonumber(walk) or 2;
+ run = tonumber(run) or 5;
+ if argc == 3 then
+ player:ChangeSpeed(stop, walk, run, run);
+ elseif argc == 1 then
+ player:ChangeSpeed(0, stop/2, stop, stop);
+ else
+ player:ChangeSpeed(0,2,5,5);
+ end
end
+
end
\ No newline at end of file
diff --git a/data/scripts/commands/gm/warp.lua b/data/scripts/commands/gm/warp.lua
index 6d758bb9..381cb0ab 100644
--- a/data/scripts/commands/gm/warp.lua
+++ b/data/scripts/commands/gm/warp.lua
@@ -5,9 +5,10 @@ properties = {
parameters = "sssssss",
description =
[[
- |
- |
- .
+Warp player or to a location from a list, or enter a zoneID with coordinates.
+!warp |
+!warp |
+!warp |
]],
}
@@ -47,6 +48,7 @@ function onTrigger(player, argc, p1, p2, p3, p4, privateArea, name, lastName)
local z = tonumber(applyPositionOffset(p3, player_z)) or player_z;
player:SendMessage(messageID, sender, string.format("setting coordinates X:%d Y:%d Z:%d within current zone (%d)", x, y, z, player_zone));
+
worldManager:DoPlayerMoveInZone(player, x, y, z, player_rot, 0x00);
else
local zone = tonumber(applyPositionOffset(p1, player_zone)) or player_zone;
@@ -65,9 +67,10 @@ end;
function applyPositionOffset(str, offset)
local s = str;
- print(s);
if s:find("@") then
- s = tonumber(s:sub(s:find("@") + 1, s:len())) + offset;
+ s = tonumber(s:sub(s:find("@") + 1, s:len()));
+ if s then s = s + offset end;
end
+ print(s);
return s;
end;
\ No newline at end of file
diff --git a/data/scripts/commands/gm/weather.lua b/data/scripts/commands/gm/weather.lua
index 00d011f2..c8e21d9c 100644
--- a/data/scripts/commands/gm/weather.lua
+++ b/data/scripts/commands/gm/weather.lua
@@ -3,7 +3,12 @@ require("global");
properties = {
permissions = 0,
parameters = "ssss",
- description = "usage: .",
+ description =
+[[
+Change the weather visual to and optional for player.
+!weather |
+!weather |
+]],
}
function onTrigger(player, argc, weather, updateTime, zonewide)
@@ -16,12 +21,14 @@ function onTrigger(player, argc, weather, updateTime, zonewide)
weather = tonumber(weather) or 0;
updateTime = tonumber(updateTime) or 0;
zonewide = tonumber(zonewide) or 0;
- message = "changed weather to %u ";
+ message = string.format("changed weather to %u ", weather);
+
if zonewide ~= 0 then
message = string.format(message.."for zone %u", player:GetZoneID());
else
message = message..player:GetName();
end;
+
-- weatherid, updateTime
player:GetZone():ChangeWeather(weather, updateTime, player, zonewide ~= 0);
player:SendMessage(messageID, sender, message);
diff --git a/data/scripts/global.lua b/data/scripts/global.lua
index 2fe572bb..48f2cfe6 100644
--- a/data/scripts/global.lua
+++ b/data/scripts/global.lua
@@ -51,34 +51,30 @@ INVENTORY_KEYITEMS = 0x0064; --Max 0x500
INVENTORY_EQUIPMENT = 0x00FE; --Max 0x23
INVENTORY_EQUIPMENT_OTHERPLAYER = 0x00F9; --Max 0x23
--- NPC LS
-NPCLS_GONE = 0;
-NPCLS_INACTIVE = 1;
-NPCLS_ACTIVE = 2;
-NPCLS_ALERT = 3;
+-- CHOCOBO APPEARANCE
+CHOCOBO_NORMAL = 0;
+
+CHOCOBO_LIMSA1 = 0x1;
+CHOCOBO_LIMSA2 = 0x2;
+CHOCOBO_LIMSA3 = 0x3;
+CHOCOBO_LIMSA4 = 0x4;
+
+CHOCOBO_GRIDANIA1 = 0x1F;
+CHOCOBO_GRIDANIA2 = 0x20;
+CHOCOBO_GRIDANIA3 = 0x21;
+CHOCOBO_GRIDANIA4 = 0x22;
+
+CHOCOBO_ULDAH1 = 0x3D;
+CHOCOBO_ULDAH2 = 0x3E;
+CHOCOBO_ULDAH3 = 0x3F;
+CHOCOBO_ULDAH4 = 0x40;
--UTILS
-function kickEventContinue(player, actor, trigger, ...)
- player:kickEvent(actor, trigger, ...);
- return coroutine.yield("_WAIT_EVENT", player);
-end
-
function callClientFunction(player, functionName, ...)
- player:RunEventFunction(functionName, ...);
- return coroutine.yield("_WAIT_EVENT", player);
-end
-
-function wait(seconds)
- return coroutine.yield("_WAIT_TIME", seconds);
-end
-
-function waitForSignal(signal)
- return coroutine.yield("_WAIT_SIGNAL", signal);
-end
-
-function sendSignal(signal)
- GetLuaInstance():OnSignal(signal);
+ player:RunEventFunction(functionName, ...);
+ result = coroutine.yield();
+ return result;
end
function printf(s, ...)
diff --git a/data/scripts/unique/fst0Town01/PopulaceStandard/l'tandhaa.lua b/data/scripts/unique/fst0Town01/PopulaceStandard/l'tandhaa.lua
index 37731274..d74d7a84 100644
--- a/data/scripts/unique/fst0Town01/PopulaceStandard/l'tandhaa.lua
+++ b/data/scripts/unique/fst0Town01/PopulaceStandard/l'tandhaa.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithL'tandhaa_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithLtandhaa_001", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01/PopulaceStandard/nonco_menanco.lua b/data/scripts/unique/fst0Town01/PopulaceStandard/nonco_menanco.lua
index 36c701a3..fddd2363 100644
--- a/data/scripts/unique/fst0Town01/PopulaceStandard/nonco_menanco.lua
+++ b/data/scripts/unique/fst0Town01/PopulaceStandard/nonco_menanco.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithNonco_menanco_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithNoncomananco_001", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01/PopulaceStandard/serpent_private_hill.lua b/data/scripts/unique/fst0Town01/PopulaceStandard/serpent_private_hill.lua
deleted file mode 100644
index 02e67d32..00000000
--- a/data/scripts/unique/fst0Town01/PopulaceStandard/serpent_private_hill.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-require ("global")
-
-function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_hill_001", nil, nil, nil);
- player:endEvent();
-end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01/PopulaceStandard/task_board.lua b/data/scripts/unique/fst0Town01/PopulaceStandard/task_board.lua
deleted file mode 100644
index b7448428..00000000
--- a/data/scripts/unique/fst0Town01/PopulaceStandard/task_board.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-require ("global")
-
-function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithTask_board_001", nil, nil, nil);
- player:endEvent();
-end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/aubrenard.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/aubrenard.lua
index 233f9974..8fcfb4e0 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/aubrenard.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/aubrenard.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithAubrenard (check cnstctr)_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithAUBRENARD_100", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/drystbrod.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/drystbrod.lua
index 98d98a5f..1ea2fcd3 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/drystbrod.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/drystbrod.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithDrystbrod_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithDyrstbrod_001", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/eldid.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/eldid.lua
index 189c2435..4ea6d7ee 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/eldid.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/eldid.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithEldid_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultFst, "downTownTalk", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/enie.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/enie.lua
index d6c55f1d..82de1962 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/enie.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/enie.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithEnie_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkEnie_001", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/gagaroon.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/gagaroon.lua
deleted file mode 100644
index 19143bdf..00000000
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/gagaroon.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-require ("global")
-
-function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithGagaroon_001", nil, nil, nil);
- player:endEvent();
-end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/khuma_moshroca.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/khuma_moshroca.lua
index a2cdb9bc..06ffc4b7 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/khuma_moshroca.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/khuma_moshroca.lua
@@ -45,9 +45,9 @@ function onEventStarted(player, npc)
else
callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithKhumamoshroca_001", nil, nil, nil);
end
-
-
+
player:endEvent();
+
end
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/louisoix.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/louisoix.lua
deleted file mode 100644
index b0b08cd5..00000000
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/louisoix.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-require ("global")
-
-function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithLouisoix_001", nil, nil, nil);
- player:endEvent();
-end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/maisenta.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/maisenta.lua
index 52d5b1e6..32477946 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/maisenta.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/maisenta.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithMaisenta_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithGuildleveClientG_001", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/prosperlain.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/prosperlain.lua
index 365bf54c..e3be638d 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/prosperlain.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/prosperlain.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithProsperlain_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultFst, "tribeTalk", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/pukiki.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/pukiki.lua
index 45ccf0ba..eeda46d7 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/pukiki.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/pukiki.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithPukiki_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithGuildleveClientG_002", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_lieutenant_marette.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_lieutenant_marette.lua
index 86aeb54e..15668acc 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_lieutenant_marette.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_lieutenant_marette.lua
@@ -1,7 +1,7 @@
require ("global")
function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_lieutenant_marette_001", nil, nil, nil);
+ defaultFst = GetStaticActor("Spl000");
+ callClientFunction(player, "delegateEvent", player, defaultFst, "processEventELNAURE", 1,1,1);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_carver.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_carver.lua
deleted file mode 100644
index 0a24f7e7..00000000
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_carver.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-require ("global")
-
-function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_carver_001", nil, nil, nil);
- player:endEvent();
-end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_holmes.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_holmes.lua
deleted file mode 100644
index fc7c975d..00000000
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_holmes.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-require ("global")
-
-function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_holmes_001", nil, nil, nil);
- player:endEvent();
-end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_kirk.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_kirk.lua
deleted file mode 100644
index c7b840aa..00000000
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_kirk.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-require ("global")
-
-function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_kirk_001", nil, nil, nil);
- player:endEvent();
-end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_stone.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_stone.lua
deleted file mode 100644
index d6d2ff82..00000000
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_stone.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-require ("global")
-
-function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_stone_001", nil, nil, nil);
- player:endEvent();
-end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_tristelle.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_tristelle.lua
index 335222d0..6413be1a 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_tristelle.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_tristelle.lua
@@ -1,7 +1,7 @@
require ("global")
function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_tristelle_001", nil, nil, nil);
+ defaultFst = GetStaticActor("Spl000");
+ callClientFunction(player, "delegateEvent", player, defaultFst, "processEventMERLIE", 1,1,1);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_white.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_white.lua
deleted file mode 100644
index d66e5dad..00000000
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_private_white.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-require ("global")
-
-function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_private_white_001", nil, nil, nil);
- player:endEvent();
-end
\ No newline at end of file
diff --git a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_sergeant_frilaix.lua b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_sergeant_frilaix.lua
index 274ceccd..60f377c2 100644
--- a/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_sergeant_frilaix.lua
+++ b/data/scripts/unique/fst0Town01a/PopulaceStandard/serpent_sergeant_frilaix.lua
@@ -1,7 +1,7 @@
require ("global")
function onEventStarted(player, npc)
- defaultFst = GetStaticActor("DftFst");
- callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithSerpent_sergeant_frilaix_001", nil, nil, nil);
+ defaultFst = GetStaticActor("Spl000");
+ callClientFunction(player, "delegateEvent", player, defaultFst, "processEventARISMONT", 1, 1, 1);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/muscle-bound_deckhand.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/muscle-bound_deckhand.lua
index 9dbe9e62..b20100b1 100644
--- a/data/scripts/unique/sea0Town01a/PopulaceStandard/muscle-bound_deckhand.lua
+++ b/data/scripts/unique/sea0Town01a/PopulaceStandard/muscle-bound_deckhand.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultSea = GetStaticActor("DftSea");
- callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithMuscle-bounddeckhand_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithSailor031_001", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/pasty-faced_adventurer.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/pasty-faced_adventurer.lua
index d8794009..81e126b6 100644
--- a/data/scripts/unique/sea0Town01a/PopulaceStandard/pasty-faced_adventurer.lua
+++ b/data/scripts/unique/sea0Town01a/PopulaceStandard/pasty-faced_adventurer.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultSea = GetStaticActor("DftSea");
- callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithPasty-facedadventurer_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithAdventurer030_001", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/pearly-toothed_porter.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/pearly-toothed_porter.lua
index 5fb9fc21..b0c34235 100644
--- a/data/scripts/unique/sea0Town01a/PopulaceStandard/pearly-toothed_porter.lua
+++ b/data/scripts/unique/sea0Town01a/PopulaceStandard/pearly-toothed_porter.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultSea = GetStaticActor("DftSea");
- callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithPearly-toothedporter_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithPorter001_001", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/ptahjha.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/ptahjha.lua
index d1b19d1d..1cc825fc 100644
--- a/data/scripts/unique/sea0Town01a/PopulaceStandard/ptahjha.lua
+++ b/data/scripts/unique/sea0Town01a/PopulaceStandard/ptahjha.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultSea = GetStaticActor("DftSea");
- callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithSkarnwaen_001", nil, nil, nil);
+ callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithP_tahjha_001", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/rubh_hob.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/rubh_hob.lua
deleted file mode 100644
index 2b97c724..00000000
--- a/data/scripts/unique/sea0Town01a/PopulaceStandard/rubh_hob.lua
+++ /dev/null
@@ -1,7 +0,0 @@
-require ("global")
-
-function onEventStarted(player, npc)
- defaultSea = GetStaticActor("DftSea");
- callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithRubh_hob_001", nil, nil, nil);
- player:endEvent();
-end
\ No newline at end of file
diff --git a/data/scripts/unique/sea0Town01a/PopulaceStandard/thosinbaen.lua b/data/scripts/unique/sea0Town01a/PopulaceStandard/thosinbaen.lua
index fcc4f585..6b0116c8 100644
--- a/data/scripts/unique/sea0Town01a/PopulaceStandard/thosinbaen.lua
+++ b/data/scripts/unique/sea0Town01a/PopulaceStandard/thosinbaen.lua
@@ -2,6 +2,6 @@ require ("global")
function onEventStarted(player, npc)
defaultSea = GetStaticActor("DftSea");
- callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithSkarnwaen_001");
+ callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithThosinbaen_001", nil, nil, nil);
player:endEvent();
end
\ No newline at end of file
diff --git a/sql/import.sh b/sql/import.sh
index a26f768b..93ea5e8c 100644
--- a/sql/import.sh
+++ b/sql/import.sh
@@ -1,25 +1,25 @@
-#!/bin/bash
-IMPORT_PATH="C://coding//repositories//ffxiv related//ffxivclassic//ffxiv-classic-server//sql//"
-USER=root
-PASS=root
-DBNAME=ffxiv_server
-
-ECHO Creating Database $DBNAME
-mysqladmin -h localhost -u $USER -p$PASS DROP $DBNAME
-
-ECHO Creating Database $DBNAME
-mysqladmin -h localhost -u $USER -p$PASS CREATE $DBNAME IF NOT EXISTS $DBNAME
-
-ECHO Loading $DBNAME tables into the database
-sh cd $IMPORT_PATH
-
-for X in '*.sql';
-do
- for Y in $X
- do
- echo Importing $Y;
- "C:\program files\mysql\mysql server 5.7\bin\mysql" $DBNAME -h localhost -u $USER -p$PASS < $Y
- done
-done
-
-ECHO Finished!
\ No newline at end of file
+#!/bin/bash
+IMPORT_PATH="path/to/ffxiv-classic-server/sql/"
+USER=root
+PASS=root
+DBNAME=ffxiv_server
+
+echo Creating Database $DBNAME
+mysql -h localhost -u $USER -p$PASS DROP $DBNAME
+
+echo Creating Database $DBNAME
+mysql -h localhost -u $USER -p$PASS CREATE $DBNAME IF NOT EXISTS $DBNAME
+
+echo Loading $DBNAME tables into the database
+
+for X in $IMPORT_PATH'*.sql';
+do
+ for Y in $X
+ do
+ echo Importing $Y;
+ mysql $DBNAME -h localhost -u $USER -p$PASS < $Y
+ done
+done
+
+echo Finished!
+
diff --git a/sql/supportdesk_faqs.sql b/sql/supportdesk_faqs.sql
new file mode 100644
index 00000000..ed04b9e6
--- /dev/null
+++ b/sql/supportdesk_faqs.sql
@@ -0,0 +1,25 @@
+/*
+MySQL Data Transfer
+Source Host: localhost
+Source Database: ffxiv_server
+Target Host: localhost
+Target Database: ffxiv_server
+Date: 8/20/2016 7:15:35 PM
+*/
+
+SET FOREIGN_KEY_CHECKS=0;
+-- ----------------------------
+-- Table structure for supportdesk_faqs
+-- ----------------------------
+CREATE TABLE `supportdesk_faqs` (
+ `slot` tinyint(4) NOT NULL,
+ `languageCode` tinyint(4) NOT NULL,
+ `title` varchar(128) NOT NULL,
+ `body` text NOT NULL,
+ PRIMARY KEY (`slot`,`languageCode`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+-- ----------------------------
+-- Records
+-- ----------------------------
+INSERT INTO `supportdesk_faqs` VALUES ('0', '1', 'Welcome to FFXIV Classic', 'Welcome to the FFXIV 1.0 server emulator FFXIVClassic!\r\n\r\nThis is still currently a work in progress, and you may find bugs or issues as you play with this server. Keep in mind that this is not even remotely close to being finished, and that it is a work in progress.\r\n\r\nCheck out the blog at: \r\nhttp://ffxivclassic.fragmenterworks.com/ \r\nCheck out videos at: \r\nhttps://www.youtube.com/channel/UCr2703_er1Dj7Lx5pzpQpfg');
diff --git a/sql/supportdesk_issues.sql b/sql/supportdesk_issues.sql
new file mode 100644
index 00000000..d8575dd8
--- /dev/null
+++ b/sql/supportdesk_issues.sql
@@ -0,0 +1,26 @@
+/*
+MySQL Data Transfer
+Source Host: localhost
+Source Database: ffxiv_server
+Target Host: localhost
+Target Database: ffxiv_server
+Date: 8/20/2016 7:15:41 PM
+*/
+
+SET FOREIGN_KEY_CHECKS=0;
+-- ----------------------------
+-- Table structure for supportdesk_issues
+-- ----------------------------
+CREATE TABLE `supportdesk_issues` (
+ `slot` smallint(4) unsigned NOT NULL,
+ `title` varchar(50) NOT NULL,
+ PRIMARY KEY (`slot`)
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+-- ----------------------------
+-- Records
+-- ----------------------------
+INSERT INTO `supportdesk_issues` VALUES ('0', 'Report Harassment');
+INSERT INTO `supportdesk_issues` VALUES ('1', 'Report Cheating');
+INSERT INTO `supportdesk_issues` VALUES ('2', 'Report a Bug or Glitch');
+INSERT INTO `supportdesk_issues` VALUES ('3', 'Leave Suggestion');
diff --git a/sql/supportdesk_tickets.sql b/sql/supportdesk_tickets.sql
new file mode 100644
index 00000000..93a2d7c9
--- /dev/null
+++ b/sql/supportdesk_tickets.sql
@@ -0,0 +1,26 @@
+/*
+MySQL Data Transfer
+Source Host: localhost
+Source Database: ffxiv_server
+Target Host: localhost
+Target Database: ffxiv_server
+Date: 8/21/2016 6:17:47 PM
+*/
+
+SET FOREIGN_KEY_CHECKS=0;
+-- ----------------------------
+-- Table structure for supportdesk_tickets
+-- ----------------------------
+CREATE TABLE `supportdesk_tickets` (
+ `id` int(20) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(32) NOT NULL,
+ `title` varchar(128) NOT NULL,
+ `body` text NOT NULL,
+ `langCode` smallint(4) unsigned NOT NULL,
+ `isOpen` tinyint(1) unsigned NOT NULL DEFAULT '1',
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
+
+-- ----------------------------
+-- Records
+-- ----------------------------