mirror of
https://bitbucket.org/Ioncannon/project-meteor-server.git
synced 2025-04-02 19:42:05 -04:00
Overhaul of the director system and opening quests. Private Areas further implemented as well.
This commit is contained in:
parent
dcaad5729d
commit
e898c045f7
@ -237,7 +237,9 @@ namespace FFXIVClassic_Map_Server
|
|||||||
rotation = @rot,
|
rotation = @rot,
|
||||||
destinationZoneId = @destZone,
|
destinationZoneId = @destZone,
|
||||||
destinationSpawnType = @destSpawn,
|
destinationSpawnType = @destSpawn,
|
||||||
currentZoneId = @zoneId
|
currentZoneId = @zoneId,
|
||||||
|
currentPrivateArea = @privateArea,
|
||||||
|
currentPrivateAreaType = @privateAreaType
|
||||||
WHERE id = @charaId
|
WHERE id = @charaId
|
||||||
";
|
";
|
||||||
|
|
||||||
@ -248,6 +250,8 @@ namespace FFXIVClassic_Map_Server
|
|||||||
cmd.Parameters.AddWithValue("@z", player.positionZ);
|
cmd.Parameters.AddWithValue("@z", player.positionZ);
|
||||||
cmd.Parameters.AddWithValue("@rot", player.rotation);
|
cmd.Parameters.AddWithValue("@rot", player.rotation);
|
||||||
cmd.Parameters.AddWithValue("@zoneId", player.zoneId);
|
cmd.Parameters.AddWithValue("@zoneId", player.zoneId);
|
||||||
|
cmd.Parameters.AddWithValue("@privateArea", player.privateArea);
|
||||||
|
cmd.Parameters.AddWithValue("@privateAreaType", player.privateAreaType);
|
||||||
cmd.Parameters.AddWithValue("@destZone", player.destinationZone);
|
cmd.Parameters.AddWithValue("@destZone", player.destinationZone);
|
||||||
cmd.Parameters.AddWithValue("@destSpawn", player.destinationSpawnType);
|
cmd.Parameters.AddWithValue("@destSpawn", player.destinationSpawnType);
|
||||||
|
|
||||||
@ -327,7 +331,7 @@ namespace FFXIVClassic_Map_Server
|
|||||||
VALUES
|
VALUES
|
||||||
(@charaId, @slot, @questId, @questData, @questFlags)
|
(@charaId, @slot, @questId, @questData, @questFlags)
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
questData = @questData, questFlags = @questFlags
|
questId = @questId, questData = @questData, questFlags = @questFlags
|
||||||
";
|
";
|
||||||
|
|
||||||
cmd = new MySqlCommand(query, conn);
|
cmd = new MySqlCommand(query, conn);
|
||||||
@ -385,7 +389,9 @@ namespace FFXIVClassic_Map_Server
|
|||||||
achievementPoints,
|
achievementPoints,
|
||||||
playTime,
|
playTime,
|
||||||
destinationZoneId,
|
destinationZoneId,
|
||||||
destinationSpawnType
|
destinationSpawnType,
|
||||||
|
currentPrivateArea,
|
||||||
|
currentPrivateAreaType
|
||||||
FROM characters WHERE id = @charId";
|
FROM characters WHERE id = @charId";
|
||||||
|
|
||||||
cmd = new MySqlCommand(query, conn);
|
cmd = new MySqlCommand(query, conn);
|
||||||
@ -419,10 +425,17 @@ namespace FFXIVClassic_Map_Server
|
|||||||
player.destinationZone = reader.GetUInt32("destinationZoneId");
|
player.destinationZone = reader.GetUInt32("destinationZoneId");
|
||||||
player.destinationSpawnType = reader.GetByte("destinationSpawnType");
|
player.destinationSpawnType = reader.GetByte("destinationSpawnType");
|
||||||
|
|
||||||
|
if (!reader.IsDBNull(reader.GetOrdinal("currentPrivateArea")))
|
||||||
|
player.privateArea = reader.GetString("currentPrivateArea");
|
||||||
|
player.privateAreaType = reader.GetUInt32("currentPrivateAreaType");
|
||||||
|
|
||||||
if (player.destinationZone != 0)
|
if (player.destinationZone != 0)
|
||||||
player.zoneId = player.destinationZone;
|
player.zoneId = player.destinationZone;
|
||||||
|
|
||||||
player.zone = Server.GetWorldManager().GetZone(player.zoneId);
|
if (player.privateArea != null && !player.privateArea.Equals(""))
|
||||||
|
player.zone = Server.GetWorldManager().GetPrivateArea(player.zoneId, player.privateArea, player.privateAreaType);
|
||||||
|
else
|
||||||
|
player.zone = Server.GetWorldManager().GetZone(player.zoneId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,7 +152,7 @@
|
|||||||
<Compile Include="packets\receive\supportdesk\GMSupportTicketPacket.cs" />
|
<Compile Include="packets\receive\supportdesk\GMSupportTicketPacket.cs" />
|
||||||
<Compile Include="packets\receive\supportdesk\GMTicketIssuesRequestPacket.cs" />
|
<Compile Include="packets\receive\supportdesk\GMTicketIssuesRequestPacket.cs" />
|
||||||
<Compile Include="packets\receive\_0x02ReceivePacket.cs" />
|
<Compile Include="packets\receive\_0x02ReceivePacket.cs" />
|
||||||
<Compile Include="packets\receive\_0x07Packet.cs" />
|
<Compile Include="packets\receive\ZoneInCompletePacket.cs" />
|
||||||
<Compile Include="packets\send\actor\ActorDoEmotePacket.cs" />
|
<Compile Include="packets\send\actor\ActorDoEmotePacket.cs" />
|
||||||
<Compile Include="packets\send\actor\ActorInstantiatePacket.cs" />
|
<Compile Include="packets\send\actor\ActorInstantiatePacket.cs" />
|
||||||
<Compile Include="packets\send\actor\ActorSpecialGraphicPacket.cs" />
|
<Compile Include="packets\send\actor\ActorSpecialGraphicPacket.cs" />
|
||||||
|
@ -1,48 +1,48 @@
|
|||||||
using FFXIVClassic.Common;
|
using FFXIVClassic.Common;
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using FFXIVClassic_Map_Server.dataobjects;
|
using FFXIVClassic_Map_Server.dataobjects;
|
||||||
using FFXIVClassic_Map_Server.packets.receive;
|
using FFXIVClassic_Map_Server.packets.receive;
|
||||||
using FFXIVClassic_Map_Server.packets.send;
|
using FFXIVClassic_Map_Server.packets.send;
|
||||||
using FFXIVClassic_Map_Server.packets.send.login;
|
using FFXIVClassic_Map_Server.packets.send.login;
|
||||||
using FFXIVClassic_Map_Server.packets.send.actor;
|
using FFXIVClassic_Map_Server.packets.send.actor;
|
||||||
using FFXIVClassic_Map_Server.packets.send.supportdesk;
|
using FFXIVClassic_Map_Server.packets.send.supportdesk;
|
||||||
using FFXIVClassic_Map_Server.packets.receive.social;
|
using FFXIVClassic_Map_Server.packets.receive.social;
|
||||||
using FFXIVClassic_Map_Server.packets.send.social;
|
using FFXIVClassic_Map_Server.packets.send.social;
|
||||||
using FFXIVClassic_Map_Server.packets.receive.supportdesk;
|
using FFXIVClassic_Map_Server.packets.receive.supportdesk;
|
||||||
using FFXIVClassic_Map_Server.packets.receive.recruitment;
|
using FFXIVClassic_Map_Server.packets.receive.recruitment;
|
||||||
using FFXIVClassic_Map_Server.packets.send.recruitment;
|
using FFXIVClassic_Map_Server.packets.send.recruitment;
|
||||||
using FFXIVClassic_Map_Server.packets.receive.events;
|
using FFXIVClassic_Map_Server.packets.receive.events;
|
||||||
using FFXIVClassic_Map_Server.lua;
|
using FFXIVClassic_Map_Server.lua;
|
||||||
using FFXIVClassic_Map_Server.Actors;
|
using FFXIVClassic_Map_Server.Actors;
|
||||||
using FFXIVClassic_Map_Server.packets.WorldPackets.Send;
|
using FFXIVClassic_Map_Server.packets.WorldPackets.Send;
|
||||||
using FFXIVClassic_Map_Server.packets.WorldPackets.Receive;
|
using FFXIVClassic_Map_Server.packets.WorldPackets.Receive;
|
||||||
using FFXIVClassic_Map_Server.actors.director;
|
using FFXIVClassic_Map_Server.actors.director;
|
||||||
|
|
||||||
namespace FFXIVClassic_Map_Server
|
namespace FFXIVClassic_Map_Server
|
||||||
{
|
{
|
||||||
class PacketProcessor
|
class PacketProcessor
|
||||||
{
|
{
|
||||||
Server mServer;
|
Server mServer;
|
||||||
|
|
||||||
public PacketProcessor(Server server)
|
public PacketProcessor(Server server)
|
||||||
{
|
{
|
||||||
mServer = server;
|
mServer = server;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ProcessPacket(ZoneConnection client, SubPacket subpacket)
|
public void ProcessPacket(ZoneConnection client, SubPacket subpacket)
|
||||||
{
|
{
|
||||||
Session session = mServer.GetSession(subpacket.header.targetId);
|
Session session = mServer.GetSession(subpacket.header.targetId);
|
||||||
|
|
||||||
if (session == null && subpacket.gameMessage.opcode != 0x1000)
|
if (session == null && subpacket.gameMessage.opcode != 0x1000)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//Normal Game Opcode
|
//Normal Game Opcode
|
||||||
switch (subpacket.gameMessage.opcode)
|
switch (subpacket.gameMessage.opcode)
|
||||||
{
|
{
|
||||||
//World Server - Error
|
//World Server - Error
|
||||||
case 0x100A:
|
case 0x100A:
|
||||||
ErrorPacket worldError = new ErrorPacket(subpacket.data);
|
ErrorPacket worldError = new ErrorPacket(subpacket.data);
|
||||||
@ -52,8 +52,8 @@ namespace FFXIVClassic_Map_Server
|
|||||||
session.GetActor().SendGameMessage(Server.GetWorldManager().GetActor(), 60005, 0x20);
|
session.GetActor().SendGameMessage(Server.GetWorldManager().GetActor(), 60005, 0x20);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
//World Server - Session Begin
|
//World Server - Session Begin
|
||||||
case 0x1000:
|
case 0x1000:
|
||||||
subpacket.DebugPrintSubPacket();
|
subpacket.DebugPrintSubPacket();
|
||||||
session = mServer.AddSession(subpacket.header.targetId);
|
session = mServer.AddSession(subpacket.header.targetId);
|
||||||
@ -83,264 +83,266 @@ namespace FFXIVClassic_Map_Server
|
|||||||
//World Server - Party Synch
|
//World Server - Party Synch
|
||||||
case 0x1020:
|
case 0x1020:
|
||||||
PartySyncPacket partySyncPacket = new PartySyncPacket(subpacket.data);
|
PartySyncPacket partySyncPacket = new PartySyncPacket(subpacket.data);
|
||||||
Server.GetWorldManager().PartyMemberListRecieved(partySyncPacket);
|
Server.GetWorldManager().PartyMemberListRecieved(partySyncPacket);
|
||||||
break;
|
break;
|
||||||
//Ping
|
//Ping
|
||||||
case 0x0001:
|
case 0x0001:
|
||||||
//subpacket.DebugPrintSubPacket();
|
//subpacket.DebugPrintSubPacket();
|
||||||
PingPacket pingPacket = new PingPacket(subpacket.data);
|
PingPacket pingPacket = new PingPacket(subpacket.data);
|
||||||
client.QueuePacket(BasePacket.CreatePacket(PongPacket.BuildPacket(session.id, pingPacket.time), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(PongPacket.BuildPacket(session.id, pingPacket.time), true, false));
|
||||||
session.Ping();
|
session.Ping();
|
||||||
break;
|
break;
|
||||||
//Unknown
|
//Unknown
|
||||||
case 0x0002:
|
case 0x0002:
|
||||||
|
|
||||||
subpacket.DebugPrintSubPacket();
|
subpacket.DebugPrintSubPacket();
|
||||||
client.QueuePacket(_0x2Packet.BuildPacket(session.id), true, false);
|
client.QueuePacket(_0x2Packet.BuildPacket(session.id), true, false);
|
||||||
client.FlushQueuedSendPackets();
|
client.FlushQueuedSendPackets();
|
||||||
|
|
||||||
break;
|
break;
|
||||||
//Chat Received
|
//Chat Received
|
||||||
case 0x0003:
|
case 0x0003:
|
||||||
ChatMessagePacket chatMessage = new ChatMessagePacket(subpacket.data);
|
ChatMessagePacket chatMessage = new ChatMessagePacket(subpacket.data);
|
||||||
//Program.Log.Info("Got type-{5} message: {0} @ {1}, {2}, {3}, Rot: {4}", chatMessage.message, chatMessage.posX, chatMessage.posY, chatMessage.posZ, chatMessage.posRot, chatMessage.logType);
|
//Program.Log.Info("Got type-{5} message: {0} @ {1}, {2}, {3}, Rot: {4}", chatMessage.message, chatMessage.posX, chatMessage.posY, chatMessage.posZ, chatMessage.posRot, chatMessage.logType);
|
||||||
|
|
||||||
if (chatMessage.message.StartsWith("!"))
|
if (chatMessage.message.StartsWith("!"))
|
||||||
{
|
{
|
||||||
if (Server.GetCommandProcessor().DoCommand(chatMessage.message, session))
|
if (Server.GetCommandProcessor().DoCommand(chatMessage.message, session))
|
||||||
return; ;
|
return; ;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chatMessage.logType == SendMessagePacket.MESSAGE_TYPE_SAY || chatMessage.logType == SendMessagePacket.MESSAGE_TYPE_SHOUT)
|
if (chatMessage.logType == SendMessagePacket.MESSAGE_TYPE_SAY || chatMessage.logType == SendMessagePacket.MESSAGE_TYPE_SHOUT)
|
||||||
session.GetActor().BroadcastPacket(SendMessagePacket.BuildPacket(session.id, session.id, chatMessage.logType, session.GetActor().customDisplayName, chatMessage.message), false);
|
session.GetActor().BroadcastPacket(SendMessagePacket.BuildPacket(session.id, session.id, chatMessage.logType, session.GetActor().customDisplayName, chatMessage.message), false);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
//Langauge Code (Client safe to send packets to now)
|
//Langauge Code (Client safe to send packets to now)
|
||||||
case 0x0006:
|
case 0x0006:
|
||||||
LangaugeCodePacket langCode = new LangaugeCodePacket(subpacket.data);
|
LangaugeCodePacket langCode = new LangaugeCodePacket(subpacket.data);
|
||||||
session = mServer.AddSession(subpacket.header.targetId);
|
session = mServer.AddSession(subpacket.header.targetId);
|
||||||
LuaEngine.OnBeginLogin(session.GetActor());
|
LuaEngine.OnBeginLogin(session.GetActor());
|
||||||
Server.GetWorldManager().DoZoneIn(session.GetActor(), true, 0x1);
|
Server.GetWorldManager().DoZoneIn(session.GetActor(), true, 0x1);
|
||||||
LuaEngine.OnLogin(session.GetActor());
|
LuaEngine.OnLogin(session.GetActor());
|
||||||
session.languageCode = langCode.languageCode;
|
session.languageCode = langCode.languageCode;
|
||||||
break;
|
break;
|
||||||
//Unknown - Happens a lot at login, then once every time player zones
|
//Unknown - Happens a lot at login, then once every time player zones
|
||||||
case 0x0007:
|
case 0x0007:
|
||||||
//subpacket.DebugPrintSubPacket();
|
subpacket.DebugPrintSubPacket();
|
||||||
_0x07Packet unknown07 = new _0x07Packet(subpacket.data);
|
ZoneInCompletePacket zoneInCompletePacket = new ZoneInCompletePacket(subpacket.data);
|
||||||
break;
|
LuaEngine.OnZoneInDone(session.GetActor());
|
||||||
//Update Position
|
break;
|
||||||
case 0x00CA:
|
//Update Position
|
||||||
//Update Position
|
case 0x00CA:
|
||||||
UpdatePlayerPositionPacket posUpdate = new UpdatePlayerPositionPacket(subpacket.data);
|
//Update Position
|
||||||
session.UpdatePlayerActorPosition(posUpdate.x, posUpdate.y, posUpdate.z, posUpdate.rot, posUpdate.moveState);
|
UpdatePlayerPositionPacket posUpdate = new UpdatePlayerPositionPacket(subpacket.data);
|
||||||
session.GetActor().SendInstanceUpdate();
|
session.UpdatePlayerActorPosition(posUpdate.x, posUpdate.y, posUpdate.z, posUpdate.rot, posUpdate.moveState);
|
||||||
|
session.GetActor().SendInstanceUpdate();
|
||||||
if (session.GetActor().IsInZoneChange())
|
|
||||||
session.GetActor().SetZoneChanging(false);
|
if (session.GetActor().IsInZoneChange())
|
||||||
|
session.GetActor().SetZoneChanging(false);
|
||||||
break;
|
|
||||||
//Set Target
|
break;
|
||||||
case 0x00CD:
|
//Set Target
|
||||||
//subpacket.DebugPrintSubPacket();
|
case 0x00CD:
|
||||||
|
//subpacket.DebugPrintSubPacket();
|
||||||
SetTargetPacket setTarget = new SetTargetPacket(subpacket.data);
|
|
||||||
session.GetActor().currentTarget = setTarget.actorID;
|
SetTargetPacket setTarget = new SetTargetPacket(subpacket.data);
|
||||||
session.GetActor().BroadcastPacket(SetActorTargetAnimatedPacket.BuildPacket(session.id, session.id, setTarget.actorID), true);
|
session.GetActor().currentTarget = setTarget.actorID;
|
||||||
break;
|
session.GetActor().BroadcastPacket(SetActorTargetAnimatedPacket.BuildPacket(session.id, session.id, setTarget.actorID), true);
|
||||||
//Lock Target
|
break;
|
||||||
case 0x00CC:
|
//Lock Target
|
||||||
LockTargetPacket lockTarget = new LockTargetPacket(subpacket.data);
|
case 0x00CC:
|
||||||
session.GetActor().currentLockedTarget = lockTarget.actorID;
|
LockTargetPacket lockTarget = new LockTargetPacket(subpacket.data);
|
||||||
break;
|
session.GetActor().currentLockedTarget = lockTarget.actorID;
|
||||||
//Start Event
|
break;
|
||||||
case 0x012D:
|
//Start Event
|
||||||
subpacket.DebugPrintSubPacket();
|
case 0x012D:
|
||||||
EventStartPacket eventStart = new EventStartPacket(subpacket.data);
|
subpacket.DebugPrintSubPacket();
|
||||||
|
EventStartPacket eventStart = new EventStartPacket(subpacket.data);
|
||||||
/*
|
|
||||||
if (eventStart.error != null)
|
/*
|
||||||
{
|
if (eventStart.error != null)
|
||||||
player.errorMessage += eventStart.error;
|
{
|
||||||
|
player.errorMessage += eventStart.error;
|
||||||
if (eventStart.errorIndex == eventStart.errorNum - 1)
|
|
||||||
Program.Log.Error("\n"+player.errorMessage);
|
if (eventStart.errorIndex == eventStart.errorNum - 1)
|
||||||
|
Program.Log.Error("\n"+player.errorMessage);
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
break;
|
||||||
*/
|
}
|
||||||
|
*/
|
||||||
Actor ownerActor = Server.GetStaticActors(eventStart.scriptOwnerActorID);
|
|
||||||
|
Actor ownerActor = Server.GetStaticActors(eventStart.scriptOwnerActorID);
|
||||||
|
|
||||||
session.GetActor().currentEventOwner = eventStart.scriptOwnerActorID;
|
|
||||||
session.GetActor().currentEventName = eventStart.triggerName;
|
session.GetActor().currentEventOwner = eventStart.scriptOwnerActorID;
|
||||||
|
session.GetActor().currentEventName = eventStart.triggerName;
|
||||||
|
|
||||||
if (ownerActor == null)
|
|
||||||
{
|
if (ownerActor == null)
|
||||||
//Is it a instance actor?
|
{
|
||||||
ownerActor = Server.GetWorldManager().GetActorInWorld(session.GetActor().currentEventOwner);
|
//Is it a instance actor?
|
||||||
if (ownerActor == null)
|
ownerActor = session.GetActor().zone.FindActorInZone(session.GetActor().currentEventOwner);
|
||||||
{
|
if (ownerActor == null)
|
||||||
|
{
|
||||||
//Is it a Director?
|
//Is it a Director?
|
||||||
Director director = session.GetActor().GetDirector(eventStart.scriptOwnerActorID);
|
Director director = session.GetActor().GetDirector(eventStart.scriptOwnerActorID);
|
||||||
if (director != null)
|
if (director != null)
|
||||||
ownerActor = director;
|
ownerActor = director;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Program.Log.Debug("\n===Event START===\nCould not find actor 0x{0:X} for event started by caller: 0x{1:X}\nEvent Starter: {2}\nParams: {3}", eventStart.actorID, eventStart.scriptOwnerActorID, eventStart.triggerName, LuaUtils.DumpParams(eventStart.luaParams));
|
Program.Log.Debug("\n===Event START===\nCould not find actor 0x{0:X} for event started by caller: 0x{1:X}\nEvent Starter: {2}\nParams: {3}", eventStart.actorID, eventStart.scriptOwnerActorID, eventStart.triggerName, LuaUtils.DumpParams(eventStart.luaParams));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
session.GetActor().StartEvent(ownerActor, eventStart);
|
session.GetActor().StartEvent(ownerActor, eventStart);
|
||||||
|
|
||||||
Program.Log.Debug("\n===Event START===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nEvent Starter: {4}\nParams: {5}", eventStart.actorID, eventStart.scriptOwnerActorID, eventStart.val1, eventStart.val2, eventStart.triggerName, LuaUtils.DumpParams(eventStart.luaParams));
|
Program.Log.Debug("\n===Event START===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nEvent Starter: {4}\nParams: {5}", eventStart.actorID, eventStart.scriptOwnerActorID, eventStart.val1, eventStart.val2, eventStart.triggerName, LuaUtils.DumpParams(eventStart.luaParams));
|
||||||
break;
|
break;
|
||||||
//Unknown, happens at npc spawn and cutscene play????
|
//Unknown, happens at npc spawn and cutscene play????
|
||||||
case 0x00CE:
|
case 0x00CE:
|
||||||
break;
|
subpacket.DebugPrintSubPacket();
|
||||||
//Event Result
|
break;
|
||||||
case 0x012E:
|
//Event Result
|
||||||
subpacket.DebugPrintSubPacket();
|
case 0x012E:
|
||||||
EventUpdatePacket eventUpdate = new EventUpdatePacket(subpacket.data);
|
subpacket.DebugPrintSubPacket();
|
||||||
Program.Log.Debug("\n===Event UPDATE===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nStep: 0x{4:X}\nParams: {5}", eventUpdate.actorID, eventUpdate.scriptOwnerActorID, eventUpdate.val1, eventUpdate.val2, eventUpdate.step, LuaUtils.DumpParams(eventUpdate.luaParams));
|
EventUpdatePacket eventUpdate = new EventUpdatePacket(subpacket.data);
|
||||||
/*
|
Program.Log.Debug("\n===Event UPDATE===\nSource Actor: 0x{0:X}\nCaller Actor: 0x{1:X}\nVal1: 0x{2:X}\nVal2: 0x{3:X}\nStep: 0x{4:X}\nParams: {5}", eventUpdate.actorID, eventUpdate.scriptOwnerActorID, eventUpdate.val1, eventUpdate.val2, eventUpdate.step, LuaUtils.DumpParams(eventUpdate.luaParams));
|
||||||
//Is it a static actor? If not look in the player's instance
|
/*
|
||||||
Actor updateOwnerActor = Server.GetStaticActors(session.GetActor().currentEventOwner);
|
//Is it a static actor? If not look in the player's instance
|
||||||
if (updateOwnerActor == null)
|
Actor updateOwnerActor = Server.GetStaticActors(session.GetActor().currentEventOwner);
|
||||||
{
|
if (updateOwnerActor == null)
|
||||||
updateOwnerActor = Server.GetWorldManager().GetActorInWorld(session.GetActor().currentEventOwner);
|
{
|
||||||
|
updateOwnerActor = Server.GetWorldManager().GetActorInWorld(session.GetActor().currentEventOwner);
|
||||||
if (session.GetActor().currentDirector != null && session.GetActor().currentEventOwner == session.GetActor().currentDirector.actorId)
|
|
||||||
updateOwnerActor = session.GetActor().currentDirector;
|
if (session.GetActor().currentDirector != null && session.GetActor().currentEventOwner == session.GetActor().currentDirector.actorId)
|
||||||
|
updateOwnerActor = session.GetActor().currentDirector;
|
||||||
if (updateOwnerActor == null)
|
|
||||||
break;
|
if (updateOwnerActor == null)
|
||||||
}
|
break;
|
||||||
*/
|
}
|
||||||
session.GetActor().UpdateEvent(eventUpdate);
|
*/
|
||||||
|
session.GetActor().UpdateEvent(eventUpdate);
|
||||||
//LuaEngine.DoActorOnEventUpdated(session.GetActor(), updateOwnerActor, eventUpdate);
|
|
||||||
|
//LuaEngine.DoActorOnEventUpdated(session.GetActor(), updateOwnerActor, eventUpdate);
|
||||||
break;
|
|
||||||
case 0x012F:
|
break;
|
||||||
subpacket.DebugPrintSubPacket();
|
case 0x012F:
|
||||||
ParameterDataRequestPacket paramRequest = new ParameterDataRequestPacket(subpacket.data);
|
subpacket.DebugPrintSubPacket();
|
||||||
if (paramRequest.paramName.Equals("charaWork/exp"))
|
ParameterDataRequestPacket paramRequest = new ParameterDataRequestPacket(subpacket.data);
|
||||||
session.GetActor().SendCharaExpInfo();
|
if (paramRequest.paramName.Equals("charaWork/exp"))
|
||||||
|
session.GetActor().SendCharaExpInfo();
|
||||||
break;
|
break;
|
||||||
//Group Created Confirm
|
//Group Created Confirm
|
||||||
case 0x0133:
|
case 0x0133:
|
||||||
GroupCreatedPacket groupCreated = new GroupCreatedPacket(subpacket.data);
|
GroupCreatedPacket groupCreated = new GroupCreatedPacket(subpacket.data);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
/* RECRUITMENT */
|
/* RECRUITMENT */
|
||||||
//Start Recruiting
|
//Start Recruiting
|
||||||
case 0x01C3:
|
case 0x01C3:
|
||||||
StartRecruitingRequestPacket recruitRequestPacket = new StartRecruitingRequestPacket(subpacket.data);
|
StartRecruitingRequestPacket recruitRequestPacket = new StartRecruitingRequestPacket(subpacket.data);
|
||||||
client.QueuePacket(BasePacket.CreatePacket(StartRecruitingResponse.BuildPacket(session.id, true), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(StartRecruitingResponse.BuildPacket(session.id, true), true, false));
|
||||||
break;
|
break;
|
||||||
//End Recruiting
|
//End Recruiting
|
||||||
case 0x01C4:
|
case 0x01C4:
|
||||||
client.QueuePacket(BasePacket.CreatePacket(EndRecruitmentPacket.BuildPacket(session.id), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(EndRecruitmentPacket.BuildPacket(session.id), true, false));
|
||||||
break;
|
break;
|
||||||
//Party Window Opened, Request State
|
//Party Window Opened, Request State
|
||||||
case 0x01C5:
|
case 0x01C5:
|
||||||
client.QueuePacket(BasePacket.CreatePacket(RecruiterStatePacket.BuildPacket(session.id, false, false, 0), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(RecruiterStatePacket.BuildPacket(session.id, false, false, 0), true, false));
|
||||||
break;
|
break;
|
||||||
//Search Recruiting
|
//Search Recruiting
|
||||||
case 0x01C7:
|
case 0x01C7:
|
||||||
RecruitmentSearchRequestPacket recruitSearchPacket = new RecruitmentSearchRequestPacket(subpacket.data);
|
RecruitmentSearchRequestPacket recruitSearchPacket = new RecruitmentSearchRequestPacket(subpacket.data);
|
||||||
break;
|
break;
|
||||||
//Get Recruitment Details
|
//Get Recruitment Details
|
||||||
case 0x01C8:
|
case 0x01C8:
|
||||||
RecruitmentDetailsRequestPacket currentRecruitDetailsPacket = new RecruitmentDetailsRequestPacket(subpacket.data);
|
RecruitmentDetailsRequestPacket currentRecruitDetailsPacket = new RecruitmentDetailsRequestPacket(subpacket.data);
|
||||||
RecruitmentDetails details = new RecruitmentDetails();
|
RecruitmentDetails details = new RecruitmentDetails();
|
||||||
details.recruiterName = "Localhost Character";
|
details.recruiterName = "Localhost Character";
|
||||||
details.purposeId = 2;
|
details.purposeId = 2;
|
||||||
details.locationId = 1;
|
details.locationId = 1;
|
||||||
details.subTaskId = 1;
|
details.subTaskId = 1;
|
||||||
details.comment = "This is a test details packet sent by the server. No implementation has been Created yet...";
|
details.comment = "This is a test details packet sent by the server. No implementation has been Created yet...";
|
||||||
details.num[0] = 1;
|
details.num[0] = 1;
|
||||||
client.QueuePacket(BasePacket.CreatePacket(CurrentRecruitmentDetailsPacket.BuildPacket(session.id, details), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(CurrentRecruitmentDetailsPacket.BuildPacket(session.id, details), true, false));
|
||||||
break;
|
break;
|
||||||
//Accepted Recruiting
|
//Accepted Recruiting
|
||||||
case 0x01C6:
|
case 0x01C6:
|
||||||
subpacket.DebugPrintSubPacket();
|
subpacket.DebugPrintSubPacket();
|
||||||
break;
|
break;
|
||||||
/* SOCIAL STUFF */
|
/* SOCIAL STUFF */
|
||||||
case 0x01C9:
|
case 0x01C9:
|
||||||
AddRemoveSocialPacket addBlackList = new AddRemoveSocialPacket(subpacket.data);
|
AddRemoveSocialPacket addBlackList = new AddRemoveSocialPacket(subpacket.data);
|
||||||
client.QueuePacket(BasePacket.CreatePacket(BlacklistAddedPacket.BuildPacket(session.id, true, addBlackList.name), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(BlacklistAddedPacket.BuildPacket(session.id, true, addBlackList.name), true, false));
|
||||||
break;
|
break;
|
||||||
case 0x01CA:
|
case 0x01CA:
|
||||||
AddRemoveSocialPacket RemoveBlackList = new AddRemoveSocialPacket(subpacket.data);
|
AddRemoveSocialPacket RemoveBlackList = new AddRemoveSocialPacket(subpacket.data);
|
||||||
client.QueuePacket(BasePacket.CreatePacket(BlacklistRemovedPacket.BuildPacket(session.id, true, RemoveBlackList.name), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(BlacklistRemovedPacket.BuildPacket(session.id, true, RemoveBlackList.name), true, false));
|
||||||
break;
|
break;
|
||||||
case 0x01CB:
|
case 0x01CB:
|
||||||
int offset1 = 0;
|
int offset1 = 0;
|
||||||
client.QueuePacket(BasePacket.CreatePacket(SendBlacklistPacket.BuildPacket(session.id, new String[] { "Test" }, ref offset1), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(SendBlacklistPacket.BuildPacket(session.id, new String[] { "Test" }, ref offset1), true, false));
|
||||||
break;
|
break;
|
||||||
case 0x01CC:
|
case 0x01CC:
|
||||||
AddRemoveSocialPacket addFriendList = new AddRemoveSocialPacket(subpacket.data);
|
AddRemoveSocialPacket addFriendList = new AddRemoveSocialPacket(subpacket.data);
|
||||||
client.QueuePacket(BasePacket.CreatePacket(FriendlistAddedPacket.BuildPacket(session.id, true, (uint)addFriendList.name.GetHashCode(), true, addFriendList.name), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(FriendlistAddedPacket.BuildPacket(session.id, true, (uint)addFriendList.name.GetHashCode(), true, addFriendList.name), true, false));
|
||||||
break;
|
break;
|
||||||
case 0x01CD:
|
case 0x01CD:
|
||||||
AddRemoveSocialPacket RemoveFriendList = new AddRemoveSocialPacket(subpacket.data);
|
AddRemoveSocialPacket RemoveFriendList = new AddRemoveSocialPacket(subpacket.data);
|
||||||
client.QueuePacket(BasePacket.CreatePacket(FriendlistRemovedPacket.BuildPacket(session.id, true, RemoveFriendList.name), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(FriendlistRemovedPacket.BuildPacket(session.id, true, RemoveFriendList.name), true, false));
|
||||||
break;
|
break;
|
||||||
case 0x01CE:
|
case 0x01CE:
|
||||||
int offset2 = 0;
|
int offset2 = 0;
|
||||||
client.QueuePacket(BasePacket.CreatePacket(SendFriendlistPacket.BuildPacket(session.id, new Tuple<long, string>[] { new Tuple<long, string>(01, "Test2") }, ref offset2), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(SendFriendlistPacket.BuildPacket(session.id, new Tuple<long, string>[] { new Tuple<long, string>(01, "Test2") }, ref offset2), true, false));
|
||||||
break;
|
break;
|
||||||
case 0x01CF:
|
case 0x01CF:
|
||||||
client.QueuePacket(BasePacket.CreatePacket(FriendStatusPacket.BuildPacket(session.id, null), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(FriendStatusPacket.BuildPacket(session.id, null), true, false));
|
||||||
break;
|
break;
|
||||||
/* SUPPORT DESK STUFF */
|
/* SUPPORT DESK STUFF */
|
||||||
//Request for FAQ/Info List
|
//Request for FAQ/Info List
|
||||||
case 0x01D0:
|
case 0x01D0:
|
||||||
FaqListRequestPacket faqRequest = new FaqListRequestPacket(subpacket.data);
|
FaqListRequestPacket faqRequest = new FaqListRequestPacket(subpacket.data);
|
||||||
client.QueuePacket(BasePacket.CreatePacket(FaqListResponsePacket.BuildPacket(session.id, new string[] { "Testing FAQ1", "Coded style!" }), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(FaqListResponsePacket.BuildPacket(session.id, new string[] { "Testing FAQ1", "Coded style!" }), true, false));
|
||||||
break;
|
break;
|
||||||
//Request for body of a faq/info selection
|
//Request for body of a faq/info selection
|
||||||
case 0x01D1:
|
case 0x01D1:
|
||||||
FaqBodyRequestPacket faqBodyRequest = new FaqBodyRequestPacket(subpacket.data);
|
FaqBodyRequestPacket faqBodyRequest = new FaqBodyRequestPacket(subpacket.data);
|
||||||
client.QueuePacket(BasePacket.CreatePacket(FaqBodyResponsePacket.BuildPacket(session.id, "HERE IS A GIANT BODY. Nothing else to say!"), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(FaqBodyResponsePacket.BuildPacket(session.id, "HERE IS A GIANT BODY. Nothing else to say!"), true, false));
|
||||||
break;
|
break;
|
||||||
//Request issue list
|
//Request issue list
|
||||||
case 0x01D2:
|
case 0x01D2:
|
||||||
GMTicketIssuesRequestPacket issuesRequest = new GMTicketIssuesRequestPacket(subpacket.data);
|
GMTicketIssuesRequestPacket issuesRequest = new GMTicketIssuesRequestPacket(subpacket.data);
|
||||||
client.QueuePacket(BasePacket.CreatePacket(IssueListResponsePacket.BuildPacket(session.id, new string[] { "Test1", "Test2", "Test3", "Test4", "Test5" }), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(IssueListResponsePacket.BuildPacket(session.id, new string[] { "Test1", "Test2", "Test3", "Test4", "Test5" }), true, false));
|
||||||
break;
|
break;
|
||||||
//Request if GM ticket exists
|
//Request if GM ticket exists
|
||||||
case 0x01D3:
|
case 0x01D3:
|
||||||
client.QueuePacket(BasePacket.CreatePacket(StartGMTicketPacket.BuildPacket(session.id, false), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(StartGMTicketPacket.BuildPacket(session.id, false), true, false));
|
||||||
break;
|
break;
|
||||||
//Request for GM response message
|
//Request for GM response message
|
||||||
case 0x01D4:
|
case 0x01D4:
|
||||||
client.QueuePacket(BasePacket.CreatePacket(GMTicketPacket.BuildPacket(session.id, "This is a GM Ticket Title", "This is a GM Ticket Body."), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(GMTicketPacket.BuildPacket(session.id, "This is a GM Ticket Title", "This is a GM Ticket Body."), true, false));
|
||||||
break;
|
break;
|
||||||
//GM Ticket Sent
|
//GM Ticket Sent
|
||||||
case 0x01D5:
|
case 0x01D5:
|
||||||
GMSupportTicketPacket gmTicket = new GMSupportTicketPacket(subpacket.data);
|
GMSupportTicketPacket gmTicket = new GMSupportTicketPacket(subpacket.data);
|
||||||
Program.Log.Info("Got GM Ticket: \n" + gmTicket.ticketTitle + "\n" + gmTicket.ticketBody);
|
Program.Log.Info("Got GM Ticket: \n" + gmTicket.ticketTitle + "\n" + gmTicket.ticketBody);
|
||||||
client.QueuePacket(BasePacket.CreatePacket(GMTicketSentResponsePacket.BuildPacket(session.id, true), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(GMTicketSentResponsePacket.BuildPacket(session.id, true), true, false));
|
||||||
break;
|
break;
|
||||||
//Request to end ticket
|
//Request to end ticket
|
||||||
case 0x01D6:
|
case 0x01D6:
|
||||||
client.QueuePacket(BasePacket.CreatePacket(EndGMTicketPacket.BuildPacket(session.id), true, false));
|
client.QueuePacket(BasePacket.CreatePacket(EndGMTicketPacket.BuildPacket(session.id), true, false));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Program.Log.Debug("Unknown command 0x{0:X} received.", subpacket.gameMessage.opcode);
|
Program.Log.Debug("Unknown command 0x{0:X} received.", subpacket.gameMessage.opcode);
|
||||||
subpacket.DebugPrintSubPacket();
|
subpacket.DebugPrintSubPacket();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,6 +111,7 @@ namespace FFXIVClassic_Map_Server
|
|||||||
id,
|
id,
|
||||||
parentZoneId,
|
parentZoneId,
|
||||||
privateAreaName,
|
privateAreaName,
|
||||||
|
privateAreaType,
|
||||||
className,
|
className,
|
||||||
dayMusic,
|
dayMusic,
|
||||||
nightMusic,
|
nightMusic,
|
||||||
@ -129,7 +130,7 @@ namespace FFXIVClassic_Map_Server
|
|||||||
if (zoneList.ContainsKey(parentZoneId))
|
if (zoneList.ContainsKey(parentZoneId))
|
||||||
{
|
{
|
||||||
Zone parent = zoneList[parentZoneId];
|
Zone parent = zoneList[parentZoneId];
|
||||||
PrivateArea privArea = new PrivateArea(parent, reader.GetUInt32("id"), reader.GetString("className"), reader.GetString("privateAreaName"), 1, reader.GetUInt16("dayMusic"), reader.GetUInt16("nightMusic"), reader.GetUInt16("battleMusic"));
|
PrivateArea privArea = new PrivateArea(parent, reader.GetUInt32("id"), reader.GetString("className"), reader.GetString("privateAreaName"), reader.GetUInt32("privateAreaType"), reader.GetUInt16("dayMusic"), reader.GetUInt16("nightMusic"), reader.GetUInt16("battleMusic"));
|
||||||
parent.AddPrivateArea(privArea);
|
parent.AddPrivateArea(privArea);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -184,7 +185,7 @@ namespace FFXIVClassic_Map_Server
|
|||||||
if (!reader.IsDBNull(7))
|
if (!reader.IsDBNull(7))
|
||||||
privArea = reader.GetString(7);
|
privArea = reader.GetString(7);
|
||||||
|
|
||||||
ZoneEntrance entance = new ZoneEntrance(reader.GetUInt32(1), privArea, reader.GetByte(2), reader.GetFloat(3), reader.GetFloat(4), reader.GetFloat(5), reader.GetFloat(6));
|
ZoneEntrance entance = new ZoneEntrance(reader.GetUInt32(1), privArea, 1, reader.GetByte(2), reader.GetFloat(3), reader.GetFloat(4), reader.GetFloat(5), reader.GetFloat(6));
|
||||||
zoneEntranceList[id] = entance;
|
zoneEntranceList[id] = entance;
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@ -548,19 +549,19 @@ namespace FFXIVClassic_Map_Server
|
|||||||
}
|
}
|
||||||
|
|
||||||
ZoneEntrance ze = zoneEntranceList[zoneEntrance];
|
ZoneEntrance ze = zoneEntranceList[zoneEntrance];
|
||||||
DoZoneChange(player, ze.zoneId, ze.privateAreaName, ze.spawnType, ze.spawnX, ze.spawnY, ze.spawnZ, ze.spawnRotation);
|
DoZoneChange(player, ze.zoneId, ze.privateAreaName, ze.privateAreaType, ze.spawnType, ze.spawnX, ze.spawnY, ze.spawnZ, ze.spawnRotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Moves actor to new zone, and sends packets to spawn at the given coords.
|
//Moves actor to new zone, and sends packets to spawn at the given coords.
|
||||||
public void DoZoneChange(Player player, uint destinationZoneId, string destinationPrivateArea, byte spawnType, float spawnX, float spawnY, float spawnZ, float spawnRotation)
|
public void DoZoneChange(Player player, uint destinationZoneId, string destinationPrivateArea, int destinationPrivateAreaType, byte spawnType, float spawnX, float spawnY, float spawnZ, float spawnRotation)
|
||||||
{
|
{
|
||||||
//Add player to new zone and update
|
//Add player to new zone and update
|
||||||
Area newArea;
|
Area newArea;
|
||||||
|
|
||||||
if (destinationPrivateArea == null)
|
if (destinationPrivateArea == null)
|
||||||
newArea = GetZone(destinationZoneId);
|
newArea = GetZone(destinationZoneId);
|
||||||
else
|
else //Add check for -1 if it is a instance
|
||||||
newArea = GetZone(destinationZoneId).GetPrivateArea(destinationPrivateArea, 0);
|
newArea = GetZone(destinationZoneId).GetPrivateArea(destinationPrivateArea, (uint)destinationPrivateAreaType);
|
||||||
|
|
||||||
//This server does not contain that zoneId
|
//This server does not contain that zoneId
|
||||||
if (newArea == null)
|
if (newArea == null)
|
||||||
@ -581,6 +582,9 @@ namespace FFXIVClassic_Map_Server
|
|||||||
|
|
||||||
//Update player actor's properties
|
//Update player actor's properties
|
||||||
player.zoneId = newArea.actorId;
|
player.zoneId = newArea.actorId;
|
||||||
|
|
||||||
|
player.privateArea = newArea is PrivateArea ? ((PrivateArea)newArea).GetPrivateAreaName() : null;
|
||||||
|
player.privateAreaType = newArea is PrivateArea ? ((PrivateArea)newArea).GetPrivateAreaType() : 0;
|
||||||
player.zone = newArea;
|
player.zone = newArea;
|
||||||
player.positionX = spawnX;
|
player.positionX = spawnX;
|
||||||
player.positionY = spawnY;
|
player.positionY = spawnY;
|
||||||
@ -589,11 +593,15 @@ namespace FFXIVClassic_Map_Server
|
|||||||
|
|
||||||
//Send packets
|
//Send packets
|
||||||
player.playerSession.QueuePacket(DeleteAllActorsPacket.BuildPacket(player.actorId), true, false);
|
player.playerSession.QueuePacket(DeleteAllActorsPacket.BuildPacket(player.actorId), true, false);
|
||||||
player.playerSession.QueuePacket(_0xE2Packet.BuildPacket(player.actorId, 0x0), true, false);
|
player.playerSession.QueuePacket(_0xE2Packet.BuildPacket(player.actorId, 0x10), true, false);
|
||||||
player.SendZoneInPackets(this, spawnType);
|
player.SendZoneInPackets(this, spawnType);
|
||||||
player.playerSession.ClearInstance();
|
player.playerSession.ClearInstance();
|
||||||
player.SendInstanceUpdate();
|
player.SendInstanceUpdate();
|
||||||
|
|
||||||
|
//Send "You have entered an instance" if it's a Private Area
|
||||||
|
if (newArea is PrivateArea)
|
||||||
|
player.SendGameMessage(GetActor(), 34108, 0x20);
|
||||||
|
|
||||||
LuaEngine.OnZoneIn(player);
|
LuaEngine.OnZoneIn(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -630,7 +638,7 @@ namespace FFXIVClassic_Map_Server
|
|||||||
player.rotation = spawnRotation;
|
player.rotation = spawnRotation;
|
||||||
|
|
||||||
//Send packets
|
//Send packets
|
||||||
player.playerSession.QueuePacket(_0xE2Packet.BuildPacket(player.actorId, 0x0), true, false);
|
player.playerSession.QueuePacket(_0xE2Packet.BuildPacket(player.actorId, 0x10), true, false);
|
||||||
player.playerSession.QueuePacket(player.CreateSpawnTeleportPacket(player.actorId, spawnType), true, false);
|
player.playerSession.QueuePacket(player.CreateSpawnTeleportPacket(player.actorId, spawnType), true, false);
|
||||||
player.SendInstanceUpdate();
|
player.SendInstanceUpdate();
|
||||||
|
|
||||||
@ -845,6 +853,17 @@ namespace FFXIVClassic_Map_Server
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Actor GetActorInWorldByUniqueId(string uid)
|
||||||
|
{
|
||||||
|
foreach (Zone zone in zoneList.Values)
|
||||||
|
{
|
||||||
|
Actor a = zone.FindActorInZoneByUniqueID(uid);
|
||||||
|
if (a != null)
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public Player GetPCInWorld(uint charId)
|
public Player GetPCInWorld(uint charId)
|
||||||
{
|
{
|
||||||
foreach (Zone zone in zoneList.Values)
|
foreach (Zone zone in zoneList.Values)
|
||||||
@ -863,6 +882,14 @@ namespace FFXIVClassic_Map_Server
|
|||||||
return zoneList[zoneId];
|
return zoneList[zoneId];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PrivateArea GetPrivateArea(uint zoneId, string privateArea, uint privateAreaType)
|
||||||
|
{
|
||||||
|
if (!zoneList.ContainsKey(zoneId))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return zoneList[zoneId].GetPrivateArea(privateArea, privateAreaType);
|
||||||
|
}
|
||||||
|
|
||||||
public WorldMaster GetActor()
|
public WorldMaster GetActor()
|
||||||
{
|
{
|
||||||
return worldMaster;
|
return worldMaster;
|
||||||
@ -877,16 +904,18 @@ namespace FFXIVClassic_Map_Server
|
|||||||
{
|
{
|
||||||
public uint zoneId;
|
public uint zoneId;
|
||||||
public string privateAreaName;
|
public string privateAreaName;
|
||||||
|
public int privateAreaType;
|
||||||
public byte spawnType;
|
public byte spawnType;
|
||||||
public float spawnX;
|
public float spawnX;
|
||||||
public float spawnY;
|
public float spawnY;
|
||||||
public float spawnZ;
|
public float spawnZ;
|
||||||
public float spawnRotation;
|
public float spawnRotation;
|
||||||
|
|
||||||
public ZoneEntrance(uint zoneId, string privateAreaName, byte spawnType, float x, float y, float z, float rot)
|
public ZoneEntrance(uint zoneId, string privateAreaName, int privateAreaType, byte spawnType, float x, float y, float z, float rot)
|
||||||
{
|
{
|
||||||
this.zoneId = zoneId;
|
this.zoneId = zoneId;
|
||||||
this.privateAreaName = privateAreaName;
|
this.privateAreaName = privateAreaName;
|
||||||
|
this.privateAreaType = privateAreaType;
|
||||||
this.spawnType = spawnType;
|
this.spawnType = spawnType;
|
||||||
this.spawnX = x;
|
this.spawnX = x;
|
||||||
this.spawnY = y;
|
this.spawnY = y;
|
||||||
|
@ -28,6 +28,8 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
public float[] moveSpeeds = new float[4];
|
public float[] moveSpeeds = new float[4];
|
||||||
|
|
||||||
public uint zoneId, zoneId2;
|
public uint zoneId, zoneId2;
|
||||||
|
public string privateArea;
|
||||||
|
public uint privateAreaType;
|
||||||
public Area zone = null;
|
public Area zone = null;
|
||||||
public Area zone2 = null;
|
public Area zone2 = null;
|
||||||
public bool isZoning = false;
|
public bool isZoning = false;
|
||||||
@ -351,7 +353,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
uint zoneId = zone.actorId;
|
uint zoneId = zone.actorId;
|
||||||
uint privLevel = 0;
|
uint privLevel = 0;
|
||||||
if (zone is PrivateArea)
|
if (zone is PrivateArea)
|
||||||
privLevel = ((PrivateArea)zone).GetPrivateAreaLevel();
|
privLevel = ((PrivateArea)zone).GetPrivateAreaType();
|
||||||
|
|
||||||
actorName = String.Format("{0}_{1}_{2}@{3:X3}{4:X2}", className, zoneName, classNumber, zoneId, privLevel);
|
actorName = String.Format("{0}_{1}_{2}@{3:X3}{4:X2}", className, zoneName, classNumber, zoneId, privLevel);
|
||||||
}
|
}
|
||||||
|
@ -298,6 +298,19 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
if (!mActorList.ContainsKey(id))
|
if (!mActorList.ContainsKey(id))
|
||||||
return null;
|
return null;
|
||||||
return mActorList[id];
|
return mActorList[id];
|
||||||
|
}
|
||||||
|
|
||||||
|
public Actor FindActorInZoneByUniqueID(string uniqueId)
|
||||||
|
{
|
||||||
|
foreach (Actor a in mActorList.Values)
|
||||||
|
{
|
||||||
|
if (a is Npc)
|
||||||
|
{
|
||||||
|
if (((Npc)a).GetUniqueId().ToLower().Equals(uniqueId))
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Player FindPCInZone(string name)
|
public Player FindPCInZone(string name)
|
||||||
@ -360,7 +373,16 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
if (actorClass == null)
|
if (actorClass == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Npc npc = new Npc(mActorList.Count + 1, actorClass, location.uniqueId, actorId, location.x, location.y, location.z, location.rot, location.state, location.animId, null);
|
uint zoneId;
|
||||||
|
|
||||||
|
if (this is PrivateArea)
|
||||||
|
zoneId = ((PrivateArea)this).GetParentZone().actorId;
|
||||||
|
else
|
||||||
|
zoneId = actorId;
|
||||||
|
|
||||||
|
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);
|
npc.LoadEventConditions(actorClass.eventConditions);
|
||||||
|
|
||||||
AddActorToZone(npc);
|
AddActorToZone(npc);
|
||||||
|
@ -15,14 +15,14 @@ namespace FFXIVClassic_Map_Server.actors.area
|
|||||||
{
|
{
|
||||||
private Zone parentZone;
|
private Zone parentZone;
|
||||||
private string privateAreaName;
|
private string privateAreaName;
|
||||||
private uint privateAreaLevel;
|
private uint privateAreaType;
|
||||||
|
|
||||||
public PrivateArea(Zone parent, uint id, string className, string privateAreaName, uint privateAreaLevel, ushort bgmDay, ushort bgmNight, ushort bgmBattle)
|
public PrivateArea(Zone parent, uint id, string className, string privateAreaName, uint privateAreaType, ushort bgmDay, ushort bgmNight, ushort bgmBattle)
|
||||||
: base(id, parent.zoneName, parent.regionId, className, bgmDay, bgmNight, bgmBattle, parent.isIsolated, parent.isInn, parent.canRideChocobo, parent.canStealth, true)
|
: base(id, parent.zoneName, parent.regionId, className, bgmDay, bgmNight, bgmBattle, parent.isIsolated, parent.isInn, parent.canRideChocobo, parent.canStealth, true)
|
||||||
{
|
{
|
||||||
this.parentZone = parent;
|
this.parentZone = parent;
|
||||||
this.privateAreaName = privateAreaName;
|
this.privateAreaName = privateAreaName;
|
||||||
this.privateAreaLevel = privateAreaLevel;
|
this.privateAreaType = privateAreaType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetPrivateAreaName()
|
public string GetPrivateAreaName()
|
||||||
@ -30,9 +30,9 @@ namespace FFXIVClassic_Map_Server.actors.area
|
|||||||
return privateAreaName;
|
return privateAreaName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetPrivateAreaLevel()
|
public uint GetPrivateAreaType()
|
||||||
{
|
{
|
||||||
return privateAreaLevel;
|
return privateAreaType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Zone GetParentZone()
|
public Zone GetParentZone()
|
||||||
@ -46,12 +46,11 @@ namespace FFXIVClassic_Map_Server.actors.area
|
|||||||
|
|
||||||
string path = className;
|
string path = className;
|
||||||
|
|
||||||
if (className.ToLower().Contains("content"))
|
string realClassName = className.Substring(className.LastIndexOf("/") + 1);
|
||||||
path = "Content/" + className;
|
|
||||||
|
|
||||||
lParams = LuaUtils.CreateLuaParamList("/Area/PrivateArea/" + path, false, true, zoneName, privateAreaName, 0x9E, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, false, false, false);
|
lParams = LuaUtils.CreateLuaParamList("/Area/PrivateArea" + path, false, true, zoneName, privateAreaName, privateAreaType, canRideChocobo ? (byte)1 : (byte)0, canStealth, isInn, false, false, false, false, false, false);
|
||||||
ActorInstantiatePacket.BuildPacket(actorId, playerActorId, actorName, className, lParams).DebugPrintSubPacket();
|
ActorInstantiatePacket.BuildPacket(actorId, playerActorId, actorName, realClassName, lParams).DebugPrintSubPacket();
|
||||||
return ActorInstantiatePacket.BuildPacket(actorId, playerActorId, actorName, className, lParams);
|
return ActorInstantiatePacket.BuildPacket(actorId, playerActorId, actorName, realClassName, lParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@ namespace FFXIVClassic_Map_Server.actors.area
|
|||||||
class Zone : Area
|
class Zone : Area
|
||||||
{
|
{
|
||||||
Dictionary<string, Dictionary<uint, PrivateArea>> privateAreas = new Dictionary<string, Dictionary<uint, PrivateArea>>();
|
Dictionary<string, Dictionary<uint, PrivateArea>> privateAreas = new Dictionary<string, Dictionary<uint, PrivateArea>>();
|
||||||
|
Dictionary<string, List<PrivateArea>> instancedPrivateAreas = new Dictionary<string, List<PrivateArea>>();
|
||||||
|
|
||||||
public Zone(uint id, string zoneName, ushort regionId, string className, ushort bgmDay, ushort bgmNight, ushort bgmBattle, bool isIsolated, bool isInn, bool canRideChocobo, bool canStealth, bool isInstanceRaid)
|
public Zone(uint id, string zoneName, ushort regionId, string className, ushort bgmDay, ushort bgmNight, ushort bgmBattle, bool isIsolated, bool isInn, bool canRideChocobo, bool canStealth, bool isInstanceRaid)
|
||||||
: base(id, zoneName, regionId, className, bgmDay, bgmNight, bgmBattle, isIsolated, isInn, canRideChocobo, canStealth, isInstanceRaid)
|
: base(id, zoneName, regionId, className, bgmDay, bgmNight, bgmBattle, isIsolated, isInn, canRideChocobo, canStealth, isInstanceRaid)
|
||||||
@ -26,11 +27,11 @@ namespace FFXIVClassic_Map_Server.actors.area
|
|||||||
public void AddPrivateArea(PrivateArea pa)
|
public void AddPrivateArea(PrivateArea pa)
|
||||||
{
|
{
|
||||||
if (privateAreas.ContainsKey(pa.GetPrivateAreaName()))
|
if (privateAreas.ContainsKey(pa.GetPrivateAreaName()))
|
||||||
privateAreas[pa.GetPrivateAreaName()][0] = pa;
|
privateAreas[pa.GetPrivateAreaName()][pa.GetPrivateAreaType()] = pa;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
privateAreas[pa.GetPrivateAreaName()] = new Dictionary<uint, PrivateArea>();
|
privateAreas[pa.GetPrivateAreaName()] = new Dictionary<uint, PrivateArea>();
|
||||||
privateAreas[pa.GetPrivateAreaName()][0] = pa;
|
privateAreas[pa.GetPrivateAreaName()][pa.GetPrivateAreaType()] = pa;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
using FFXIVClassic.Common;
|
using FFXIVClassic.Common;
|
||||||
using FFXIVClassic_Map_Server.actors;
|
using FFXIVClassic_Map_Server.actors;
|
||||||
|
using FFXIVClassic_Map_Server.actors.area;
|
||||||
using FFXIVClassic_Map_Server.actors.chara.npc;
|
using FFXIVClassic_Map_Server.actors.chara.npc;
|
||||||
using FFXIVClassic_Map_Server.Actors.Chara;
|
using FFXIVClassic_Map_Server.Actors.Chara;
|
||||||
using FFXIVClassic_Map_Server.dataobjects;
|
using FFXIVClassic_Map_Server.dataobjects;
|
||||||
using FFXIVClassic_Map_Server.lua;
|
using FFXIVClassic_Map_Server.lua;
|
||||||
|
|
||||||
using FFXIVClassic_Map_Server.packets.receive.events;
|
using FFXIVClassic_Map_Server.packets.receive.events;
|
||||||
using FFXIVClassic_Map_Server.packets.send.actor;
|
using FFXIVClassic_Map_Server.packets.send.actor;
|
||||||
using FFXIVClassic_Map_Server.utils;
|
using FFXIVClassic_Map_Server.utils;
|
||||||
@ -27,8 +27,8 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
|
|
||||||
public NpcWork npcWork = new NpcWork();
|
public NpcWork npcWork = new NpcWork();
|
||||||
|
|
||||||
public Npc(int actorNumber, ActorClass actorClass, string uniqueId, uint zoneId, float posX, float posY, float posZ, float rot, ushort actorState, uint animationId, string customDisplayName)
|
public Npc(int actorNumber, ActorClass actorClass, string uniqueId, Area spawnedArea, float posX, float posY, float posZ, float rot, ushort actorState, uint animationId, string customDisplayName)
|
||||||
: base((4 << 28 | zoneId << 19 | (uint)actorNumber))
|
: base((4 << 28 | spawnedArea.actorId << 19 | (uint)actorNumber))
|
||||||
{
|
{
|
||||||
this.positionX = posX;
|
this.positionX = posX;
|
||||||
this.positionY = posY;
|
this.positionY = posY;
|
||||||
@ -41,8 +41,8 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
|
|
||||||
this.uniqueIdentifier = uniqueId;
|
this.uniqueIdentifier = uniqueId;
|
||||||
|
|
||||||
this.zoneId = zoneId;
|
this.zoneId = spawnedArea.actorId;
|
||||||
this.zone = Server.GetWorldManager().GetZone(zoneId);
|
this.zone = spawnedArea;
|
||||||
|
|
||||||
this.actorClassId = actorClass.actorClassId;
|
this.actorClassId = actorClass.actorClassId;
|
||||||
|
|
||||||
@ -131,8 +131,12 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
subpackets.AddRange(GetEventConditionPackets(playerActorId));
|
subpackets.AddRange(GetEventConditionPackets(playerActorId));
|
||||||
subpackets.Add(CreateSpeedPacket(playerActorId));
|
subpackets.Add(CreateSpeedPacket(playerActorId));
|
||||||
subpackets.Add(CreateSpawnPositonPacket(playerActorId, 0x0));
|
subpackets.Add(CreateSpawnPositonPacket(playerActorId, 0x0));
|
||||||
|
|
||||||
if (uniqueIdentifier.Equals("door2"))
|
if (uniqueIdentifier.Equals("door1"))
|
||||||
|
{
|
||||||
|
subpackets.Add(_0xD8Packet.BuildPacket(actorId, playerActorId, 0xB0D, 0x1af));
|
||||||
|
}
|
||||||
|
else if (uniqueIdentifier.Equals("door2"))
|
||||||
{
|
{
|
||||||
subpackets.Add(_0xD8Packet.BuildPacket(actorId, playerActorId, 0xB09, 0x1af));
|
subpackets.Add(_0xD8Packet.BuildPacket(actorId, playerActorId, 0xB09, 0x1af));
|
||||||
}
|
}
|
||||||
@ -167,16 +171,16 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
}
|
}
|
||||||
else if (actorClassId == 5900013)
|
else if (actorClassId == 5900013)
|
||||||
{
|
{
|
||||||
uint id = 2;
|
uint id = 201;
|
||||||
uint id2 = 5144;
|
uint id2 = 0x1415;
|
||||||
string val = "fdot";
|
string val = "fdin";
|
||||||
subpackets.Add(_0xD8Packet.BuildPacket(actorId, playerActorId, id, id2));
|
subpackets.Add(_0xD8Packet.BuildPacket(actorId, playerActorId, id, id2));
|
||||||
subpackets.Add(_0xD9Packet.BuildPacket(actorId, playerActorId, val));
|
subpackets.Add(_0xD9Packet.BuildPacket(actorId, playerActorId, val));
|
||||||
}
|
}
|
||||||
else if (actorClassId == 5900014)
|
else if (actorClassId == 5900014)
|
||||||
{
|
{
|
||||||
uint id = 2;
|
uint id = 201;
|
||||||
uint id2 = 5145;
|
uint id2 = 0x1415;
|
||||||
string val = "fdot";
|
string val = "fdot";
|
||||||
subpackets.Add(_0xD8Packet.BuildPacket(actorId, playerActorId, id, id2));
|
subpackets.Add(_0xD8Packet.BuildPacket(actorId, playerActorId, id, id2));
|
||||||
subpackets.Add(_0xD9Packet.BuildPacket(actorId, playerActorId, val));
|
subpackets.Add(_0xD9Packet.BuildPacket(actorId, playerActorId, val));
|
||||||
@ -374,8 +378,17 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
|
|
||||||
if (File.Exists("./scripts/base/" + classPath + ".lua"))
|
if (File.Exists("./scripts/base/" + classPath + ".lua"))
|
||||||
parent = LuaEngine.LoadScript("./scripts/base/" + classPath + ".lua");
|
parent = LuaEngine.LoadScript("./scripts/base/" + classPath + ".lua");
|
||||||
if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)))
|
|
||||||
child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier));
|
if (zone is PrivateArea)
|
||||||
|
{
|
||||||
|
if (File.Exists(String.Format("./scripts/unique/{0}/privatearea/{1}/{2}/{3}.lua", zone.zoneName, ((PrivateArea)zone).GetPrivateAreaName(), className, uniqueIdentifier)))
|
||||||
|
child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/privatearea/{1}/{2}/{3}.lua", zone.zoneName, ((PrivateArea)zone).GetPrivateAreaName(), className, uniqueIdentifier));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)))
|
||||||
|
child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier));
|
||||||
|
}
|
||||||
|
|
||||||
if (parent == null && child == null)
|
if (parent == null && child == null)
|
||||||
{
|
{
|
||||||
@ -402,8 +415,16 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
|
|
||||||
if (File.Exists("./scripts/base/" + classPath + ".lua"))
|
if (File.Exists("./scripts/base/" + classPath + ".lua"))
|
||||||
parent = LuaEngine.LoadScript("./scripts/base/" + classPath + ".lua");
|
parent = LuaEngine.LoadScript("./scripts/base/" + classPath + ".lua");
|
||||||
if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)))
|
if (zone is PrivateArea)
|
||||||
child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier));
|
{
|
||||||
|
if (File.Exists(String.Format("./scripts/unique/{0}/privatearea/{1}/{2}/{3}.lua", zone.zoneName, ((PrivateArea)zone).GetPrivateAreaName(), className, uniqueIdentifier)))
|
||||||
|
child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/privatearea/{1}/{2}/{3}.lua", zone.zoneName, ((PrivateArea)zone).GetPrivateAreaName(), className, uniqueIdentifier));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (File.Exists(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier)))
|
||||||
|
child = LuaEngine.LoadScript(String.Format("./scripts/unique/{0}/{1}/{2}.lua", zone.zoneName, className, uniqueIdentifier));
|
||||||
|
}
|
||||||
|
|
||||||
if (parent == null && child == null)
|
if (parent == null && child == null)
|
||||||
{
|
{
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -68,14 +68,42 @@ namespace FFXIVClassic_Map_Server.actors.director
|
|||||||
return BasePacket.CreatePacket(initProperties.BuildPacket(playerActorId, actorId), true, false);
|
return BasePacket.CreatePacket(initProperties.BuildPacket(playerActorId, actorId), true, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnTalked(Player player, Npc npc)
|
public void OnTalkEvent(Player player, Npc npc)
|
||||||
{
|
{
|
||||||
LuaEngine.DoDirectorOnTalked(this, player, npc);
|
if (File.Exists("./scripts/directors/" + directorScriptPath + ".lua"))
|
||||||
|
{
|
||||||
|
LuaScript script = LuaEngine.LoadScript("./scripts/directors/" + directorScriptPath + ".lua");
|
||||||
|
|
||||||
|
if (script == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Run Script
|
||||||
|
if (!script.Globals.Get("onTalkEvent").IsNil())
|
||||||
|
script.Call(script.Globals["onTalkEvent"], player, npc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LuaEngine.SendError(player, String.Format("ERROR: Could not find script for director {0}.", GetName()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnCommand(Player player, Command command)
|
public void OnCommandEvent(Player player, Command command)
|
||||||
{
|
{
|
||||||
LuaEngine.DoDirectorOnCommand(this, player, command);
|
if (File.Exists("./scripts/directors/" + directorScriptPath + ".lua"))
|
||||||
|
{
|
||||||
|
LuaScript script = LuaEngine.LoadScript("./scripts/directors/" + directorScriptPath + ".lua");
|
||||||
|
|
||||||
|
if (script == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Run Script
|
||||||
|
if (!script.Globals.Get("onCommandEvent").IsNil())
|
||||||
|
script.Call(script.Globals["onCommandEvent"], player, command);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LuaEngine.SendError(player, String.Format("ERROR: Could not find script for director {0}.", GetName()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddChild(Actor actor)
|
public void AddChild(Actor actor)
|
||||||
@ -186,10 +214,15 @@ namespace FFXIVClassic_Map_Server.actors.director
|
|||||||
uint zoneId = zone.actorId;
|
uint zoneId = zone.actorId;
|
||||||
uint privLevel = 0;
|
uint privLevel = 0;
|
||||||
if (zone is PrivateArea)
|
if (zone is PrivateArea)
|
||||||
privLevel = ((PrivateArea)zone).GetPrivateAreaLevel();
|
privLevel = ((PrivateArea)zone).GetPrivateAreaType();
|
||||||
|
|
||||||
actorName = String.Format("{0}_{1}_{2}@{3:X3}{4:X2}", className, zoneName, classNumber, zoneId, privLevel);
|
actorName = String.Format("{0}_{1}_{2}@{3:X3}{4:X2}", className, zoneName, classNumber, zoneId, privLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string GetScriptPath()
|
||||||
|
{
|
||||||
|
return directorScriptPath;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,11 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
//Inform update
|
//Inform update
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public uint GetQuestId()
|
||||||
|
{
|
||||||
|
return actorId & 0xFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
public object GetQuestData(string dataName)
|
public object GetQuestData(string dataName)
|
||||||
{
|
{
|
||||||
if (questData.ContainsKey(dataName))
|
if (questData.ContainsKey(dataName))
|
||||||
@ -52,12 +57,7 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
public void ClearQuestData()
|
public void ClearQuestData()
|
||||||
{
|
{
|
||||||
questData.Clear();
|
questData.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetQuestId()
|
|
||||||
{
|
|
||||||
return actorId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ClearQuestFlags()
|
public void ClearQuestFlags()
|
||||||
{
|
{
|
||||||
@ -98,9 +98,11 @@ namespace FFXIVClassic_Map_Server.Actors
|
|||||||
return currentPhase;
|
return currentPhase;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void NextPhase()
|
public void NextPhase(int phaseNumber)
|
||||||
{
|
{
|
||||||
currentPhase++;
|
currentPhase = phaseNumber;
|
||||||
|
owner.SendGameMessage(Server.GetWorldManager().GetActor(), 25116, 0x20, (object)GetQuestId());
|
||||||
|
SaveData();
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetQuestFlags()
|
public uint GetQuestFlags()
|
||||||
|
@ -173,6 +173,23 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void OnZoneInDone(Player player)
|
||||||
|
{
|
||||||
|
string luaPath = String.Format(FILEPATH_ZONE, player.GetZone().zoneName);
|
||||||
|
|
||||||
|
if (File.Exists(luaPath))
|
||||||
|
{
|
||||||
|
LuaScript script = LoadScript(luaPath);
|
||||||
|
|
||||||
|
if (script == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Run Script
|
||||||
|
if (!script.Globals.Get("onZoneInDone").IsNil())
|
||||||
|
script.Call(script.Globals["onZoneInDone"], player.GetZone(), player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void OnBeginLogin(Player player)
|
public static void OnBeginLogin(Player player)
|
||||||
{
|
{
|
||||||
if (File.Exists(FILEPATH_PLAYER))
|
if (File.Exists(FILEPATH_PLAYER))
|
||||||
@ -393,48 +410,6 @@ namespace FFXIVClassic_Map_Server.lua
|
|||||||
player.SendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", message);
|
player.SendMessage(SendMessagePacket.MESSAGE_TYPE_SYSTEM_ERROR, "", message);
|
||||||
player.playerSession.QueuePacket(BasePacket.CreatePacket(SendError, true, false));
|
player.playerSession.QueuePacket(BasePacket.CreatePacket(SendError, true, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal static void DoDirectorOnTalked(Director director, Player player, Npc npc)
|
|
||||||
{
|
|
||||||
string luaPath = String.Format(FILEPATH_DIRECTORS, director.GetName());
|
|
||||||
|
|
||||||
if (File.Exists(luaPath))
|
|
||||||
{
|
|
||||||
LuaScript script = LoadScript(luaPath);
|
|
||||||
|
|
||||||
if (script == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
//Run Script
|
|
||||||
if (!script.Globals.Get("onTalked").IsNil())
|
|
||||||
script.Call(script.Globals["onTalked"], player, npc);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SendError(player, String.Format("ERROR: Could not find script for director {0}.", director.GetName()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static void DoDirectorOnCommand(Director director, Player player, Command command)
|
|
||||||
{
|
|
||||||
string luaPath = String.Format(FILEPATH_DIRECTORS, director.GetName());
|
|
||||||
|
|
||||||
if (File.Exists(luaPath))
|
|
||||||
{
|
|
||||||
LuaScript script = LoadScript(luaPath);
|
|
||||||
|
|
||||||
if (script == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
//Run Script
|
|
||||||
if (!script.Globals.Get("onCommand").IsNil())
|
|
||||||
script.Call(script.Globals["onCommand"], player, command);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SendError(player, String.Format("ERROR: Could not find script for director {0}.", director.GetName()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,13 +3,13 @@ using System.IO;
|
|||||||
|
|
||||||
namespace FFXIVClassic_Map_Server.packets.receive
|
namespace FFXIVClassic_Map_Server.packets.receive
|
||||||
{
|
{
|
||||||
class _0x07Packet
|
class ZoneInCompletePacket
|
||||||
{
|
{
|
||||||
public bool invalidPacket = false;
|
public bool invalidPacket = false;
|
||||||
public uint timestamp;
|
public uint timestamp;
|
||||||
public uint unknown;
|
public int unknown;
|
||||||
|
|
||||||
public _0x07Packet(byte[] data)
|
public ZoneInCompletePacket(byte[] data)
|
||||||
{
|
{
|
||||||
using (MemoryStream mem = new MemoryStream(data))
|
using (MemoryStream mem = new MemoryStream(data))
|
||||||
{
|
{
|
||||||
@ -17,7 +17,7 @@ namespace FFXIVClassic_Map_Server.packets.receive
|
|||||||
{
|
{
|
||||||
try{
|
try{
|
||||||
timestamp = binReader.ReadUInt32();
|
timestamp = binReader.ReadUInt32();
|
||||||
unknown = binReader.ReadUInt32();
|
unknown = binReader.ReadInt32();
|
||||||
}
|
}
|
||||||
catch (Exception){
|
catch (Exception){
|
||||||
invalidPacket = true;
|
invalidPacket = true;
|
@ -24,7 +24,7 @@ namespace FFXIVClassic_Map_Server.packets.send.events
|
|||||||
binWriter.Write((UInt32)playerActorId);
|
binWriter.Write((UInt32)playerActorId);
|
||||||
binWriter.Write((UInt32)targetActorId);
|
binWriter.Write((UInt32)targetActorId);
|
||||||
|
|
||||||
int test = 0x75dc8705; //This will crash if set to 0 on pushCommand but not for mining which has to be 0????
|
int test = 0x75dc1705; //This will crash if set to 0 on pushCommand but not for mining which has to be 0????
|
||||||
|
|
||||||
binWriter.Write((UInt32)test);
|
binWriter.Write((UInt32)test);
|
||||||
binWriter.Write((UInt32)0x30400000);
|
binWriter.Write((UInt32)0x30400000);
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function init(npc)
|
||||||
|
return true, true, 10, 0, 1, true, false, false, false, false, false, false, false, 0;
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function init(npc)
|
||||||
|
return true, true, 10, 0, 1, true, false, false, false, false, false, false, false, 0;
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function init(npc)
|
||||||
|
return true, true, 10, 0, 1, true, false, false, false, false, false, false, false, 0;
|
||||||
|
end
|
@ -0,0 +1,40 @@
|
|||||||
|
--[[
|
||||||
|
|
||||||
|
AetheryteChild Script
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
|
||||||
|
eventAetheryteChildSelect(showTeleport, parentAetheryteID, animaAmount, animaCost(always 1)): Opens menu
|
||||||
|
eventAetheryteChildDesion(aetheryteId): "Your homepoint is now X"
|
||||||
|
processGuildleveBoost(favourCost, currentFavour): Ask: "Invoke the aspect of your Guardian deity to gain a temporary boon for the duration of a levequest."
|
||||||
|
processGuildlevePlaying(??)
|
||||||
|
processGuildleveJoin() - Ask: "Do you wish to join your party leader's levequest?"
|
||||||
|
|
||||||
|
--]]
|
||||||
|
|
||||||
|
require ("global")
|
||||||
|
|
||||||
|
function init(npc)
|
||||||
|
return false, false, 0, 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventStarted(player, npc, triggerName)
|
||||||
|
menuChoice = callClientFunction(player, "eventAetheryteChildSelect", true, 1280062, 4, 1);
|
||||||
|
|
||||||
|
--Teleport
|
||||||
|
if (menuChoice == 2) then
|
||||||
|
|
||||||
|
--Init Levequest
|
||||||
|
elseif (menuChoice == -1) then
|
||||||
|
callClientFunction(player, "eventGLSelect", 0);
|
||||||
|
--Set Homepoint
|
||||||
|
elseif (menuChoice == -2) then
|
||||||
|
|
||||||
|
--View Faction Standing
|
||||||
|
elseif (menuChoice == -3) then
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
player:EndEvent();
|
||||||
|
end
|
||||||
|
|
@ -21,11 +21,11 @@ end
|
|||||||
|
|
||||||
function onEventStarted(player, npc, triggerName)
|
function onEventStarted(player, npc, triggerName)
|
||||||
|
|
||||||
--callClientFunction(player, "eventTalkWelcome", player);
|
callClientFunction(player, "eventTalkWelcome", player);
|
||||||
callClientFunction(player, "eventAskMainMenu", player, 20, true, true, true, true, 4);
|
callClientFunction(player, "eventAskMainMenu", player, 20, true, true, true, true, 4);
|
||||||
callClientFunction(player, "eventTalkMyChocobo", player);
|
--callClientFunction(player, "eventTalkMyChocobo", player);
|
||||||
callClientFunction(player, "eventSetChocoboName", false);
|
--callClientFunction(player, "eventSetChocoboName", false);
|
||||||
callClientFunction(player, "eventAfterChocoboName", player);
|
--callClientFunction(player, "eventAfterChocoboName", player);
|
||||||
|
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
end
|
end
|
@ -42,7 +42,7 @@ function onEventStarted(player, npc, triggerName)
|
|||||||
createLinkshell(lsName, crestId);
|
createLinkshell(lsName, crestId);
|
||||||
callClientFunction(player, "eventTalkStepMakeupDone");
|
callClientFunction(player, "eventTalkStepMakeupDone");
|
||||||
--Modify
|
--Modify
|
||||||
elseif (result == 1) then
|
elseif (result == 4) then
|
||||||
modifyLinkshell(lsName, crestId);
|
modifyLinkshell(lsName, crestId);
|
||||||
callClientFunction(player, "eventTalkStepModifyDone");
|
callClientFunction(player, "eventTalkStepModifyDone");
|
||||||
--Disband
|
--Disband
|
||||||
|
68
data/scripts/chocobo.lua
Normal file
68
data/scripts/chocobo.lua
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
--[[
|
||||||
|
|
||||||
|
Globals referenced in all of the lua scripts
|
||||||
|
|
||||||
|
--]]
|
||||||
|
|
||||||
|
-- ACTOR STATES
|
||||||
|
|
||||||
|
ACTORSTATE_PASSIVE = 0;
|
||||||
|
ACTORSTATE_DEAD1 = 1;
|
||||||
|
ACTORSTATE_ACTIVE = 2;
|
||||||
|
ACTORSTATE_DEAD2 = 3;
|
||||||
|
ACTORSTATE_SITTING_ONOBJ = 11;
|
||||||
|
ACTORSTATE_SITTING_ONFLOOR = 13;
|
||||||
|
ACTORSTATE_MOUNTED = 15;
|
||||||
|
|
||||||
|
|
||||||
|
-- MESSAGE
|
||||||
|
MESSAGE_TYPE_NONE = 0;
|
||||||
|
MESSAGE_TYPE_SAY = 1;
|
||||||
|
MESSAGE_TYPE_SHOUT = 2;
|
||||||
|
MESSAGE_TYPE_TELL = 3;
|
||||||
|
MESSAGE_TYPE_PARTY = 4;
|
||||||
|
MESSAGE_TYPE_LINKSHELL1 = 5;
|
||||||
|
MESSAGE_TYPE_LINKSHELL2 = 6;
|
||||||
|
MESSAGE_TYPE_LINKSHELL3 = 7;
|
||||||
|
MESSAGE_TYPE_LINKSHELL4 = 8;
|
||||||
|
MESSAGE_TYPE_LINKSHELL5 = 9;
|
||||||
|
MESSAGE_TYPE_LINKSHELL6 = 10;
|
||||||
|
MESSAGE_TYPE_LINKSHELL7 = 11;
|
||||||
|
MESSAGE_TYPE_LINKSHELL8 = 12;
|
||||||
|
|
||||||
|
MESSAGE_TYPE_SAY_SPAM = 22;
|
||||||
|
MESSAGE_TYPE_SHOUT_SPAM = 23;
|
||||||
|
MESSAGE_TYPE_TELL_SPAM = 24;
|
||||||
|
MESSAGE_TYPE_CUSTOM_EMOTE = 25;
|
||||||
|
MESSAGE_TYPE_EMOTE_SPAM = 26;
|
||||||
|
MESSAGE_TYPE_STANDARD_EMOTE = 27;
|
||||||
|
MESSAGE_TYPE_URGENT_MESSAGE = 28;
|
||||||
|
MESSAGE_TYPE_GENERAL_INFO = 29;
|
||||||
|
MESSAGE_TYPE_SYSTEM = 32;
|
||||||
|
MESSAGE_TYPE_SYSTEM_ERROR = 33;
|
||||||
|
|
||||||
|
-- INVENTORY
|
||||||
|
INVENTORY_NORMAL = 0x0000; --Max 0xC8
|
||||||
|
INVENTORY_LOOT = 0x0004; --Max 0xA
|
||||||
|
INVENTORY_MELDREQUEST = 0x0005; --Max 0x04
|
||||||
|
INVENTORY_BAZAAR = 0x0007; --Max 0x0A
|
||||||
|
INVENTORY_CURRENCY = 0x0063; --Max 0x140
|
||||||
|
INVENTORY_KEYITEMS = 0x0064; --Max 0x500
|
||||||
|
INVENTORY_EQUIPMENT = 0x00FE; --Max 0x23
|
||||||
|
INVENTORY_EQUIPMENT_OTHERPLAYER = 0x00F9; --Max 0x23
|
||||||
|
|
||||||
|
--UTILS
|
||||||
|
|
||||||
|
function callClientFunction(player, functionName, ...)
|
||||||
|
player:RunEventFunction(functionName, ...);
|
||||||
|
result = coroutine.yield();
|
||||||
|
return result;
|
||||||
|
end
|
||||||
|
|
||||||
|
function printf(s, ...)
|
||||||
|
if ... then
|
||||||
|
print(s:format(...));
|
||||||
|
else
|
||||||
|
print(s);
|
||||||
|
end;
|
||||||
|
end;
|
@ -14,12 +14,11 @@ function onEventStarted(player, command, triggerName)
|
|||||||
player:ChangeState(0);
|
player:ChangeState(0);
|
||||||
end
|
end
|
||||||
|
|
||||||
player:endEvent();
|
--player:endEvent();
|
||||||
|
|
||||||
--For Opening Tutorial
|
--For Opening Tutorial
|
||||||
if (player:HasQuest("Man0l0") or player:HasQuest("Man0g0") or player:HasQuest("Man0u0")) then
|
if (player:HasQuest("Man0l0") or player:HasQuest("Man0g0") or player:HasQuest("Man0u0")) then
|
||||||
player:GetDirector():OnCommand(command);
|
player:GetDirector("Quest/QuestDirectorMan0l001"):OnCommandEvent(player, command);
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
12
data/scripts/commands/LinkshellKickCommand.lua
Normal file
12
data/scripts/commands/LinkshellKickCommand.lua
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
--[[
|
||||||
|
|
||||||
|
LinkshellKickCommand Script
|
||||||
|
|
||||||
|
--]]
|
||||||
|
|
||||||
|
function onEventStarted(player, actor, triggerName, linkshellName, kickedName)
|
||||||
|
|
||||||
|
GetWorldManager():RequestWorldLinkshellKick(player, linkshellName, kickedName);
|
||||||
|
player:EndEvent();
|
||||||
|
|
||||||
|
end
|
35
data/scripts/commands/gm/endevent.lua
Normal file
35
data/scripts/commands/gm/endevent.lua
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
require("global");
|
||||||
|
|
||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "ss",
|
||||||
|
description =
|
||||||
|
[[
|
||||||
|
Passes endEvent() to player or <targetname> to close a script.
|
||||||
|
!endevent |
|
||||||
|
!endevent <targetname> |
|
||||||
|
]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc, name, lastName)
|
||||||
|
local sender = "[endevent] ";
|
||||||
|
|
||||||
|
if name then
|
||||||
|
if lastName then
|
||||||
|
player = GetWorldManager():GetPCInWorld(name.." "..lastName) or nil;
|
||||||
|
else
|
||||||
|
player = GetWorldManager():GetPCInWorld(name) or nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
|
||||||
|
local message = "Sending endEvent()";
|
||||||
|
|
||||||
|
if player then
|
||||||
|
player:endEvent();
|
||||||
|
player:SendMessage(messageID, sender, message);
|
||||||
|
print(message);
|
||||||
|
else
|
||||||
|
print(sender.."Sending Event.");
|
||||||
|
end;
|
||||||
|
end;
|
42
data/scripts/commands/gm/givegil.lua
Normal file
42
data/scripts/commands/gm/givegil.lua
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
require("global");
|
||||||
|
|
||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "sss",
|
||||||
|
description =
|
||||||
|
[[
|
||||||
|
Adds gil <qty> to player or <targetname>.
|
||||||
|
!givegil <qty> |
|
||||||
|
!givegil <qty> <targetname> |
|
||||||
|
]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc, qty, name, lastName)
|
||||||
|
local sender = "[givegil] ";
|
||||||
|
|
||||||
|
if name then
|
||||||
|
if lastName then
|
||||||
|
player = GetWorldManager():GetPCInWorld(name.." "..lastName) or nil;
|
||||||
|
else
|
||||||
|
player = GetWorldManager():GetPCInWorld(name) or nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
if player then
|
||||||
|
currency = 1000001;
|
||||||
|
qty = tonumber(qty) or 1;
|
||||||
|
location = INVENTORY_CURRENCY;
|
||||||
|
|
||||||
|
local added = player:GetInventory(location):AddItem(currency, qty, 1);
|
||||||
|
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
|
||||||
|
local message = "unable to add gil";
|
||||||
|
|
||||||
|
if currency and added then
|
||||||
|
message = string.format("added %u gil to %s", qty, player:GetName());
|
||||||
|
end
|
||||||
|
player:SendMessage(messageID, sender, message);
|
||||||
|
print(message);
|
||||||
|
else
|
||||||
|
print(sender.."unable to add gil, ensure player name is valid.");
|
||||||
|
end;
|
||||||
|
end;
|
57
data/scripts/commands/gm/nudge.lua
Normal file
57
data/scripts/commands/gm/nudge.lua
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
require("global");
|
||||||
|
|
||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "ss",
|
||||||
|
description =
|
||||||
|
[[
|
||||||
|
Positions your character forward a set <distance>, defaults to 5 yalms.
|
||||||
|
!nudge |
|
||||||
|
!nudge <distance> |
|
||||||
|
!nudge <distance> <up/down> |
|
||||||
|
]],
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc, distance, vertical)
|
||||||
|
local pos = player:GetPos();
|
||||||
|
local x = pos[0];
|
||||||
|
local y = pos[1];
|
||||||
|
local z = pos[2];
|
||||||
|
local rot = pos[3];
|
||||||
|
local zone = pos[4];
|
||||||
|
local angle = rot + (math.pi/2);
|
||||||
|
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
|
||||||
|
local sender = "[nudge] ";
|
||||||
|
|
||||||
|
if distance == nil then
|
||||||
|
distance = 5
|
||||||
|
end;
|
||||||
|
|
||||||
|
local px = x - distance * math.cos(angle);
|
||||||
|
local pz = z + distance * math.sin(angle);
|
||||||
|
local message = string.format("Positioning forward %u yalms.", distance);
|
||||||
|
local worldManager = GetWorldManager();
|
||||||
|
|
||||||
|
if argc == 1 then
|
||||||
|
worldManager:DoPlayerMoveInZone(player, px, y, pz, rot, 0x0);
|
||||||
|
player:SendMessage(messageID, sender, message);
|
||||||
|
elseif argc == 2 then
|
||||||
|
if vertical == "up" or vertical == "u" or vertical == "+" then
|
||||||
|
y = y + distance;
|
||||||
|
message = string.format("Positioning up %u yalms.", distance);
|
||||||
|
worldManager:DoPlayerMoveInZone(player, x, y, z, rot, 0x0);
|
||||||
|
player:SendMessage(messageID, sender, message);
|
||||||
|
elseif vertical == "down" or vertical == "d" or vertical == "-" then
|
||||||
|
y = y - distance;
|
||||||
|
message = string.format("Positioning down %u yalms.", distance);
|
||||||
|
worldManager:DoPlayerMoveInZone(player, x, y, z, rot, 0x0);
|
||||||
|
player:SendMessage(messageID, sender, message);
|
||||||
|
else
|
||||||
|
player:SendMessage(messageID, sender, "Unknown parameters! Usage: \n"..properties.description);
|
||||||
|
end;
|
||||||
|
else
|
||||||
|
worldManager:DoPlayerMoveInZone(player, px, y, pz, rot, 0x0);
|
||||||
|
player:SendMessage(messageID, sender, message);
|
||||||
|
end;
|
||||||
|
end;
|
28
data/scripts/commands/gm/test.lua
Normal file
28
data/scripts/commands/gm/test.lua
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
require("global");
|
||||||
|
|
||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "ss",
|
||||||
|
description =
|
||||||
|
[[
|
||||||
|
Positions your character forward a set <distance>, defaults to 5 yalms.
|
||||||
|
!nudge |
|
||||||
|
!nudge <distance> |
|
||||||
|
!nudge <distance> <up/down> |
|
||||||
|
]],
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc)
|
||||||
|
worldMaster = GetWorldMaster();
|
||||||
|
player:SendGameMessage(player, worldMaster, 34108, 0x20);
|
||||||
|
player:SendGameMessage(player, worldMaster, 50011, 0x20);
|
||||||
|
|
||||||
|
director = player:GetZone():CreateDirector("Quest/QuestDirectorMan0l001");
|
||||||
|
player:AddDirector(director);
|
||||||
|
player:SetLoginDirector(director);
|
||||||
|
|
||||||
|
player:KickEvent(director, "noticeEvent", true);
|
||||||
|
|
||||||
|
GetWorldManager():DoZoneChange(player, 9);
|
||||||
|
end;
|
49
data/scripts/commands/gm/workvalue.lua
Normal file
49
data/scripts/commands/gm/workvalue.lua
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
require("global");
|
||||||
|
|
||||||
|
properties = {
|
||||||
|
permissions = 0,
|
||||||
|
parameters = "ssss",
|
||||||
|
description =
|
||||||
|
[[
|
||||||
|
<actorName> <workName> <uiFunc> <value>
|
||||||
|
]],
|
||||||
|
}
|
||||||
|
|
||||||
|
function onTrigger(player, argc, target, workName, uiFunc, value)
|
||||||
|
|
||||||
|
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
|
||||||
|
local sender = "[workvalue] ";
|
||||||
|
|
||||||
|
if (argc != 4) then
|
||||||
|
player:SendMessage(messageID, sender, "Invalid args");
|
||||||
|
return;
|
||||||
|
end
|
||||||
|
|
||||||
|
if (target == "@t") then
|
||||||
|
targetActor = GetWorldManager():GetActorInWorld(player.currentTarget) or nil;
|
||||||
|
else
|
||||||
|
targetActor = GetWorldManager():GetActorInWorld(target) or nil;
|
||||||
|
end
|
||||||
|
|
||||||
|
if not targetActor then
|
||||||
|
player:SendMessage(messageID, sender, "Error finding target...");
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if (tonumber(value) ~= nil) then
|
||||||
|
result = targetActor:SetWorkValue(player, workName, uiFunc, tonumber(value));
|
||||||
|
elseif (value == "true") then
|
||||||
|
result = targetActor:SetWorkValue(player, workName, uiFunc, true);
|
||||||
|
elseif (value == "false") then
|
||||||
|
result = targetActor:SetWorkValue(player, workName, uiFunc, false);
|
||||||
|
else
|
||||||
|
result = targetActor:SetWorkValue(player, workName, uiFunc, value);
|
||||||
|
end
|
||||||
|
|
||||||
|
if (result) then
|
||||||
|
player:SendMessage(messageID, sender, workName .. " changed to " .. value);
|
||||||
|
else
|
||||||
|
player:SendMessage(messageID, sender, "Could not changed workvalue. Is the name and datatype correct?");
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
66
data/scripts/directors/OpeningDirector.lua
Normal file
66
data/scripts/directors/OpeningDirector.lua
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
require ("global")
|
||||||
|
require ("quests/man/man0l0")
|
||||||
|
require ("quests/man/man0g0")
|
||||||
|
require ("quests/man/man0u0")
|
||||||
|
|
||||||
|
function init()
|
||||||
|
return "/Director/OpeningDirector";
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventStarted(player, actor, triggerName)
|
||||||
|
|
||||||
|
if (player:HasQuest(110001) == true) then
|
||||||
|
quest = player:GetQuest("Man0l0");
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal001withHQ", nil, nil, nil);
|
||||||
|
elseif (player:HasQuest(110005) == true) then
|
||||||
|
quest = player:GetQuest("Man0g0");
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal001withHQ", nil, nil, nil);
|
||||||
|
elseif (player:HasQuest(110009) == true) then
|
||||||
|
quest = player:GetQuest("Man0u0");
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrNomal001withHQ", nil, nil, nil);
|
||||||
|
end
|
||||||
|
|
||||||
|
player:EndEvent();
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onUpdate()
|
||||||
|
end
|
||||||
|
|
||||||
|
function onTalkEvent(player, npc)
|
||||||
|
;
|
||||||
|
if (player:HasQuest(110001) == true) then
|
||||||
|
man0l0Quest = player:GetQuest("man0l0");
|
||||||
|
if (man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE1) == true and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE2) == true and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE3) == true) then
|
||||||
|
doorNpc = GetWorldManager():GetActorInWorldByUniqueId("exit_door");
|
||||||
|
player:SetEventStatus(doorNpc, "pushDefault", true, 0x2);
|
||||||
|
doorNpc:SetQuestGraphic(player, 0x3);
|
||||||
|
end
|
||||||
|
elseif (player:HasQuest(110005) == true) then
|
||||||
|
man0g0Quest = player:GetQuest("man0g0");
|
||||||
|
if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1) == true) then
|
||||||
|
yda = GetWorldManager():GetActorInWorldByUniqueId("yda");
|
||||||
|
yda:SetQuestGraphic(player, 0x2);
|
||||||
|
end
|
||||||
|
elseif (player:HasQuest(110009) == true) then
|
||||||
|
man0u0Quest = player:GetQuest("man0u0");
|
||||||
|
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1) == true and man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE2) == true and man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3) == true) then
|
||||||
|
exitTriggerNpc = GetWorldManager():GetActorInWorldByUniqueId("exit_trigger");
|
||||||
|
player:SetEventStatus(exitTriggerNpc, "pushDefault", true, 0x2);
|
||||||
|
exitTriggerNpc:SetQuestGraphic(player, 0x3);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onPushEvent(player, npc)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onCommandEvent(player, command)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventUpdate(player, npc)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onCommand(player, command)
|
||||||
|
end
|
66
data/scripts/directors/Quest/QuestDirectorMan0g001.lua
Normal file
66
data/scripts/directors/Quest/QuestDirectorMan0g001.lua
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
require ("global")
|
||||||
|
require ("quests/man/man0g0")
|
||||||
|
|
||||||
|
--processTtrBtl001: Active Mode Tutorial
|
||||||
|
--processTtrBtl002: Targetting Tutorial (After active mode done)
|
||||||
|
--processTtrBtl003: Auto Attack Done
|
||||||
|
--processTtrBtl004: Tutorial Complete
|
||||||
|
|
||||||
|
--[[
|
||||||
|
12: TP
|
||||||
|
13: WeaponSkills
|
||||||
|
|
||||||
|
]]--
|
||||||
|
|
||||||
|
function init()
|
||||||
|
return "/Director/Quest/QuestDirectorMan0g001";
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventStarted(player, actor, triggerName)
|
||||||
|
|
||||||
|
quest = GetStaticActor("Man0g0");
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrBtl001", nil, nil, nil);
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrBtl002", nil, nil, nil);
|
||||||
|
|
||||||
|
--sendDataPacket: Success
|
||||||
|
--sendDataPacket: CloseWidget
|
||||||
|
--IF DoW:
|
||||||
|
--sendDataPacket: OpenWidget (TP)
|
||||||
|
--IF TP REACHED:
|
||||||
|
--sendDataPacket: CloseWidget
|
||||||
|
--sendDataPacket: OpenWidget (WS)
|
||||||
|
--IF WS USED:
|
||||||
|
--sendDataPacket: Success
|
||||||
|
--sendDataPacket: CloseWidget
|
||||||
|
--ELSE MAGIC:
|
||||||
|
--sendDataPacket: OpenWidget (DEFEAT ENEMY)
|
||||||
|
|
||||||
|
--IF DEAD
|
||||||
|
--sendDataPacket: Attention
|
||||||
|
|
||||||
|
player:EndEvent();
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onUpdate()
|
||||||
|
end
|
||||||
|
|
||||||
|
function onTalkEvent(player, npc)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onPushEvent(player, npc)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onCommandEvent(player, command)
|
||||||
|
|
||||||
|
quest = GetStaticActor("Man0g0");
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrBtl002", nil, nil, nil);
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventUpdate(player, npc)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onCommand(player, command)
|
||||||
|
end
|
66
data/scripts/directors/Quest/QuestDirectorMan0l001.lua
Normal file
66
data/scripts/directors/Quest/QuestDirectorMan0l001.lua
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
require ("global")
|
||||||
|
require ("quests/man/man0l0")
|
||||||
|
|
||||||
|
--processTtrBtl001: Active Mode Tutorial
|
||||||
|
--processTtrBtl002: Targetting Tutorial (After active mode done)
|
||||||
|
--processTtrBtl003: Auto Attack Done
|
||||||
|
--processTtrBtl004: Tutorial Complete
|
||||||
|
|
||||||
|
--[[
|
||||||
|
12: TP
|
||||||
|
13: WeaponSkills
|
||||||
|
|
||||||
|
]]--
|
||||||
|
|
||||||
|
function init()
|
||||||
|
return "/Director/Quest/QuestDirectorMan0l001";
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventStarted(player, actor, triggerName)
|
||||||
|
|
||||||
|
quest = GetStaticActor("Man0l0");
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrBtl001", nil, nil, nil);
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrBtl002", nil, nil, nil);
|
||||||
|
|
||||||
|
--sendDataPacket: Success
|
||||||
|
--sendDataPacket: CloseWidget
|
||||||
|
--IF DoW:
|
||||||
|
--sendDataPacket: OpenWidget (TP)
|
||||||
|
--IF TP REACHED:
|
||||||
|
--sendDataPacket: CloseWidget
|
||||||
|
--sendDataPacket: OpenWidget (WS)
|
||||||
|
--IF WS USED:
|
||||||
|
--sendDataPacket: Success
|
||||||
|
--sendDataPacket: CloseWidget
|
||||||
|
--ELSE MAGIC:
|
||||||
|
--sendDataPacket: OpenWidget (DEFEAT ENEMY)
|
||||||
|
|
||||||
|
--IF DEAD
|
||||||
|
--sendDataPacket: Attention
|
||||||
|
|
||||||
|
player:EndEvent();
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onUpdate()
|
||||||
|
end
|
||||||
|
|
||||||
|
function onTalkEvent(player, npc)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onPushEvent(player, npc)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onCommandEvent(player, command)
|
||||||
|
|
||||||
|
quest = GetStaticActor("Man0l0");
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrBtl002", nil, nil, nil);
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventUpdate(player, npc)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onCommand(player, command)
|
||||||
|
end
|
66
data/scripts/directors/Quest/QuestDirectorMan0u001.lua
Normal file
66
data/scripts/directors/Quest/QuestDirectorMan0u001.lua
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
require ("global")
|
||||||
|
require ("quests/man/man0u0")
|
||||||
|
|
||||||
|
--processTtrBtl001: Active Mode Tutorial
|
||||||
|
--processTtrBtl002: Targetting Tutorial (After active mode done)
|
||||||
|
--processTtrBtl003: Auto Attack Done
|
||||||
|
--processTtrBtl004: Tutorial Complete
|
||||||
|
|
||||||
|
--[[
|
||||||
|
12: TP
|
||||||
|
13: WeaponSkills
|
||||||
|
|
||||||
|
]]--
|
||||||
|
|
||||||
|
function init()
|
||||||
|
return "/Director/Quest/QuestDirectorMan0u001";
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventStarted(player, actor, triggerName)
|
||||||
|
|
||||||
|
quest = GetStaticActor("Man0u0");
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrBtl001", nil, nil, nil);
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrBtl002", nil, nil, nil);
|
||||||
|
|
||||||
|
--sendDataPacket: Success
|
||||||
|
--sendDataPacket: CloseWidget
|
||||||
|
--IF DoW:
|
||||||
|
--sendDataPacket: OpenWidget (TP)
|
||||||
|
--IF TP REACHED:
|
||||||
|
--sendDataPacket: CloseWidget
|
||||||
|
--sendDataPacket: OpenWidget (WS)
|
||||||
|
--IF WS USED:
|
||||||
|
--sendDataPacket: Success
|
||||||
|
--sendDataPacket: CloseWidget
|
||||||
|
--ELSE MAGIC:
|
||||||
|
--sendDataPacket: OpenWidget (DEFEAT ENEMY)
|
||||||
|
|
||||||
|
--IF DEAD
|
||||||
|
--sendDataPacket: Attention
|
||||||
|
|
||||||
|
player:EndEvent();
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onUpdate()
|
||||||
|
end
|
||||||
|
|
||||||
|
function onTalkEvent(player, npc)
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onPushEvent(player, npc)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onCommandEvent(player, command)
|
||||||
|
|
||||||
|
quest = GetStaticActor("Man0l0");
|
||||||
|
callClientFunction(player, "delegateEvent", player, quest, "processTtrBtl002", nil, nil, nil);
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventUpdate(player, npc)
|
||||||
|
end
|
||||||
|
|
||||||
|
function onCommand(player, command)
|
||||||
|
end
|
@ -1,21 +0,0 @@
|
|||||||
|
|
||||||
function onEventStarted(player, actor, triggerName)
|
|
||||||
|
|
||||||
man0g0Quest = GetStaticActor("Man0g0");
|
|
||||||
--player:RunEventFunction("delegateEvent", player, man0g0Quest, "processTtrBtl001");
|
|
||||||
player:RunEventFunction("delegateEvent", player, man0g0Quest, "processTtrBtl002");
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
function onEventUpdate(player, npc, resultId)
|
|
||||||
--man0g0Quest = GetStaticActor("Man0g0");
|
|
||||||
--player:RunEventFunction("delegateEvent", player, man0g0Quest, "processTtrBtl002");
|
|
||||||
player:EndEvent();
|
|
||||||
end
|
|
||||||
|
|
||||||
function onCommand(player, command)
|
|
||||||
--Check command if ActivateCommand
|
|
||||||
player:EndCommand();
|
|
||||||
player:EndEvent();
|
|
||||||
player:KickEvent(player:GetDirector(), "noticeEvent", true);
|
|
||||||
end
|
|
@ -1,25 +0,0 @@
|
|||||||
|
|
||||||
function onEventStarted(player, actor, triggerName)
|
|
||||||
|
|
||||||
man0u0Quest = GetStaticActor("Man0u0");
|
|
||||||
man0l0Quest = GetStaticActor("Man0l0");
|
|
||||||
player:RunEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl001");
|
|
||||||
--player:RunEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtlMagic001");
|
|
||||||
--player:RunEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl002");
|
|
||||||
--player:RunEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl003");
|
|
||||||
|
|
||||||
--player:RunEventFunction("delegateEvent", player, man0u0Quest, "processTtrBtl004");
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
function onEventUpdate(player, npc, resultId)
|
|
||||||
--man0l0Quest = GetStaticActor("Man0l0");
|
|
||||||
--player:RunEventFunction("delegateEvent", player, man0l0Quest, "processTtrBtl002");
|
|
||||||
player:EndEvent();
|
|
||||||
end
|
|
||||||
|
|
||||||
function onCommand(player, command)
|
|
||||||
--Check command if ActivateCommand
|
|
||||||
--player:KickEvent(player:GetDirector(), "noticeEvent");
|
|
||||||
--player:EndCommand();
|
|
||||||
end
|
|
@ -12,22 +12,29 @@ function onBeginLogin(player)
|
|||||||
player:AddQuest(110005);
|
player:AddQuest(110005);
|
||||||
elseif (initialTown == 3 and player:HasQuest(110009) == false) then
|
elseif (initialTown == 3 and player:HasQuest(110009) == false) then
|
||||||
player:AddQuest(110009);
|
player:AddQuest(110009);
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--For Opening. Set Director and reset position incase d/c
|
--For Opening. Set Director and reset position incase d/c
|
||||||
if (player:HasQuest(110001) == true) then
|
if (player:HasQuest(110001) == true) then
|
||||||
--player:SetDirector("openingDirector", false);
|
director = player:GetZone():CreateDirector("OpeningDirector");
|
||||||
|
player:AddDirector(director);
|
||||||
|
player:SetLoginDirector(director);
|
||||||
|
player:KickEvent(director, "noticeEvent", "noticeEvent");
|
||||||
|
|
||||||
player.positionX = 0.016;
|
player.positionX = 0.016;
|
||||||
player.positionY = 10.35;
|
player.positionY = 10.35;
|
||||||
--player.positionZ = -36.91;
|
player.positionZ = -36.91;
|
||||||
player.positionZ = -20.91;
|
|
||||||
player.rotation = 0.025;
|
player.rotation = 0.025;
|
||||||
player:GetQuest(110001):ClearQuestData();
|
player:GetQuest(110001):ClearQuestData();
|
||||||
player:GetQuest(110001):ClearQuestFlags();
|
player:GetQuest(110001):ClearQuestFlags();
|
||||||
elseif (player:HasQuest(110005) == true) then
|
elseif (player:HasQuest(110005) == true) then
|
||||||
player:SetDirector("openingDirector", false);
|
director = player:GetZone():CreateDirector("OpeningDirector");
|
||||||
|
player:AddDirector(director);
|
||||||
|
player:SetLoginDirector(director);
|
||||||
|
player:KickEvent(director, "noticeEvent", "noticeEvent");
|
||||||
|
|
||||||
player.positionX = 369.5434;
|
player.positionX = 369.5434;
|
||||||
player.positionY = 4.21;
|
player.positionY = 4.21;
|
||||||
player.positionZ = -706.1074;
|
player.positionZ = -706.1074;
|
||||||
@ -35,15 +42,18 @@ function onBeginLogin(player)
|
|||||||
player:GetQuest(110005):ClearQuestData();
|
player:GetQuest(110005):ClearQuestData();
|
||||||
player:GetQuest(110005):ClearQuestFlags();
|
player:GetQuest(110005):ClearQuestFlags();
|
||||||
elseif (player:HasQuest(110009) == true) then
|
elseif (player:HasQuest(110009) == true) then
|
||||||
player:SetDirector("openingDirector", false);
|
director = player:GetZone():CreateDirector("OpeningDirector");
|
||||||
|
player:AddDirector(director);
|
||||||
|
player:SetLoginDirector(director);
|
||||||
|
player:KickEvent(director, "noticeEvent", "noticeEvent");
|
||||||
|
|
||||||
player.positionX = 5.364327;
|
player.positionX = 5.364327;
|
||||||
player.positionY = 196.0;
|
player.positionY = 196.0;
|
||||||
player.positionZ = 133.6561;
|
player.positionZ = 133.6561;
|
||||||
player.rotation = -2.849384;
|
player.rotation = -2.849384;
|
||||||
player:GetQuest(110009):ClearQuestData();
|
player:GetQuest(110009):ClearQuestData();
|
||||||
player:GetQuest(110009):ClearQuestFlags();
|
player:GetQuest(110009):ClearQuestFlags();
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -54,7 +64,9 @@ function onLogin(player)
|
|||||||
player:SendMessage(0x1D,"",">PlayTime == 0, new player!");
|
player:SendMessage(0x1D,"",">PlayTime == 0, new player!");
|
||||||
|
|
||||||
initClassItems(player);
|
initClassItems(player);
|
||||||
initRaceItems(player);
|
initRaceItems(player);
|
||||||
|
|
||||||
|
player:SavePlayTime();
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -6,8 +6,4 @@ MAN0L0_FLAG_TUTORIAL3_DONE = 2;
|
|||||||
|
|
||||||
MAN0L0_FLAG_MINITUT_DONE1 = 4;
|
MAN0L0_FLAG_MINITUT_DONE1 = 4;
|
||||||
MAN0L0_FLAG_MINITUT_DONE2 = 8;
|
MAN0L0_FLAG_MINITUT_DONE2 = 8;
|
||||||
MAN0L0_FLAG_MINITUT_DONE3 = 16;
|
MAN0L0_FLAG_MINITUT_DONE3 = 16;
|
||||||
|
|
||||||
--Result Unique Ids
|
|
||||||
RESULT_Event000_1 = 0x2B9EBC42;
|
|
||||||
RESULT_TtrNomal001 = 0x8649D125;
|
|
@ -1,6 +1,7 @@
|
|||||||
--Quest Flags
|
--Quest Flags
|
||||||
MAN0U0_FLAG_TUTORIAL1_DONE = 0;
|
MAN0U0_FLAG_TUTORIAL1_DONE = 0;
|
||||||
MAN0U0_FLAG_TUTORIAL2_DONE = 1;
|
MAN0U0_FLAG_TUTORIAL2_DONE = 1;
|
||||||
|
MAN0U0_FLAG_TUTORIAL3_DONE = 2;
|
||||||
|
|
||||||
MAN0U0_FLAG_MINITUT_DONE1 = 4;
|
MAN0U0_FLAG_MINITUT_DONE1 = 4;
|
||||||
MAN0U0_FLAG_MINITUT_DONE2 = 8;
|
MAN0U0_FLAG_MINITUT_DONE2 = 8;
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
require ("global")
|
|
||||||
require("/quests/man/man0g0")
|
|
||||||
|
|
||||||
function onEventStarted(player, actor, triggerName)
|
|
||||||
|
|
||||||
man0g0Quest = GetStaticActor("Man0g0");
|
|
||||||
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processTtrNomal001withHQ", nil, nil, nil, nil);
|
|
||||||
player:EndEvent();
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
function onTalked(player, npc)
|
|
||||||
|
|
||||||
man0g0Quest = player:GetQuest("Man0g0");
|
|
||||||
|
|
||||||
if (man0g0Quest ~= nil) then
|
|
||||||
|
|
||||||
yda = GetWorldManager():GetActorInWorld(1000009);
|
|
||||||
papalymo = GetWorldManager():GetActorInWorld(1000010);
|
|
||||||
|
|
||||||
if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_TUTORIAL1_DONE) == false) then
|
|
||||||
yda:SetQuestGraphic(player, 0x0);
|
|
||||||
papalymo:SetQuestGraphic(player, 0x2);
|
|
||||||
else
|
|
||||||
if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1) == true) then
|
|
||||||
yda:SetQuestGraphic(player, 0x2);
|
|
||||||
papalymo:SetQuestGraphic(player, 0x0);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
@ -6,9 +6,10 @@ function onEventStarted(player, npc, triggerName)
|
|||||||
|
|
||||||
if (triggerName == "talkDefault") then
|
if (triggerName == "talkDefault") then
|
||||||
if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1) == false) then
|
if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1) == false) then
|
||||||
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent000_2", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent000_3", nil, nil, nil);
|
||||||
man0g0Quest:SetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1, true);
|
man0g0Quest:SetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1, true);
|
||||||
man0g0Quest:SaveData();
|
man0g0Quest:SaveData();
|
||||||
|
npc:SetQuestGraphic(player, 0x0);
|
||||||
player:GetDirector():OnTalked(npc);
|
player:GetDirector():OnTalked(npc);
|
||||||
else
|
else
|
||||||
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent000_2", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent000_2", nil, nil, nil);
|
@ -13,16 +13,27 @@ function onEventStarted(player, npc, triggerName)
|
|||||||
if (triggerName == "pushDefault") then
|
if (triggerName == "pushDefault") then
|
||||||
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processTtrNomal002", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processTtrNomal002", nil, nil, nil);
|
||||||
elseif (triggerName == "talkDefault") then
|
elseif (triggerName == "talkDefault") then
|
||||||
|
--Is doing talk tutorial?
|
||||||
if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_TUTORIAL1_DONE) == false) then
|
if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_TUTORIAL1_DONE) == false) then
|
||||||
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processTtrNomal003", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processTtrNomal003", nil, nil, nil);
|
||||||
player:SetEventStatus(npc, "pushDefault", false, 0x2);
|
player:SetEventStatus(npc, "pushDefault", false, 0x2);
|
||||||
|
npc:SetQuestGraphic(player, 0x2);
|
||||||
player:GetDirector():OnTalked(npc);
|
player:GetDirector():OnTalked(npc);
|
||||||
man0g0Quest:SetQuestFlag(MAN0G0_FLAG_TUTORIAL1_DONE, true);
|
man0g0Quest:SetQuestFlag(MAN0G0_FLAG_TUTORIAL1_DONE, true);
|
||||||
man0g0Quest:SaveData();
|
man0g0Quest:SaveData();
|
||||||
|
--Was she talked to after papalymo?
|
||||||
else
|
else
|
||||||
if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1) == true) then
|
if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_MINITUT_DONE1) == true) then
|
||||||
man0g0Quest:SetQuestFlag(MAN0G0_FLAG_TUTORIAL2_DONE, true);
|
player:EndEvent();
|
||||||
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent010_1", nil, nil, nil);
|
player:SetDirector("QuestDirectorMan0g001", true);
|
||||||
|
|
||||||
|
worldMaster = GetWorldMaster();
|
||||||
|
player:SendGameMessage(player, worldMaster, 34108, 0x20);
|
||||||
|
player:SendGameMessage(player, worldMaster, 50011, 0x20);
|
||||||
|
|
||||||
|
GetWorldManager():DoPlayerMoveInZone(player, 10);
|
||||||
|
player:KickEvent(player:GetDirector(), "noticeEvent", true);
|
||||||
|
return;
|
||||||
else
|
else
|
||||||
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent000_1", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0g0Quest, "processEvent000_1", nil, nil, nil);
|
||||||
end
|
end
|
||||||
@ -31,24 +42,4 @@ function onEventStarted(player, npc, triggerName)
|
|||||||
end
|
end
|
||||||
|
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
end
|
|
||||||
|
|
||||||
function onEventUpdate(player, npc)
|
|
||||||
|
|
||||||
man0g0Quest = player:GetQuest("Man0g0");
|
|
||||||
|
|
||||||
if (man0g0Quest:GetQuestFlag(MAN0G0_FLAG_TUTORIAL2_DONE) == true) then
|
|
||||||
player:EndEvent();
|
|
||||||
player:SetDirector("QuestDirectorMan0g001", true);
|
|
||||||
|
|
||||||
worldMaster = GetWorldMaster();
|
|
||||||
player:SendGameMessage(player, worldMaster, 34108, 0x20);
|
|
||||||
player:SendGameMessage(player, worldMaster, 50011, 0x20);
|
|
||||||
|
|
||||||
GetWorldManager():DoPlayerMoveInZone(player, 10);
|
|
||||||
player:KickEvent(player:GetDirector(), "noticeEvent", true);
|
|
||||||
else
|
|
||||||
player:EndEvent();
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
@ -1,20 +0,0 @@
|
|||||||
require ("global")
|
|
||||||
|
|
||||||
function onZoneInit(zone)
|
|
||||||
end
|
|
||||||
|
|
||||||
function onZoneIn(player)
|
|
||||||
|
|
||||||
openingQuest = player:getQuest(110005);
|
|
||||||
|
|
||||||
--Opening Quest
|
|
||||||
if (openingQuest ~= nil) then
|
|
||||||
if (openingQuest:GetQuestFlag(0) == false) then
|
|
||||||
player:kickEvent(player:getDirector(), "noticeEvent");
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
function onZoneOut(zone, player)
|
|
||||||
end
|
|
@ -0,0 +1,7 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function onEventStarted(player, npc)
|
||||||
|
defaultFst = GetStaticActor("DftFst");
|
||||||
|
callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkLouisoix_001", nil, nil, nil);
|
||||||
|
player:endEvent();
|
||||||
|
end
|
@ -0,0 +1,7 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function onEventStarted(player, npc)
|
||||||
|
defaultFst = GetStaticActor("DftFst");
|
||||||
|
callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithAnaidjaa_001", nil, nil, nil);
|
||||||
|
player:endEvent();
|
||||||
|
end
|
@ -0,0 +1,7 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function onEventStarted(player, npc)
|
||||||
|
defaultFst = GetStaticActor("DftFst");
|
||||||
|
callClientFunction(player, "delegateEvent", player, defaultFst, "defaultTalkWithDyrstbrod_001", nil, nil, nil);
|
||||||
|
player:endEvent();
|
||||||
|
end
|
@ -1,26 +0,0 @@
|
|||||||
require ("global")
|
|
||||||
require("/quests/man/man0l0")
|
|
||||||
|
|
||||||
function onEventStarted(player, actor, triggerName)
|
|
||||||
|
|
||||||
man0l0Quest = GetStaticActor("Man0l0");
|
|
||||||
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processTtrNomal001withHQ", nil, nil, nil, nil);
|
|
||||||
player:EndEvent();
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
function onTalked(player, npc)
|
|
||||||
|
|
||||||
man0l0Quest = player:GetQuest("Man0l0");
|
|
||||||
|
|
||||||
if (man0l0Quest ~= nil) then
|
|
||||||
if (man0l0Quest ~= nil and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE1) == true and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE2) == true and man0l0Quest:GetQuestFlag(MAN0L0_FLAG_MINITUT_DONE3) == true) then
|
|
||||||
|
|
||||||
doorNpc = GetWorldManager():GetActorInWorld(1090025);
|
|
||||||
player:SetEventStatus(doorNpc, "pushDefault", true, 0x2);
|
|
||||||
doorNpc:SetQuestGraphic(player, 0x3);
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
@ -22,7 +22,7 @@ function onEventStarted(player, npc, triggerName)
|
|||||||
npc:SetQuestGraphic(player, 0x0);
|
npc:SetQuestGraphic(player, 0x0);
|
||||||
man0l0Quest:SetQuestFlag(MAN0L0_FLAG_MINITUT_DONE3, true);
|
man0l0Quest:SetQuestFlag(MAN0L0_FLAG_MINITUT_DONE3, true);
|
||||||
man0l0Quest:SaveData();
|
man0l0Quest:SaveData();
|
||||||
player:GetDirector():OnTalked(npc);
|
player:GetDirector("OpeningDirector"):onTalkEvent(player, npc);
|
||||||
else
|
else
|
||||||
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processEvent000_8", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processEvent000_8", nil, nil, nil);
|
||||||
end
|
end
|
||||||
|
@ -24,14 +24,17 @@ function onEventStarted(player, npc, triggerName)
|
|||||||
if (choice == 1) then
|
if (choice == 1) then
|
||||||
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processEvent000_2", nil, nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processEvent000_2", nil, nil, nil, nil);
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
player:SetDirector("QuestDirectorMan0l001", true);
|
|
||||||
|
|
||||||
worldMaster = GetWorldMaster();
|
worldMaster = GetWorldMaster();
|
||||||
player:SendGameMessage(player, worldMaster, 34108, 0x20);
|
player:SendGameMessage(player, worldMaster, 34108, 0x20);
|
||||||
player:SendGameMessage(player, worldMaster, 50011, 0x20);
|
player:SendGameMessage(player, worldMaster, 50011, 0x20);
|
||||||
|
|
||||||
GetWorldManager():DoPlayerMoveInZone(player, 9);
|
director = player:GetZone():CreateDirector("Quest/QuestDirectorMan0l001");
|
||||||
player:KickEvent(player:GetDirector(), "noticeEvent", true);
|
player:KickEvent(director, "noticeEvent", true);
|
||||||
|
player:AddDirector(director);
|
||||||
|
player:SetLoginDirector(director);
|
||||||
|
|
||||||
|
GetWorldManager():DoZoneChange(player, 9);
|
||||||
else
|
else
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
end
|
end
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
function init(npc)
|
|
||||||
return "/Chara/Npc/Monster/Fighter/FighterAllyOpeningHealer", false, false, false, false, false, npc:GetActorClassId(), false, false, 10, 1, 4, false, false, false, false, false, false, false, false, 2;
|
|
||||||
end
|
|
@ -1,3 +0,0 @@
|
|||||||
function init(npc)
|
|
||||||
return "/Chara/Npc/Monster/Fighter/FighterAllyOpeningAttacker", false, false, false, false, false, npc:GetActorClassId(), false, false, 10, 1, 4, false, false, false, false, false, false, false, false, 2;
|
|
||||||
end
|
|
@ -31,7 +31,7 @@ function onEventStarted(player, npc, triggerName)
|
|||||||
npc:SetQuestGraphic(player, 0x2);
|
npc:SetQuestGraphic(player, 0x2);
|
||||||
man0l0Quest:SaveData();
|
man0l0Quest:SaveData();
|
||||||
|
|
||||||
player:GetDirector():OnTalked(npc);
|
player:GetDirector("OpeningDirector"):onTalkEvent(player, npc);
|
||||||
--Was he talked to for the mini tutorial?
|
--Was he talked to for the mini tutorial?
|
||||||
else
|
else
|
||||||
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processTtrMini001", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processTtrMini001", nil, nil, nil);
|
||||||
@ -41,7 +41,7 @@ function onEventStarted(player, npc, triggerName)
|
|||||||
man0l0Quest:SetQuestFlag(MAN0L0_FLAG_MINITUT_DONE1, true);
|
man0l0Quest:SetQuestFlag(MAN0L0_FLAG_MINITUT_DONE1, true);
|
||||||
man0l0Quest:SaveData();
|
man0l0Quest:SaveData();
|
||||||
|
|
||||||
player:GetDirector():OnTalked(npc);
|
player:GetDirector("OpeningDirector"):onTalkEvent(player, npc);
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -20,9 +20,8 @@ function onEventStarted(player, npc, triggerName)
|
|||||||
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processTtrMini002", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processTtrMini002", nil, nil, nil);
|
||||||
npc:SetQuestGraphic(player, 0x0);
|
npc:SetQuestGraphic(player, 0x0);
|
||||||
man0l0Quest:SetQuestFlag(MAN0L0_FLAG_MINITUT_DONE2, true);
|
man0l0Quest:SetQuestFlag(MAN0L0_FLAG_MINITUT_DONE2, true);
|
||||||
man0l0Quest:SaveData();
|
man0l0Quest:SaveData();
|
||||||
|
player:GetDirector("OpeningDirector"):onTalkEvent(player, npc);
|
||||||
player:GetDirector():OnTalked(npc);
|
|
||||||
else
|
else
|
||||||
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processEvent000_13", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0l0Quest, "processEvent000_13", nil, nil, nil);
|
||||||
end
|
end
|
||||||
|
5
data/scripts/unique/ocn0Cruise01/ship_route_1.lua
Normal file
5
data/scripts/unique/ocn0Cruise01/ship_route_1.lua
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function init(npc)
|
||||||
|
return false, false, 0, 0, 0x1415, 201;
|
||||||
|
end
|
5
data/scripts/unique/ocn0Cruise01/ship_route_2.lua
Normal file
5
data/scripts/unique/ocn0Cruise01/ship_route_2.lua
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function init(npc)
|
||||||
|
return false, false, 0, 0, 0x1415, 201;
|
||||||
|
end
|
@ -0,0 +1,7 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function onEventStarted(player, npc)
|
||||||
|
defaultSea = GetStaticActor("DftSea");
|
||||||
|
callClientFunction(player, "delegateEvent", player, defaultSea, "tribeTalk", nil, nil, nil);
|
||||||
|
player:endEvent();
|
||||||
|
end
|
@ -0,0 +1,7 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function onEventStarted(player, npc)
|
||||||
|
defaultSea = GetStaticActor("DftSea");
|
||||||
|
callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithSweetnix_001", nil, nil, nil);
|
||||||
|
player:endEvent();
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function init(npc)
|
||||||
|
return false, false, 0, 0, 0xC4, 0x1C8;
|
||||||
|
end
|
@ -0,0 +1,5 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function init(npc)
|
||||||
|
return false, false, 0, 0, 0x187, 0x2;
|
||||||
|
end
|
@ -0,0 +1,7 @@
|
|||||||
|
require ("global")
|
||||||
|
|
||||||
|
function onEventStarted(player, npc)
|
||||||
|
defaultSea = GetStaticActor("DftSea");
|
||||||
|
callClientFunction(player, "delegateEvent", player, defaultSea, "defaultTalkWithJoellaut_001", nil, nil, nil);
|
||||||
|
player:endEvent();
|
||||||
|
end
|
@ -1,22 +0,0 @@
|
|||||||
require ("global")
|
|
||||||
require("/quests/man/man0u0")
|
|
||||||
|
|
||||||
function onEventStarted(player, actor, triggerName)
|
|
||||||
|
|
||||||
man0u0Quest = GetStaticActor("Man0u0");
|
|
||||||
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrNomal001withHQ", nil, nil, nil, nil);
|
|
||||||
player:EndEvent();
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
function onTalked(player, npc)
|
|
||||||
|
|
||||||
man0u0Quest = player:GetQuest("Man0u0");
|
|
||||||
|
|
||||||
if (man0u0Quest ~= nil) then
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
@ -0,0 +1,13 @@
|
|||||||
|
function init(npc)
|
||||||
|
return false, false, 0, 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventStarted(player, npc, triggerName)
|
||||||
|
if (triggerName == "caution") then
|
||||||
|
worldMaster = GetWorldMaster();
|
||||||
|
player:SendGameMessage(player, worldMaster, 34109, 0x20);
|
||||||
|
elseif (triggerName == "exit") then
|
||||||
|
GetWorldManager():DoPlayerMoveInZone(player, 6);
|
||||||
|
end
|
||||||
|
player:EndEvent();
|
||||||
|
end
|
@ -0,0 +1,13 @@
|
|||||||
|
function init(npc)
|
||||||
|
return false, false, 0, 0;
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventStarted(player, npc, triggerName)
|
||||||
|
if (triggerName == "caution") then
|
||||||
|
worldMaster = GetWorldMaster();
|
||||||
|
player:SendGameMessage(player, worldMaster, 34109, 0x20);
|
||||||
|
elseif (triggerName == "exit") then
|
||||||
|
GetWorldManager():DoPlayerMoveInZone(player, 18);
|
||||||
|
end
|
||||||
|
player:EndEvent();
|
||||||
|
end
|
@ -2,7 +2,7 @@ require ("global")
|
|||||||
require ("quests/man/man0u0")
|
require ("quests/man/man0u0")
|
||||||
|
|
||||||
function onEventStarted(player, npc, triggerName)
|
function onEventStarted(player, npc, triggerName)
|
||||||
man0u0Quest = GetStaticActor("Man0u0");
|
man0u0Quest = GetStaticActor("Man0u0");
|
||||||
callClientFunction(player, "delegateEvent", player, man0u0Quest, "defaultTalkWithLady001_001", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processEvent000_13", nil, nil, nil);
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
end
|
end
|
@ -9,25 +9,40 @@ function onEventStarted(player, npc, triggerName)
|
|||||||
man0u0Quest = player:GetQuest("Man0u0");
|
man0u0Quest = player:GetQuest("Man0u0");
|
||||||
|
|
||||||
if (man0u0Quest ~= nil) then
|
if (man0u0Quest ~= nil) then
|
||||||
if (triggerName == "pushDefault") then
|
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1) == false) then
|
||||||
|
npc:SetQuestGraphic(player, 0x2);
|
||||||
|
end
|
||||||
|
|
||||||
|
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_TUTORIAL3_DONE) == true) then
|
||||||
|
player:SetEventStatus(npc, "pushDefault", false, 0x2);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if (man0u0Quest ~= nil) then
|
||||||
|
if (triggerName == "pushDefault") then
|
||||||
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrNomal002", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrNomal002", nil, nil, nil);
|
||||||
elseif (triggerName == "talkDefault") then
|
elseif (triggerName == "talkDefault") then
|
||||||
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_TUTORIAL1_DONE) == false) then
|
--Is doing talk tutorial?
|
||||||
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrNomal003", nil, nil, nil);
|
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_TUTORIAL3_DONE) == false) then
|
||||||
player:SetEventStatus(npc, "pushDefault", false, 0x2);
|
player:SetEventStatus(npc, "pushDefault", false, 0x2);
|
||||||
player:GetDirector():OnTalked(npc);
|
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrNomal003", nil, nil, nil);
|
||||||
man0u0Quest:SetQuestFlag(MAN0U0_FLAG_TUTORIAL1_DONE, true);
|
man0u0Quest:SetQuestFlag(MAN0U0_FLAG_TUTORIAL3_DONE, true);
|
||||||
|
npc:SetQuestGraphic(player, 0x2);
|
||||||
man0u0Quest:SaveData();
|
man0u0Quest:SaveData();
|
||||||
else
|
|
||||||
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrMini001", nil, nil, nil);
|
|
||||||
|
|
||||||
|
player:GetDirector("OpeningDirector"):onTalkEvent(player, npc);
|
||||||
|
--Was he talked to for the mini tutorial?
|
||||||
|
else
|
||||||
|
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrMini001", nil, nil, nil);
|
||||||
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1) == false) then
|
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1) == false) then
|
||||||
npc:SetQuestGraphic(player, 0x0);
|
npc:SetQuestGraphic(player, 0x0);
|
||||||
man0u0Quest:SetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1, true);
|
man0u0Quest:SetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1, true);
|
||||||
man0u0Quest:SaveData();
|
man0u0Quest:SaveData();
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
player:GetDirector("OpeningDirector"):onTalkEvent(player, npc);
|
||||||
else
|
else
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
end
|
end
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
require ("global")
|
||||||
|
require ("quests/man/man0u0")
|
||||||
|
|
||||||
|
function onSpawn(player, npc)
|
||||||
|
|
||||||
|
man0u0Quest = player:GetQuest("Man0u0");
|
||||||
|
|
||||||
|
if (man0u0Quest ~= nil) then
|
||||||
|
player:SetEventStatus(npc, "pushDefault", true, 0x2);
|
||||||
|
if (man0u0Quest ~= nil and man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1) == true and man0U0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE2) == true and man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3) == true) then
|
||||||
|
npc:SetQuestGraphic(player, 0x3);
|
||||||
|
else
|
||||||
|
npc:SetQuestGraphic(player, 0x0);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
function onEventStarted(player, npc, triggerName)
|
||||||
|
man0u0Quest = GetStaticActor("Man0u0");
|
||||||
|
|
||||||
|
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1) ~= true) then
|
||||||
|
print "AAAA"
|
||||||
|
end
|
||||||
|
|
||||||
|
--if (man0u0Quest ~= nil and man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1) == true and man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE2) == true and man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3) == true) then
|
||||||
|
|
||||||
|
player:EndEvent();
|
||||||
|
|
||||||
|
worldMaster = GetWorldMaster();
|
||||||
|
player:SendGameMessage(player, worldMaster, 34108, 0x20);
|
||||||
|
player:SendGameMessage(player, worldMaster, 50011, 0x20);
|
||||||
|
|
||||||
|
director = player:GetZone():CreateDirector("Quest/QuestDirectorMan0u001");
|
||||||
|
player:KickEvent(director, "noticeEvent", true);
|
||||||
|
player:AddDirector(director);
|
||||||
|
player:SetLoginDirector(director);
|
||||||
|
|
||||||
|
GetWorldManager():DoZoneChange(player, 17);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[AFTER GOOBBUE
|
||||||
|
22.81, 196, 87.82
|
||||||
|
]]
|
||||||
|
--0x45c00005
|
@ -1,20 +1,31 @@
|
|||||||
require ("global")
|
require ("global")
|
||||||
require ("quests/man/man0u0")
|
require ("quests/man/man0u0")
|
||||||
|
|
||||||
|
function onSpawn(player, npc)
|
||||||
|
man0u0Quest = player:GetQuest("Man0u0");
|
||||||
|
|
||||||
|
if (man0u0Quest ~= nil) then
|
||||||
|
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE1) == false) then
|
||||||
|
npc:SetQuestGraphic(player, 0x2);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function onEventStarted(player, npc, triggerName)
|
function onEventStarted(player, npc, triggerName)
|
||||||
man0u0Quest = player:GetQuest("Man0u0");
|
man0u0Quest = player:GetQuest("Man0u0");
|
||||||
|
|
||||||
if (man0u0Quest != nil)
|
if (man0u0Quest ~= nil) then
|
||||||
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE2) == false) then
|
if (triggerName == "talkDefault") then
|
||||||
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrMini002_first", nil, nil, nil);
|
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE2) == false) then
|
||||||
npc:SetQuestGraphic(player, 0x0);
|
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrMini002_first", nil, nil, nil);
|
||||||
man0u0Quest:SetQuestFlag(MAN0U0_FLAG_MINITUT_DONE2, true);
|
npc:SetQuestGraphic(player, 0x0);
|
||||||
man0u0Quest:SaveData();
|
man0u0Quest:SetQuestFlag(MAN0U0_FLAG_MINITUT_DONE2, true);
|
||||||
player:GetDirector():OnTalked(npc);
|
man0u0Quest:SaveData();
|
||||||
else
|
player:GetDirector("OpeningDirector"):onTalkEvent(player, npc);
|
||||||
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrMini002", nil, nil, nil);
|
else
|
||||||
|
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrMini002", nil, nil, nil);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
end
|
end
|
@ -1,21 +1,31 @@
|
|||||||
require ("global")
|
require ("global")
|
||||||
require ("quests/man/man0u0")
|
require ("quests/man/man0u0")
|
||||||
|
|
||||||
|
function onSpawn(player, npc)
|
||||||
|
man0u0Quest = player:GetQuest("Man0u0");
|
||||||
|
|
||||||
|
if (man0u0Quest ~= nil) then
|
||||||
|
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3) == false) then
|
||||||
|
npc:SetQuestGraphic(player, 0x2);
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function onEventStarted(player, npc, triggerName)
|
function onEventStarted(player, npc, triggerName)
|
||||||
man0u0Quest = player:GetQuest("Man0u0");
|
man0u0Quest = player:GetQuest("Man0u0");
|
||||||
|
|
||||||
if (man0u0Quest ~= nil) then
|
if (man0u0Quest ~= nil) then
|
||||||
|
if (triggerName == "talkDefault") then
|
||||||
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3) == false) then
|
if (man0u0Quest:GetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3) == false) then
|
||||||
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrMini003_first", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrMini003_first", nil, nil, nil);
|
||||||
npc:SetQuestGraphic(player, 0x0);
|
npc:SetQuestGraphic(player, 0x0);
|
||||||
man0u0Quest:SetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3, true);
|
man0u0Quest:SetQuestFlag(MAN0U0_FLAG_MINITUT_DONE3, true);
|
||||||
man0u0Quest:SaveData();
|
man0u0Quest:SaveData();
|
||||||
player:GetDirector():OnTalked(npc);
|
player:GetDirector("OpeningDirector"):onTalkEvent(player, npc);
|
||||||
else
|
else
|
||||||
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrMini003", nil, nil, nil);
|
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processTtrMini003", nil, nil, nil);
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
end
|
end
|
@ -2,5 +2,7 @@ require ("global")
|
|||||||
require ("quests/man/man0u0")
|
require ("quests/man/man0u0")
|
||||||
|
|
||||||
function onEventStarted(player, npc, triggerName)
|
function onEventStarted(player, npc, triggerName)
|
||||||
|
man0u0Quest = GetStaticActor("Man0u0");
|
||||||
|
callClientFunction(player, "delegateEvent", player, man0u0Quest, "processEvent000_3", nil, nil, nil);
|
||||||
player:EndEvent();
|
player:EndEvent();
|
||||||
end
|
end
|
Loading…
Reference in New Issue
Block a user