1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 22:37:45 +00:00

Merge branch 'ThreePointOh' of https://github.com/SapphireServer/Sapphire into threepointoh

This commit is contained in:
Alice Ogeda 2022-01-20 17:39:24 -03:00
commit 00ecce8406
111 changed files with 3777 additions and 2247 deletions

View file

@ -658,6 +658,12 @@ namespace Component::Excel
int8_t padding0[2];
};
struct WeatherRate
{
int32_t WeatherId[8];
uint8_t Rate[8];
};
/* 195172 */
struct Aetheryte
{
@ -695,8 +701,8 @@ namespace Component::Excel
uint8_t BattalionMode;
uint8_t ExclusiveType;
uint8_t IntendedUse;
uint8_t WeatherRate;
uint8_t Breath;
uint8_t Unknown;
uint8_t Resident;
uint8_t Unknown1;
uint8_t Unknown2;
@ -1119,7 +1125,6 @@ namespace Component::Excel
int8_t CNT;
int8_t GEN;
int8_t DEF;
int8_t padding0[2];
};
/* 201018 */
@ -1141,14 +1146,6 @@ namespace Component::Excel
float RotateSpeed_WOW;
float RotateSpeed_AutoRun;
float RotateSpeed_LockOn;
float RotateAccel_FFXIVRun;
float RotateAccel_FFXIVWalk;
float RotateAccel_LockOn;
float BattleMoveSpeed_Run;
float BattleMoveSpeed_RunLR;
float BattleMoveSpeed_Back;
float ScaleMale[6];
float ScaleFemale[6];
int32_t Model;
int32_t EquipHead;
int32_t EquipBody;
@ -1157,19 +1154,12 @@ namespace Component::Excel
uint16_t BGM;
uint16_t Icon;
uint16_t Action[2];
uint8_t ExitMoveDist;
uint8_t ExitMoveSpeed;
uint8_t UIPriority;
uint16_t unknown[2];
uint8_t unknown2[6];
uint8_t RadiusRate;
uint8_t BaseMotionSpeed_Run;
uint8_t BaseMotionSpeed_Walk;
uint8_t LinkNum;
int8_t SaveIndex;
uint8_t padding1 : 5;
uint8_t ExHotbarEnableConfig : 1;
uint8_t IsFloat : 1;
uint8_t IsEmote : 1;
int8_t padding2[3];
uint8_t unknown3[3];
int8_t MountOrder;
uint8_t unknown4 : 4;
};
/* 201019 */
@ -1818,14 +1808,14 @@ namespace Component::Excel
uint8_t Event;
uint8_t ConditionType;
uint8_t ConditionOperator;
uint8_t VisibleCallback : 1;
uint8_t ConditionCallback : 1;
uint8_t BehaviorCallback : 1;
uint8_t ItemCallback : 1;
uint8_t TargetingPossibleCallback : 1;
uint8_t QualifiedCallback : 1;
uint8_t AnnounceCallback : 1;
uint8_t AcceptCallback : 1;
uint8_t AnnounceCallback : 1;
uint8_t QualifiedCallback : 1;
uint8_t TargetingPossibleCallback : 1;
uint8_t ItemCallback : 1;
uint8_t BehaviorCallback : 1;
uint8_t ConditionCallback : 1;
uint8_t VisibleCallback : 1;
};
/* 264322 */

View file

@ -653,8 +653,8 @@ namespace Component::Excel::Ps3
struct Aetheryte
{
AetheryteTextStruct Text;
uint32_t EventHandler;
uint32_t PopRange[4];
int32_t EventHandler;
uint16_t TelepoName;
uint16_t TransferName;
uint16_t TerritoryType;

View file

@ -517,17 +517,6 @@ CREATE TABLE `uniqueiddata` (
PRIMARY KEY(`NextId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `zonepositions` (
`id` int(11) NOT NULL,
`target_zone_id` int(11) NOT NULL,
`pos_x` float NOT NULL,
`pos_y` float NOT NULL,
`pos_z` float NOT NULL,
`pos_o` float NOT NULL,
`radius` int(11) NOT NULL DEFAULT '2',
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
CREATE TABLE `landplaceditems` (
`ItemId` INT(20) UNSIGNED NOT NULL,
`PosX` FLOAT NOT NULL,

View file

@ -506,7 +506,13 @@ namespace Sapphire::Common
Return = 1,
Teleport = 4,
GearSets = 6,
MateriaMelding = 11,
AdvancedMateriaMelding = 12,
MateriaAssimilating = 13,
Dye = 14,
Glamour = 15,
HuntingLog = 21,
Desynth = 95
};
enum ContainerType : uint16_t
@ -893,6 +899,7 @@ namespace Sapphire::Common
KeyItemAction = 1,
ItemActionVFX = 852,
ItemActionVFX2 = 944,
ItemActionMount = 1322,
};
enum ActionEffectDisplayType : uint8_t

View file

@ -475,30 +475,32 @@ enum class OnlineStatus : uint8_t
Offline = 10,
Busy = 11,
PvP = 12,
ViewingCutscene = 13,
UsingaChocoboPorter = 14,
AwayfromKeyboard = 15,
LookingforRepairs = 16,
LookingtoRepair = 17,
LookingtoMeldMateria = 18,
LookingforParty = 19,
//Missing = 20
WaitingforDutyFinder = 21,
RecruitingPartyMembers = 22,
AllianceLeader = 23,
AlliancePartyLeader = 24,
AlliancePartyMember = 25,
PartyLeader = 26,
PartyMember = 27,
AnotherWorld = 28,
SharingDuty = 29,
SimilarDuty = 30,
InDuty = 31,
TrialAdventurer = 32,
NewAdventurer = 33,
FreeCompany = 34,
GrandCompany = 35,
Online = 36,
PlayingTripleTriad = 13,
ViewingCutscene = 14,
UsingaChocoboPorter = 15,
AwayfromKeyboard = 16,
LookingforRepairs = 17,
LookingtoRepair = 18,
LookingtoMeldMateria = 19,
LookingforParty = 20,
//Missing = 21
WaitingforDutyFinder = 22,
RecruitingPartyMembers = 23,
NewAdventurer = 24,
AllianceLeader = 25,
AlliancePartyLeader = 26,
AlliancePartyMember = 27,
PartyLeader = 28,
PartyMember = 29,
AnotherWorld = 30,
SharingDuty = 31,
SimilarDuty = 32,
InDuty = 33,
TrialAdventurer = 34,
FreeCompany = 35,
GrandCompany = 36,
Online = 37,
};
///////////////////////////////////////////////////////////
@ -512,8 +514,6 @@ enum class Race : uint8_t
Miqote = 4,
Roegadyn = 5,
AuRa = 6,
Hrothgar = 7,
Viera = 8,
};
///////////////////////////////////////////////////////////
@ -548,8 +548,6 @@ enum class Town : uint8_t
Gridania = 2,
Uldah = 3,
Ishgard = 4,
Kugane = 7,
TheCrystarium = 10,
};
///////////////////////////////////////////////////////////
@ -612,81 +610,6 @@ enum class Weather : uint8_t
RoyalLevin = 53,
Hyperelectricity = 54,
RoyalLevin1 = 55,
Oppression5 = 56,
Thunder1 = 57,
Thunder2 = 58,
CutScene = 59,
Multiplicity = 60,
Multiplicity1 = 61,
Rain1 = 62,
FairSkies7 = 63,
Rain2 = 64,
FairSkies8 = 65,
Dragonstorms = 66,
Dragonstorms1 = 67,
Subterrain = 68,
Concordance = 69,
Concordance1 = 70,
BeyondTime = 71,
BeyondTime1 = 72,
BeyondTime2 = 73,
DemonicInfinity = 74,
DemonicInfinity1 = 75,
DemonicInfinity2 = 76,
DimensionalDisruption = 77,
DimensionalDisruption1 = 78,
DimensionalDisruption2 = 79,
Revelstorms = 80,
Revelstorms1 = 81,
EternalBliss = 82,
EternalBliss1 = 83,
Wyrmstorms = 84,
Wyrmstorms1 = 85,
Revelstorms2 = 86,
Quicklevin = 87,
Thunder3 = 88,
DimensionalDisruption3 = 89,
FairSkies9 = 90,
ClearSkies1 = 91,
WhiteCyclones = 92,
WhiteCyclones1 = 93,
WhiteCyclones2 = 94,
Ultimania = 95,
WhiteCyclones3 = 96,
Moonlight = 97,
Moonlight1 = 98,
Moonlight2 = 99,
Moonlight3 = 100,
FairSkies10 = 101,
Scarlet = 102,
Scarlet1 = 103,
Scarlet2 = 104,
FairSkies11 = 105,
FairSkies12 = 106,
FairSkies13 = 107,
FairSkies14 = 108,
Flames = 109,
Tsunamis = 110,
Cyclones = 111,
Geostorms = 112,
TrueBlue = 113,
TrueBlue1 = 114,
TrueBlue2 = 115,
UmbralTurbulence = 116,
TrueBlue3 = 117,
EverlastingLight = 118,
Gales2 = 119,
Termination = 120,
Termination1 = 121,
Dreams = 122,
Dreams1 = 123,
Dreams2 = 124,
Brilliance = 125,
Brilliance1 = 126,
Termination2 = 127,
Termination3 = 128,
EverlastingLight1 = 129,
Termination4 = 131,
};
///////////////////////////////////////////////////////////

View file

@ -64,7 +64,7 @@ namespace Sapphire::Network::ActorControl
SpawnEffect = 0x25,
ToggleInvisible = 0x26,
ToggleActionUnlock = 0x29,
SetSystemActionUnlocked = 0x29,
UpdateUiExp = 0x2B,
SetFallDamage = 0x2D,
@ -278,6 +278,12 @@ namespace Sapphire::Network::ActorControl
*/
SetMountSpeed = 0x39F,
/*!
* param1 = mount ID
* param2 = unlock/lock (1/0)
*/
SetMountBitmask = 0x387,
Dismount = 0x3A1, // updated 4.5
// Duty Recorder

View file

@ -45,6 +45,8 @@ namespace Sapphire::Network::Packets
RegionInfo = 0x0069,
MoveTerritory = 0x006A,
MoveInstance = 0x006B,
SetPSNId = 0x0073,
SetBillingTime = 0x0075,
@ -387,7 +389,6 @@ namespace Sapphire::Network::Packets
NpcSpawn = 0x00B3, // updated 5.21 hotfix
InventoryActionAck = 0x01B2, // updated 5.21 hotfix
UpdateInventorySlot = 0x0213, // updated 5.21 hotfix
PrepareZoning = 0x00B6, // updated 5.21 hotfix
};
}

View file

@ -334,6 +334,18 @@ struct FFXIVIpcPingHandler : FFXIVIpcBasePacket< Sync >
ZoneProtoUpClientPos position;
};
struct FFXIVIpcLoginHandler : FFXIVIpcBasePacket< Login >
{
uint32_t clientTimeValue;
uint32_t arg2;
uint64_t arg3;
uint64_t arg4;
int32_t contentFinderStatus;
int32_t contentFinderFlags;
char name[32];
char arg1[48];
};
struct FFXIVIpcFindContent : FFXIVIpcBasePacket< FindContent >
{
uint16_t territoryType;

View file

@ -1664,6 +1664,17 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
char worldName[32];
};
struct FFXIVIpcMoveInstance : FFXIVIpcBasePacket< MoveInstance >
{
uint64_t characterId;
uint32_t entityId;
uint16_t worldId;
uint16_t worldId1;
uint64_t unknown1;
uint64_t unknown2;
//TODO... TO BE MAPPED
};
/**
*
*/
@ -1690,23 +1701,6 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
struct DailyQuest dailyQuestArray[6];
};
/**
* Structural representation of the packet sent by the server
* prepare zoning, showing screenmessage
*/
struct FFXIVIpcPrepareZoning : FFXIVIpcBasePacket< PrepareZoning >
{
uint32_t logMessage;
uint16_t targetZone;
uint16_t animation;
uint8_t param4;
uint8_t hideChar;
uint8_t fadeOut;
uint8_t param7;
uint8_t fadeOutTime;
uint8_t unknown; // this changes whether or not the destination zone's name displays during the loading screen. Seems to always be 9 (=hidden) when going to an instance and certain zones, 0 otherwise.
uint16_t padding;
};
/**
* Structural representation of the packet sent by the server

View file

@ -139,7 +139,7 @@ float Util::trunc( float value, uint8_t digitsToRemain )
if( digitsToRemain == 0 )
return std::floor( value );
float factor = std::pow( 10, digitsToRemain );
auto factor = static_cast< float >( std::pow( 10.f, digitsToRemain ) );
return std::floor( value * factor ) / factor;
}

View file

@ -17,7 +17,7 @@ public:
if( !action.getSourceChara()->isPlayer() )
return;
action.getSourceChara()->getAsPlayer()->returnToHomepoint();
action.getSourceChara()->getAsPlayer()->teleport( action.getSourceChara()->getAsPlayer()->getHomepoint(), 3 );
}
};

View file

@ -101,7 +101,7 @@ public:
else
{
eventMgr().sendEventNotice( player, eventId, 0, 1, 1, 0 );
player.learnAction( Common::UnlockEntry::Teleport );
player.setSystemActionUnlocked( Common::UnlockEntry::Teleport );
}
},
[]( Entity::Player& player, uint32_t eventId, uint64_t additional )

View file

@ -22,7 +22,7 @@ public:
void inner( Entity::Player& player, const Event::SceneResult& result )
{
if( result.numOfResults == 1 ) // exit
/* if( result.numOfResults == 1 ) // exit
{
eventMgr().eventFinish( player, 1310721, 0 );
eventMgr().eventFinish( player, getId(), 1 );
@ -59,24 +59,24 @@ public:
{
eventMgr().playScene( player, 1310721, 0, HIDE_HOTBAR, { 1, 341 },
std::bind( &WarpTaxi::inner, this, std::placeholders::_1, std::placeholders::_2 ) );
}
}*/
}
void inner2( Entity::Player& player, uint64_t actorId )
{
eventMgr().playScene( player, getId(), 0, HIDE_HOTBAR, { 32529 },
/* eventMgr().playScene( player, getId(), 0, HIDE_HOTBAR, { 32529 },
[this, actorId]( Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().eventStart( player, actorId, 1310721, Event::EventHandler::Nest, 1, 0 );
eventMgr().playScene( player, 1310721, 0, HIDE_HOTBAR, { 1, 341 },
std::bind( &WarpTaxi::inner, this, std::placeholders::_1, std::placeholders::_2 ) );
} );
} );*/
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{
auto& exdData = Common::Service< Sapphire::Data::ExdData >::ref();
/* auto& exdData = Common::Service< Sapphire::Data::ExdData >::ref();
auto warp = exdData.getRow< Component::Excel::Warp >( eventId );
if( !warp )
@ -85,7 +85,7 @@ public:
// EXD TODO: Not sure Warpcondition is correct here
eventMgr().eventStart( player, actorId, warp->data().WarpCondition, Event::EventHandler::Nest, 0, 0,
std::bind( &WarpTaxi::inner2, this, std::placeholders::_1, std::placeholders::_2 ) );
eventMgr().playScene( player, warp->data().WarpCondition, 0, HIDE_HOTBAR, { 7 }, nullptr );
eventMgr().playScene( player, warp->data().WarpCondition, 0, HIDE_HOTBAR, { 7 }, nullptr );*/
}
};

View file

@ -1,41 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class AlphascapeV10 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
AlphascapeV10() :
Sapphire::ScriptAPI::InstanceContentScript( 30069 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 7575331, 4, { 96.398201f, 0.000000f, 100.555702f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2007457, 7575332, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2007457, 7575333, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2007457, 7575334, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2007457, 7586460, 4, { 101.415100f, -0.000000f, 101.219002f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2007457, 7574103, 5, { 105.000000f, 0.000000f, 115.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 85.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2007457, 7575443, 4, { 100.300003f, 0.000000f, 100.300003f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( AlphascapeV10 );

View file

@ -1,41 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class AlphascapeV10Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
AlphascapeV10Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30073 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 7575331, 4, { 96.398201f, 0.000000f, 100.555702f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2007457, 7575332, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2007457, 7575333, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2007457, 7575334, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2007457, 7586460, 4, { 101.415100f, -0.000000f, 101.219002f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2007457, 7574103, 5, { 105.000000f, 0.000000f, 115.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 85.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2007457, 7575443, 4, { 100.300003f, 0.000000f, 100.300003f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( AlphascapeV10Savage );

View file

@ -1,36 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class AlphascapeV20 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
AlphascapeV20() :
Sapphire::ScriptAPI::InstanceContentScript( 30070 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 7684588, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2000182, 7581179, 5, { 100.000000f, 0.000000f, 115.000000f }, 1.000000f, -0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 85.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( AlphascapeV20 );

View file

@ -1,36 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class AlphascapeV20Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
AlphascapeV20Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30074 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 7684588, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2000182, 7581179, 5, { 100.000000f, 0.000000f, 115.000000f }, 1.000000f, -0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 85.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( AlphascapeV20Savage );

View file

@ -1,40 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class AlphascapeV30 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
AlphascapeV30() :
Sapphire::ScriptAPI::InstanceContentScript( 30071 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2009609, 0, 4, { 92.761772f, 0.000000f, 106.354897f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2009610, 0, 4, { 93.034180f, -0.015320f, 106.645302f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_2", 2007457, 7604877, 4, { 103.128403f, 0.000000f, 107.047600f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2007457, 7624116, 4, { 105.371498f, 0.000000f, 104.860802f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2009653, 0, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2007457, 7593474, 5, { 104.466499f, 0.000000f, 114.605797f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 85.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( AlphascapeV30 );

View file

@ -1,40 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class AlphascapeV30Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
AlphascapeV30Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30075 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2009609, 0, 4, { 92.761772f, 0.000000f, 106.354897f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2009610, 0, 4, { 93.034180f, -0.015320f, 106.645302f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_2", 2007457, 7604877, 4, { 103.128403f, 0.000000f, 107.047600f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2007457, 7624116, 4, { 105.371498f, 0.000000f, 104.860802f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2009653, 0, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2007457, 7593474, 5, { 104.466499f, 0.000000f, 114.605797f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 85.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( AlphascapeV30Savage );

View file

@ -1,44 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class AlphascapeV40 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
AlphascapeV40() :
Sapphire::ScriptAPI::InstanceContentScript( 30072 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 7570953, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2007457, 7624865, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2007457, 7624868, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2007457, 7624869, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2007457, 7624870, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2007457, 7624871, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2007457, 7624872, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_7", 2007457, 7624873, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_8", 2007457, 7672994, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2000182, 7581279, 5, { 100.000000f, 0.000000f, 115.000000f }, 1.000000f, -0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 84.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( AlphascapeV40 );

View file

@ -1,44 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class AlphascapeV40Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
AlphascapeV40Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30076 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 7570953, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2007457, 7624865, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2007457, 7624868, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2007457, 7624869, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2007457, 7624870, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2007457, 7624871, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2007457, 7624872, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_7", 2007457, 7624873, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_8", 2007457, 7672994, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2000182, 7581279, 5, { 100.000000f, 0.000000f, 115.000000f }, 1.000000f, -0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 84.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( AlphascapeV40Savage );

View file

@ -1,38 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class DeltascapeV10 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
DeltascapeV10() :
Sapphire::ScriptAPI::InstanceContentScript( 30049 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 6791878, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_1", 2007457, 6885561, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_2", 2007457, 6852121, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "Entrance", 2000182, 6910535, 5, { 0.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -16.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( DeltascapeV10 );

View file

@ -1,38 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class DeltascapeV10Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
DeltascapeV10Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30053 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 6791878, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_1", 2007457, 6885561, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_2", 2007457, 6852121, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "Entrance", 2000182, 6910535, 5, { 0.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -16.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( DeltascapeV10Savage );

View file

@ -1,37 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class DeltascapeV20 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
DeltascapeV20() :
Sapphire::ScriptAPI::InstanceContentScript( 30050 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2008482, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_1", 2007457, 6872632, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "Entrance", 2000182, 6910926, 5, { 0.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -16.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( DeltascapeV20 );

View file

@ -1,37 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class DeltascapeV20Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
DeltascapeV20Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30054 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2008482, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_1", 2007457, 6872632, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "Entrance", 2000182, 6910926, 5, { 0.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -16.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( DeltascapeV20Savage );

View file

@ -1,53 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class DeltascapeV30 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
DeltascapeV30() :
Sapphire::ScriptAPI::InstanceContentScript( 30051 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "Matterrelocationdevice", 2008501, 6913059, 4, { 230.975693f, 231.836197f, -19.028080f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_0", 2007457, 6792212, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2007457, 6847573, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2007457, 6848219, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3o4_a1_mto01", 2007457, 6953156, 4, { 250.000000f, 250.995605f, 0.000000f }, 1.000000f, -0.000000f );
// States -> mete_hide (id: 19) mete_pre (id: 20) mete_phase_1 (id: 21) mete_phase_2 (id: 22) mete_phase_3 (id: 23) mete_phase_4 (id: 24) mete_fade (id: 25) mete_phase_5 (id: 26)
instance.registerEObj( "unknown_3", 2007457, 6929138, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2007457, 6847577, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_5", 2007457, 6853325, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2007457, 6853774, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_7", 2007457, 6846630, 4, { -15.000000f, 0.000001f, 15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_8", 2007457, 6846632, 4, { -5.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_9", 2007457, 6846634, 4, { 5.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_10", 2007457, 6846637, 4, { 15.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_11", 2007457, 6846642, 4, { -15.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_12", 2007457, 6846643, 4, { -5.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_13", 2007457, 6846644, 4, { 5.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_14", 2007457, 6846645, 4, { 15.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2000182, 6912959, 5, { 0.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -10.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( DeltascapeV30 );

View file

@ -1,53 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class DeltascapeV30Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
DeltascapeV30Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30055 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "Matterrelocationdevice", 2008501, 6913059, 4, { 230.975693f, 231.836197f, -19.028080f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_0", 2007457, 6792212, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2007457, 6847573, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2007457, 6848219, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3o4_a1_mto01", 2007457, 6953156, 4, { 250.000000f, 250.995605f, 0.000000f }, 1.000000f, -0.000000f );
// States -> mete_hide (id: 19) mete_pre (id: 20) mete_phase_1 (id: 21) mete_phase_2 (id: 22) mete_phase_3 (id: 23) mete_phase_4 (id: 24) mete_fade (id: 25) mete_phase_5 (id: 26)
instance.registerEObj( "unknown_3", 2007457, 6929138, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2007457, 6847577, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_5", 2007457, 6853325, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2007457, 6853774, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_7", 2007457, 6846630, 4, { -15.000000f, 0.000001f, 15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_8", 2007457, 6846632, 4, { -5.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_9", 2007457, 6846634, 4, { 5.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_10", 2007457, 6846637, 4, { 15.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_11", 2007457, 6846642, 4, { -15.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_12", 2007457, 6846643, 4, { -5.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_13", 2007457, 6846644, 4, { 5.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_14", 2007457, 6846645, 4, { 15.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2000182, 6912959, 5, { 0.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -10.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( DeltascapeV30Savage );

View file

@ -1,42 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class DeltascapeV40 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
DeltascapeV40() :
Sapphire::ScriptAPI::InstanceContentScript( 30052 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 6925502, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2007457, 6925503, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2007457, 6925504, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2007457, 6936015, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2007457, 6865650, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2007457, 6872744, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2008483, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -17.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2000182, 6914211, 5, { 0.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( DeltascapeV40 );

View file

@ -1,42 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class DeltascapeV40Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
DeltascapeV40Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30056 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 6925502, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2007457, 6925503, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2007457, 6925504, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2007457, 6936015, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2007457, 6865650, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2007457, 6872744, 4, { 0.000000f, 0.000000f, 0.038952f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2008483, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -17.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2000182, 6914211, 5, { 0.000000f, 0.000000f, 15.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( DeltascapeV40Savage );

View file

@ -1,53 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class SigmascapeV10 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
SigmascapeV10() :
Sapphire::ScriptAPI::InstanceContentScript( 30059 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "sgbg_z3o7_a0_ghr01", 2007457, 7230603, 4, { -6.335131f, 0.049939f, -10.559780f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3o7_a0_ghr01_1", 2007457, 7230604, 4, { -5.699108f, 0.049922f, -2.387848f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3o7_a0_ghr01_2", 2007457, 7230605, 4, { -6.369749f, 0.050002f, 7.711805f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3o7_a0_ghr01_3", 2007457, 7230606, 4, { -6.234384f, 0.050004f, 17.721371f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b1256", 2009408, 7231049, 4, { -3.117226f, 0.050002f, 9.861297f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3o7_b1346", 2009409, 7231069, 4, { -25.851500f, 16.520651f, 22.008921f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_0", 2007457, 7274404, 4, { -22.963020f, -2.647718f, 8.151876f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3o7_b1359", 2007457, 7297633, 4, { -30.500000f, 0.552600f, 43.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2009384, 0, 4, { 220.569107f, -108.812103f, 5.081238f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream", 2009400, 7231089, 4, { 144.482300f, -110.000000f, -71.090813f }, 0.991760f, 0.000046f );
instance.registerEObj( "Aetherialstream_1", 2009401, 7231090, 4, { 144.468994f, -110.000000f, -23.514120f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_2", 2009402, 7231091, 4, { 144.456100f, -110.000000f, 23.836590f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_3", 2009403, 7231092, 4, { 144.470901f, -110.000000f, 71.062202f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_4", 2009404, 7231093, 4, { 215.991302f, -110.000000f, -71.152832f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_5", 2009405, 7231096, 4, { 215.991302f, -110.000000f, -23.514160f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_6", 2009406, 7231097, 4, { 215.991302f, -110.000000f, 23.880310f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_7", 2009407, 7231098, 4, { 215.991302f, -110.000000f, 71.061279f }, 0.991760f, 0.000048f );
instance.registerEObj( "sgvf_z3o7_b1359_1", 2007457, 7297634, 4, { 178.511902f, -110.002403f, -0.198364f }, 0.991760f, 0.000048f );
instance.registerEObj( "Entrance", 2007457, 7181869, 5, { -3.537696f, 0.000001f, 18.750830f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.076233f, -0.015320f, -9.170715f }, 0.991760f, 0.000048f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( SigmascapeV10 );

View file

@ -1,53 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class SigmascapeV10Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
SigmascapeV10Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30063 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "sgbg_z3o7_a0_ghr01", 2007457, 7230603, 4, { -6.335131f, 0.049939f, -10.559780f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3o7_a0_ghr01_1", 2007457, 7230604, 4, { -5.699108f, 0.049922f, -2.387848f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3o7_a0_ghr01_2", 2007457, 7230605, 4, { -6.369749f, 0.050002f, 7.711805f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3o7_a0_ghr01_3", 2007457, 7230606, 4, { -6.234384f, 0.050004f, 17.721371f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b1256", 2009408, 7231049, 4, { -3.117226f, 0.050002f, 9.861297f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3o7_b1346", 2009409, 7231069, 4, { -25.851500f, 16.520651f, 22.008921f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_0", 2007457, 7274404, 4, { -22.963020f, -2.647718f, 8.151876f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3o7_b1359", 2007457, 7297633, 4, { -30.500000f, 0.552600f, 43.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2009384, 0, 4, { 220.569107f, -108.812103f, 5.081238f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream", 2009400, 7231089, 4, { 144.482300f, -110.000000f, -71.090813f }, 0.991760f, 0.000046f );
instance.registerEObj( "Aetherialstream_1", 2009401, 7231090, 4, { 144.468994f, -110.000000f, -23.514120f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_2", 2009402, 7231091, 4, { 144.456100f, -110.000000f, 23.836590f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_3", 2009403, 7231092, 4, { 144.470901f, -110.000000f, 71.062202f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_4", 2009404, 7231093, 4, { 215.991302f, -110.000000f, -71.152832f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_5", 2009405, 7231096, 4, { 215.991302f, -110.000000f, -23.514160f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_6", 2009406, 7231097, 4, { 215.991302f, -110.000000f, 23.880310f }, 0.991760f, 0.000048f );
instance.registerEObj( "Aetherialstream_7", 2009407, 7231098, 4, { 215.991302f, -110.000000f, 71.061279f }, 0.991760f, 0.000048f );
instance.registerEObj( "sgvf_z3o7_b1359_1", 2007457, 7297634, 4, { 178.511902f, -110.002403f, -0.198364f }, 0.991760f, 0.000048f );
instance.registerEObj( "Entrance", 2007457, 7181869, 5, { -3.537696f, 0.000001f, 18.750830f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.076233f, -0.015320f, -9.170715f }, 0.991760f, 0.000048f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( SigmascapeV10Savage );

View file

@ -1,51 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class SigmascapeV20 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
SigmascapeV20() :
Sapphire::ScriptAPI::InstanceContentScript( 30060 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 7244294, 4, { -6.511937f, 0.003125f, -4.958800f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2007457, 7181375, 4, { 12.476670f, -0.015002f, 6.948618f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_2", 2007457, 7181377, 4, { 12.570220f, -0.015320f, -9.693607f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_3", 2007457, 7329867, 4, { -4.318359f, -0.015320f, 5.722107f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_4", 2007457, 7187344, 4, { -1.960858f, 0.001128f, 0.319698f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2007457, 7174526, 4, { -6.872698f, 0.004465f, 1.843464f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2007457, 7174523, 4, { 11.220570f, 0.054783f, -1.564175f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_7", 2007457, 7174518, 4, { 8.520967f, 0.009985f, -8.679861f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_8", 2007457, 7174519, 4, { 9.028366f, 0.055644f, 3.513119f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_9", 2007457, 7180548, 4, { 2.311234f, 0.003611f, 3.656348f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_10", 2007457, 7244420, 4, { 2.385169f, 0.003358f, 3.242888f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_11", 2007457, 7181938, 4, { 15.676980f, 0.010429f, -11.942520f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_12", 2007457, 7181940, 4, { 16.526520f, 0.010429f, 11.441620f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_13", 2007457, 7181939, 4, { -16.083740f, 0.010429f, 11.147680f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_14", 2007457, 7181937, 4, { -16.250851f, -0.015320f, -11.795230f }, 0.991760f, 0.000048f );
instance.registerEObj( "Entrance", 2000182, 7179724, 5, { -1.443299f, 0.007087f, 6.836350f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -11.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_15", 2007457, 7171885, 4, { 4.955309f, 0.000000f, -52.142441f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( SigmascapeV20 );

View file

@ -1,51 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class SigmascapeV20Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
SigmascapeV20Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30064 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2007457, 7244294, 4, { -6.511937f, 0.003125f, -4.958800f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2007457, 7181375, 4, { 12.476670f, -0.015002f, 6.948618f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_2", 2007457, 7181377, 4, { 12.570220f, -0.015320f, -9.693607f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_3", 2007457, 7329867, 4, { -4.318359f, -0.015320f, 5.722107f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_4", 2007457, 7187344, 4, { -1.960858f, 0.001128f, 0.319698f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2007457, 7174526, 4, { -6.872698f, 0.004465f, 1.843464f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2007457, 7174523, 4, { 11.220570f, 0.054783f, -1.564175f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_7", 2007457, 7174518, 4, { 8.520967f, 0.009985f, -8.679861f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_8", 2007457, 7174519, 4, { 9.028366f, 0.055644f, 3.513119f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_9", 2007457, 7180548, 4, { 2.311234f, 0.003611f, 3.656348f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_10", 2007457, 7244420, 4, { 2.385169f, 0.003358f, 3.242888f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_11", 2007457, 7181938, 4, { 15.676980f, 0.010429f, -11.942520f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_12", 2007457, 7181940, 4, { 16.526520f, 0.010429f, 11.441620f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_13", 2007457, 7181939, 4, { -16.083740f, 0.010429f, 11.147680f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_14", 2007457, 7181937, 4, { -16.250851f, -0.015320f, -11.795230f }, 0.991760f, 0.000048f );
instance.registerEObj( "Entrance", 2000182, 7179724, 5, { -1.443299f, 0.007087f, 6.836350f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -11.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_15", 2007457, 7171885, 4, { 4.955309f, 0.000000f, -52.142441f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( SigmascapeV20Savage );

View file

@ -1,46 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class SigmascapeV30 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
SigmascapeV30() :
Sapphire::ScriptAPI::InstanceContentScript( 30061 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "Entrance", 2000182, 7174192, 5, { -0.028109f, 0.000000f, 12.665810f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_0", 2009292, 7185733, 4, { -7.736383f, 3.268075f, -35.776291f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2009293, 7185734, 4, { 10.155860f, 3.268075f, -35.738319f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2009294, 0, 4, { 18.075230f, 0.000000f, -16.894060f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2009295, 0, 4, { 15.384740f, 0.000000f, -8.198026f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2009296, 0, 4, { 17.399639f, 0.000000f, -8.148316f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2009297, 0, 4, { 10.133680f, 0.000000f, -9.799342f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2009298, 0, 4, { 12.524550f, 0.000000f, -0.314495f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_7", 2009299, 0, 4, { 4.409851f, -0.015320f, -0.839294f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_8", 2009300, 0, 4, { 10.240340f, 0.000000f, 2.827696f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_9", 2009301, 0, 4, { 12.606230f, 0.000000f, 7.149309f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_10", 2009302, 7178404, 4, { 0.616980f, 0.000000f, 0.677854f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( SigmascapeV30 );

View file

@ -1,46 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class SigmascapeV30Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
SigmascapeV30Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30065 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "Entrance", 2000182, 7174192, 5, { -0.028109f, 0.000000f, 12.665810f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_0", 2009292, 7185733, 4, { -7.736383f, 3.268075f, -35.776291f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2009293, 7185734, 4, { 10.155860f, 3.268075f, -35.738319f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2009294, 0, 4, { 18.075230f, 0.000000f, -16.894060f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2009295, 0, 4, { 15.384740f, 0.000000f, -8.198026f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_4", 2009296, 0, 4, { 17.399639f, 0.000000f, -8.148316f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2009297, 0, 4, { 10.133680f, 0.000000f, -9.799342f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2009298, 0, 4, { 12.524550f, 0.000000f, -0.314495f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_7", 2009299, 0, 4, { 4.409851f, -0.015320f, -0.839294f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_8", 2009300, 0, 4, { 10.240340f, 0.000000f, 2.827696f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_9", 2009301, 0, 4, { 12.606230f, 0.000000f, 7.149309f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_10", 2009302, 7178404, 4, { 0.616980f, 0.000000f, 0.677854f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( SigmascapeV30Savage );

View file

@ -1,51 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class SigmascapeV40 :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
SigmascapeV40() :
Sapphire::ScriptAPI::InstanceContentScript( 30062 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "sgbg_z3oa_a0_gmc01", 2007457, 7307403, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_0", 2008982, 0, 4, { -0.015320f, -0.015320f, -0.015320f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_1", 2008978, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2008979, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2008980, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_4", 2008981, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_5", 2008976, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_6", 2008977, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "sgvf_z3oa_b1351", 2007457, 7296769, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_7", 2000051, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_8", 2000052, 0, 4, { 0.000000f, 0.000000f, -5.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_9", 2008626, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_10", 2008627, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_11", 2008629, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_12", 2008630, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_13", 2006821, 0, 4, { -0.015320f, -0.015320f, -0.015320f }, 0.991760f, 0.000048f );
instance.registerEObj( "Entrance", 2000182, 7181990, 5, { 0.000000f, 0.000000f, 14.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -16.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( SigmascapeV40 );

View file

@ -1,51 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class SigmascapeV40Savage :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
SigmascapeV40Savage() :
Sapphire::ScriptAPI::InstanceContentScript( 30066 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "sgbg_z3oa_a0_gmc01", 2007457, 7307403, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_0", 2008982, 0, 4, { -0.015320f, -0.015320f, -0.015320f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_1", 2008978, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2008979, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_3", 2008980, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_4", 2008981, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_5", 2008976, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_6", 2008977, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "sgvf_z3oa_b1351", 2007457, 7296769, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_7", 2000051, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_8", 2000052, 0, 4, { 0.000000f, 0.000000f, -5.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_9", 2008626, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_10", 2008627, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_11", 2008629, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_12", 2008630, 0, 4, { 0.000000f, 0.000000f, 0.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_13", 2006821, 0, 4, { -0.015320f, -0.015320f, -0.015320f }, 0.991760f, 0.000048f );
instance.registerEObj( "Entrance", 2000182, 7181990, 5, { 0.000000f, 0.000000f, 14.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -16.000000f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( SigmascapeV40Savage );

View file

@ -1,106 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class TheOrbonneMonastery :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
TheOrbonneMonastery() :
Sapphire::ScriptAPI::InstanceContentScript( 30077 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "sgvf_w_lvd_b0250", 2007457, 7725374, 4, { 599.697021f, 0.000000f, 384.788696f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_0", 2007791, 0, 4, { 600.046814f, 0.000000f, 384.120605f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2009696, 0, 4, { 581.460022f, 0.000000f, 283.458313f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2002735, 0, 4, { 599.877808f, -31.021669f, -23.567789f }, 0.991760f, 0.000048f );
instance.registerEObj( "sgvf_w_lvd_b0118", 2007457, 7742069, 4, { 599.994080f, -31.000000f, -20.984110f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgbg_z3r3_a2_swrd1", 2007457, 7746896, 4, { 589.026978f, -31.000000f, -64.958076f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3r3_a2_swrd1_1", 2007457, 7746909, 4, { 609.340027f, -31.000000f, -43.261929f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3r3_a2_shld1", 2007457, 7746912, 4, { 608.816589f, -31.000000f, -67.144180f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3r3_a2_shld1_1", 2007457, 7746914, 4, { 592.940430f, -31.000000f, -41.502899f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0118_1", 2007457, 7749814, 4, { 605.816284f, -31.000000f, -87.291206f }, 0.991760f, 0.000048f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgvf_z3r3_b1616", 2007457, 7842482, 4, { 600.000000f, -30.000000f, -54.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3r3_a2_swrd1_2", 2007457, 7844508, 4, { 300.000000f, 0.000000f, -50.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3r3_a2_shld3", 2007457, 7845647, 4, { 600.000000f, -31.000000f, -49.000000f }, 1.000000f, 0.000000f );
// States -> enable (id: 18) enable_a (id: 19) disable (id: 20) disable_a (id: 21) loop (id: 23)
instance.registerEObj( "sgbg_z3r3_a2_shld3_1", 2007457, 7845648, 4, { 600.000000f, -31.000000f, -29.000000f }, 1.000000f, -0.000000f );
// States -> enable (id: 18) enable_a (id: 19) disable (id: 20) disable_a (id: 21) loop (id: 23)
instance.registerEObj( "sgbg_z3r3_a2_shld3_2", 2007457, 7845649, 4, { 592.929016f, -31.000000f, -31.928900f }, 1.000000f, -0.000000f );
// States -> enable (id: 18) enable_a (id: 19) disable (id: 20) disable_a (id: 21) loop (id: 23)
instance.registerEObj( "sgbg_z3r3_a2_shld3_3", 2007457, 7845650, 4, { 607.070984f, -31.000000f, -31.928900f }, 1.000000f, -0.000000f );
// States -> enable (id: 18) enable_a (id: 19) disable (id: 20) disable_a (id: 21) loop (id: 23)
instance.registerEObj( "sgbg_z3r3_a2_shld3_4", 2007457, 7845651, 4, { 594.642517f, -31.000000f, -26.065701f }, 1.000000f, -0.000000f );
// States -> enable (id: 18) enable_a (id: 19) disable (id: 20) disable_a (id: 21) loop (id: 23)
instance.registerEObj( "sgbg_z3r3_a2_shld3_5", 2007457, 7845652, 4, { 605.357483f, -31.000000f, -26.065701f }, 1.000000f, -0.000000f );
// States -> enable (id: 18) enable_a (id: 19) disable (id: 20) disable_a (id: 21) loop (id: 23)
instance.registerEObj( "sgbg_z3r3_a2_shld3_6", 2007457, 7845653, 4, { 587.065674f, -31.000000f, -33.642399f }, 1.000000f, -0.000000f );
// States -> enable (id: 18) enable_a (id: 19) disable (id: 20) disable_a (id: 21) loop (id: 23)
instance.registerEObj( "sgbg_z3r3_a2_shld3_7", 2007457, 7845654, 4, { 612.934326f, -31.000000f, -33.642399f }, 1.000000f, -0.000000f );
// States -> enable (id: 18) enable_a (id: 19) disable (id: 20) disable_a (id: 21) loop (id: 23)
instance.registerEObj( "unknown_3", 2007791, 0, 4, { -600.000000f, -600.000000f, -545.500000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0250_1", 2007457, 7740888, 4, { -606.228577f, -600.000000f, -543.124695f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_4", 2007457, 7741247, 4, { -611.437622f, -602.000000f, -586.861023f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2009684, 0, 4, { -613.782715f, -602.000000f, -582.841614f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2009685, 0, 4, { -611.078125f, -602.014221f, -583.093018f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_7", 2009681, 0, 4, { 600.000000f, -600.000000f, -630.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_8", 2009682, 0, 4, { 600.000000f, -600.000000f, -600.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_9", 2009683, 0, 4, { 605.004822f, -600.000000f, -594.049011f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_10", 2007457, 7718602, 4, { 600.000000f, -600.000000f, -600.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_11", 2007457, 7718606, 4, { 600.000000f, -600.000000f, -600.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_12", 2007457, 7718605, 4, { 600.000000f, -600.000000f, -605.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_13", 2007457, 7739045, 4, { 600.000000f, -600.000000f, -620.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_14", 2009697, 0, 4, { 599.816895f, -600.000000f, -610.040405f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_15", 2009698, 0, 4, { 593.438599f, -600.000000f, -600.488281f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_16", 2009699, 0, 4, { 605.523682f, -600.000000f, -596.581970f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_17", 2009700, 0, 4, { 600.000000f, -600.000000f, -600.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_18", 2002735, 0, 4, { -600.000000f, -624.000000f, -779.170715f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0118_2", 2002872, 7826278, 4, { -600.000000f, -624.000000f, -779.051880f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgvf_z3r1_b1258", 2009735, 7790960, 4, { 600.000000f, 0.000000f, 388.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r1_b1258_1", 2009736, 7790961, 4, { 600.000000f, 0.000000f, 258.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r1_b1258_2", 2009737, 7790972, 4, { -599.687073f, -599.483093f, -542.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r1_b1258_3", 2009738, 7790976, 4, { -600.000000f, -602.000000f, -623.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_19", 2002735, 0, 4, { 504.093506f, -27.491249f, 699.526611f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0118_3", 2007457, 7791941, 4, { 503.957397f, -27.061510f, 699.645325f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgvf_w_lvd_b0118_4", 2007457, 7792069, 4, { 503.000000f, -25.234091f, 659.863281f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_20", 2002735, 0, 4, { -645.511597f, -587.562500f, -431.000000f }, 1.000000f, -1.570796f );
instance.registerEObj( "sgvf_w_lvd_b0118_5", 2007457, 7792412, 4, { -646.396729f, -587.562500f, -431.310394f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgvf_w_lvd_b0118_6", 2007457, 7792413, 4, { -606.465515f, -587.562500f, -431.000000f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "Teleportationcrystal", 2009717, 7790245, 4, { 494.000000f, -36.900440f, 764.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_1", 2009718, 7790248, 4, { 595.000000f, -2.896687f, 404.905212f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_2", 2009719, 7790262, 4, { 597.404175f, -31.000000f, -16.571730f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_3", 2009720, 7790602, 4, { -650.538818f, -588.000000f, -436.780487f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_4", 2009721, 7790603, 4, { -604.447327f, -599.975830f, -519.493408f }, 0.991760f, 0.000048f );
instance.registerEObj( "Teleportationcrystal_5", 2009722, 7790604, 4, { -604.814819f, -624.000000f, -771.833679f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0286", 2007457, 7724970, 4, { 500.022797f, -38.986820f, 782.467285f }, 0.991760f, 0.000048f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 600.027710f, -600.000000f, -620.645081f }, 1.000000f, 0.000000f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( TheOrbonneMonastery );

View file

@ -1,109 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class TheRidoranaLighthouse :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
TheRidoranaLighthouse() :
Sapphire::ScriptAPI::InstanceContentScript( 30068 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "sgvf_w_lvd_b0118", 2007457, 7377897, 4, { -200.000305f, 5.000000f, 101.000000f }, 1.000000f, -0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_0", 2007791, 0, 4, { -200.000305f, 5.000000f, 101.000000f }, 0.880000f, -0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0118_1", 2007457, 7377900, 4, { -200.000107f, 4.999996f, 30.600080f }, 1.000000f, -0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_1", 2009485, 0, 4, { -211.062103f, 5.000000f, 63.169151f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r2_b1409", 2007457, 7379112, 4, { -210.250793f, 5.000000f, 72.932854f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2002735, 0, 4, { -200.002106f, 584.000000f, -510.574188f }, 1.000000f, -0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0118_2", 2007457, 7388431, 4, { -200.002106f, 584.000000f, -509.807709f }, 1.000000f, -0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_3", 2009508, 0, 4, { -200.000000f, 584.000000f, -541.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_4", 2009509, 0, 4, { -200.000000f, 584.000000f, -541.000000f }, 1.000000f, -0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0118_3", 2007457, 7448801, 4, { -200.002106f, 584.000000f, -570.796204f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgvf_w_lvd_b0118_4", 2007457, 7387054, 4, { 800.000000f, -968.000000f, -110.439796f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgvf_w_lvd_b0118_5", 2007457, 7387076, 4, { 800.000000f, -968.000000f, -171.377106f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_5", 2007457, 7387494, 4, { 777.444885f, -440.500000f, 812.995483f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_6", 2007457, 7387496, 4, { 800.000000f, -440.500000f, 774.175781f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_7", 2007457, 7387498, 4, { 822.724609f, -440.500000f, 812.995483f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_8", 2007457, 7370829, 4, { 800.000000f, -968.000000f, -141.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_9", 2007457, 7401445, 4, { 800.000000f, -440.000000f, 800.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r2_b1444", 2007457, 7409377, 4, { 800.000000f, -968.000000f, -141.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_10", 2002735, 0, 4, { 800.000000f, -968.000000f, -109.954399f }, 1.200000f, -0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0118_6", 2007457, 7380261, 4, { 799.984619f, -815.518372f, -369.771912f }, 0.991760f, 0.000048f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_11", 2002735, 0, 4, { 800.000000f, -815.500000f, -370.055695f }, 1.000000f, -0.000000f );
instance.registerEObj( "Entrance", 2000182, 7359055, 5, { -181.813400f, 14.312280f, 237.000000f }, 1.000000f, 0.000000f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 800.146179f, -815.500000f, -417.868286f }, 0.991760f, 0.000048f );
instance.registerEObj( "sgbg_col_wall_02", 2007457, 7447710, 4, { -200.061096f, 12.985350f, -21.103331f }, 0.991760f, 0.000048f );
// States -> col_on (id: 24) col_off (id: 25)
instance.registerEObj( "Ancientclockworkdevice", 2009544, 7334375, 4, { -269.105011f, 122.000000f, -438.046509f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_12", 2007457, 7404715, 4, { -268.778900f, 123.000000f, -449.397705f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_13", 2007457, 7447787, 4, { -269.825287f, 278.980713f, -520.805725f }, 0.991760f, 0.000048f );
instance.registerEObj( "sgbg_col_wall_02_1", 2007457, 7447840, 4, { -226.977997f, 429.983887f, -438.986786f }, 0.991760f, 0.000048f );
// States -> col_on (id: 24) col_off (id: 25)
instance.registerEObj( "unknown_14", 2007457, 7447789, 4, { -199.398300f, 432.999908f, -475.179199f }, 1.000000f, 0.000000f );
instance.registerEObj( "Ancientclockworkdevice_1", 2009545, 7371810, 4, { -199.628098f, 584.000000f, -585.090027f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_15", 2007457, 7404716, 4, { -199.364105f, 584.999817f, -599.228027f }, 1.000000f, 0.000000f );
instance.registerEObj( "Ancientclockworkdevice_2", 2009546, 7377745, 4, { 837.565613f, -984.000000f, 96.709007f }, 1.000000f, 0.000000f );
instance.registerEObj( "Ancientclockworkdevice_3", 2009547, 7377746, 4, { 772.549072f, -979.951721f, -38.537811f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_col_wall_02_2", 2007457, 7447954, 4, { 840.023987f, -984.000000f, 103.811798f }, 1.000000f, 0.000000f );
// States -> col_on (id: 24) col_off (id: 25)
instance.registerEObj( "sgbg_col_wall_02_3", 2007457, 7447962, 4, { 770.034485f, -979.851624f, -46.041550f }, 1.000000f, 0.000000f );
// States -> col_on (id: 24) col_off (id: 25)
instance.registerEObj( "unknown_16", 2007457, 7447790, 4, { 800.592407f, -967.000000f, -202.262695f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3r1_a4_stn03", 2007457, 7450744, 4, { 798.167419f, -815.500000f, -404.830505f }, 0.991760f, 0.000048f );
instance.registerEObj( "Ancientengraving", 2009579, 0, 4, { -194.500000f, 15.000000f, -19.750000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Crudescrawling", 2009580, 0, 4, { 835.500000f, -986.500000f, 68.750000f }, 1.000000f, -0.000000f );
instance.registerEObj( "Crudescrawling_1", 2009581, 0, 4, { 764.500000f, -983.000000f, -16.250000f }, 1.000000f, -0.000000f );
instance.registerEObj( "Teleportationcrystal", 2009534, 7359613, 4, { -187.989700f, 14.788980f, 218.822296f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_1", 2009535, 7359705, 4, { -204.159302f, 112.000000f, -395.631805f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_2", 2009536, 7359716, 4, { -251.343994f, 428.000000f, -517.234192f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_3", 2009537, 7359767, 4, { -203.934204f, 582.000122f, -493.438599f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_4", 2009538, 7359772, 4, { 844.205322f, -988.006409f, 73.136467f }, 0.991760f, 0.000048f );
instance.registerEObj( "Teleportationcrystal_5", 2009539, 7359776, 4, { 767.945312f, -968.000000f, 90.974548f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_6", 2009540, 7359779, 4, { 795.302795f, -972.000000f, -95.739433f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_7", 2009541, 7359782, 4, { 792.833984f, -806.109985f, -299.344299f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_17", 2002735, 0, 4, { 769.949524f, -964.000000f, 77.562500f }, 0.700000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0118_7", 2007457, 7407058, 4, { 769.975586f, -964.000000f, 76.127197f }, 0.991760f, 0.000048f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgbg_col_wall_02_4", 2007457, 7445782, 4, { 770.168579f, -964.019226f, 37.949100f }, 0.991760f, 0.000048f );
// States -> col_on (id: 24) col_off (id: 25)
instance.registerEObj( "unknown_18", 2007457, 7409325, 4, { 761.133728f, -964.000000f, 38.468330f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_19", 2007457, 7409326, 4, { 766.931396f, -964.000000f, 38.589489f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_20", 2007457, 7409327, 4, { 772.973328f, -964.000000f, 38.480419f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_21", 2007457, 7409328, 4, { 779.146301f, -964.000000f, 38.587101f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_22", 2007457, 7407517, 4, { 751.235291f, -964.000000f, 66.028107f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_23", 2007457, 7408156, 4, { 751.337280f, -964.000000f, 59.946270f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_24", 2007457, 7409322, 4, { 751.462219f, -964.000000f, 53.939960f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_25", 2007457, 7409323, 4, { 751.451477f, -964.000000f, 47.949421f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_26", 2007457, 7409332, 4, { 788.401917f, -963.999878f, 65.974800f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_27", 2007457, 7409331, 4, { 788.503784f, -963.999878f, 59.892960f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_28", 2007457, 7409330, 4, { 788.601318f, -964.019226f, 53.879639f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_29", 2007457, 7409329, 4, { 788.618225f, -964.000000f, 47.896111f }, 0.991760f, 0.000048f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( TheRidoranaLighthouse );

View file

@ -1,133 +0,0 @@
#include <ScriptObject.h>
#include <Territory/InstanceContent.h>
using namespace Sapphire;
class TheRoyalCityofRabanastre :
public Sapphire::ScriptAPI::InstanceContentScript
{
public:
TheRoyalCityofRabanastre() :
Sapphire::ScriptAPI::InstanceContentScript( 30058 )
{ }
void onInit( InstanceContent& instance ) override
{
instance.registerEObj( "unknown_0", 2002735, 0, 4, { -319.173004f, 9.994568f, 320.515686f }, 0.991760f, 0.000048f );
instance.registerEObj( "sgvf_w_lvd_b0118", 2007457, 7069100, 4, { -319.896515f, 10.000000f, 325.206085f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgvf_z3r1_b1269", 2007457, 7075766, 4, { -320.000000f, 1.230700f, 221.199997f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r1_b1269_1", 2007457, 7075769, 4, { -320.351501f, 1.230694f, 262.307892f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r1_b1269_2", 2007457, 7075770, 4, { -346.200012f, 1.229800f, 238.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_1", 2009060, 0, 4, { -311.306702f, 1.230747f, 242.805496f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_2", 2009061, 0, 4, { -316.517914f, 1.205444f, 246.509399f }, 0.991760f, 0.000048f );
instance.registerEObj( "sgvf_w_lvd_b0118_1", 2007457, 7069107, 4, { -319.661407f, 10.000000f, -11.625690f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_3", 2009055, 0, 4, { -336.110504f, 9.964111f, -51.682369f }, 1.000000f, -0.000000f );
instance.registerEObj( "unknown_4", 2009057, 0, 4, { -306.355408f, 9.964111f, -48.539001f }, 1.000000f, -0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0118_2", 2007457, 7075611, 4, { -320.081390f, 10.000000f, -69.048653f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgbg_z3r1_a2_lc01a", 2007457, 7075799, 4, { -320.000702f, 10.000000f, -56.500000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3r1_a2_lc01a_1", 2007457, 7075800, 4, { -310.799988f, 10.000000f, -41.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3r1_a2_lc01a_2", 2007457, 7075801, 4, { -329.200012f, 10.000000f, -41.000000f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_5", 2007457, 7076220, 4, { -315.688690f, 10.000000f, -47.888401f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_btl_b0527", 2007457, 7075820, 4, { -316.520996f, 10.000000f, -31.534470f }, 1.000000f, 0.000000f );
// States -> hadokyu_off_a (id: 7) hadokyu_on_a (id: 8) hadokyu_on_b (id: 9) hadokyu_on_c (id: 10)
instance.registerEObj( "unknown_6", 2007457, 7077538, 4, { -338.909393f, 10.000000f, -32.073681f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_7", 2007791, 0, 4, { -319.963013f, 10.052400f, -16.952101f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_8", 2009242, 0, 4, { -332.255402f, 10.108630f, -33.994350f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0250", 2007457, 7080565, 4, { 106.000000f, -694.000000f, -128.399994f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_9", 2007791, 0, 4, { 106.000000f, -694.000000f, -128.399994f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_btl_b1275", 2007457, 7082088, 4, { 108.221199f, -694.000000f, -208.120697f }, 1.000000f, 0.000000f );
// States -> cd_off (id: 3) cd_omen (id: 4) cd_omen_anim (id: 5) cd_on (id: 6) cd_on_anim (id: 7) cd_off_anim (id: 8)
instance.registerEObj( "sgvf_w_btl_b1275_1", 2007457, 7082089, 4, { 121.728897f, -694.000000f, -183.748199f }, 1.000000f, 0.000000f );
// States -> cd_off (id: 3) cd_omen (id: 4) cd_omen_anim (id: 5) cd_on (id: 6) cd_on_anim (id: 7) cd_off_anim (id: 8)
instance.registerEObj( "sgvf_w_btl_b1275_2", 2007457, 7082090, 4, { 94.008781f, -694.000000f, -182.456207f }, 1.000000f, 0.000000f );
// States -> cd_off (id: 3) cd_omen (id: 4) cd_omen_anim (id: 5) cd_on (id: 6) cd_on_anim (id: 7) cd_off_anim (id: 8)
instance.registerEObj( "Darkcircle", 2009076, 0, 4, { 83.147507f, -694.000000f, -193.267899f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_1", 2009203, 0, 4, { 83.057159f, -694.000000f, -182.946304f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_2", 2009204, 0, 4, { 89.546783f, -694.000000f, -172.278000f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_3", 2009205, 0, 4, { 96.837830f, -694.000000f, -165.190094f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_4", 2009206, 0, 4, { 105.990601f, -694.000000f, -164.696304f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_5", 2009207, 0, 4, { 117.216599f, -694.000000f, -169.060196f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_6", 2009208, 0, 4, { 125.204498f, -694.000000f, -175.811493f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_7", 2009209, 0, 4, { 130.969604f, -694.000000f, -185.265594f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_8", 2009210, 0, 4, { 130.999893f, -694.000000f, -195.328003f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_9", 2009211, 0, 4, { 124.798302f, -694.000000f, -204.280807f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_10", 2009212, 0, 4, { 114.994301f, -694.000000f, -210.576996f }, 1.000000f, 0.000000f );
instance.registerEObj( "Darkcircle_11", 2009213, 0, 4, { 103.221703f, -694.000000f, -213.151794f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0250_1", 2007457, 7079402, 4, { 104.478500f, -679.000000f, -322.819489f }, 0.991760f, 0.000048f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "unknown_10", 2007791, 0, 4, { 106.449997f, -679.000000f, -328.250000f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_11", 2009068, 0, 4, { 97.794479f, -679.000000f, -387.672394f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_12", 2009069, 0, 4, { 101.213097f, -679.000000f, -388.533600f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_13", 2009070, 0, 4, { 104.362602f, -679.000000f, -388.768097f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r1_b1284", 2007457, 7081152, 4, { 101.446701f, -679.000000f, -398.626587f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r1_b1278", 2007457, 7081153, 4, { 114.988701f, -679.000000f, -399.119598f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r1_b1277", 2007457, 7081154, 4, { 105.230202f, -679.000000f, -389.831512f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgbg_z3r1_a4_stn03", 2007457, 7151392, 4, { 105.983803f, -679.025024f, -386.058899f }, 1.000000f, -0.000000f );
instance.registerEObj( "sgvf_z3r1_b1258", 2009221, 7094307, 4, { -323.781189f, 9.994568f, 322.467499f }, 0.991760f, 0.000048f );
instance.registerEObj( "sgvf_z3r1_b1258_1", 2009222, 7094363, 4, { -325.789886f, 1.230697f, 217.839005f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_14", 2007457, 7041438, 4, { -274.571594f, 2.310245f, 37.022179f }, 1.000000f, 0.000000f );
instance.registerEObj( "Waterwaygatelever", 2009184, 7080218, 4, { 338.918091f, -262.287415f, 267.698608f }, 0.991760f, 0.000048f );
instance.registerEObj( "Waterwaygatelever_1", 2009186, 7080217, 4, { 337.924988f, -322.267212f, 299.494385f }, 1.000000f, 0.000000f );
instance.registerEObj( "Waterwaygatelever_2", 2009188, 7080216, 4, { 338.580200f, -292.267212f, 331.283905f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_15", 2007457, 7080221, 4, { 323.797211f, -262.267395f, 275.364105f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_16", 2007457, 7080220, 4, { 324.137909f, -322.267303f, 308.012604f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_17", 2007457, 7080219, 4, { 325.866394f, -292.267212f, 339.968201f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_18", 2007457, 7080213, 4, { 205.647507f, -374.000092f, 339.617889f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_19", 2007457, 7080215, 4, { 164.959000f, -374.000092f, 324.108002f }, 1.000000f, 0.000000f );
instance.registerEObj( "Passagecontrols", 2009200, 0, 4, { 189.533096f, -373.602295f, 305.302490f }, 1.000000f, 0.000000f );
instance.registerEObj( "Passagecontrols_1", 2009201, 0, 4, { 162.416901f, -373.621887f, 283.383911f }, 1.000000f, 0.000000f );
instance.registerEObj( "Passagecontrols_2", 2009202, 0, 4, { 167.371002f, -373.190186f, 332.672913f }, 1.000000f, 0.000000f );
instance.registerEObj( "Scratchedlettering", 2009271, 0, 4, { 272.859009f, -490.182709f, 293.584595f }, 0.991760f, 0.000048f );
instance.registerEObj( "Scratchedlettering_1", 2009272, 0, 4, { 212.923599f, -491.264191f, 290.957306f }, 0.991760f, 0.000048f );
instance.registerEObj( "Scratchedlettering_2", 2009273, 0, 4, { 211.674301f, -491.485199f, 242.033600f }, 0.991760f, 0.000048f );
instance.registerEObj( "Skypiratesscrawlings", 2009435, 0, 4, { 222.766403f, -333.455414f, 360.799591f }, 0.991760f, 0.000048f );
instance.registerEObj( "sgvf_z3r1_b1258_2", 2009223, 7102857, 4, { 101.048698f, -694.000000f, -122.909698f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r1_b1258_3", 2009224, 7102858, 4, { 99.562241f, -694.000000f, -216.590393f }, 1.000000f, 0.000000f );
instance.registerEObj( "sgvf_z3r1_b1258_4", 2009225, 7102860, 4, { 99.290398f, -679.011230f, -323.639587f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_20", 2009190, 0, 4, { -298.663086f, -4.197479f, 44.907139f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_21", 2009191, 0, 4, { -301.684296f, -4.350000f, 41.550209f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_22", 2009192, 0, 4, { -304.369995f, -4.219625f, 44.113739f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_23", 2009193, 0, 4, { -316.182190f, -4.226807f, 42.099609f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_24", 2009194, 0, 4, { -319.364990f, -4.219666f, 44.197979f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_25", 2009195, 0, 4, { -322.700989f, -4.219666f, 42.268631f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_26", 2009196, 0, 4, { -331.298615f, -4.379395f, 42.587891f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_27", 2009197, 0, 4, { -334.136810f, -4.379395f, 39.322510f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_28", 2009198, 0, 4, { -337.097107f, -4.379391f, 41.112068f }, 0.991760f, 0.000048f );
instance.registerEObj( "unknown_29", 2009199, 0, 4, { -320.000000f, 19.928169f, -182.845596f }, 1.000000f, 0.000000f );
instance.registerEObj( "unknown_30", 2002735, 0, 4, { -320.106812f, 19.946039f, -144.699493f }, 1.750000f, 0.000000f );
instance.registerEObj( "sgvf_w_lvd_b0118_3", 2007457, 7099082, 4, { -320.132294f, 19.899990f, -145.586395f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "sgvf_w_lvd_b0118_4", 2007457, 7099092, 4, { -319.884003f, 19.900000f, -202.859207f }, 1.000000f, 0.000000f );
// States -> vf_bextwall_on (id: 3) vf_bextwall_of (id: 4)
instance.registerEObj( "Teleportationcrystal", 2009176, 7102798, 4, { -326.309998f, 5.729747f, 406.047699f }, 0.991760f, 0.000048f );
instance.registerEObj( "Teleportationcrystal_1", 2009177, 7102799, 4, { -326.251099f, 9.753006f, 115.489799f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_2", 2009178, 7102800, 4, { -326.389801f, 10.000000f, -10.478860f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_3", 2009179, 7102801, 4, { -312.818115f, 19.899851f, -141.350296f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_4", 2009180, 7102802, 4, { 439.169189f, -229.561905f, 292.789886f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_5", 2009181, 7102803, 4, { 133.837006f, -374.000092f, 311.904785f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_6", 2009182, 7102804, 4, { 114.414299f, -694.000000f, -113.204399f }, 1.000000f, 0.000000f );
instance.registerEObj( "Teleportationcrystal_7", 2009183, 7102805, 4, { 97.279610f, -679.000000f, -305.258087f }, 1.000000f, 0.000000f );
instance.registerEObj( "Entrance", 2000182, 7069095, 5, { -328.378906f, 0.730057f, 439.144012f }, 0.991760f, 0.000048f );
// States -> vf_lock_on (id: 11) vf_lock_of (id: 12)
instance.registerEObj( "Exit", 2000139, 0, 4, { 106.318901f, -679.000000f, -398.354614f }, 0.991760f, 0.000048f );
}
void onUpdate( InstanceContent& instance, uint64_t tickCount ) override
{
}
void onEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1,
uint16_t param2 ) override
{
}
};
EXPOSE_SCRIPT( TheRoyalCityofRabanastre );

View file

@ -201,7 +201,7 @@ public:
{
eventMgr().sendEventNotice( player, 0x050002, 0, 1, 0, 0 );
player.registerAetheryte( 2 );
player.learnAction( Common::UnlockEntry::Return );
player.setSystemActionUnlocked( Common::UnlockEntry::Return );
Scene00051( quest, player );
};

View file

@ -79,7 +79,7 @@ public:
{
eventMgr().sendEventNotice( player, 0x050002, 0, 1, 0, 0 );
player.registerAetheryte( 2 );
player.learnAction( Common::UnlockEntry::Return );
player.setSystemActionUnlocked( Common::UnlockEntry::Return );
Scene00051( quest, player );
},
nullptr, quest.getId() );

View file

@ -82,7 +82,7 @@ public:
{
eventMgr().sendEventNotice( player, 0x050002, 0, 1, 0, 0 );
player.registerAetheryte( 2 );
player.learnAction( Common::UnlockEntry::Return );
player.setSystemActionUnlocked( Common::UnlockEntry::Return );
Scene00051( quest, player );
},
nullptr, quest.getId() );

View file

@ -91,7 +91,7 @@ private:
if( !pQuest )
return;
pQuest->setSeq( SEQ_FINISH );
player.prepareZoning( player.getTerritoryTypeId(), true, 1, 0 );
//player.prepareZoning( player.getTerritoryTypeId(), true, 1, 0 );
player.changePosition( 9, 40, 14, 2 );
}
} );

View file

@ -58,7 +58,7 @@ public:
{
eventMgr().sendEventNotice( player, 0x050002, 0, 1, 0, 0 );
player.registerAetheryte( 2 );
player.learnAction( Common::UnlockEntry::Return );
player.setSystemActionUnlocked( Common::UnlockEntry::Return );
Scene00002( player );
},
nullptr, getId() );

View file

@ -72,7 +72,7 @@ public:
{
eventMgr().sendEventNotice( player, 0x050002, 0, 1, 0, 0 );
player.registerAetheryte( 2 );
player.learnAction( Common::UnlockEntry::Return );
player.setSystemActionUnlocked( Common::UnlockEntry::Return );
Scene00002( player );
},
nullptr, getId() );

View file

@ -90,7 +90,7 @@ public:
{
eventMgr().sendEventNotice( player, 0x050002, 0, 1, 0, 0 );
player.registerAetheryte( 2 );
player.learnAction( Common::UnlockEntry::Return );
player.setSystemActionUnlocked( Common::UnlockEntry::Return );
Scene00001( quest, player );
},
nullptr, getId() );

View file

@ -90,7 +90,7 @@ public:
{
eventMgr().sendEventNotice( player, 0x050002, 0, 1, 0, 0 );
player.registerAetheryte( 2 );
player.learnAction( Common::UnlockEntry::Return );
player.setSystemActionUnlocked( Common::UnlockEntry::Return );
Scene00001( player );
},
nullptr, getId() );

View file

@ -90,7 +90,7 @@ public:
{
eventMgr().sendEventNotice( player, 0x050002, 0, 1, 0, 0 );
player.registerAetheryte( 2 );
player.learnAction( Common::UnlockEntry::Return );
player.setSystemActionUnlocked( Common::UnlockEntry::Return );
Scene00001( player );
},
nullptr, getId() );

View file

@ -205,7 +205,7 @@ private:
if( result.getResult( 0 ) == 1 )
{
player.learnAction( Sapphire::Common::UnlockEntry::HuntingLog );
player.setSystemActionUnlocked( Sapphire::Common::UnlockEntry::HuntingLog );
player.finishQuest( getId(), result.getResult( 1 ) );
}
}

View file

@ -558,7 +558,6 @@ private:
if( result.getResult( 0 ) == 1 )
{
//if( player.giveQuestRewards( getId(), result.getResult(1)) )
player.finishQuest( getId(), result.getResult( 1 ) );
}
}

View file

@ -619,7 +619,6 @@ private:
{
if( result.getResult( 0 ) == 1 )
{
//if (player.giveQuestRewards(getId(), result.getResult(1)))
player.finishQuest( getId(), result.getResult( 1 ) );
}
}

View file

@ -549,7 +549,9 @@ private:
{
if( result.getResult( 0 ) == 1 )
{
//Broken QuestBattle
//TODO: QuestBattle
playerMgr().sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
eventMgr().sendEventNotice( player, getId(), 3, 0 );
quest.setSeq( Seq5 );
/*auto& pTeriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();

View file

@ -7,8 +7,6 @@
#include <Actor/Player.h>
#include <ScriptObject.h>
#include <Service.h>
//Temporrary because QuestBattles are broken
#include "Manager/PlayerMgr.h"
// Quest Script: ClsArc004_00070
// Quest Name: To Catch a Poacher
@ -77,7 +75,7 @@ public:
{
case Actor0:
{
if( !player.hasQuest( getId() ) )
if( quest.getSeq() == Seq0 )
Scene00000( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00021( quest, player );
@ -398,9 +396,13 @@ private:
{
if( result.getResult( 0 ) == 1 )
{
//QuestBattle weirdness, Plus not being able to talk to that NPC, so we have to skip Seq5 entirely
Sapphire::World::Manager::PlayerMgr::sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
quest.setSeq( SeqFinish );
//TODO: QuestBattles are broken
playerMgr().sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
eventMgr().sendEventNotice( player, getId(), 3, 0 );
quest.setSeq( Seq5 );
quest.setBitFlag8( 1, false );
quest.setBitFlag8( 2, false );
quest.setBitFlag8( 3, false );
/*auto& pTeriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();

View file

@ -7,8 +7,6 @@
#include <Actor/Player.h>
#include <ScriptObject.h>
#include <Service.h>
//Temporrary because QuestBattles are broken
#include "Manager/PlayerMgr.h"
// Quest Script: ClsArc005_00071
// Quest Name: Homecoming
@ -203,6 +201,7 @@ private:
void Scene00005Return( World::Quest &quest, Entity::Player &player, const Event::SceneResult &result )
{
eventMgr().sendEventNotice( player, getId(), 2, 0 );
quest.setSeq( Seq4 );
}
@ -229,9 +228,10 @@ private:
{
if( result.getResult( 0 ) == 1 )
{
//Questbattles be broken
//TODO: Questbattles be broken
playerMgr().sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
eventMgr().sendEventNotice( player, getId(), 3, 0 );
quest.setSeq( SeqFinish );
Sapphire::World::Manager::PlayerMgr::sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
/*auto& pTeriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
eventMgr().eventFinish( player, result.eventId, 0 );

View file

@ -7,8 +7,6 @@
#include <Actor/Player.h>
#include <ScriptObject.h>
#include <Service.h>
//Temporrary because QuestBattles are broken
#include "Manager/PlayerMgr.h"
// Quest Script: ClsArc006_00076
// Quest Name: The One that Got Away
@ -189,9 +187,10 @@ private:
{
if( result.getResult( 0 ) == 1 )
{
//QuestBattles don't work atm
//TODO: QuestBattles don't work atm
playerMgr().sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
eventMgr().sendEventNotice( player, getId(), 2, 0 );
quest.setSeq( Seq2 );
Sapphire::World::Manager::PlayerMgr::sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
/*auto& pTeriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
eventMgr().eventFinish(player, result.eventId, 0);
@ -298,9 +297,10 @@ private:
{
if( result.getResult( 0 ) == 1 )
{
//QuestBattles don't work atm
//TODO: QuestBattles don't work atm
playerMgr().sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
eventMgr().sendEventNotice( player, getId(), 3, 0 );
quest.setSeq( SeqFinish );
Sapphire::World::Manager::PlayerMgr::sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
/*auto& pTeriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
eventMgr().eventFinish(player, result.eventId, 0);

View file

@ -141,6 +141,7 @@ private:
quest.setUI8AL( 0 );
quest.setUI8BH( 0 );
quest.setUI8BL( 0 );
eventMgr().sendEventNotice( player, getId(), 3, 0 );
quest.setSeq( SeqFinish );
}
}

View file

@ -239,6 +239,7 @@ private:
void Scene00001Return( World::Quest &quest, Entity::Player &player, const Event::SceneResult &result )
{
eventMgr().sendEventNotice( player, getId(), 1, 0 );
quest.setSeq( Seq2 );
}
@ -531,6 +532,7 @@ private:
void Scene00026Return( World::Quest &quest, Entity::Player &player, const Event::SceneResult &result )
{
eventMgr().sendEventNotice( player, getId(), 2, 0 );
quest.setSeq( Seq4 );
}
@ -565,6 +567,7 @@ private:
void Scene00029Return( World::Quest &quest, Entity::Player &player, const Event::SceneResult &result )
{
eventMgr().sendEventNotice( player, getId(), 5, 0 );
quest.setSeq( SeqFinish );
}

View file

@ -0,0 +1,201 @@
// This is an automatically generated C++ script template
// Content needs to be added by hand to make it function
// In order for this script to be loaded, move it to the correct folder in <root>/scripts/
#include "Manager/EventMgr.h"
#include <Actor/Player.h>
#include <ScriptObject.h>
#include <Service.h>
// Quest Script: ClsCnj000_00022
// Quest Name: Way of the Conjurer (CNJ starter version)
// Quest ID: 65558
// Start NPC: 1000323
// End NPC: 1000692
using namespace Sapphire;
class ClsCnj000 : public Sapphire::ScriptAPI::QuestScript
{
private:
// Basic quest information
// Quest vars / flags used
// UI8AL
// UI8BH
// UI8BL
/// Countable Num: 1 Seq: 1 Event: 1 Listener: 1000692
/// Countable Num: 3 Seq: 2 Event: 5 Listener: 37
/// Countable Num: 3 Seq: 2 Event: 5 Listener: 49
/// Countable Num: 3 Seq: 2 Event: 5 Listener: 47
/// Countable Num: 1 Seq: 255 Event: 1 Listener: 1000692
// Steps in this quest ( 0 is before accepting,
// 1 is first, 255 means ready for turning it in
enum Sequence : uint8_t
{
Seq0 = 0,
Seq1 = 1,
Seq2 = 2,
SeqFinish = 255,
};
// Entities found in the script data of the quest
static constexpr auto Actor0 = 1000323;
static constexpr auto Actor1 = 1000692;
static constexpr auto Enemy0 = 37;//Ground Squirrel
static constexpr auto Enemy1 = 49;//Little Ladybug
static constexpr auto Enemy2 = 47;//Foest Funguar
static constexpr auto LogmessageMonsterNotePageUnlock = 1009;
static constexpr auto Seq0Actor0 = 0;
static constexpr auto Seq1Actor1 = 1;
static constexpr auto Seq3Actor1 = 2;
static constexpr auto UnlockImageMonsterNote = 32;
public:
ClsCnj000() : Sapphire::ScriptAPI::QuestScript( 65558 ){};
~ClsCnj000() = default;
//////////////////////////////////////////////////////////////////////
// Event Handlers
void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override
{
switch( actorId )
{
case Actor0:
{
Scene00000( quest, player );
break;
}
case Actor1:
{
if( quest.getSeq() == Seq1 )
Scene00001( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00002( quest, player );
break;
}
}
}
void onBNpcKill( World::Quest& quest, uint16_t nameId, uint32_t entityId, Sapphire::Entity::Player& player ) override
{
if( nameId != Enemy0 && nameId != Enemy1 && nameId != Enemy2 )
return;
auto currentKC37 = quest.getUI8AL() + 1;
auto currentKC49 = quest.getUI8BH() + 1;
auto currentKC47 = quest.getUI8BL() + 1;
switch( nameId )
{
case Enemy0:
{
if( currentKC37 >= 3 )
{
quest.setUI8AL( currentKC37 );
checkQuestCompletion( quest, player );
eventMgr().sendEventNotice( player, getId(), 1, 2, currentKC37, 3 );
}
else if( currentKC37 < 3 )
{
quest.setUI8AL( currentKC37 );
eventMgr().sendEventNotice( player, getId(), 1, 2, currentKC37, 3 );
}
break;
}
case Enemy1:
{
if( currentKC49 <= 3 )
{
quest.setUI8BH( currentKC49 );
checkQuestCompletion( quest, player );
eventMgr().sendEventNotice( player, getId(), 2, 2, currentKC49, 3 );
}
break;
}
case Enemy2:
{
if( currentKC47 >= 3 )
{
quest.setUI8BL( currentKC47 );
checkQuestCompletion( quest, player );
eventMgr().sendEventNotice( player, getId(), 3, 2, currentKC47, 3 );
}
else if( currentKC47 < 3 )
{
quest.setUI8BL( currentKC47 );
eventMgr().sendEventNotice( player, getId(), 3, 2, currentKC47, 3 );
}
break;
}
}
}
private:
void checkQuestCompletion( World::Quest& quest, Entity::Player& player )
{
auto currentKC37 = quest.getUI8AL();
auto currentKC49 = quest.getUI8BH();
auto currentKC47 = quest.getUI8BL();
if( currentKC37 == 3 && currentKC49 == 3 && currentKC47 == 3 )
{
quest.setUI8AL( 0 );
quest.setUI8BH( 0 );
quest.setUI8BL( 0 );
quest.setSeq( SeqFinish );
}
}
//////////////////////////////////////////////////////////////////////
// Available Scenes in this quest, not necessarly all are used
//////////////////////////////////////////////////////////////////////
void Scene00000( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &ClsCnj000::Scene00000Return ) );
}
void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )// accept quest
{
quest.setSeq( Seq1 );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00001( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 1, FADE_OUT | HIDE_UI, bindSceneReturn( &ClsCnj000::Scene00001Return ) );
}
void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )//Said yes in the cutscene
{
quest.setSeq( Seq2 );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00002( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 2, NONE, bindSceneReturn( &ClsCnj000::Scene00002Return ) );
}
void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )
{
player.finishQuest( getId() );
}
}
};
EXPOSE_SCRIPT( ClsCnj000 );

View file

@ -0,0 +1,207 @@
// This is an automatically generated C++ script template
// Content needs to be added by hand to make it function
// In order for this script to be loaded, move it to the correct folder in <root>/scripts/
#include "Manager/EventMgr.h"
#include <Actor/Player.h>
#include <ScriptObject.h>
#include <Service.h>
#include "Actor/BNpc.h"
#include "Manager/TerritoryMgr.h"
#include "Territory/Territory.h"
// Quest Script: ClsCnj001_00048
// Quest Name: Trial by Earth
// Quest ID: 65584
// Start NPC: 1000692
// End NPC: 1000692
using namespace Sapphire;
class ClsCnj001 : public Sapphire::ScriptAPI::QuestScript
{
private:
// Basic quest information
// Quest vars / flags used
// BitFlag8
// UI8AL
// UI8BH
/// Countable Num: 1 Seq: 1 Event: 1 Listener: 1000764
/// Countable Num: 1 Seq: 2 Event: 1 Listener: 2000883
/// Countable Num: 1 Seq: 3 Event: 5 Listener: 294
/// Countable Num: 1 Seq: 255 Event: 1 Listener: 1000764
// Steps in this quest ( 0 is before accepting,
// 1 is first, 255 means ready for turning it in
enum Sequence : uint8_t
{
Seq0 = 0,
Seq1 = 1,
Seq2 = 2,
Seq3 = 3,
SeqFinish = 255,
};
// Entities found in the script data of the quest
static constexpr auto Actor0 = 1000692; //E-Sumi-Yan
static constexpr auto Actor1 = 1000764; //Nolanel
static constexpr auto Enemy0 = 2320919; //Tainted Earth Sprite
static constexpr auto Eobject0 = 2000883;//Corrupted Soil
static constexpr auto EventActionSearch = 1;
static constexpr auto NqPoint001 = 4;
static constexpr auto Seq0Actor0 = 0;
static constexpr auto Seq1Actor1 = 1;
static constexpr auto Seq2Eobject0 = 2;
static constexpr auto Seq2Eobject0Eventactionno = 99;
static constexpr auto Seq2Eobject0Eventactionok = 100;
static constexpr auto Seq3Actor1 = 3;
static constexpr auto Seq4Actor0 = 4;
public:
ClsCnj001() : Sapphire::ScriptAPI::QuestScript( 65584 ){};
~ClsCnj001() = default;
//////////////////////////////////////////////////////////////////////
// Event Handlers
void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override
{
switch( actorId )
{
case Actor0:
{
if( quest.getSeq() == Seq0 )
Scene00000( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00004( quest, player );
break;
}
case Actor1:
{
if( quest.getSeq() == Seq1 )
Scene00001( quest, player );
else if( quest.getSeq() == Seq3 )
Scene00003( quest, player );
break;
}
case Eobject0:
{
if( quest.getSeq() == Seq2 )
Scene00100( quest, player );
}
}
}
void onBNpcKill( World::Quest& quest, uint16_t nameId, uint32_t entityId, Sapphire::Entity::Player& player ) override
{
switch( entityId )
{
case Enemy0:
{
quest.setBitFlag8( 1, false );
eventMgr().sendEventNotice( player, getId(), 1, 0 );
quest.setSeq( Seq3 );
break;
}
}
}
private:
//////////////////////////////////////////////////////////////////////
// Available Scenes in this quest, not necessarly all are used
//////////////////////////////////////////////////////////////////////
void Scene00000( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &ClsCnj001::Scene00000Return ) );
}
void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )// accept quest
{
quest.setSeq( Seq1 );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00001( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 1, HIDE_HOTBAR, bindSceneReturn( &ClsCnj001::Scene00001Return ) );
}
void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
quest.setSeq( Seq2 );
}
//////////////////////////////////////////////////////////////////////
void Scene00002( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 2, NONE, bindSceneReturn( &ClsCnj001::Scene00002Return ) );
}
void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00003( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 3, FADE_OUT | CONDITION_CUTSCENE | HIDE_UI, bindSceneReturn( &ClsCnj001::Scene00003Return ) );
}
void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
quest.setSeq( SeqFinish );
}
//////////////////////////////////////////////////////////////////////
void Scene00004( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 4, NONE, bindSceneReturn( &ClsCnj001::Scene00004Return ) );
}
void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )
{
player.finishQuest( getId(), result.getResult( 1 ) );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00099( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 99, NONE, bindSceneReturn( &ClsCnj001::Scene00099Return ) );
}
void Scene00099Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00100( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 100, NONE, bindSceneReturn( &ClsCnj001::Scene00100Return ) );
}
void Scene00100Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
auto teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 1220 /*Find the right value*/, Common::BNpcType::Enemy );
enemy->hateListAdd( player.getAsPlayer(), 1 );
quest.setBitFlag8( 1, true );
}
};
EXPOSE_SCRIPT( ClsCnj001 );

View file

@ -0,0 +1,291 @@
// This is an automatically generated C++ script template
// Content needs to be added by hand to make it function
// In order for this script to be loaded, move it to the correct folder in <root>/scripts/
#include "Manager/EventMgr.h"
#include <Actor/Player.h>
#include <ScriptObject.h>
#include <Service.h>
#include "Actor/BNpc.h"
#include "Manager/TerritoryMgr.h"
#include "Territory/Territory.h"
// Quest Script: ClsCnj002_00091
// Quest Name: Trial by Wind
// Quest ID: 65627
// Start NPC: 1000692
// End NPC: 1000692
using namespace Sapphire;
class ClsCnj002 : public Sapphire::ScriptAPI::QuestScript
{
private:
// Basic quest information
// Quest vars / flags used
// BitFlag8
// UI8AL
/// Countable Num: 1 Seq: 1 Event: 1 Listener: 1000767
/// Countable Num: 1 Seq: 2 Event: 1 Listener: 2000885
/// Countable Num: 1 Seq: 3 Event: 5 Listener: 295
/// Countable Num: 1 Seq: 4 Event: 1 Listener: 1000767
/// Countable Num: 1 Seq: 5 Event: 1 Listener: 2000887
/// Countable Num: 1 Seq: 255 Event: 1 Listener: 1000767
// Steps in this quest ( 0 is before accepting,
// 1 is first, 255 means ready for turning it in
enum Sequence : uint8_t
{
Seq0 = 0,
Seq1 = 1,
Seq2 = 2,
Seq3 = 3,
Seq4 = 4,
Seq5 = 5,
SeqFinish = 255,
};
// Entities found in the script data of the quest
static constexpr auto Actor0 = 1000692; //E-Sumi-Yan (Guildmaster)
static constexpr auto Actor1 = 1000767; //Wulfiue
static constexpr auto Enemy0 = 3768148; //Honeybee Swarm
static constexpr auto Eobject0 = 2000885;//Destination (Seq2)
static constexpr auto Eobject1 = 2000887;//Corrupted Air
static constexpr auto EventActionSearch = 1;
static constexpr auto LocActor0 = 1003003;
static constexpr auto LocActor1 = 1000693;
static constexpr auto LocFace1 = 617;
static constexpr auto LocFace2 = 611;
static constexpr auto LocFace3 = 604;
static constexpr auto LocPosActor0 = 1170797;
static constexpr auto Questbattle0 = 54;
static constexpr auto Territorytype0 = 289;
static constexpr auto UnlockImageClassCange = 22;
static constexpr auto UnlockImageGearSet = 29;
public:
ClsCnj002() : Sapphire::ScriptAPI::QuestScript( 65627 ){};
~ClsCnj002() = default;
//////////////////////////////////////////////////////////////////////
// Event Handlers
void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override
{
switch( actorId )
{
case Actor0:
{
if( quest.getSeq() == Seq0 )
Scene00000( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00010( quest, player );
break;
}
case Actor1:
{
if( quest.getSeq() == Seq1 )
Scene00002( quest, player );
else if( quest.getSeq() == Seq3 )
Scene00006( quest, player );
else if( quest.getSeq() == Seq5 )
Scene00009( quest, player );
break;
}
case Eobject0:
{
if( quest.getSeq() == Seq2 )
{
eventMgr().eventActionStart(
player, getId(), 0x01,
[ & ]( Entity::Player& player, uint32_t eventId, uint64_t additional ) {
Scene00004( quest, player );
},
nullptr, 0 );
}
break;
}
case Eobject1:
{
if( quest.getSeq() == Seq4 )
{
eventMgr().sendEventNotice( player, getId(), 3, 0 );
playerMgr().sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
quest.setSeq( Seq5 );
//Actually calling Scene00008 causes the screen to fade before the return is called, softlocking the player without this solution.
/* eventMgr().eventActionStart(
player, getId(), 0x03,
[ & ]( Entity::Player &player, uint32_t eventId, uint64_t additional ) {
Scene00008( quest, player );
},
nullptr, 0 );*/
}
break;
}
}
}
void onBNpcKill( World::Quest& quest, uint16_t nameId, uint32_t entityId, Sapphire::Entity::Player& player ) override
{
switch( entityId )
{
case Enemy0:
{
quest.setBitFlag8( 1, false );
eventMgr().sendEventNotice( player, getId(), 1, 0 );
quest.setSeq( Seq3 );
break;
}
}
}
private:
//////////////////////////////////////////////////////////////////////
// Available Scenes in this quest, not necessarly all are used
//////////////////////////////////////////////////////////////////////
void Scene00000( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &ClsCnj002::Scene00000Return ) );
}
void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )// accept quest
{
Scene00001( quest, player );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00001( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 1, NONE, bindSceneReturn( &ClsCnj002::Scene00001Return ) );
}
void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
quest.setSeq( Seq1 );
}
//////////////////////////////////////////////////////////////////////
void Scene00002( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 2, HIDE_HOTBAR, bindSceneReturn( &ClsCnj002::Scene00002Return ) );
}
void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 0, 0 );
quest.setSeq( Seq2 );
}
//////////////////////////////////////////////////////////////////////
void Scene00003( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 3, NONE, bindSceneReturn( &ClsCnj002::Scene00003Return ) );
}
void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00004( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 4, NONE, bindSceneReturn( &ClsCnj002::Scene00004Return ) );
}
void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
auto teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 1220 /*Find the right value*/, Common::BNpcType::Enemy );
enemy->hateListAdd( player.getAsPlayer(), 1 );
quest.setBitFlag8( 1, true );
}
//////////////////////////////////////////////////////////////////////
void Scene00005( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 5, NONE, bindSceneReturn( &ClsCnj002::Scene00005Return ) );
}
void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00006( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 6, NONE, bindSceneReturn( &ClsCnj002::Scene00006Return ) );
}
void Scene00006Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 2, 0 );
quest.setSeq( Seq4 );
}
//////////////////////////////////////////////////////////////////////
void Scene00007( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 7, NONE, bindSceneReturn( &ClsCnj002::Scene00007Return ) );
}
void Scene00007Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00008( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 8, NONE, bindSceneReturn( &ClsCnj002::Scene00008Return ) );
}
void Scene00008Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
//TODO: Quest Battle
if( result.getResult( 0 ) == 1 )
{
}
}
//////////////////////////////////////////////////////////////////////
void Scene00009( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 9, HIDE_HOTBAR, bindSceneReturn( &ClsCnj002::Scene00009Return ) );
}
void Scene00009Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 4, 0 );
quest.setSeq( SeqFinish );
}
//////////////////////////////////////////////////////////////////////
void Scene00010( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 10, FADE_OUT | HIDE_UI, bindSceneReturn( &ClsCnj002::Scene00010Return ) );
}
void Scene00010Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )
{
player.finishQuest( getId(), result.getResult( 1 ) );
}
}
};
EXPOSE_SCRIPT( ClsCnj002 );

View file

@ -0,0 +1,690 @@
// This is an automatically generated C++ script template
// Content needs to be added by hand to make it function
// In order for this script to be loaded, move it to the correct folder in <root>/scripts/
#include "Manager/EventMgr.h"
#include <Actor/Player.h>
#include <ScriptObject.h>
#include <Service.h>
#include "Actor/BNpc.h"
#include "Manager/TerritoryMgr.h"
#include "Territory/Territory.h"
// Quest Script: ClsCnj003_00092
// Quest Name: Trial by Water
// Quest ID: 65628
// Start NPC: 1000692
// End NPC: 1000692
using namespace Sapphire;
class ClsCnj003 : public Sapphire::ScriptAPI::QuestScript
{
private:
// Basic quest information
// Quest vars / flags used
// BitFlag24
// BitFlag8
// UI8AH
// UI8AL
// UI8BH
// UI8BL
// UI8CH
/// Countable Num: 1 Seq: 1 Event: 1 Listener: 2000889
/// Countable Num: 1 Seq: 2 Event: 8 Listener: 2000889
/// Countable Num: 1 Seq: 3 Event: 5 Listener: 297
/// Countable Num: 1 Seq: 4 Event: 1 Listener: 1000561
/// Countable Num: 1 Seq: 5 Event: 1 Listener: 1000619
/// Countable Num: 1 Seq: 6 Event: 1 Listener: 1003001
/// Countable Num: 1 Seq: 7 Event: 18 Listener: 1003001
/// Countable Num: 1 Seq: 255 Event: 1 Listener: 1003000
// Steps in this quest ( 0 is before accepting,
// 1 is first, 255 means ready for turning it in
enum Sequence : uint8_t
{
Seq0 = 0,
Seq1 = 1,
Seq2 = 2,
Seq3 = 3,
Seq4 = 4,
Seq5 = 5,
Seq6 = 6,
Seq7 = 7,
SeqFinish = 255,
};
// Entities found in the script data of the quest
static constexpr auto Action0 = 120;
static constexpr auto Actor0 = 1000692;//E-Sumi-Yan
static constexpr auto Actor1 = 1000561;//Joacin
static constexpr auto Actor2 = 1000619;//Anuid
static constexpr auto Actor3 = 1003001;//Wounded Wood Wailer
static constexpr auto Actor4 = 1003000;
static constexpr auto Actor5 = 1003057;//Harried Healer
static constexpr auto Actor6 = 1001213;//Gods' Quiver Bow
static constexpr auto Actor7 = 1002960;//Sylphie (pre-QuestBattle)
static constexpr auto Actor8 = 1006154;
static constexpr auto Actor9 = 1006155;
static constexpr auto Actor10 = 1006156;
static constexpr auto Actor11 = 1006152;
static constexpr auto Actor12 = 1006153;
static constexpr auto Actor13 = 1006157;
static constexpr auto Actor14 = 1006158;
static constexpr auto Actor15 = 1006159;
static constexpr auto Actor16 = 1006160;
static constexpr auto Actor17 = 1006161;
static constexpr auto Actor18 = 1003006; //Sylphie (post-QuestBattle)
static constexpr auto Enemy0 = 3799227; //Tainted Water Sprite
static constexpr auto Eobject0 = 2000889;//Corrupted Water
static constexpr auto Eobject1 = 2001838;
static constexpr auto Eventrange0 = 4195892;
static constexpr auto EventActionSearch = 1;
static constexpr auto Item0 = 2000121;//Pristine Water? UI8BH
static constexpr auto LocAction0 = 995;
static constexpr auto LocActor0 = 1000569;
static constexpr auto LocActor1 = 1000693;
static constexpr auto LocFace1 = 611;
static constexpr auto LocFace2 = 620;
static constexpr auto LocFace3 = 612;
static constexpr auto LocPosActor0 = 1170797;
static constexpr auto LocVfx = 241;
static constexpr auto LocWs = 134;
static constexpr auto NqPoint001 = 8;
static constexpr auto NqPoint002 = 9;
static constexpr auto Questbattle0 = 16;
static constexpr auto Territorytype0 = 234;
public:
ClsCnj003() : Sapphire::ScriptAPI::QuestScript( 65628 ){};
~ClsCnj003() = default;
//////////////////////////////////////////////////////////////////////
// Event Handlers
void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override
{
switch( actorId )
{
case Actor0:
{
if( quest.getSeq() == Seq0 )
Scene00000( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00036( quest, player );
break;
}
case Actor1:
{
if( quest.getSeq() == Seq2 )
Scene00007( quest, player );
break;
}
case Actor2:
{
if( quest.getSeq() == Seq3 )
Scene00008( quest, player );
break;
}
case Actor3:
{
if( quest.getSeq() == Seq4 )
Scene00009( quest, player );
else if( quest.getSeq() == Seq5 )
Scene00010( quest, player );
break;
}
case Actor4:
{
break;
}
case Actor5:
{
if( quest.getSeq() == Seq4 )
Scene00013( quest, player );
else if( quest.getSeq() == Seq5 )
Scene00014( quest, player );
else if( quest.getSeq() == Seq6 )
Scene00021( quest, player );
break;
}
case Actor6:
{
if( quest.getSeq() == Seq6 )
Scene00017( quest, player );//34 is a dupe?
break;
}
case Actor7:
{
if( quest.getSeq() == Seq6 )
Scene00018( quest, player );
break;
}
case Actor8:
{
break;
}
case Actor9:
{
break;
}
case Actor10:
{
break;
}
case Actor11:
{
break;
}
case Actor12:
{
break;
}
case Actor13:
{
break;
}
case Actor14:
{
break;
}
case Actor15:
{
break;
}
case Actor16:
{
break;
}
case Actor17:
{
break;
}
case Actor18:
{
if( quest.getSeq() == Seq7 )
Scene00035( quest, player );
break;
}
case Eobject0:
{
//Opens key-item inventory
Scene00001( quest, player );
break;
}
}
}
void onEventItem( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override
{
auto actor = eventMgr().mapEventActorToRealActor( static_cast< uint32_t >( actorId ) );
if( actor == Eobject0 )
{
Scene00002( quest, player );
}
}
void onBNpcKill( World::Quest& quest, uint16_t nameId, uint32_t entityId, Sapphire::Entity::Player& player ) override
{
if( entityId != Enemy0 )
return;
else if( entityId == Enemy0 && quest.getSeq() == Seq1 )
{
eventMgr().sendEventNotice( player, getId(), 1, 0 );
quest.setUI8BH( 0 );
quest.setSeq( Seq2 );
}
}
void onEObjHit( World::Quest& quest, Sapphire::Entity::Player& player, uint64_t actorId, uint32_t actionId ) override
{
auto actor = eventMgr().mapEventActorToRealActor( static_cast< uint32_t >( actorId ) );
if( actor == Actor3 && actionId == Action0 )
{
eventMgr().sendEventNotice( player, getId(), 3, 0 );
quest.setSeq( Seq5 );
}
}
private:
//////////////////////////////////////////////////////////////////////
// Available Scenes in this quest, not necessarly all are used
//////////////////////////////////////////////////////////////////////
void Scene00000( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &ClsCnj003::Scene00000Return ) );
}
void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )// accept quest
{
Scene00001( quest, player );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00001( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 1, NONE, bindSceneReturn( &ClsCnj003::Scene00001Return ) );
}
void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
quest.setUI8BH( 1 );
quest.setSeq( Seq1 );
}
//////////////////////////////////////////////////////////////////////
void Scene00002( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 2, HIDE_HOTBAR, bindSceneReturn( &ClsCnj003::Scene00002Return ) );
}
void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
auto teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 319 /*Find the right value*/, Common::BNpcType::Enemy );
enemy->hateListAdd( player.getAsPlayer(), 1 );
}
//////////////////////////////////////////////////////////////////////
void Scene00003( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 3, NONE, bindSceneReturn( &ClsCnj003::Scene00003Return ) );
}
void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00004( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 4, NONE, bindSceneReturn( &ClsCnj003::Scene00004Return ) );
}
void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00005( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 5, NONE, bindSceneReturn( &ClsCnj003::Scene00005Return ) );
}
void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00006( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 6, NONE, bindSceneReturn( &ClsCnj003::Scene00006Return ) );
}
void Scene00006Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00007( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 7, FADE_OUT | HIDE_UI | CONDITION_CUTSCENE, bindSceneReturn( &ClsCnj003::Scene00007Return ) );
}
void Scene00007Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 1, 0 );
quest.setSeq( Seq3 );
}
//////////////////////////////////////////////////////////////////////
void Scene00008( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 8, NONE, bindSceneReturn( &ClsCnj003::Scene00008Return ) );
}
void Scene00008Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 2, 0 );
quest.setSeq( Seq4 );
}
//////////////////////////////////////////////////////////////////////
void Scene00009( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 9, NONE, bindSceneReturn( &ClsCnj003::Scene00009Return ) );
}
void Scene00009Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00010( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 10, NONE, bindSceneReturn( &ClsCnj003::Scene00010Return ) );
}
void Scene00010Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00011( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 11, NONE, bindSceneReturn( &ClsCnj003::Scene00011Return ) );
}
void Scene00011Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00012( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 12, NONE, bindSceneReturn( &ClsCnj003::Scene00012Return ) );
}
void Scene00012Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00013( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 13, NONE, bindSceneReturn( &ClsCnj003::Scene00013Return ) );
}
void Scene00013Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00014( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 14, HIDE_HOTBAR, bindSceneReturn( &ClsCnj003::Scene00014Return ) );
}
void Scene00014Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 4, 0 );
quest.setSeq( Seq6 );
}
//////////////////////////////////////////////////////////////////////
void Scene00015( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 15, NONE, bindSceneReturn( &ClsCnj003::Scene00015Return ) );
}
void Scene00015Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00016( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 16, NONE, bindSceneReturn( &ClsCnj003::Scene00016Return ) );
}
void Scene00016Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00017( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 17, HIDE_HOTBAR, bindSceneReturn( &ClsCnj003::Scene00017Return ) );
}
void Scene00017Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
//TODO: QuestBattle
playerMgr().sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
eventMgr().sendEventNotice( player, getId(), 5, 0 );
quest.setSeq( Seq7 );
}
//////////////////////////////////////////////////////////////////////
void Scene00018( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 18, NONE, bindSceneReturn( &ClsCnj003::Scene00018Return ) );
}
void Scene00018Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00019( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 19, NONE, bindSceneReturn( &ClsCnj003::Scene00019Return ) );
}
void Scene00019Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00020( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 20, NONE, bindSceneReturn( &ClsCnj003::Scene00020Return ) );
}
void Scene00020Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00021( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 21, NONE, bindSceneReturn( &ClsCnj003::Scene00021Return ) );
}
void Scene00021Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00022( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 22, NONE, bindSceneReturn( &ClsCnj003::Scene00022Return ) );
}
void Scene00022Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00023( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 23, NONE, bindSceneReturn( &ClsCnj003::Scene00023Return ) );
}
void Scene00023Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00024( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 24, NONE, bindSceneReturn( &ClsCnj003::Scene00024Return ) );
}
void Scene00024Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00025( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 25, NONE, bindSceneReturn( &ClsCnj003::Scene00025Return ) );
}
void Scene00025Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00026( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 26, NONE, bindSceneReturn( &ClsCnj003::Scene00026Return ) );
}
void Scene00026Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00027( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 27, NONE, bindSceneReturn( &ClsCnj003::Scene00027Return ) );
}
void Scene00027Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00028( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 28, NONE, bindSceneReturn( &ClsCnj003::Scene00028Return ) );
}
void Scene00028Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00029( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 29, NONE, bindSceneReturn( &ClsCnj003::Scene00029Return ) );
}
void Scene00029Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00030( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 30, NONE, bindSceneReturn( &ClsCnj003::Scene00030Return ) );
}
void Scene00030Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00031( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 31, NONE, bindSceneReturn( &ClsCnj003::Scene00031Return ) );
}
void Scene00031Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00032( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 32, NONE, bindSceneReturn( &ClsCnj003::Scene00032Return ) );
}
void Scene00032Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00033( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 33, NONE, bindSceneReturn( &ClsCnj003::Scene00033Return ) );
}
void Scene00033Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00034( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 34, NONE, bindSceneReturn( &ClsCnj003::Scene00034Return ) );
}
void Scene00034Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00035( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 35, HIDE_HOTBAR, bindSceneReturn( &ClsCnj003::Scene00035Return ) );
}
void Scene00035Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 6, 0 );
quest.setSeq( SeqFinish );
}
//////////////////////////////////////////////////////////////////////
void Scene00036( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 36, FADE_OUT | HIDE_UI | CONDITION_CUTSCENE, bindSceneReturn( &ClsCnj003::Scene00036Return ) );
}
void Scene00036Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )
{
player.finishQuest( getId(), result.getResult( 1 ) );
}
}
};
EXPOSE_SCRIPT( ClsCnj003 );

View file

@ -0,0 +1,387 @@
// This is an automatically generated C++ script template
// Content needs to be added by hand to make it function
// In order for this script to be loaded, move it to the correct folder in <root>/scripts/
#include "Manager/EventMgr.h"
#include <Actor/Player.h>
#include <ScriptObject.h>
#include <Service.h>
#include "Actor/BNpc.h"
#include "Manager/TerritoryMgr.h"
#include "Territory/Territory.h"
// Quest Script: ClsCnj004_00093
// Quest Name: Sylphie's Trials
// Quest ID: 65629
// Start NPC: 1000692
// End NPC: 1000692
using namespace Sapphire;
class ClsCnj004 : public Sapphire::ScriptAPI::QuestScript
{
private:
// Basic quest information
// Quest vars / flags used
// BitFlag8
// UI8AL
// UI8BH
/// Countable Num: 1 Seq: 1 Event: 1 Listener: 2000891
/// Countable Num: 1 Seq: 2 Event: 5 Listener: 294
/// Countable Num: 1 Seq: 3 Event: 1 Listener: 1002961
/// Countable Num: 1 Seq: 4 Event: 1 Listener: 1002961
/// Countable Num: 1 Seq: 5 Event: 1 Listener: 2000893
/// Countable Num: 1 Seq: 6 Event: 5 Listener: 299
/// Countable Num: 1 Seq: 255 Event: 1 Listener: 1002962
// Steps in this quest ( 0 is before accepting,
// 1 is first, 255 means ready for turning it in
enum Sequence : uint8_t
{
Seq0 = 0,
Seq1 = 1,
Seq2 = 2,
Seq3 = 3,
Seq4 = 4,
Seq5 = 5,
Seq6 = 6,
SeqFinish = 255,
};
// Entities found in the script data of the quest
static constexpr auto Actor0 = 1000692;//E-Sumi-Yan
static constexpr auto Actor1 = 1002961;//Sylphie (Seq1/Seq2)
static constexpr auto Actor2 = 1002962;//Sylphie (Seq3/Seq4)
static constexpr auto Actor3 = 1002963;//Sylphie (Seq5/Seq6)
static constexpr auto Enemy0 = 3878392;
static constexpr auto Enemy1 = 3796339;
static constexpr auto Enemy2 = 3876177;
static constexpr auto Eobject0 = 2000891;//Corrupted Soil
static constexpr auto Eobject1 = 2000893;//Corrupted Air
static constexpr auto Eobject2 = 2000895;//Corrupted Water
static constexpr auto EventActionSearch = 1;
static constexpr auto LocActor0 = 1003003;
static constexpr auto LocActor1 = 1000693;
static constexpr auto LocPosActor0 = 1170797;
static constexpr auto Seq0Actor0 = 0;
static constexpr auto Seq1Actor1 = 2;
static constexpr auto Seq1Eobject0 = 1;
static constexpr auto Seq1Eobject0Eventactionno = 99;
static constexpr auto Seq1Eobject0Eventactionok = 100;
static constexpr auto Seq2Actor1 = 3;
static constexpr auto Seq3Actor2 = 5;
static constexpr auto Seq3Eobject1 = 4;
static constexpr auto Seq3Eobject1Eventactionno = 97;
static constexpr auto Seq3Eobject1Eventactionok = 98;
static constexpr auto Seq4Actor2 = 6;
static constexpr auto Seq5Actor3 = 8;
static constexpr auto Seq5Eobject2 = 7;
static constexpr auto Seq5Eobject2Eventactionno = 95;
static constexpr auto Seq5Eobject2Eventactionok = 96;
static constexpr auto Seq6Actor3 = 9;
static constexpr auto Seq7Actor0 = 10;
public:
ClsCnj004() : Sapphire::ScriptAPI::QuestScript( 65629 ){};
~ClsCnj004() = default;
//////////////////////////////////////////////////////////////////////
// Event Handlers
void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override
{
switch( actorId )
{
case Actor0:
{
if( quest.getSeq() == Seq0 )
Scene00000( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00010( quest, player );
break;
}
case Actor1:
{
if( quest.getSeq() == Seq1 )
Scene00002( quest, player );
else if( quest.getSeq() == Seq2 )
Scene00003( quest, player );
break;
}
case Actor2:
{
if( quest.getSeq() == Seq3 )
Scene00005( quest, player );
else if( quest.getSeq() == Seq4 )
Scene00006( quest, player );
break;
}
case Actor3:
{
if( quest.getSeq() == Seq5 )
Scene00008( quest, player );
else if( quest.getSeq() == Seq6 )
Scene00009( quest, player );
break;
}
case Eobject0:
{
if( quest.getSeq() == Seq1 )
Scene00096( quest, player );
break;
}
case Eobject1:
{
if( quest.getSeq() == Seq3 )
Scene00098( quest, player );
break;
}
case Eobject2:
{
if( quest.getSeq() == Seq5 )
Scene00100( quest, player );
break;
}
}
}
void onBNpcKill( World::Quest& quest, uint16_t nameId, uint32_t entityId, Sapphire::Entity::Player& player ) override
{
if( quest.getSeq() == Seq1 && entityId == Enemy0 )
{
eventMgr().sendEventNotice( player, getId(), 0, 0 );
quest.setSeq( Seq2 );
}
else if( quest.getSeq() == Seq3 && entityId == Enemy1 )
{
eventMgr().sendEventNotice( player, getId(), 2, 0 );
quest.setSeq( Seq4 );
}
else if( quest.getSeq() == Seq5 && entityId == Enemy2 )
{
eventMgr().sendEventNotice( player, getId(), 4, 0 );
quest.setSeq( Seq6 );
}
}
private:
//////////////////////////////////////////////////////////////////////
// Available Scenes in this quest, not necessarly all are used
//////////////////////////////////////////////////////////////////////
void Scene00000( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &ClsCnj004::Scene00000Return ) );
}
void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )// accept quest
{
Scene00001( quest, player );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00001( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 1, NONE, bindSceneReturn( &ClsCnj004::Scene00001Return ) );
}
void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
quest.setSeq( Seq1 );
}
//////////////////////////////////////////////////////////////////////
void Scene00002( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 2, HIDE_HOTBAR, bindSceneReturn( &ClsCnj004::Scene00002Return ) );
}
void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00003( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 3, HIDE_HOTBAR, bindSceneReturn( &ClsCnj004::Scene00003Return ) );
}
void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 1, 0 );
quest.setSeq( Seq3 );
}
//////////////////////////////////////////////////////////////////////
void Scene00004( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 4, NONE, bindSceneReturn( &ClsCnj004::Scene00004Return ) );
}
void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00005( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 5, HIDE_HOTBAR, bindSceneReturn( &ClsCnj004::Scene00005Return ) );
}
void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00006( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 6, HIDE_HOTBAR, bindSceneReturn( &ClsCnj004::Scene00006Return ) );
}
void Scene00006Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 3, 0 );
quest.setSeq( Seq5 );
}
//////////////////////////////////////////////////////////////////////
void Scene00007( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 7, NONE, bindSceneReturn( &ClsCnj004::Scene00007Return ) );
}
void Scene00007Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00008( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 8, HIDE_HOTBAR, bindSceneReturn( &ClsCnj004::Scene00008Return ) );
}
void Scene00008Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00009( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 9, HIDE_HOTBAR, bindSceneReturn( &ClsCnj004::Scene00009Return ) );
}
void Scene00009Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 5, 0 );
quest.setSeq( SeqFinish );
}
//////////////////////////////////////////////////////////////////////
void Scene00010( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 10, FADE_OUT | HIDE_UI | CONDITION_CUTSCENE, bindSceneReturn( &ClsCnj004::Scene00010Return ) );
}
void Scene00010Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )
{
player.finishQuest( getId(), result.getResult( 1 ) );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00095( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 95, NONE, bindSceneReturn( &ClsCnj004::Scene00095Return ) );
}
void Scene00095Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00096( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 96, NONE, bindSceneReturn( &ClsCnj004::Scene00096Return ) );
}
void Scene00096Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
auto teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
enemy->hateListAdd( player.getAsPlayer(), 1 );
}
//////////////////////////////////////////////////////////////////////
void Scene00097( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 97, NONE, bindSceneReturn( &ClsCnj004::Scene00097Return ) );
}
void Scene00097Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00098( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 98, NONE, bindSceneReturn( &ClsCnj004::Scene00098Return ) );
}
void Scene00098Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
auto teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
auto enemy = instance->createBNpcFromInstanceId( Enemy1, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
enemy->hateListAdd( player.getAsPlayer(), 1 );
}
//////////////////////////////////////////////////////////////////////
void Scene00099( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 99, NONE, bindSceneReturn( &ClsCnj004::Scene00099Return ) );
}
void Scene00099Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00100( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 100, NONE, bindSceneReturn( &ClsCnj004::Scene00100Return ) );
}
void Scene00100Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
auto teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
auto enemy = instance->createBNpcFromInstanceId( Enemy2, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
enemy->hateListAdd( player.getAsPlayer(), 1 );
}
};
EXPOSE_SCRIPT( ClsCnj004 );

View file

@ -0,0 +1,657 @@
// This is an automatically generated C++ script template
// Content needs to be added by hand to make it function
// In order for this script to be loaded, move it to the correct folder in <root>/scripts/
#include "Manager/EventMgr.h"
#include "Manager/TerritoryMgr.h"
#include <Actor/Player.h>
#include <ScriptObject.h>
#include <Service.h>
// Quest Script: ClsCnj005_00440
// Quest Name: Like Mother, Like Daughter
// Quest ID: 65976
// Start NPC: 1000692
// End NPC: 1000692
using namespace Sapphire;
class ClsCnj005 : public Sapphire::ScriptAPI::QuestScript
{
private:
// Basic quest information
// Quest vars / flags used
// BitFlag16
// BitFlag8
// UI8AL
/// Countable Num: 1 Seq: 1 Event: 1 Listener: 1008149
/// Countable Num: 1 Seq: 2 Event: 1 Listener: 1008147
/// Countable Num: 1 Seq: 3 Event: 1 Listener: 1008148
/// Countable Num: 1 Seq: 4 Event: 1 Listener: 1008146
/// Countable Num: 1 Seq: 255 Event: 1 Listener: 1008147
// Steps in this quest ( 0 is before accepting,
// 1 is first, 255 means ready for turning it in
enum Sequence : uint8_t
{
Seq0 = 0,
Seq1 = 1,
Seq2 = 2,
Seq3 = 3,
Seq4 = 4,
SeqFinish = 255,
};
// Entities found in the script data of the quest
static constexpr auto Actor0 = 1000692;//E-Sumi-Yan
static constexpr auto Actor1 = 1008149;//Wulfiue (Seq1/Seq2)
static constexpr auto Actor2 = 1008147;//Nolanel (Seq1/Seq2)
static constexpr auto Actor3 = 1008148;//Joacin (Seq1/Seq2)
static constexpr auto Actor4 = 1008146;//Sylphie (Seq2)
static constexpr auto Actor5 = 1008150;//Sylphie (Seq3)
static constexpr auto Actor6 = 1008151;
static constexpr auto Actor7 = 1008152;
static constexpr auto Actor8 = 1008153;
static constexpr auto Actor9 = 1008154;
static constexpr auto Actor10 = 1008155;
static constexpr auto Actor11 = 1008156;
static constexpr auto Actor12 = 1008157;//Sylphie (Seq4/SeqFinish)
static constexpr auto Actor13 = 1008158;//Nolanel (Seq4/SeqFinish)
static constexpr auto Actor14 = 1008159;//Joacin (Seq4/SeqFinish)
static constexpr auto Actor15 = 1008160;//Wulfiue (Seq4/SeqFinish)
static constexpr auto Eobject0 = 2002552;
static constexpr auto Eobject1 = 2002551;
static constexpr auto Eobject2 = 2002553;
static constexpr auto EventActionSearch = 1;
static constexpr auto LocAction1 = 1005;
static constexpr auto LocActor0 = 1003003;
static constexpr auto LocActor1 = 1000693;
static constexpr auto LocFace0 = 604;
static constexpr auto LocFace1 = 611;
static constexpr auto LocFace2 = 605;
static constexpr auto LocFace3 = 619;
static constexpr auto LocFace4 = 617;
static constexpr auto LocPosActor0 = 1170797;
static constexpr auto LocPosCam1 = 4326305;
static constexpr auto Questbattle0 = 56;
static constexpr auto Territorytype0 = 291;
public:
ClsCnj005() : Sapphire::ScriptAPI::QuestScript( 65976 ){};
~ClsCnj005() = default;
//////////////////////////////////////////////////////////////////////
// Event Handlers
void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override
{
switch( actorId )
{
case Actor0:
{
if( quest.getSeq() == Seq0 )
Scene00000( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00031( quest, player );
break;
}
case Actor1:
{
if( quest.getSeq() == Seq1 )
Scene00002( quest, player );
else if( quest.getSeq() == Seq2 )
Scene00008( quest, player );
break;
}
case Actor2:
{
if( quest.getSeq() == Seq1 )
Scene00003( quest, player );
else if( quest.getSeq() == Seq2 )
Scene00006( quest, player );
break;
}
case Actor3:
{
if( quest.getSeq() == Seq1 )
Scene00004( quest, player );
else if( quest.getSeq() == Seq2 )
Scene00007( quest, player );
break;
}
case Actor4:
{
if( quest.getSeq() == Seq2 )
Scene00005( quest, player );
break;
}
case Actor5:
{
if( quest.getSeq() == Seq3 )
{
//TODO: Selecting "Procede" causes the game to fade out, so if we don't send the player to an instance it soft-locks them.
//Scene00011( quest, player );
playerMgr().sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
eventMgr().sendEventNotice( player, getId(), 2, 0 );
quest.setSeq( Seq4 );
}
break;
}
case Actor6:
{
break;
}
case Actor7:
{
break;
}
case Actor8:
{
break;
}
case Actor9:
{
break;
}
case Actor10:
{
break;
}
case Actor11:
{
break;
}
case Actor12:
{
if( quest.getSeq() == Seq4 )
Scene00024( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00035( quest, player );
break;
}
case Actor13:
{
if( quest.getSeq() == Seq4 )
Scene00028( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00036( quest, player );
break;
}
case Actor14:
{
if( quest.getSeq() == Seq4 )
Scene00029( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00037( quest, player );
break;
}
case Actor15:
{
if( quest.getSeq() == Seq4 )
Scene00030( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00038( quest, player );
break;
}
}
}
private:
//////////////////////////////////////////////////////////////////////
// Available Scenes in this quest, not necessarly all are used
//////////////////////////////////////////////////////////////////////
void Scene00000( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 0, NONE, bindSceneReturn( &ClsCnj005::Scene00000Return ) );
}
void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )// accept quest
{
Scene00001( quest, player );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00001( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 1, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00001Return ) );
}
void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
quest.setSeq( Seq1 );
}
//////////////////////////////////////////////////////////////////////
void Scene00002( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 2, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00002Return ) );
}
void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 0, 0 );
quest.setSeq( Seq2 );
}
//////////////////////////////////////////////////////////////////////
void Scene00003( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 3, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00003Return ) );
}
void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00004( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 4, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00004Return ) );
}
void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00005( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 5, FADE_OUT | HIDE_UI | CONDITION_CUTSCENE, bindSceneReturn( &ClsCnj005::Scene00005Return ) );
}
void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 1, 0 );
quest.setSeq( Seq3 );
}
//////////////////////////////////////////////////////////////////////
void Scene00006( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 6, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00006Return ) );
}
void Scene00006Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00007( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 7, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00007Return ) );
}
void Scene00007Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00008( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 8, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00008Return ) );
}
void Scene00008Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00009( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 9, NONE, bindSceneReturn( &ClsCnj005::Scene00009Return ) );
}
void Scene00009Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00010( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 10, NONE, bindSceneReturn( &ClsCnj005::Scene00010Return ) );
}
void Scene00010Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00011( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 11, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00011Return ) );
}
void Scene00011Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )//selected "Procede"
{
//TODO: QuestBattle content
/* auto pTeriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
eventMgr().eventFinish( player, result.eventId, 0 );
pTeriMgr.createAndJoinQuestBattle( player, Questbattle0 );*/
}
}
//////////////////////////////////////////////////////////////////////
void Scene00012( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 12, NONE, bindSceneReturn( &ClsCnj005::Scene00012Return ) );
}
void Scene00012Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00013( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 13, NONE, bindSceneReturn( &ClsCnj005::Scene00013Return ) );
}
void Scene00013Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00014( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 14, NONE, bindSceneReturn( &ClsCnj005::Scene00014Return ) );
}
void Scene00014Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00015( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 15, NONE, bindSceneReturn( &ClsCnj005::Scene00015Return ) );
}
void Scene00015Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00016( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 16, NONE, bindSceneReturn( &ClsCnj005::Scene00016Return ) );
}
void Scene00016Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00017( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 17, NONE, bindSceneReturn( &ClsCnj005::Scene00017Return ) );
}
void Scene00017Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00018( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 18, NONE, bindSceneReturn( &ClsCnj005::Scene00018Return ) );
}
void Scene00018Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00019( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 19, NONE, bindSceneReturn( &ClsCnj005::Scene00019Return ) );
}
void Scene00019Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00020( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 20, NONE, bindSceneReturn( &ClsCnj005::Scene00020Return ) );
}
void Scene00020Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00021( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 21, NONE, bindSceneReturn( &ClsCnj005::Scene00021Return ) );
}
void Scene00021Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00022( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 22, NONE, bindSceneReturn( &ClsCnj005::Scene00022Return ) );
}
void Scene00022Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00023( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 23, NONE, bindSceneReturn( &ClsCnj005::Scene00023Return ) );
}
void Scene00023Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00024( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 24, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00024Return ) );
}
void Scene00024Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 3, 0 );
quest.setSeq( SeqFinish );
}
//////////////////////////////////////////////////////////////////////
void Scene00025( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 25, NONE, bindSceneReturn( &ClsCnj005::Scene00025Return ) );
}
void Scene00025Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00026( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 26, NONE, bindSceneReturn( &ClsCnj005::Scene00026Return ) );
}
void Scene00026Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00027( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 27, NONE, bindSceneReturn( &ClsCnj005::Scene00027Return ) );
}
void Scene00027Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00028( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 28, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00028Return ) );
}
void Scene00028Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00029( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 29, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00029Return ) );
}
void Scene00029Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00030( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 30, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00030Return ) );
}
void Scene00030Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00031( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 31, FADE_OUT | HIDE_UI | CONDITION_CUTSCENE, bindSceneReturn( &ClsCnj005::Scene00031Return ) );
}
void Scene00031Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )
{
player.finishQuest( getId(), result.getResult( 1 ) );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00032( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 32, NONE, bindSceneReturn( &ClsCnj005::Scene00032Return ) );
}
void Scene00032Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00033( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 33, NONE, bindSceneReturn( &ClsCnj005::Scene00033Return ) );
}
void Scene00033Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00034( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 34, NONE, bindSceneReturn( &ClsCnj005::Scene00034Return ) );
}
void Scene00034Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00035( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 35, NONE, bindSceneReturn( &ClsCnj005::Scene00035Return ) );
}
void Scene00035Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00036( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 36, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00036Return ) );
}
void Scene00036Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00037( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 37, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00037Return ) );
}
void Scene00037Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00038( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 38, HIDE_HOTBAR, bindSceneReturn( &ClsCnj005::Scene00038Return ) );
}
void Scene00038Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
};
EXPOSE_SCRIPT( ClsCnj005 );

View file

@ -0,0 +1,567 @@
// This is an automatically generated C++ script template
// Content needs to be added by hand to make it function
// In order for this script to be loaded, move it to the correct folder in <root>/scripts/
#include "Manager/EventMgr.h"
#include <Actor/Player.h>
#include <ScriptObject.h>
#include <Service.h>
#include "Actor/BNpc.h"
#include "Manager/TerritoryMgr.h"
#include "Territory/Territory.h"
// Quest Script: ClsCnj006_00441
// Quest Name: In Nature's Embrace
// Quest ID: 65977
// Start NPC: 1000692
// End NPC: 1000692
using namespace Sapphire;
class ClsCnj006 : public Sapphire::ScriptAPI::QuestScript
{
private:
// Basic quest information
// Quest vars / flags used
// BitFlag8
// UI8AL
/// Countable Num: 1 Seq: 1 Event: 1 Listener: 2000899
/// Countable Num: 1 Seq: 2 Event: 5 Listener: 294
/// Countable Num: 1 Seq: 3 Event: 1 Listener: 1002965
/// Countable Num: 1 Seq: 4 Event: 1 Listener: 1002965
/// Countable Num: 1 Seq: 5 Event: 1 Listener: 2000901
/// Countable Num: 1 Seq: 6 Event: 5 Listener: 294
/// Countable Num: 1 Seq: 7 Event: 1 Listener: 1002966
/// Countable Num: 1 Seq: 255 Event: 1 Listener: 1002966
// Steps in this quest ( 0 is before accepting,
// 1 is first, 255 means ready for turning it in
enum Sequence : uint8_t
{
Seq0 = 0,
Seq1 = 1,
Seq2 = 2,
Seq3 = 3,
Seq4 = 4,
Seq5 = 5,
Seq6 = 6,
Seq7 = 7,
SeqFinish = 255,
};
// Entities found in the script data of the quest
static constexpr auto Actor0 = 1000692;//E-Sumi-Yan
static constexpr auto Actor1 = 1002965;//Sylphie (Seq1/Seq2)
static constexpr auto Actor2 = 1002966;//Sylphie (Seq3/Seq4)
static constexpr auto Actor3 = 1002967;//Sylphie (Seq5/Seq6)
static constexpr auto Actor4 = 1002968;//Sylphie (Seq7)
static constexpr auto Enemy0 = 3876178;
static constexpr auto Enemy1 = 3876179;
static constexpr auto Enemy2 = 3876180;
static constexpr auto Eobject0 = 2000899;//Corrupted Soil (Seq1)
static constexpr auto Eobject1 = 2000901;//Corrupted Soil (Seq3)
static constexpr auto Eobject2 = 2000906;//Corrupted Soil (Seq5)
static constexpr auto Eobject3 = 2001839;
static constexpr auto EventActionSearch = 1;
static constexpr auto LocAction0 = 995;
static constexpr auto LocActor0 = 1003003;
static constexpr auto LocActor1 = 1000693;
static constexpr auto LocPosActor0 = 1170797;
static constexpr auto LocVfx = 241;
static constexpr auto LocWs = 135;
static constexpr auto NqPoint001 = 19;
static constexpr auto NqPoint002 = 20;
static constexpr auto Questbattle0 = 17;
static constexpr auto Seq0Actor0Lq = 90;
static constexpr auto Territorytype0 = 235;
public:
ClsCnj006() : Sapphire::ScriptAPI::QuestScript( 65977 ){};
~ClsCnj006() = default;
//////////////////////////////////////////////////////////////////////
// Event Handlers
void onTalk( World::Quest& quest, Entity::Player& player, uint64_t actorId ) override
{
switch( actorId )
{
case Actor0:
{
if( quest.getSeq() == Seq0 )
Scene00000( quest, player );
else if( quest.getSeq() == SeqFinish )
Scene00029( quest, player );
break;
}
case Actor1:
{
if( quest.getSeq() == Seq1 )
Scene00008( quest, player );
else if( quest.getSeq() == Seq2 )
Scene00009( quest, player );
break;
}
case Actor2:
{
if( quest.getSeq() == Seq3 )
Scene00016( quest, player );
else if( quest.getSeq() == Seq4 )
Scene00017( quest, player );
break;
}
case Actor3:
{
if( quest.getSeq() == Seq5 )
Scene00024( quest, player );
else if( quest.getSeq() == Seq6 )
Scene00025( quest, player );
break;
}
case Actor4:
{
if( quest.getSeq() == Seq7 )
{
//TODO: Selecting "Procede" causes the game to fade out, so if we don't send the player to an instance it soft-locks them.
//Scene00026( quest, player );
playerMgr().sendUrgent( player, "QuestBattle content is currently broken. The fight has been skipped for you." );
eventMgr().sendEventNotice( player, getId(), 6, 0 );
quest.setSeq( SeqFinish );
}
break;
}
case Eobject0:
{
if( quest.getSeq() == Seq1 )
Scene00003( quest, player );
break;
}
case Eobject1:
{
if( quest.getSeq() == Seq3 )
Scene00011( quest, player );
break;
}
case Eobject2:
{
if( quest.getSeq() == Seq5 )
Scene00019( quest, player );
break;
}
}
}
void onBNpcKill( World::Quest& quest, uint16_t nameId, uint32_t entityId, Sapphire::Entity::Player& player ) override
{
switch( entityId )
{
case Enemy0:
{
if( quest.getSeq() == Seq1 )
{
eventMgr().sendEventNotice( player, getId(), 0, 0 );
quest.setSeq( Seq2 );
quest.setBitFlag8( 1, false );
}
break;
}
case Enemy1:
{
if( quest.getSeq() == Seq3 )
{
eventMgr().sendEventNotice( player, getId(), 2, 0 );
quest.setSeq( Seq4 );
quest.setBitFlag8( 1, false );
}
break;
}
case Enemy2:
{
if( quest.getSeq() == Seq5 )
{
eventMgr().sendEventNotice( player, getId(), 4, 0 );
quest.setSeq( Seq6 );
quest.setBitFlag8( 1, false );
}
break;
}
}
}
private:
//////////////////////////////////////////////////////////////////////
// Available Scenes in this quest, not necessarly all are used
//////////////////////////////////////////////////////////////////////
void Scene00000( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 0, HIDE_HOTBAR, bindSceneReturn( &ClsCnj006::Scene00000Return ) );
}
void Scene00000Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )// accept quest
{
Scene00001( quest, player );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00001( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 1, FADE_OUT | HIDE_UI | CONDITION_CUTSCENE, bindSceneReturn( &ClsCnj006::Scene00001Return ) );
}
void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
quest.setSeq( Seq1 );
}
//////////////////////////////////////////////////////////////////////
void Scene00002( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 2, NONE, bindSceneReturn( &ClsCnj006::Scene00002Return ) );
}
void Scene00002Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00003( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 3, NONE, bindSceneReturn( &ClsCnj006::Scene00003Return ) );
}
void Scene00003Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
auto teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
auto enemy = instance->createBNpcFromInstanceId( Enemy0, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
enemy->hateListAdd( player.getAsPlayer(), 1 );
quest.setBitFlag8( 1, true );
}
//////////////////////////////////////////////////////////////////////
void Scene00004( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 4, NONE, bindSceneReturn( &ClsCnj006::Scene00004Return ) );
}
void Scene00004Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00005( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 5, NONE, bindSceneReturn( &ClsCnj006::Scene00005Return ) );
}
void Scene00005Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00006( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 6, NONE, bindSceneReturn( &ClsCnj006::Scene00006Return ) );
}
void Scene00006Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00007( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 7, NONE, bindSceneReturn( &ClsCnj006::Scene00007Return ) );
}
void Scene00007Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00008( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 8, NONE, bindSceneReturn( &ClsCnj006::Scene00008Return ) );
}
void Scene00008Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00009( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 9, NONE, bindSceneReturn( &ClsCnj006::Scene00009Return ) );
}
void Scene00009Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 1, 0 );
quest.setSeq( Seq3 );
}
//////////////////////////////////////////////////////////////////////
void Scene00010( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 10, NONE, bindSceneReturn( &ClsCnj006::Scene00010Return ) );
}
void Scene00010Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00011( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 11, NONE, bindSceneReturn( &ClsCnj006::Scene00011Return ) );
}
void Scene00011Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
auto teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
auto enemy = instance->createBNpcFromInstanceId( Enemy1, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
enemy->hateListAdd( player.getAsPlayer(), 1 );
quest.setBitFlag8( 1, true );
}
//////////////////////////////////////////////////////////////////////
void Scene00012( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 12, NONE, bindSceneReturn( &ClsCnj006::Scene00012Return ) );
}
void Scene00012Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00013( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 13, NONE, bindSceneReturn( &ClsCnj006::Scene00013Return ) );
}
void Scene00013Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00014( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 14, NONE, bindSceneReturn( &ClsCnj006::Scene00014Return ) );
}
void Scene00014Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00015( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 15, NONE, bindSceneReturn( &ClsCnj006::Scene00015Return ) );
}
void Scene00015Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00016( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 16, NONE, bindSceneReturn( &ClsCnj006::Scene00016Return ) );
}
void Scene00016Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00017( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 17, NONE, bindSceneReturn( &ClsCnj006::Scene00017Return ) );
}
void Scene00017Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 3, 0 );
quest.setSeq( Seq5 );
}
//////////////////////////////////////////////////////////////////////
void Scene00018( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 18, NONE, bindSceneReturn( &ClsCnj006::Scene00018Return ) );
}
void Scene00018Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00019( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 19, NONE, bindSceneReturn( &ClsCnj006::Scene00019Return ) );
}
void Scene00019Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
auto teriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
auto instance = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
auto enemy = instance->createBNpcFromInstanceId( Enemy2, 413 /*TODO: Find the right value*/, Common::BNpcType::Enemy );
enemy->hateListAdd( player.getAsPlayer(), 1 );
quest.setBitFlag8( 1, true );
}
//////////////////////////////////////////////////////////////////////
void Scene00020( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 20, NONE, bindSceneReturn( &ClsCnj006::Scene00020Return ) );
}
void Scene00020Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00021( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 21, NONE, bindSceneReturn( &ClsCnj006::Scene00021Return ) );
}
void Scene00021Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00022( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 22, NONE, bindSceneReturn( &ClsCnj006::Scene00022Return ) );
}
void Scene00022Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00023( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 23, NONE, bindSceneReturn( &ClsCnj006::Scene00023Return ) );
}
void Scene00023Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00024( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 24, NONE, bindSceneReturn( &ClsCnj006::Scene00024Return ) );
}
void Scene00024Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00025( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 25, NONE, bindSceneReturn( &ClsCnj006::Scene00025Return ) );
}
void Scene00025Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
eventMgr().sendEventNotice( player, getId(), 5, 0 );
quest.setSeq( Seq7 );
}
//////////////////////////////////////////////////////////////////////
void Scene00026( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 26, NONE, bindSceneReturn( &ClsCnj006::Scene00026Return ) );
}
void Scene00026Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )
{
//TODO: QuestBattle content
auto pTeriMgr = Common::Service< Sapphire::World::Manager::TerritoryMgr >::ref();
eventMgr().eventFinish( player, result.eventId, 0 );
pTeriMgr.createAndJoinQuestBattle( player, Questbattle0 );
}
}
//////////////////////////////////////////////////////////////////////
void Scene00027( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 27, NONE, bindSceneReturn( &ClsCnj006::Scene00027Return ) );
}
void Scene00027Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00028( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 28, NONE, bindSceneReturn( &ClsCnj006::Scene00028Return ) );
}
void Scene00028Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
}
//////////////////////////////////////////////////////////////////////
void Scene00029( World::Quest& quest, Entity::Player& player )
{
eventMgr().playQuestScene( player, getId(), 29, FADE_OUT | HIDE_UI | CONDITION_CUTSCENE, bindSceneReturn( &ClsCnj006::Scene00029Return ) );
}
void Scene00029Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
if( result.getResult( 0 ) == 1 )
{
player.finishQuest( getId(), result.getResult( 1 ) );
}
}
};
EXPOSE_SCRIPT( ClsCnj006 );

View file

@ -251,7 +251,7 @@ bool Action::Action::update()
player->setLastActionTick( tickCount );
uint32_t delayMs = 100 - lastTickMs;
castTime = ( m_castTimeMs + delayMs ); //subtract 500ms before the client begin to request actions while casting
castTime = ( m_castTimeMs + delayMs );
m_castTimeRestMs = static_cast< uint64_t >( m_castTimeMs ) - std::difftime( static_cast< time_t >( tickCount ), static_cast< time_t >( m_startTime ) );
}
@ -264,7 +264,7 @@ bool Action::Action::update()
if( m_pTarget == nullptr && m_targetId != 0 )
{
// try to search for the target actor
for( auto actor : m_pSource->getInRangeActors( true ) )
for( const auto& actor : m_pSource->getInRangeActors( true ) )
{
if( actor->getId() == m_targetId )
{
@ -274,15 +274,12 @@ bool Action::Action::update()
}
}
if( m_pTarget != nullptr )
if( m_pTarget != nullptr && !m_pTarget->isAlive() )
{
if( !m_pTarget->isAlive() )
{
// interrupt the cast if target died
setInterrupted( Common::ActionInterruptType::RegularInterrupt );
interrupt();
return true;
}
// interrupt the cast if target died
setInterrupted( Common::ActionInterruptType::RegularInterrupt );
interrupt();
return true;
}
return false;

View file

@ -51,6 +51,13 @@ void ItemAction::execute()
break;
}
case Common::ItemActionType::ItemActionMount:
{
handleMountItem();
break;
}
}
}
@ -72,4 +79,12 @@ void ItemAction::handleVFXItem()
effectPacket->addTargetEffect( effect, static_cast< uint64_t >( getSourceChara()->getId() ) );
m_pSource->sendToInRangeSet( effectPacket, true );
}
void ItemAction::handleMountItem()
{
auto player = getSourceChara()->getAsPlayer();
player->unlockMount( m_itemAction->data().Calcu0Arg[ 0 ] );
player->dropInventoryItem ( static_cast< Common::InventoryType >( m_itemSourceContainer ), m_itemSourceSlot );
}

View file

@ -27,6 +27,8 @@ namespace Sapphire::World::Action
private:
void handleVFXItem();
void handleMountItem();
private:
std::shared_ptr< Component::Excel::ExcelStruct< Component::Excel::ItemAction > > m_itemAction;

View file

@ -427,7 +427,6 @@ bool Sapphire::Entity::BNpc::moveTo( const Entity::Chara& targetChara )
void Sapphire::Entity::BNpc::sendPositionUpdate()
{
uint8_t unk1 = 0x3a;
uint8_t animationType = 2;
if( m_state == BNpcState::Combat || m_state == BNpcState::Retreat )
@ -468,7 +467,7 @@ Sapphire::Entity::CharaPtr Sapphire::Entity::BNpc::hateListGetHighest()
return nullptr;
}
void Sapphire::Entity::BNpc::hateListAdd( Sapphire::Entity::CharaPtr pChara, int32_t hateAmount )
void Sapphire::Entity::BNpc::hateListAdd( const Sapphire::Entity::CharaPtr& pChara, int32_t hateAmount )
{
auto hateEntry = std::make_shared< HateListEntry >();
hateEntry->m_hateAmount = static_cast< uint32_t >( hateAmount );
@ -482,9 +481,9 @@ void Sapphire::Entity::BNpc::hateListAdd( Sapphire::Entity::CharaPtr pChara, int
}
}
void Sapphire::Entity::BNpc::hateListUpdate( Sapphire::Entity::CharaPtr pChara, int32_t hateAmount )
void Sapphire::Entity::BNpc::hateListUpdate( const Sapphire::Entity::CharaPtr& pChara, int32_t hateAmount )
{
for( auto listEntry : m_hateList )
for( const auto& listEntry : m_hateList )
{
if( listEntry->m_pChara == pChara )
{
@ -499,9 +498,9 @@ void Sapphire::Entity::BNpc::hateListUpdate( Sapphire::Entity::CharaPtr pChara,
m_hateList.insert( hateEntry );
}
void Sapphire::Entity::BNpc::hateListRemove( Sapphire::Entity::CharaPtr pChara )
void Sapphire::Entity::BNpc::hateListRemove( const Sapphire::Entity::CharaPtr& pChara )
{
for( auto listEntry : m_hateList )
for( const auto& listEntry : m_hateList )
{
if( listEntry->m_pChara == pChara )
{
@ -517,7 +516,17 @@ void Sapphire::Entity::BNpc::hateListRemove( Sapphire::Entity::CharaPtr pChara )
}
}
bool Sapphire::Entity::BNpc::hateListHasActor( Sapphire::Entity::CharaPtr pChara )
uint32_t Sapphire::Entity::BNpc::getTriggerOwnerId() const
{
return m_triggerOwnerId;
}
void Sapphire::Entity::BNpc::setTriggerOwnerId( uint32_t triggerOwnerId )
{
m_triggerOwnerId = triggerOwnerId;
}
bool Sapphire::Entity::BNpc::hateListHasActor( const Sapphire::Entity::CharaPtr& pChara )
{
for( auto& listEntry : m_hateList )
{
@ -527,7 +536,7 @@ bool Sapphire::Entity::BNpc::hateListHasActor( Sapphire::Entity::CharaPtr pChara
return false;
}
void Sapphire::Entity::BNpc::aggro( Sapphire::Entity::CharaPtr pChara )
void Sapphire::Entity::BNpc::aggro( const Sapphire::Entity::CharaPtr& pChara )
{
auto& pRNGMgr = Common::Service< World::Manager::RNGMgr >::ref();
auto variation = static_cast< uint32_t >( pRNGMgr.getRandGenerator< float >( 500, 1000 ).next() );
@ -550,7 +559,7 @@ void Sapphire::Entity::BNpc::aggro( Sapphire::Entity::CharaPtr pChara )
}
void Sapphire::Entity::BNpc::deaggro( Sapphire::Entity::CharaPtr pChara )
void Sapphire::Entity::BNpc::deaggro( const Sapphire::Entity::CharaPtr& pChara )
{
if( !hateListHasActor( pChara ) )
hateListRemove( pChara );
@ -765,6 +774,10 @@ void Sapphire::Entity::BNpc::onDeath()
m_timeOfDeath = Util::getTimeSeconds();
setOwner( nullptr );
auto& exdData = Common::Service< Data::ExdData >::ref();
auto paramGrowthInfo = exdData.getRow< Component::Excel::ParamGrow >( m_level );
for( auto& pHateEntry : m_hateList )
{
// TODO: handle drops
@ -773,6 +786,7 @@ void Sapphire::Entity::BNpc::onDeath()
{
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
playerMgr.onMobKill( *pPlayer, static_cast< uint16_t >( m_bNpcNameId ), getLayoutId() );
pPlayer->gainExp( paramGrowthInfo->data().BaseExp );
}
}
hateListClear();
@ -843,7 +857,7 @@ void Sapphire::Entity::BNpc::checkAggro()
if( levelDiff >= 10 )
range = 0.f;
else
range = std::max< float >( 0.f, range - std::pow( 1.53f, levelDiff * 0.6f ) );
range = std::max< float >( 0.f, range - std::pow( 1.53f, static_cast< float >( levelDiff ) * 0.6f ) );
}
auto distance = Util::distance( getPos().x, getPos().y, getPos().z,
@ -858,7 +872,7 @@ void Sapphire::Entity::BNpc::checkAggro()
}
}
void Sapphire::Entity::BNpc::setOwner( Sapphire::Entity::CharaPtr m_pChara )
void Sapphire::Entity::BNpc::setOwner( const Sapphire::Entity::CharaPtr& m_pChara )
{
m_pOwner = m_pChara;
if( m_pChara != nullptr )
@ -943,8 +957,8 @@ void Sapphire::Entity::BNpc::autoAttack( CharaPtr pTarget )
void Sapphire::Entity::BNpc::calculateStats()
{
uint8_t level = getLevel();
uint8_t job = static_cast< uint8_t >( getClass() );
auto level = getLevel();
auto job = static_cast< uint8_t >( getClass() );
auto& exdData = Common::Service< Data::ExdData >::ref();

View file

@ -87,6 +87,8 @@ namespace Sapphire::Entity
uint8_t getAggressionMode() const;
uint32_t getTriggerOwnerId() const;
void setTriggerOwnerId( uint32_t triggerOwnerId );
float getNaviTargetReachedDistance() const;
@ -102,13 +104,13 @@ namespace Sapphire::Entity
void hateListClear();
CharaPtr hateListGetHighest();
void hateListAdd( CharaPtr pChara, int32_t hateAmount );
void hateListUpdate( CharaPtr pChara, int32_t hateAmount );
void hateListRemove( CharaPtr pChara );
bool hateListHasActor( CharaPtr pChara );
void hateListAdd( const CharaPtr& pChara, int32_t hateAmount );
void hateListUpdate( const CharaPtr& pChara, int32_t hateAmount );
void hateListRemove( const CharaPtr& pChara );
bool hateListHasActor( const CharaPtr& pChara );
void aggro( CharaPtr pChara );
void deaggro( CharaPtr pChara );
void aggro( const CharaPtr& pChara );
void deaggro( const CharaPtr& pChara );
void update( uint64_t tickCount ) override;
void onTick() override;
@ -126,7 +128,7 @@ namespace Sapphire::Entity
void checkAggro();
void setOwner( CharaPtr m_pChara );
void setOwner( const CharaPtr& m_pChara );
void setLevelId( uint32_t levelId );
uint32_t getLevelId() const;
@ -159,6 +161,7 @@ namespace Sapphire::Entity
uint32_t m_rank;
uint32_t m_boundInstanceId;
uint32_t m_layoutId;
uint32_t m_triggerOwnerId;
uint32_t m_flags;

View file

@ -21,7 +21,6 @@
#include "Manager/PartyMgr.h"
#include "Territory/Territory.h"
#include "Territory/ZonePosition.h"
#include "Territory/InstanceContent.h"
#include "Territory/InstanceObjectCache.h"
#include "Territory/Land.h"
@ -317,16 +316,6 @@ void Sapphire::Entity::Player::removeOnlineStatus( const std::vector< Common::On
Service< World::Manager::PlayerMgr >::ref().onOnlineStatusChanged( *this, false );
}
void Sapphire::Entity::Player::prepareZoning( uint16_t targetZone, bool fadeOut, uint8_t fadeOutTime, uint16_t animation )
{
auto preparePacket = makeZonePacket< FFXIVIpcPrepareZoning >( getId() );
preparePacket->data().targetZone = targetZone;
preparePacket->data().fadeOutTime = fadeOutTime;
preparePacket->data().animation = animation;
preparePacket->data().fadeOut = static_cast< uint8_t >( fadeOut ? 1 : 0 );
queuePacket( preparePacket );
}
void Sapphire::Entity::Player::calculateStats()
{
uint8_t tribe = getLookAt( Common::CharaLook::Tribe );
@ -456,19 +445,22 @@ void Sapphire::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type )
// TODO: this should be simplified and a type created in server_common/common.h.
if( type == 1 ) // teleport
{
prepareZoning( data.TerritoryType, true, 1, 0 ); // TODO: Really?
//prepareZoning( data.TerritoryType, true, 1, 0 ); // TODO: Really?
sendToInRangeSet( makeActorControl( getId(), WarpStart, Common::WarpType::WARP_TYPE_TELEPO ), true );
sendToInRangeSet( makeActorControl( getId(), ActorDespawnEffect, 0x04 ) );
setZoningType( Common::ZoneingType::Teleport );
}
else if( type == 2 ) // aethernet
{
prepareZoning( data.TerritoryType, true, 1, 112 );
//prepareZoning( data.TerritoryType, true, 1, 112 );
sendToInRangeSet( makeActorControl( getId(), WarpStart, Common::WarpType::WARP_TYPE_TELEPO ), true );
sendToInRangeSet( makeActorControl( getId(), ActorDespawnEffect, 0x04 ) );
setZoningType( Common::ZoneingType::Teleport );
}
else if( type == 3 ) // return
{
prepareZoning( data.TerritoryType, true, 1, 111 );
//prepareZoning( data.TerritoryType, true, 1, 111 );
sendToInRangeSet( makeActorControl( getId(), WarpStart, Common::WarpType::WARP_TYPE_HOME_POINT ), true );
sendToInRangeSet( makeActorControl( getId(), ActorDespawnEffect, 0x03 ) );
setZoningType( Common::ZoneingType::Return );
}
@ -479,65 +471,6 @@ void Sapphire::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type )
void Sapphire::Entity::Player::forceZoneing( uint32_t zoneId )
{
m_queuedZoneing = std::make_shared< QueuedZoning >( zoneId, getPos(), Util::getTimeMs(), 0.f );
//performZoning( zoneId, Common::ZoneingType::None, getPos() );
}
void Sapphire::Entity::Player::returnToHomepoint()
{
setZoningType( Common::ZoneingType::Return );
teleport( getHomepoint(), 3 );
}
void Sapphire::Entity::Player::setZone( uint32_t zoneId )
{
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
m_onEnterEventDone = false;
auto pZone = teriMgr.getZoneByTerritoryTypeId( zoneId );
if( !teriMgr.movePlayer( pZone, *this ) )
{
// todo: this will require proper handling, for now just return the player to their previous area
m_pos = m_prevPos;
m_rot = m_prevRot;
m_territoryTypeId = m_prevTerritoryTypeId;
auto pZone1 = teriMgr.getZoneByTerritoryTypeId( m_territoryTypeId );
if( !teriMgr.movePlayer( pZone1, *this ) )
return;
}
}
bool Sapphire::Entity::Player::setInstance( uint32_t instanceContentId )
{
m_onEnterEventDone = false;
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
auto instance = teriMgr.getTerritoryByGuId( instanceContentId );
if( !instance )
return false;
return setInstance( instance );
}
bool Sapphire::Entity::Player::setInstance( const TerritoryPtr& instance )
{
m_onEnterEventDone = false;
if( !instance )
return false;
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
// zoning within the same zone won't cause the prev data to be overwritten
if( instance->getTerritoryTypeId() != m_territoryTypeId )
{
auto pZone = teriMgr.getTerritoryByGuId( getTerritoryId() );
m_prevTerritoryTypeId = pZone->getTerritoryTypeId();
m_prevTerritoryId = getTerritoryId();
m_prevPos = m_pos;
m_prevRot = m_rot;
}
return teriMgr.movePlayer( instance, *this );
}
bool Sapphire::Entity::Player::setInstance( const TerritoryPtr& instance, Common::FFXIVARR_POSITION3 pos )
@ -576,18 +509,10 @@ bool Sapphire::Entity::Player::exitInstance()
resetHp();
resetMp();
// check if housing zone
if( teriMgr.isHousingTerritory( m_prevTerritoryTypeId ) )
{
if( !teriMgr.movePlayer( teriMgr.getZoneByLandSetId( m_prevTerritoryId ), *this ) )
return false;
}
else
{
auto pPrevZone = teriMgr.getZoneByTerritoryTypeId( m_prevTerritoryTypeId );
if( !teriMgr.movePlayer( pPrevZone, *this ) )
return false;
}
TerritoryPtr pTeri = teriMgr.getTerritoryByGuId( m_prevTerritoryId );
if( !teriMgr.movePlayer( pTeri, *this ) )
return false;
m_pos = m_prevPos;
m_rot = m_prevRot;
@ -752,7 +677,7 @@ void Sapphire::Entity::Player::changePosition( float x, float y, float z, float
m_queuedZoneing = std::make_shared< QueuedZoning >( getTerritoryTypeId(), pos, Util::getTimeMs(), o );
}
void Sapphire::Entity::Player::learnAction( Common::UnlockEntry unlockId )
void Sapphire::Entity::Player::setSystemActionUnlocked( Common::UnlockEntry unlockId )
{
uint16_t index;
uint8_t value;
@ -761,7 +686,7 @@ void Sapphire::Entity::Player::learnAction( Common::UnlockEntry unlockId )
m_unlocks[ index ] |= value;
queuePacket( makeActorControlSelf( getId(), ToggleActionUnlock, unlock, 1 ) );
queuePacket( makeActorControlSelf( getId(), SetSystemActionUnlocked, unlock, 1 ) );
}
void Sapphire::Entity::Player::learnSong( uint8_t songId, uint32_t itemId )
@ -1227,6 +1152,19 @@ const Sapphire::Entity::Player::OrchestrionList& Sapphire::Entity::Player::getOr
return m_orchestrion;
}
void Sapphire::Entity::Player::unlockMount( uint32_t mountId )
{
auto& exdData = Common::Service< Data::ExdData >::ref();
auto mount = exdData.getRow< Component::Excel::Mount >( mountId );
if( mount->data().MountOrder == -1 )
return;
m_mountGuide[ mount->data().MountOrder / 8 ] |= ( 1 << ( mount->data().MountOrder % 8 ) );
queuePacket( makeActorControlSelf( getId(), Network::ActorControl::SetMountBitmask, mount->data().MountOrder, 1 ) );
}
Sapphire::Entity::Player::MountList& Sapphire::Entity::Player::getMountGuideBitmask()
{
return m_mountGuide;
@ -1275,7 +1213,22 @@ void Sapphire::Entity::Player::performZoning( uint16_t zoneId, const Common::FFX
m_territoryTypeId = zoneId;
m_bMarkedForZoning = true;
setRot( rotation );
setZone( zoneId );
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
m_onEnterEventDone = false;
auto pZone = teriMgr.getZoneByTerritoryTypeId( zoneId );
if( !teriMgr.movePlayer( pZone, *this ) )
{
// todo: this will require proper handling, for now just return the player to their previous area
m_pos = m_prevPos;
m_rot = m_prevRot;
m_territoryTypeId = m_prevTerritoryTypeId;
auto pZone1 = teriMgr.getZoneByTerritoryTypeId( m_territoryTypeId );
if( !teriMgr.movePlayer( pZone1, *this ) )
return;
}
}
bool Sapphire::Entity::Player::isMarkedForZoning() const
@ -1431,6 +1384,9 @@ void Sapphire::Entity::Player::setTitle( uint16_t titleId )
void Sapphire::Entity::Player::setMaxGearSets( uint8_t amount )
{
if( amount == 1 )
amount = 5;
m_equippedMannequin = amount;
queuePacket( makeActorControlSelf( getId(), SetMaxGearSets, m_equippedMannequin ) );
@ -1458,7 +1414,7 @@ void Sapphire::Entity::Player::setMount( uint32_t mountId )
Service< World::Manager::PlayerMgr >::ref().onMountUpdate( *this, m_mount );
}
void Sapphire::Entity::Player::setCompanion( uint16_t id )
void Sapphire::Entity::Player::setCompanion( uint8_t id )
{
auto& exdData = Common::Service< Data::ExdData >::ref();
@ -1700,11 +1656,9 @@ void Sapphire::Entity::Player::sendTitleList()
queuePacket( titleListPacket );
}
void
Sapphire::Entity::Player::sendZoneInPackets( uint32_t param1, uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0,
bool shouldSetStatus = false )
void Sapphire::Entity::Player::sendZoneInPackets( uint32_t param1, bool shouldSetStatus = false )
{
auto zoneInPacket = makeActorControlSelf( getId(), Appear, param1, param2, param3, param4 );
auto zoneInPacket = makeActorControlSelf( getId(), Appear, param1, 0, 0, 0 );
auto SetStatusPacket = makeActorControl( getId(), SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) );
if( !getGmInvis() )
@ -1728,7 +1682,7 @@ void Sapphire::Entity::Player::finishZoning()
break;
case ZoneingType::Teleport:
sendZoneInPackets( 0x01, 0, 0, 110 );
sendZoneInPackets( 0x01 );
break;
case ZoneingType::Return:
@ -1739,10 +1693,10 @@ void Sapphire::Entity::Player::finishZoning()
resetHp();
resetMp();
setStatus( Common::ActorStatus::Idle );
sendZoneInPackets( 0x01, 0x01, 0, 111, true );
sendZoneInPackets( 0x01, true );
}
else
sendZoneInPackets( 0x01, 0x00, 0, 111 );
sendZoneInPackets( 0x01 );
}
break;

View file

@ -302,15 +302,6 @@ namespace Sapphire::Entity
/*! return current online status depending on current state / activity */
Common::OnlineStatus getOnlineStatus() const;
/*! sets the players zone, initiating a zoning process */
void setZone( uint32_t zoneId );
/*! sets the players instance & initiates zoning process */
bool setInstance( uint32_t instanceContentId );
/*! sets the players instance & initiates zoning process */
bool setInstance( const TerritoryPtr& instance );
/*! sets the players instance & initiates zoning process */
bool setInstance( const Sapphire::TerritoryPtr& instance, Sapphire::Common::FFXIVARR_POSITION3 pos );
@ -322,9 +313,6 @@ namespace Sapphire::Entity
void forceZoneing( uint32_t zoneId );
/*! return player to preset homepoint */
void returnToHomepoint();
/*! change position, sends update too */
void changePosition( float x, float y, float z, float o );
@ -378,9 +366,6 @@ namespace Sapphire::Entity
void setDyeingInfo( uint32_t itemToDyeContainer, uint32_t itemToDyeSlot, uint32_t dyeBagContainer, uint32_t dyeBagSlot );
void dyeItemFromDyeingInfo();
/*! prepares zoning / fades out the screen */
void prepareZoning( uint16_t targetZone, bool fadeOut, uint8_t fadeOutTime = 0, uint16_t animation = 0 );
/*! get player's title list (available titles) */
TitleList& getTitleList();
@ -411,7 +396,7 @@ namespace Sapphire::Entity
/*! mount the specified setMount and send the packets */
void setMount( uint32_t mountId );
void setCompanion( uint16_t id );
void setCompanion( uint8_t id );
uint8_t getCurrentCompanion() const;
@ -465,7 +450,7 @@ namespace Sapphire::Entity
void updateHowtosSeen( uint32_t howToId );
/*! learn an action / update the unlock bitmask. */
void learnAction( Common::UnlockEntry unlockId );
void setSystemActionUnlocked( Common::UnlockEntry unlockId );
/*! learn a song / update the unlock bitmask. */
void learnSong( uint8_t songId, uint32_t itemId );
@ -479,6 +464,9 @@ namespace Sapphire::Entity
/*! return a const pointer to the orchestrion bitmask array */
const OrchestrionList& getOrchestrionBitmask() const;
/*! unlock a mount */
void unlockMount( uint32_t mountId );
/*! return a const pointer to the setMount guide bitmask array */
MountList& getMountGuideBitmask();
@ -598,7 +586,7 @@ namespace Sapphire::Entity
/*! return true if the player is marked for zoning */
bool isMarkedForZoning() const;
void sendZoneInPackets( uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4, bool pSetStatus );
void sendZoneInPackets( uint32_t param1, bool pSetStatus );
void finishZoning();
@ -964,7 +952,7 @@ namespace Sapphire::Entity
// content finder info
uint32_t m_cfPenaltyUntil{}; // unix time
uint16_t m_companionId{};
uint8_t m_companionId{};
uint32_t m_mount;
uint32_t m_emoteMode;

View file

@ -90,7 +90,7 @@ void Sapphire::Entity::Player::updateQuest( const World::Quest& quest )
m_quests[ index ] = quest;
questMgr.onUpdateQuest( *this, index );
}
else
else if( quest.getSeq() != 0 )
addQuest( quest );
}

View file

@ -23,7 +23,8 @@ file( GLOB SERVER_SOURCE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
Territory/Housing/*.cpp
Util/*.cpp
Navi/*.cpp
Quest/*.cpp)
Task/*.cpp
Quest/*.cpp )
add_executable( world ${SERVER_SOURCE_FILES} )

View file

@ -26,7 +26,6 @@ TYPE_FORWARD( InstanceContent );
TYPE_FORWARD( QuestBattle );
TYPE_FORWARD( Item );
TYPE_FORWARD( ItemContainer );
TYPE_FORWARD( ZonePosition );
TYPE_FORWARD( Land );
TYPE_FORWARD( Linkshell );
@ -34,6 +33,7 @@ namespace World
{
TYPE_FORWARD( Session );
TYPE_FORWARD( Quest );
TYPE_FORWARD( Task );
}
namespace World::Navi

View file

@ -49,7 +49,7 @@ const uint64_t World::Manager::ChatChannelMgr::createChatChannel( Common::ChatCh
return cId.ChannelID;
}
void World::Manager::ChatChannelMgr::addPlayerToChannel( uint64_t channelId, Entity::Player& player )
void World::Manager::ChatChannelMgr::addToChannel( uint64_t channelId, Entity::Player& player )
{
if( !isChannelValid( channelId ) )
{
@ -71,7 +71,7 @@ void World::Manager::ChatChannelMgr::addPlayerToChannel( uint64_t channelId, Ent
m_channels[ channelId ].emplace_back( player.getAsPlayer() );
}
void World::Manager::ChatChannelMgr::removePlayerFromChannel( uint64_t channelId, Entity::Player& player )
void World::Manager::ChatChannelMgr::removeFromChannel( uint64_t channelId, Entity::Player& player )
{
if( !isChannelValid( channelId ) )
{

View file

@ -30,8 +30,8 @@ namespace Sapphire::World::Manager
const uint64_t createChatChannel( Common::ChatChannelType type );
void addPlayerToChannel( uint64_t channelId, Entity::Player& player );
void removePlayerFromChannel( uint64_t channelId, Entity::Player& player );
void addToChannel( uint64_t channelId, Entity::Player& player );
void removeFromChannel( uint64_t channelId, Entity::Player& player );
void sendMessageToChannel( uint64_t channelId, Entity::Player& sender, const std::string& message );

View file

@ -472,6 +472,47 @@ void Sapphire::World::Manager::DebugCommandMgr::add( char* data, Entity::Player&
pSession->getZoneConnection()->queueOutPacket( actorControl );
/*sscanf(params.c_str(), "%x %x %x %x %x %x %x", &opcode, &param1, &param2, &param3, &param4, &param5, &param6, &playerId);
Network::Packets::Server::ServerNoticePacket noticePacket( player, "Injecting ACTOR_CONTROL " + std::to_string( opcode ) );
player.queuePacket( noticePacket );
Network::Packets::Server::ActorControlSelfPacket controlPacket( player, opcode,
param1, param2, param3, param4, param5, param6, playerId );
player.queuePacket( controlPacket );*/
}
else if( subCommand == "actrls" )
{
// temporary research packet
uint32_t opcode;
uint32_t param1;
uint32_t param2;
uint32_t param3;
uint32_t param4;
uint32_t param5;
uint32_t param6;
uint32_t playerId;
sscanf( params.c_str(), "%x %x %x %x %x %x %x %x", &opcode, &playerId, &param1,
&param2, &param3, &param4, &param5, &param6 );
PlayerMgr::sendServerNotice( player, "Injecting ACTOR_CONTROL {0}", opcode );
auto actorControl = makeZonePacket< FFXIVIpcActorControlSelf >( playerId, playerId );
actorControl->data().category = static_cast< uint16_t >( opcode );
actorControl->data().param1 = param1;
actorControl->data().param2 = param2;
actorControl->data().param3 = param3;
actorControl->data().param4 = param4;
actorControl->data().param5 = param5;
actorControl->data().param6 = param6;
pSession->getZoneConnection()->queueOutPacket( actorControl );
/*sscanf(params.c_str(), "%x %x %x %x %x %x %x", &opcode, &param1, &param2, &param3, &param4, &param5, &param6, &playerId);
Network::Packets::Server::ServerNoticePacket noticePacket( player, "Injecting ACTOR_CONTROL " + std::to_string( opcode ) );
@ -488,7 +529,7 @@ void Sapphire::World::Manager::DebugCommandMgr::add( char* data, Entity::Player&
uint32_t id;
sscanf( params.c_str(), "%d", &id );
player.learnAction( static_cast< Common::UnlockEntry >( id ) );
player.setSystemActionUnlocked( static_cast< Common::UnlockEntry >( id ) );
}
else if ( subCommand == "effect")
{

View file

@ -73,7 +73,7 @@ std::string Sapphire::World::Manager::EventMgr::getEventName( uint32_t eventId )
case Event::EventHandler::EventHandlerType::Aetheryte:
{
auto aetherInfo = exdData.getRow< Component::Excel::Aetheryte >( eventId & 0xFFFF );
if( !aetherInfo->data().Telepo )
if( aetherInfo->data().Telepo )
return "Aetheryte";
return "Aethernet";
}

View file

@ -285,27 +285,24 @@ uint64_t Sapphire::World::Manager::HousingMgr::getNextHouseId()
return pQR->getUInt64( 1 ) + 1;
}
uint32_t Sapphire::World::Manager::HousingMgr::toLandSetId( uint16_t territoryTypeId, uint8_t wardId ) const
uint32_t Sapphire::World::Manager::HousingMgr::toLandSetId( int16_t territoryTypeId, int16_t wardId ) const
{
return ( static_cast< uint32_t >( territoryTypeId ) << 16 ) | wardId;
}
Sapphire::Data::HousingZonePtr Sapphire::World::Manager::HousingMgr::getHousingZoneByLandSetId( uint32_t id )
{
auto& terriMgr = Common::Service< TerritoryMgr >::ref();
return std::dynamic_pointer_cast< HousingZone >( terriMgr.getZoneByLandSetId( id ) );
}
Sapphire::LandPtr Sapphire::World::Manager::HousingMgr::getLandByOwnerId( uint64_t id )
{
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto res = db.query( "SELECT LandSetId, LandId FROM land WHERE OwnerId = " + std::to_string( id ) );
if( !res->next() )
return nullptr;
auto hZone = getHousingZoneByLandSetId( res->getUInt( 1 ) );
auto teriMgr = Common::Service< TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( res->getUInt( 1 ) );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !hZone )
return nullptr;
@ -318,8 +315,11 @@ void Sapphire::World::Manager::HousingMgr::sendLandSignOwned( Entity::Player& pl
player.setActiveLand( static_cast< uint8_t >( ident.landId ), static_cast< uint8_t >( ident.wardNum ) );
auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto hZone = getHousingZoneByLandSetId( landSetId );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto teriMgr = Common::Service< TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !hZone )
return;
@ -356,8 +356,10 @@ void Sapphire::World::Manager::HousingMgr::sendLandSignFree( Entity::Player& pla
auto& server = Common::Service< World::WorldServer >::ref();
player.setActiveLand( static_cast< uint8_t >( ident.landId ), static_cast< uint8_t >( ident.wardNum ) );
auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto hZone = getHousingZoneByLandSetId( landSetId );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto teriMgr = Common::Service< TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !hZone )
return;
@ -479,7 +481,10 @@ void Sapphire::World::Manager::HousingMgr::sendWardLandInfo( Entity::Player& pla
auto pSession = server.getSession( player.getCharacterId() );
auto landSetId = toLandSetId( territoryTypeId, wardId );
auto hZone = getHousingZoneByLandSetId( landSetId );
auto teriMgr = Common::Service< TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !hZone )
return;
@ -492,7 +497,6 @@ void Sapphire::World::Manager::HousingMgr::sendWardLandInfo( Entity::Player& pla
wardInfoPacket->data().LandSetId.worldId = 67;
for( int i = 0; i < 30; i++ )
for( int i = 0; i < 60; i++ )
{
auto land = hZone->getLand( i );
assert( land );
@ -541,8 +545,10 @@ void Sapphire::World::Manager::HousingMgr::sendWardLandInfo( Entity::Player& pla
void Sapphire::World::Manager::HousingMgr::sendEstateGreeting( Entity::Player& player, const Common::LandIdent ident )
{
auto& server = Common::Service< World::WorldServer >::ref();
auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto hZone = getHousingZoneByLandSetId( landSetId );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto teriMgr = Common::Service< TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !hZone )
return;
@ -690,8 +696,7 @@ void Sapphire::World::Manager::HousingMgr::buildPresetEstate( Entity::Player& pl
// create house
auto ident = pLand->getLandIdent();
auto house = make_House( getNextHouseId(), pLand->getLandSetId(), ident,
"Estate #" + std::to_string( ident.landId + 1 ), "" );
auto house = make_House( getNextHouseId(), pLand->getLandSetId(), ident, "Estate #" + std::to_string( ident.landId + 1 ), "" );
pLand->setHouse( house );
@ -732,8 +737,10 @@ void Sapphire::World::Manager::HousingMgr::requestEstateRename( Entity::Player&
auto& server = Common::Service< World::WorldServer >::ref();
auto pSession = server.getSession( player.getCharacterId() );
auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto hZone = getHousingZoneByLandSetId( landSetId );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto teriMgr = Common::Service< TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !hZone )
return;
@ -757,8 +764,10 @@ void Sapphire::World::Manager::HousingMgr::requestEstateEditGreeting( Entity::Pl
auto& server = Common::Service< World::WorldServer >::ref();
auto pSession = server.getSession( player.getCharacterId() );
auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto hZone = getHousingZoneByLandSetId( landSetId );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto teriMgr = Common::Service< TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !hZone )
return;
@ -781,13 +790,15 @@ void Sapphire::World::Manager::HousingMgr::requestEstateEditGreeting( Entity::Pl
void Sapphire::World::Manager::HousingMgr::updateEstateGreeting( Entity::Player& player, const Common::LandIdent ident, const std::string& greeting )
{
auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto zone = getHousingZoneByLandSetId( landSetId );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto teriMgr = Common::Service< TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !zone )
if( !hZone )
return;
auto land = zone->getLand( static_cast< uint8_t >( ident.landId ) );
auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) );
if( !land )
return;
@ -809,8 +820,10 @@ void Sapphire::World::Manager::HousingMgr::requestEstateEditGuestAccess( Entity:
auto& server = Common::Service< World::WorldServer >::ref();
auto pSession = server.getSession( player.getCharacterId() );
auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto hZone = getHousingZoneByLandSetId( landSetId );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto teriMgr = Common::Service< TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !hZone )
return;
@ -831,7 +844,7 @@ void Sapphire::World::Manager::HousingMgr::requestEstateEditGuestAccess( Entity:
Sapphire::Common::LandIdent Sapphire::World::Manager::HousingMgr::clientTriggerParamsToLandIdent( uint32_t param11, uint32_t param12, bool use16bits ) const
{
Common::LandIdent ident;
Common::LandIdent ident{};
ident.worldId = static_cast< int16_t >( param11 >> 16 );
ident.territoryTypeId = static_cast< int16_t >( param11 & 0xFFFF );
@ -865,13 +878,15 @@ void Sapphire::World::Manager::HousingMgr::sendEstateInventory( Entity::Player&
auto ident = internalZone->getLandIdent();
auto landSetId = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto exteriorZone = getHousingZoneByLandSetId( landSetId );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto teriMgr = Common::Service< TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !exteriorZone )
if( !hZone )
return;
targetLand = exteriorZone->getLand( static_cast< uint8_t >( ident.landId ) );
targetLand = hZone->getLand( static_cast< uint8_t >( ident.landId ) );
}
else
{
@ -1012,9 +1027,13 @@ void Sapphire::World::Manager::HousingMgr::reqPlaceHousingItem( Sapphire::Entity
// todo: this whole process is retarded and needs to be fixed
// perhaps maintain a list of estates by ident inside housingmgr?
auto ident = zone->getLandIdent();
auto landSet = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
land = getHousingZoneByLandSetId( landSet )->getLand( static_cast< uint8_t >( ident.landId ) );
auto teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
land = hZone->getLand( static_cast< uint8_t >( ident.landId ) );
}
// wtf?
else
@ -1084,9 +1103,13 @@ void Sapphire::World::Manager::HousingMgr::reqPlaceItemInStore( Sapphire::Entity
// todo: this whole process is retarded and needs to be fixed
// perhaps maintain a list of estates by ident inside housingmgr?
auto ident = zone->getLandIdent();
auto landSet = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
land = getHousingZoneByLandSetId( landSet )->getLand( static_cast< uint8_t >( ident.landId ) );
auto teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
land = hZone->getLand( static_cast< uint8_t >( ident.landId ) );
}
if( !hasPermission( player, *land, 0 ) )
@ -1269,8 +1292,12 @@ void Sapphire::World::Manager::HousingMgr::sendInternalEstateInventoryBatch( Sap
void Sapphire::World::Manager::HousingMgr::reqMoveHousingItem( Entity::Player& player, Common::LandIdent ident,
uint8_t slot, Common::FFXIVARR_POSITION3 pos, float rot )
{
auto landSet = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto land = getHousingZoneByLandSetId( landSet )->getLand( static_cast< uint8_t >( ident.landId ) );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) );
if( !land )
return;
@ -1278,7 +1305,6 @@ void Sapphire::World::Manager::HousingMgr::reqMoveHousingItem( Entity::Player& p
if( !hasPermission( player, *land, 0 ) )
return;
auto teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
auto pZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
// todo: what happens when either of these fail? how does the server let the client know that the moment failed
@ -1308,7 +1334,7 @@ bool Sapphire::World::Manager::HousingMgr::moveInternalItem( Entity::Player& pla
{
containerId = m_internalPlacedItemContainers.at( containerIdx );
}
catch( const std::out_of_range& ex )
catch( const std::out_of_range& )
{
return false;
}
@ -1391,8 +1417,13 @@ void Sapphire::World::Manager::HousingMgr::reqRemoveHousingItem( Sapphire::Entit
if( auto terri = std::dynamic_pointer_cast< Territory::Housing::HousingInteriorTerritory >( pZone ) )
{
auto ident = terri->getLandIdent();
auto landSet = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto land = getHousingZoneByLandSetId( landSet )->getLand( static_cast< uint8_t >( ident.landId ) );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) );
if( !land )
return;
@ -1635,8 +1666,12 @@ void Sapphire::World::Manager::HousingMgr::reqEstateInteriorRemodel( Sapphire::E
return;
auto ident = terri->getLandIdent();
auto landSet = toLandSetId( static_cast< uint16_t >( ident.territoryTypeId ), static_cast< uint8_t >( ident.wardNum ) );
auto land = getHousingZoneByLandSetId( landSet )->getLand( static_cast< uint8_t >( ident.landId ) );
auto landSetId = toLandSetId( ident.territoryTypeId, ident.wardNum );
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) );
if( !land )
return;

View file

@ -71,8 +71,7 @@ namespace Sapphire::World::Manager
bool init();
uint32_t toLandSetId( uint16_t territoryTypeId, uint8_t wardId ) const;
Sapphire::Data::HousingZonePtr getHousingZoneByLandSetId( uint32_t id );
uint32_t toLandSetId( int16_t territoryTypeId, int16_t wardId ) const;
Sapphire::LandPtr getLandByOwnerId( uint64_t id );
void sendLandSignOwned( Entity::Player& player, const Common::LandIdent ident );

View file

@ -168,7 +168,7 @@ Sapphire::LinkshellPtr Sapphire::World::Manager::LinkshellMgr::createLinkshell(
auto& chatChannelMgr = Common::Service< Manager::ChatChannelMgr >::ref();
auto chatChannelId = chatChannelMgr.createChatChannel( Common::ChatChannelType::LinkshellChat );
chatChannelMgr.addPlayerToChannel( chatChannelId, player );
chatChannelMgr.addToChannel( chatChannelId, player );
uint64_t masterId = player.getCharacterId();
@ -305,7 +305,7 @@ void LinkshellMgr::kickPlayer( Entity::Player& sourcePlayer, Entity::Player& kic
lsPtr->getName(), kickedPlayer.getName() );
server.queueForPlayer( sourcePlayer.getCharacterId(), linkshellKickResult1 );
chatChannelMgr.removePlayerFromChannel( lsPtr->getChatChannel(), kickedPlayer );
chatChannelMgr.removeFromChannel( lsPtr->getChatChannel(), kickedPlayer );
}
void LinkshellMgr::sendLinkshellList( Entity::Player& player )
@ -355,7 +355,7 @@ void LinkshellMgr::leaveLinkshell( uint64_t lsId, uint64_t characterId )
lsPtr->removeMember( characterId );
writeLinkshell( lsId );
chatChannelMgr.removePlayerFromChannel( lsPtr->getChatChannel(), *leavingPlayer );
chatChannelMgr.removeFromChannel( lsPtr->getChatChannel(), *leavingPlayer );
sendLinkshellList( *leavingPlayer );
}
@ -372,7 +372,7 @@ void LinkshellMgr::joinLinkshell( uint64_t lsId, uint64_t characterId )
lsPtr->removeInvite( characterId );
writeLinkshell( lsId );
chatChannelMgr.addPlayerToChannel( lsPtr->getChatChannel(), *joiningPlayer );
chatChannelMgr.addToChannel( lsPtr->getChatChannel(), *joiningPlayer );
sendLinkshellList( *joiningPlayer );
}

View file

@ -59,8 +59,8 @@ void Sapphire::World::Manager::PartyMgr::onJoin( uint32_t joinerId, uint32_t inv
invitingPlayer.setPartyId( partyId );
invitingPlayer.addOnlineStatus( Common::OnlineStatus::PartyLeader );
ccMgr.addPlayerToChannel( party->ChatChannel, invitingPlayer );
ccMgr.addPlayerToChannel( party->ChatChannel, inviteePlayer );
ccMgr.addToChannel( party->ChatChannel, invitingPlayer );
ccMgr.addToChannel( party->ChatChannel, inviteePlayer );
party->MemberId.push_back( invitingPlayer.getId() );
party->MemberId.push_back( inviteePlayer.getId() );
@ -75,7 +75,7 @@ void Sapphire::World::Manager::PartyMgr::onJoin( uint32_t joinerId, uint32_t inv
inviteePlayer.setPartyId( partyId );
inviteePlayer.addOnlineStatus( Common::OnlineStatus::PartyMember );
ccMgr.addPlayerToChannel( party->ChatChannel, inviteePlayer );
ccMgr.addToChannel( party->ChatChannel, inviteePlayer );
party->MemberId.push_back( inviteePlayer.getId() );
party->PartyCount++;
@ -440,6 +440,6 @@ void Sapphire::World::Manager::PartyMgr::removeMember( Sapphire::World::Manager:
{
auto& ccMgr = Common::Service< World::Manager::ChatChannelMgr >::ref();
pMember->setPartyId( 0 );
ccMgr.removePlayerFromChannel( party.ChatChannel, *pMember );
ccMgr.removeFromChannel( party.ChatChannel, *pMember );
party.MemberId.erase( std::remove( party.MemberId.begin(), party.MemberId.end(), pMember->getId() ), party.MemberId.end() );
}

View file

@ -4,7 +4,6 @@
#include <Exd/ExdData.h>
#include <Territory/ZonePosition.h>
#include <Territory/Territory.h>
#include <Manager/TerritoryMgr.h>
@ -30,6 +29,7 @@
#include "Network/PacketWrappers/HudParamPacket.h"
#include <Actor/Player.h>
#include "Territory/InstanceObjectCache.h"
using namespace Sapphire::World::Manager;
using namespace Sapphire::Network::Packets;
@ -37,61 +37,6 @@ using namespace Sapphire::Network::Packets::WorldPackets::Server;
using namespace Sapphire::Network::ActorControl;
using namespace Sapphire::Common;
void PlayerMgr::movePlayerToLandDestination( Sapphire::Entity::Player& player, uint32_t landId, uint16_t param )
{
// check if we have one in the db first
auto& terriMgr = Common::Service< TerritoryMgr >::ref();
Sapphire::TerritoryPtr destinationZone;
auto terriPos = terriMgr.getTerritoryPosition( landId );
if( terriPos )
{
// check if its a housing zone, zoning is different here
if( terriMgr.isHousingTerritory( terriPos->getTargetZoneId() ) )
{
auto& housingMgr = Common::Service< HousingMgr >::ref();
auto landSetId = housingMgr.toLandSetId( terriPos->getTargetZoneId(), param );
auto housingZone = housingMgr.getHousingZoneByLandSetId( landSetId );
if( !housingZone )
return;
destinationZone = housingZone;
}
else if( terriMgr.isInstanceContentTerritory( terriPos->getTargetZoneId() ) )
{
// todo: instance dungeon handling
// will need to use setInstance so old pos gets set
return;
}
else
{
// normal zones
destinationZone = terriMgr.getZoneByTerritoryTypeId( terriPos->getTargetZoneId() );
}
}
else
{
// todo: lookup land.exd and see if it's in there if its not in our db
return;
}
if( !destinationZone )
{
PlayerMgr::sendDebug( player, "Unable to find applicable territory for Warp#{0}. "
"Check that it exists inside zonepositions table.",
landId );
return;
}
player.setPos( terriPos->getTargetPosition() );
player.setRot( terriPos->getTargetRotation() );
terriMgr.movePlayer( destinationZone, player );
}
void PlayerMgr::onOnlineStatusChanged( Sapphire::Entity::Player& player, bool updateProfile )
{
auto& server = Common::Service< World::WorldServer >::ref();

View file

@ -10,8 +10,6 @@ class PlayerMgr
public:
PlayerMgr() = default;
void movePlayerToLandDestination( Sapphire::Entity::Player& player, uint32_t landId, uint16_t param = 0 );
void onOnlineStatusChanged( Sapphire::Entity::Player& player, bool updateProfile = true );
void onEquipDisplayFlagsChanged( Sapphire::Entity::Player& player );

View file

@ -0,0 +1,34 @@
#include <Logging/Logger.h>
#include <Service.h>
#include "TaskMgr.h"
#include "Task/Task.h"
using namespace Sapphire::World::Manager;
using namespace Sapphire::World;
void TaskMgr::update( uint64_t tickCount )
{
for( auto it = m_taskList.begin(); it != m_taskList.end(); )
{
auto pTask = *it;
// is the task ready for execution?
if( ( tickCount - pTask->getQueueTimeMs() ) >= pTask->getDelayTimeMs() )
{
pTask->execute();
it = m_taskList.erase( it );
}
else
++it;
}
m_lastTick = tickCount;
}
void TaskMgr::queueTask( const TaskPtr& pTask )
{
pTask->onQueue();
m_taskList.push_back( pTask );
}

View file

@ -3,9 +3,12 @@
#include <cstdint>
#include <string>
#include <ForwardsZone.h>
#include <Util/Util.h>
namespace Sapphire::World::Manager
{
struct QueuedWarp
{
Common::WarpType m_warpType;
@ -13,7 +16,8 @@ namespace Sapphire::World::Manager
uint16_t m_targetZoneId;
Common::FFXIVARR_POSITION3 m_targetPosition;
float m_targetRotation;
uint64_t m_delayTime;
uint64_t m_delayTimeMs;
uint64_t m_timeQueuedMs;
QueuedWarp( uint64_t characterId, Common::WarpType warpType, uint16_t targetZoneId,
const Common::FFXIVARR_POSITION3& targetPosition, float targetRotation, uint64_t delayTime ) :
@ -22,25 +26,25 @@ namespace Sapphire::World::Manager
m_targetZoneId( targetZoneId ),
m_targetPosition( targetPosition ),
m_targetRotation( targetRotation ),
m_delayTime( delayTime ),
m_delayTimeMs( delayTime ),
m_timeQueuedMs( Common::Util::getTimeMs() )
{
}
};
class WarpMgr
class TaskMgr
{
public:
WarpMgr() = default;
TaskMgr() = default;
// queue a new warp process to be executed when the delaytime (ms) expired
void queueWarp( uint64_t characterId, Common::WarpType warpType, uint16_t targetZoneId,
const Common::FFXIVARR_POSITION3& targetPosition, float targetRotation, uint64_t delayTime );
void queueTask( const TaskPtr& pTask );
void update( uint64_t tickCount );
private:
uint64_t m_lastTick;
std::vector< std::shared_ptr< QueuedWarp > > m_warpQueue;
uint64_t m_lastTick{};
std::vector< TaskPtr > m_taskList;
};

View file

@ -11,7 +11,6 @@
#include "Actor/Player.h"
#include "Territory/Territory.h"
#include "Territory/ZonePosition.h"
#include "Territory/InstanceContent.h"
#include "Territory/QuestBattle.h"
#include "TerritoryMgr.h"
@ -46,17 +45,6 @@ void Sapphire::World::Manager::TerritoryMgr::loadTerritoryTypeDetailCache()
m_territoryTypeDetailCacheMap[ id ] = teri1;
}
for( auto id : exdData.getIdList< Component::Excel::InstanceContent >() )
{
// EXD TODO: how did this work back then...
/*
auto cfc = exdData.get< Sapphire::Data::ContentFinderCondition >( id );
if( !cfc || cfc->contentLinkType != 5 )
continue;
m_questBattleToContentFinderMap[ cfc->content ] = id;
*/
}
}
bool Sapphire::World::Manager::TerritoryMgr::isValidTerritory( uint32_t territoryTypeId ) const
@ -69,7 +57,6 @@ bool Sapphire::World::Manager::TerritoryMgr::init()
try
{
loadTerritoryTypeDetailCache();
loadTerritoryPositionMap();
createDefaultTerritories();
createHousingTerritories();
@ -196,30 +183,32 @@ bool Sapphire::World::Manager::TerritoryMgr::createDefaultTerritories()
{
auto territoryTypeId = territory.first;
auto territoryInfo = territory.second;
auto& territoryData = territoryInfo->data();
// if the zone has no name set
if( territoryInfo->getString( territoryInfo->data().Name ).empty() )
if( territoryInfo->getString( territoryData.Name ).empty() )
continue;
auto pPlaceName = exdData.getRow< Component::Excel::PlaceName >( territoryInfo->data().Area );
auto pPlaceName = exdData.getRow< Component::Excel::PlaceName >( territoryData.Area );
if( !pPlaceName || pPlaceName->getString( pPlaceName->data().Text.SGL ).empty() || !isDefaultTerritory( territoryTypeId ) )
continue;
uint32_t guid = getNextInstanceId();
auto pZone = make_Territory( territoryTypeId, guid, territoryInfo->getString( territoryInfo->data().Name ), pPlaceName->getString( pPlaceName->data().Text.SGL ) );
auto pZone = make_Territory( territoryTypeId, guid, territoryInfo->getString( territoryData.Name ),
pPlaceName->getString( pPlaceName->data().Text.SGL ) );
pZone->init();
std::string bgPath = territoryInfo->getString( territoryInfo->data().LVB );
std::string bgPath = territoryInfo->getString( territoryData.LVB );
bool hasNaviMesh = pZone->getNaviProvider() != nullptr;
Logger::info( "{0}\t{1}\t{2}\t{3:<10}\t{4}\t{5}\t{6}",
territoryTypeId,
guid,
territoryInfo->data().IntendedUse,
territoryInfo->getString( territoryInfo->data().Name ),
territoryData.IntendedUse,
territoryInfo->getString( territoryData.Name ),
( isPrivateTerritory( territoryTypeId ) ? "PRIVATE" : "PUBLIC" ),
hasNaviMesh ? "NAVI" : "",
pPlaceName->getString( pPlaceName->data().Text.SGL ) );
@ -256,24 +245,23 @@ bool Sapphire::World::Manager::TerritoryMgr::createHousingTerritories()
for( wardNum = 0; wardNum < wardMaxNum; wardNum++ )
{
uint32_t guid = getNextInstanceId();
auto pHousingZone = make_HousingZone( wardNum, territoryTypeId, territoryInfo->getString( territoryInfo->data().Name ),
pPlaceName->getString( pPlaceName->data().Text.SGL ) );
pHousingZone->init();
Logger::info( "{0}\t{1}\t{2}\t{3:<10}\tHOUSING\t\t{4}#{5}",
territoryTypeId,
guid,
pHousingZone->getLandSetId(),
territoryInfo->data().IntendedUse,
territoryInfo->getString( territoryInfo->data().Name ),
pPlaceName->getString( pPlaceName->data().Text.SGL ),
wardNum );
auto pHousingZone = make_HousingZone( wardNum, territoryTypeId, guid, territoryInfo->getString( territoryInfo->data().Name ), pPlaceName->getString( pPlaceName->data().Text.SGL ) );
pHousingZone->init();
InstanceIdToTerritoryPtrMap instanceMap;
instanceMap[ guid ] = pHousingZone;
m_guIdToTerritoryPtrMap[ guid ] = pHousingZone;
m_territoryTypeIdToInstanceGuidMap[ territoryTypeId ][ guid ] = pHousingZone;
m_landSetIdToTerritoryPtrMap[ pHousingZone->getLandSetId() ] = pHousingZone;
instanceMap[ pHousingZone->getLandSetId() ] = pHousingZone;
m_guIdToTerritoryPtrMap[ pHousingZone->getLandSetId() ] = pHousingZone;
m_territoryTypeIdToInstanceGuidMap[ territoryTypeId ][ pHousingZone->getLandSetId() ] = pHousingZone;
m_territorySet.insert( { pHousingZone } );
}
@ -298,9 +286,10 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::createTerritoryIn
if( !pTeri || !pPlaceName )
return nullptr;
Logger::debug( "Starting instance for territory: {0} ({1})", territoryTypeId, pPlaceName->getString( pPlaceName->data().Text.SGL ) );
auto placeName = pPlaceName->getString( pPlaceName->data().Text.SGL );
Logger::debug( "Starting instance for territory: {0} ({1})", territoryTypeId, placeName );
auto pZone = make_Territory( territoryTypeId, getNextInstanceId(), pTeri->getString( pTeri->data().Name ), pPlaceName->getString( pPlaceName->data().Text.SGL ) );
auto pZone = make_Territory( territoryTypeId, getNextInstanceId(), pTeri->getString( pTeri->data().Name ), placeName );
pZone->init();
m_guIdToTerritoryPtrMap[ pZone->getGuId() ] = pZone;
@ -312,7 +301,6 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::createTerritoryIn
Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::createQuestBattle( uint32_t questBattleId )
{
auto& exdData = Common::Service< Data::ExdData >::ref();
auto pQuestBattleInfo = exdData.getRow< Component::Excel::QuestBattle >( questBattleId );
@ -323,36 +311,30 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::createQuestBattle
if( !pQuestInfo || pQuestInfo->getString( pQuestInfo->data().Text.Name ).empty() )
return nullptr;
uint16_t teriId = 0;
for( auto& id : exdData.getIdList< Component::Excel::TerritoryType >() )
for( auto& teriId : exdData.getIdList< Component::Excel::TerritoryType >() )
{
auto pTeri = exdData.getRow< Component::Excel::TerritoryType >( id );
if( !pTeri )
auto pTeri = exdData.getRow< Component::Excel::TerritoryType >( teriId );
if( !pTeri || pTeri->data().QuestBattle != questBattleId )
continue;
if( pTeri->data().QuestBattle == questBattleId )
{
teriId = id;
if( !isInstanceContentTerritory( teriId ) )
return nullptr;
if( !isInstanceContentTerritory( teriId ) )
return nullptr;
Logger::debug( "Starting instance for QuestBattle id: {0} ({1})",
questBattleId, pQuestInfo->getString( pQuestInfo->data().Text.Name ) );
auto questName = pQuestInfo->getString( pQuestInfo->data().Text.Name );
Logger::debug( "Starting instance for QuestBattle id: {0} ({1})", questBattleId, questName );
auto instanceId = getNextInstanceId();
auto pZone = make_QuestBattle( pQuestBattleInfo, teriId, instanceId,
pTeri->getString( pTeri->data().Name ),
pQuestInfo->getString( pQuestInfo->data().Text.Name ), questBattleId );
pZone->init();
auto instanceId = getNextInstanceId();
auto pZone = make_QuestBattle( pQuestBattleInfo, teriId, instanceId,
pTeri->getString( pTeri->data().Name ), questName, questBattleId );
pZone->init();
m_questBattleIdToInstanceMap[ questBattleId ][ pZone->getGuId() ] = pZone;
m_guIdToTerritoryPtrMap[ pZone->getGuId() ] = pZone;
m_instanceZoneSet.insert( pZone );
m_questBattleIdToInstanceMap[ questBattleId ][ pZone->getGuId() ] = pZone;
m_guIdToTerritoryPtrMap[ pZone->getGuId() ] = pZone;
m_instanceZoneSet.insert( pZone );
return pZone;
return pZone;
break;
}
}
@ -365,23 +347,21 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::createInstanceCon
auto& exdData = Common::Service< Data::ExdData >::ref();
auto pInstanceContent = exdData.getRow< Component::Excel::InstanceContent >( instanceContentId );
if( !pInstanceContent )
if( !pInstanceContent || !isInstanceContentTerritory( pInstanceContent->data().TerritoryType ) )
return nullptr;
if( !isInstanceContentTerritory( pInstanceContent->data().TerritoryType ) )
return nullptr;
auto& instanceContentData = pInstanceContent->data();
auto pTeri = getTerritoryDetail( pInstanceContent->data().TerritoryType );
auto pTeri = getTerritoryDetail( instanceContentData.TerritoryType );
std::string name = pInstanceContent->getString( pInstanceContent->data().Text.Name );
auto name = pInstanceContent->getString( instanceContentData.Text.Name );
if( !pTeri || name.empty() )
return nullptr;
Logger::debug( "Starting instance for InstanceContent id: {0} ({1})", instanceContentId, name );
auto pZone = make_InstanceContent( pInstanceContent, pInstanceContent->data().TerritoryType, getNextInstanceId(),
" ", name, instanceContentId );
auto pZone = make_InstanceContent( pInstanceContent, instanceContentData.TerritoryType, getNextInstanceId(), " ", name, instanceContentId );
pZone->init();
m_instanceContentIdToInstanceMap[ instanceContentId ][ pZone->getGuId() ] = pZone;
@ -406,13 +386,12 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::findOrCreateHousi
auto& housingMgr = Common::Service< Manager::HousingMgr >::ref();
auto parentZone = std::dynamic_pointer_cast< HousingZone >(
getZoneByLandSetId( housingMgr.toLandSetId( static_cast< uint16_t >( landIdent.territoryTypeId ),
static_cast< uint8_t >( landIdent.wardNum ) ) ) );
getTerritoryByGuId( housingMgr.toLandSetId( landIdent.territoryTypeId, landIdent.wardNum ) ) );
if( !parentZone )
return nullptr;
auto land = parentZone->getLand( landIdent.landId );
auto land = parentZone->getLand( static_cast< uint8_t >( landIdent.landId ) );
if( !land )
return nullptr;
@ -451,7 +430,7 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::findOrCreateHousi
if( !terriInfo )
return nullptr;
auto zone = World::Territory::Housing::make_HousingInteriorTerritory( landIdent, territoryTypeId,
auto zone = Territory::Housing::make_HousingInteriorTerritory( landIdent, territoryTypeId,
getNextInstanceId(), terriInfo->getString( terriInfo->data().Name ),
house->getHouseName() );
@ -471,7 +450,6 @@ bool Sapphire::World::Manager::TerritoryMgr::removeTerritoryInstance( uint32_t g
return false;
m_guIdToTerritoryPtrMap.erase( pZone->getGuId() );
m_instanceZoneSet.erase( pZone );
m_territorySet.erase( pZone );
@ -495,36 +473,6 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::getTerritoryByGuI
return it->second;
}
void Sapphire::World::Manager::TerritoryMgr::loadTerritoryPositionMap()
{
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto pQR = db.query( "SELECT id, target_zone_id, pos_x, pos_y, pos_z, pos_o, radius FROM zonepositions;" );
while( pQR->next() )
{
uint32_t id = pQR->getUInt( 1 );
uint32_t targetZoneId = pQR->getUInt( 2 );
Common::FFXIVARR_POSITION3 pos{};
pos.x = pQR->getFloat( 3 );
pos.y = pQR->getFloat( 4 );
pos.z = pQR->getFloat( 5 );
float posO = pQR->getFloat( 6 );
uint32_t radius = pQR->getUInt( 7 );
m_territoryPositionMap[ id ] = make_ZonePosition( id, targetZoneId, pos, radius, posO );
}
}
Sapphire::ZonePositionPtr Sapphire::World::Manager::TerritoryMgr::getTerritoryPosition( uint32_t territoryPositionId ) const
{
auto it = m_territoryPositionMap.find( territoryPositionId );
if( it != m_territoryPositionMap.end() )
return it->second;
return nullptr;
}
Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::getZoneByTerritoryTypeId( uint32_t territoryTypeId ) const
{
auto zoneMap = m_territoryTypeIdToInstanceGuidMap.find( territoryTypeId );
@ -535,27 +483,18 @@ Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::getZoneByTerritor
return zoneMap->second.begin()->second;
}
Sapphire::TerritoryPtr Sapphire::World::Manager::TerritoryMgr::getZoneByLandSetId( uint32_t landSetId ) const
{
auto zoneMap = m_landSetIdToTerritoryPtrMap.find( landSetId );
if( zoneMap == m_landSetIdToTerritoryPtrMap.end() )
return nullptr;
return zoneMap->second;
}
void Sapphire::World::Manager::TerritoryMgr::updateTerritoryInstances( uint64_t tickCount )
{
for( auto& zone : m_territorySet )
{
zone->update( tickCount );
}
for( auto& zone : m_instanceZoneSet )
{
zone->update( tickCount );
}
// remove internal house zones with nobody in them
for( auto it = m_landIdentToTerritoryPtrMap.begin(); it != m_landIdentToTerritoryPtrMap.end(); )
{
@ -659,17 +598,7 @@ bool Sapphire::World::Manager::TerritoryMgr::movePlayer( const TerritoryPtr& pZo
player.initSpawnIdQueue();
player.setTerritoryTypeId( pZone->getTerritoryTypeId() );
if( isHousingTerritory( pZone->getTerritoryTypeId() ) )
{
auto pHousing = std::dynamic_pointer_cast< HousingZone >( pZone );
if( pHousing )
player.setTerritoryId( pHousing->getLandSetId() );
}
else
{
player.setTerritoryId( pZone->getGuId() );
}
player.setTerritoryId( pZone->getGuId() );
bool playerLoaded = player.isLoadingComplete();
@ -731,7 +660,7 @@ void Sapphire::World::Manager::TerritoryMgr::createAndJoinQuestBattle( Entity::P
if( !qb )
return;
player.setInstance( qb );
player.setInstance( qb, { 0, 0, 0 } );
}
@ -760,7 +689,7 @@ bool Sapphire::World::Manager::TerritoryMgr::joinWorld( Sapphire::Entity::Player
else if( isInternalEstateTerritory( zoneId ) )
{
// todo: this needs to go to the area just outside of the plot door
pCurrZone = getZoneByLandSetId( player.getPrevTerritoryId() );
pCurrZone = getTerritoryByGuId( player.getPrevTerritoryId() );
zoneId = player.getPrevTerritoryTypeId();
auto prevPos = player.getPrevPos();
@ -769,7 +698,7 @@ bool Sapphire::World::Manager::TerritoryMgr::joinWorld( Sapphire::Entity::Player
}
else if( isHousingTerritory( zoneId ) )
{
pCurrZone = getZoneByLandSetId( player.getTerritoryId() );
pCurrZone = getTerritoryByGuId( player.getTerritoryId() );
}
else
{

View file

@ -70,9 +70,6 @@ namespace Sapphire::World::Manager
/*! caches TerritoryType details into m_territoryTypeMap */
void loadTerritoryTypeDetailCache();
/*! List of positions for zonelines */
void loadTerritoryPositionMap();
bool joinWorld( Entity::Player& player );
/*! returns true if the given territoryTypeId is in fact a valid zone
@ -126,16 +123,10 @@ namespace Sapphire::World::Manager
/*! loop for processing territory logic, iterating all existing instances */
void updateTerritoryInstances( uint64_t tickCount );
/*! returns a ZonePositionPtr if found, else nullptr */
ZonePositionPtr getTerritoryPosition( uint32_t territoryPositionId ) const;
/*! returns a default Zone by territoryTypeId
TODO: Mind multiple instances?! */
TerritoryPtr getZoneByTerritoryTypeId( uint32_t territoryTypeId ) const;
/*! returns a Zone by landSetId */
TerritoryPtr getZoneByLandSetId( uint32_t landSetId ) const;
bool movePlayer( const TerritoryPtr&, Entity::Player& player );
/*! returns an instancePtr if the player is still bound to an isntance */
@ -164,13 +155,11 @@ namespace Sapphire::World::Manager
private:
using TerritoryTypeDetailCache = std::unordered_map< uint16_t, std::shared_ptr< Component::Excel::ExcelStruct< Component::Excel::TerritoryType > > >;
using InstanceIdToTerritoryPtrMap = std::unordered_map< uint32_t, TerritoryPtr >;
using LandSetIdToTerritoryPtrMap = std::unordered_map< uint32_t, TerritoryPtr >;
using TerritoryTypeIdToInstanceMap = std::unordered_map< uint16_t, InstanceIdToTerritoryPtrMap >;
using InstanceContentIdToInstanceMap = std::unordered_map< uint16_t, InstanceIdToTerritoryPtrMap >;
using QuestBattleIdToInstanceMap = std::unordered_map< uint16_t, InstanceIdToTerritoryPtrMap >;
using QuestBattleIdToContentFinderCondMap = std::unordered_map< uint16_t, uint16_t >;
using PlayerIdToInstanceIdMap = std::unordered_map< uint32_t, uint32_t >;
using PositionMap = std::unordered_map< int32_t, ZonePositionPtr >;
using InstanceIdList = std::vector< uint32_t >;
using LandIdentToTerritoryPtrMap = std::unordered_map< uint64_t, TerritoryPtr >;
@ -180,9 +169,6 @@ namespace Sapphire::World::Manager
/*! map holding actual instances of default territories */
TerritoryTypeIdToInstanceMap m_territoryTypeIdToInstanceGuidMap;
/*! map holding actual instances of default territories */
LandSetIdToTerritoryPtrMap m_landSetIdToTerritoryPtrMap;
/*! map holding actual instances of InstanceContent */
InstanceContentIdToInstanceMap m_instanceContentIdToInstanceMap;
@ -192,9 +178,6 @@ namespace Sapphire::World::Manager
/*! flat map for easier lookup of instances by guid */
InstanceIdToTerritoryPtrMap m_guIdToTerritoryPtrMap;
/*! map holding positions for zonelines */
PositionMap m_territoryPositionMap;
/*! map storing playerIds to instanceIds, used for instanceContent */
PlayerIdToInstanceIdMap m_playerIdToInstanceMap;

View file

@ -481,7 +481,7 @@ void Sapphire::Network::GameConnection::handlePackets( const Sapphire::Network::
m_pSession = session;
auto pe = std::make_shared< FFXIVRawPacket >( 0x07, 0x18, 0, 0 );
*reinterpret_cast< unsigned int* >( &pe->data()[ 0 ] ) = 0xE0037603;
*reinterpret_cast< unsigned int* >( &pe->data()[ 0 ] ) = 0xE0001027;
*reinterpret_cast< unsigned int* >( &pe->data()[ 4 ] ) = Common::Util::getTimeSeconds();
sendSinglePacket( pe );
@ -490,6 +490,11 @@ void Sapphire::Network::GameConnection::handlePackets( const Sapphire::Network::
{
auto pe1 = std::make_shared< FFXIVRawPacket >( 0x02, 0x38, 0, 0 );
*reinterpret_cast< unsigned int* >( &pe1->data()[ 0 ] ) = entityId;
*reinterpret_cast< unsigned int* >( &pe1->data()[ 0x20 ] ) = entityId;
*reinterpret_cast< unsigned int* >( &pe1->data()[ 0x24 ] ) = Common::Util::getTimeSeconds();
*reinterpret_cast< unsigned int* >( &pe1->data()[ 0x0C ] ) = Common::Util::getTimeSeconds();
*reinterpret_cast< unsigned int* >( &pe1->data()[ 0x1C ] ) = Common::Util::getTimeSeconds();
*reinterpret_cast< unsigned int* >( &pe1->data()[ 0x18 ] ) = Common::Util::getTimeSeconds();
sendSinglePacket( pe1 );
Logger::info( "[{0}] Setting session for world connection", id );
session->setZoneConnection( pCon );
@ -524,7 +529,7 @@ void Sapphire::Network::GameConnection::handlePackets( const Sapphire::Network::
auto pe4 = std::make_shared< FFXIVRawPacket >( 0x08, 0x18, 0, 0 );
*reinterpret_cast< unsigned int* >( &pe4->data()[ 0 ] ) = id;
*reinterpret_cast< unsigned int* >( &pe4->data()[ 4 ] ) = timeStamp;
*reinterpret_cast< unsigned int* >( &pe4->data()[ 4 ] ) = Util::getTimeSeconds();
sendSinglePacket( pe4 );
break;

View file

@ -86,6 +86,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
auto& server = Common::Service< World::WorldServer >::ref();
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
auto& exdData = Common::Service< Data::ExdData >::ref();
const auto packet = ZoneChannelPacket< FFXIVIpcGmCommand >( inPacket );
const auto commandId = packet.data().Id;
@ -193,9 +194,9 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
case GmCommand::Call:
{
if( targetPlayer->getTerritoryTypeId() != player.getTerritoryTypeId() )
targetPlayer->setZone( player.getTerritoryTypeId() );
targetPlayer->changePosition( player.getPos().x, player.getPos().y, player.getPos().z, player.getRot() );
targetPlayer->performZoning( player.getTerritoryTypeId(), { player.getPos().x, player.getPos().y, player.getPos().z }, player.getRot() );
else
targetPlayer->changePosition( player.getPos().x, player.getPos().y, player.getPos().z, player.getRot() );
PlayerMgr::sendServerNotice( player, "Calling {0}", targetPlayer->getName() );
break;
}
@ -485,7 +486,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
break;
}
player.setInstance( instance );
player.setInstance( instance, { 0, 0, 0 } );
}
else if( !teriMgr.isValidTerritory( param1 ) )
{
@ -508,8 +509,6 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
bool doTeleport = false;
uint16_t teleport;
auto& exdData = Common::Service< Data::ExdData >::ref();
auto idList = exdData.getIdList< Component::Excel::Aetheryte >();
for( auto i : idList )
@ -517,19 +516,15 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
auto data = exdData.getRow< Component::Excel::Aetheryte >( i );
if( !data )
{
continue;
if( data->data().TerritoryType == param1 && data->data().Telepo )
{
doTeleport = true;
teleport = static_cast< uint16_t >( i );
break;
}
if( data->data().TerritoryType == param1 )
{
//if( data->data().Telepo )
{
doTeleport = true;
teleport = static_cast< uint16_t >( i );
break;
}
}
}
if( doTeleport )
{
@ -646,7 +641,7 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX
targetPlayer->resetHp();
targetPlayer->resetMp();
targetPlayer->setStatus( Common::ActorStatus::Idle );
targetPlayer->sendZoneInPackets( 0x01, 0x01, 0, 113, true );
targetPlayer->sendZoneInPackets( 0x01, true );
targetPlayer->sendToInRangeSet( makeActorControlSelf( player.getId(), Appear, 0x01, 0x01, 0, 113 ), true );
@ -658,24 +653,26 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX
}
case GmCommand::Jump:
{
player.prepareZoning( targetPlayer->getTerritoryTypeId(), true, 1, 0 );
if( pPlayerTerri->getAsInstanceContent() )
{
player.exitInstance();
}
if( targetPlayer->getTerritoryId() != player.getTerritoryId() )
{
if( pPlayerTerri->getAsInstanceContent() )
player.exitInstance();
// Checks if the target player is in an InstanceContent to avoid binding to a Territory or PublicContent
auto pInstanceContent = pTargetActorTerri->getAsInstanceContent();
if( pInstanceContent )
{
// Not sure if GMs actually get bound to an instance they jump to on retail. It's mostly here to avoid a crash for now
pInstanceContent->bindPlayer( player.getId() );
player.setInstance( pInstanceContent, { targetActor->getPos().x, targetActor->getPos().y, targetActor->getPos().z } );
}
player.setInstance( targetPlayer->getTerritoryId() );
}
player.changePosition( targetActor->getPos().x, targetActor->getPos().y, targetActor->getPos().z, targetActor->getRot() );
player.sendZoneInPackets( 0x00, 0x00, 0, 0, false );
else
{
player.changePosition( targetActor->getPos().x, targetActor->getPos().y, targetActor->getPos().z, targetActor->getRot() );
player.sendZoneInPackets( 0x00, false );
}
PlayerMgr::sendServerNotice( player, "Jumping to {0}", targetPlayer->getName() );
break;
}
@ -687,17 +684,20 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX
PlayerMgr::sendUrgent( player, "You are unable to call a player while bound to a battle instance." );
return;
}
targetPlayer->prepareZoning( player.getTerritoryTypeId(), true, 1, 0 );
if( pTargetActorTerri->getAsInstanceContent() )
{
targetPlayer->exitInstance();
}
if( targetPlayer->getTerritoryId() != player.getTerritoryId() )
{
targetPlayer->setInstance( player.getTerritoryId() );
if( pTargetActorTerri->getAsInstanceContent() )
targetPlayer->exitInstance();
targetPlayer->setInstance( pTargetActorTerri->getAsInstanceContent(), { player.getPos().x, player.getPos().y, player.getPos().z } );
}
targetPlayer->changePosition( player.getPos().x, player.getPos().y, player.getPos().z, player.getRot() );
targetPlayer->sendZoneInPackets( 0x00, 0x00, 0, 0, false );
else
{
targetPlayer->changePosition( player.getPos().x, player.getPos().y, player.getPos().z, player.getRot() );
targetPlayer->sendZoneInPackets( 0x00, false );
}
PlayerMgr::sendServerNotice( player, "Calling {0}", targetPlayer->getName() );
break;
}

View file

@ -20,6 +20,7 @@
#include "Network/PacketWrappers/PlayerSetupPacket.h"
#include "Manager/HousingMgr.h"
#include "Manager/TerritoryMgr.h"
#include "Action/Action.h"
@ -41,14 +42,17 @@ void Sapphire::Network::GameConnection::landRenameHandler( const Packets::FFXIVA
const auto packet = ZoneChannelPacket< Client::FFXIVIpcHousingHouseName >( inPacket );
auto& housingMgr = Common::Service< HousingMgr >::ref();
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
auto landSetId = housingMgr.toLandSetId( packet.data().landId.territoryTypeId, static_cast< uint8_t >( packet.data().landId.wardNum ) );
auto landSetId = housingMgr.toLandSetId( packet.data().landId.territoryTypeId, static_cast< int8_t >( packet.data().landId.wardNum ) );
auto pZone = housingMgr.getHousingZoneByLandSetId( landSetId );
if( !pZone )
auto pTeri = teriMgr.getTerritoryByGuId( landSetId );
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
if( !hZone )
return;
auto pLand = pZone->getLand( static_cast< uint8_t >( packet.data().landId.landId ) );
auto pLand = hZone->getLand( static_cast< uint8_t >( packet.data().landId.landId ) );
if( !pLand )
return;

View file

@ -237,10 +237,10 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
{
case ResurrectType::RaiseSpell:
// todo: handle raise case (set position to raiser, apply weakness status, set hp/mp/tp as well as packet)
player.returnToHomepoint();
player.teleport( player.getHomepoint(), 3 );
break;
case ResurrectType::Return:
player.returnToHomepoint();
player.teleport( player.getHomepoint(), 3 );
break;
default:
break;

View file

@ -22,7 +22,6 @@
#include "Territory/Territory.h"
#include "Territory/HousingZone.h"
#include "Territory/Land.h"
#include "Territory/ZonePosition.h"
#include "Territory/House.h"
#include "Territory/InstanceObjectCache.h"
@ -165,7 +164,7 @@ void Sapphire::Network::GameConnection::joinChatChannelHandler( const Packets::F
if( !chatChannelMgr.isChannelValid( joinChannelPacket.data().ChannelID ) )
return Logger::warn( "Failed to join chat channel - Invalid chat channel specified!" );
chatChannelMgr.addPlayerToChannel( joinChannelPacket.data().ChannelID, player );
chatChannelMgr.addToChannel( joinChannelPacket.data().ChannelID, player );
auto chatChannelResultPacket = makeZonePacket< FFXIVIpcChatChannelResult >( player.getId() );
@ -340,7 +339,8 @@ void Sapphire::Network::GameConnection::zoneJumpHandler( const Packets::FFXIVARR
pPopRange->header.transform.rotation.z,
rotation );
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), WarpStart, 0x03, player.getId(), 0x01, targetZone ) );
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), WarpStart,
Common::WarpType::WARP_TYPE_EXIT_RANGE, player.getId(), 0x01, targetZone ) );
auto moveTerritoryPacket = makeZonePacket< FFXIVIpcMoveTerritory >( player.getId() );
moveTerritoryPacket->data().index = -1;
@ -390,6 +390,7 @@ void Sapphire::Network::GameConnection::newDiscoveryHandler( const Packets::FFXI
void Sapphire::Network::GameConnection::loginHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
{
const auto packet = ZoneChannelPacket< Client::FFXIVIpcLoginHandler >( inPacket );
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
// init handler means this is a login procedure
player.setIsLogin( true );

View file

@ -61,7 +61,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
m_data.MainTarget = bnpc.getTargetId();
// no idea ... m_data.spawnerId = Common::INVALID_GAME_OBJECT_ID64;
m_data.ParentId = Common::INVALID_GAME_OBJECT_ID;
m_data.TriggerId = 0;
m_data.TriggerId = bnpc.getTriggerOwnerId();
m_data.ChannelingTarget = Common::INVALID_GAME_OBJECT_ID;
m_data.OwnerId = Common::INVALID_GAME_OBJECT_ID;

View file

@ -158,11 +158,11 @@ namespace Sapphire::ScriptAPI
{
}
void QuestScript::onWithinRange( Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z )
void QuestScript::onWithinRange( World::Quest& quest, Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z )
{
}
void QuestScript::onOutsideRange( Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z )
void QuestScript::onOutsideRange( World::Quest& quest, Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z )
{
}

View file

@ -223,9 +223,9 @@ namespace Sapphire::ScriptAPI
virtual void onEnterTerritory( World::Quest& quest, Sapphire::Entity::Player& player, uint16_t param1, uint16_t param2 );
virtual void onWithinRange( Sapphire::Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z );
virtual void onWithinRange( World::Quest& quest, Sapphire::Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z );
virtual void onOutsideRange( Sapphire::Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z );
virtual void onOutsideRange( World::Quest& quest, Sapphire::Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z );
virtual void onEventHandlerTradeReturn( Sapphire::Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param,
uint32_t catalogId );

View file

@ -264,19 +264,63 @@ bool Sapphire::Scripting::ScriptMgr::onEnterTerritory( Entity::Player& player, u
bool Sapphire::Scripting::ScriptMgr::onWithinRange( Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z )
{
auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::EventScript >( eventId );
if( !script )
return false;
script->onWithinRange( player, eventId, param1, x, y, z );
const auto eventType = static_cast< uint16_t >( eventId >> 16 );
auto& pEventMgr = Common::Service< World::Manager::EventMgr >::ref();
if( eventType == Event::EventHandler::EventHandlerType::Quest )
{
auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::QuestScript >( eventId );
if( !script )
return false;
if( player.hasQuest( eventId ) )
{
auto idx = player.getQuestIndex( eventId );
auto& quest = player.getQuestByIndex( idx );
World::Quest preQ = quest;
script->onWithinRange( quest, player, eventId, param1, x, y, z );
if( quest != preQ )
player.updateQuest( quest );
}
}
else
{
auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::EventScript >( eventId );
if( !script )
return false;
script->onWithinRange( player, eventId, param1, x, y, z );
}
return true;
}
bool Sapphire::Scripting::ScriptMgr::onOutsideRange( Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z )
{
auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::EventScript >( eventId );
if( !script )
return false;
script->onOutsideRange( player, eventId, param1, x, y, z );
const auto eventType = static_cast< uint16_t >( eventId >> 16 );
auto& pEventMgr = Common::Service< World::Manager::EventMgr >::ref();
if( eventType == Event::EventHandler::EventHandlerType::Quest )
{
auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::QuestScript >( eventId );
if( !script )
return false;
if( player.hasQuest( eventId ) )
{
auto idx = player.getQuestIndex( eventId );
auto& quest = player.getQuestByIndex( idx );
World::Quest preQ = quest;
script->onOutsideRange( quest, player, eventId, param1, x, y, z );
if( quest != preQ )
player.updateQuest( quest );
}
}
else
{
auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::EventScript >( eventId );
if( !script )
return false;
script->onOutsideRange( player, eventId, param1, x, y, z );
}
return true;
}
@ -295,7 +339,10 @@ bool Sapphire::Scripting::ScriptMgr::onEmote( Entity::Player& player, uint64_t a
{
auto idx = player.getQuestIndex( eventId );
auto& quest = player.getQuestByIndex( idx );
World::Quest preQ = quest;
script->onEmote( quest, actor, emoteId, player );
if( quest != preQ )
player.updateQuest( quest );
}
}
else

20
src/world/Task/Task.cpp Normal file
View file

@ -0,0 +1,20 @@
#include <cstdint>
#include <Util/Util.h>
#include "Task.h"
Sapphire::World::Task::Task( uint64_t delayTime ) :
m_delayTimeMs( delayTime ),
m_timeQueuedMs( Common::Util::getTimeMs() )
{
}
uint64_t Sapphire::World::Task::getQueueTimeMs() const
{
return m_timeQueuedMs;
}
uint64_t Sapphire::World::Task::getDelayTimeMs() const
{
return m_delayTimeMs;
}

27
src/world/Task/Task.h Normal file
View file

@ -0,0 +1,27 @@
#pragma once
#include <cstdint>
#include <string>
#include <ForwardsZone.h>
namespace Sapphire::World
{
class Task
{
public:
Task( uint64_t delayTime );
uint64_t getQueueTimeMs() const;
uint64_t getDelayTimeMs() const;
virtual void onQueue() = 0;
virtual void execute() = 0;
virtual std::string toString() = 0;
protected:
uint64_t m_delayTimeMs;
uint64_t m_timeQueuedMs;
};
}

Some files were not shown because too many files have changed in this diff Show more