1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-25 14:07:46 +00:00

Code style adjusted for 2 spaces and various other small things, checkout CodeStyle.xml for details

This commit is contained in:
Mordred 2018-08-29 21:40:59 +02:00
parent 34c0f74139
commit 89a9b16555
546 changed files with 51735 additions and 45827 deletions

103
CodeStyle.xml Normal file
View file

@ -0,0 +1,103 @@
<code_scheme name="Default" version="173">
<option name="AUTODETECT_INDENTS" value="false" />
<Objective-C>
<option name="INDENT_NAMESPACE_MEMBERS" value="0" />
<option name="INDENT_C_STRUCT_MEMBERS" value="2" />
<option name="INDENT_CLASS_MEMBERS" value="2" />
<option name="INDENT_INSIDE_CODE_BLOCK" value="2" />
<option name="FUNCTION_BRACE_PLACEMENT" value="2" />
<option name="BLOCK_BRACE_PLACEMENT" value="2" />
<option name="CLASS_CONSTRUCTOR_INIT_LIST_NEW_LINE_BEFORE_COLON" value="0" />
<option name="CLASS_CONSTRUCTOR_INIT_LIST_NEW_LINE_AFTER_COLON" value="1" />
<option name="SUPERCLASS_LIST_ALIGN_MULTILINE" value="false" />
<option name="SUPERCLASS_LIST_BEFORE_COLON" value="0" />
<option name="SUPERCLASS_LIST_AFTER_COLON" value="1" />
<option name="SPACE_WITHIN_TEMPLATE_DECLARATION_LTGT" value="true" />
<option name="SPACE_WITHIN_TEMPLATE_CALL_LTGT" value="true" />
<option name="SPACE_WITHIN_FUNCTION_DECLARATION_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_FUNCTION_CALL_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_LAMBDA_CAPTURE_LIST_BRACKET" value="true" />
<option name="SPACE_BEFORE_POINTER_IN_DECLARATION" value="false" />
<option name="SPACE_AFTER_POINTER_IN_DECLARATION" value="true" />
<option name="SPACE_BEFORE_REFERENCE_IN_DECLARATION" value="false" />
<option name="SPACE_AFTER_REFERENCE_IN_DECLARATION" value="true" />
<option name="SPACE_BETWEEN_ADJACENT_BRACKETS" value="true" />
<option name="DISCHARGED_SHORT_TERNARY_OPERATOR" value="true" />
</Objective-C>
<Objective-C-extensions>
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cpp" header="h" fileNamingConvention="NONE" />
<pair source="c" header="h" fileNamingConvention="NONE" />
</extensions>
</Objective-C-extensions>
<DBN-PSQL>
<case-options enabled="false">
<option name="KEYWORD_CASE" value="lower" />
<option name="FUNCTION_CASE" value="lower" />
<option name="PARAMETER_CASE" value="lower" />
<option name="DATATYPE_CASE" value="lower" />
<option name="OBJECT_CASE" value="preserve" />
</case-options>
<formatting-settings enabled="false" />
</DBN-PSQL>
<DBN-SQL>
<case-options enabled="false">
<option name="KEYWORD_CASE" value="lower" />
<option name="FUNCTION_CASE" value="lower" />
<option name="PARAMETER_CASE" value="lower" />
<option name="DATATYPE_CASE" value="lower" />
<option name="OBJECT_CASE" value="preserve" />
</case-options>
<formatting-settings enabled="false">
<option name="STATEMENT_SPACING" value="one_line" />
<option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" />
<option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" />
</formatting-settings>
</DBN-SQL>
<codeStyleSettings language="ObjectiveC">
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
<option name="BRACE_STYLE" value="2" />
<option name="CLASS_BRACE_STYLE" value="2" />
<option name="ELSE_ON_NEW_LINE" value="true" />
<option name="SPACE_AROUND_LAMBDA_ARROW" value="false" />
<option name="SPACE_WITHIN_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_IF_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_WHILE_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_FOR_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_CATCH_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_SWITCH_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_CAST_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_BRACKETS" value="true" />
<option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" />
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_WHILE_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
<option name="KEEP_SIMPLE_METHODS_IN_ONE_LINE" value="false" />
<indentOptions>
<option name="INDENT_SIZE" value="2" />
<option name="CONTINUATION_INDENT_SIZE" value="2" />
<option name="TAB_SIZE" value="2" />
</indentOptions>
</codeStyleSettings>
</code_scheme>

View file

@ -14,38 +14,41 @@
namespace Core { namespace Core {
namespace Common { namespace Common {
// 99 is the last spawn id that seems to spawn any actor // 99 is the last spawn id that seems to spawn any actor
const uint8_t MAX_DISPLAYED_ACTORS = 99; const uint8_t MAX_DISPLAYED_ACTORS = 99;
const uint8_t MAX_DISPLAYED_EOBJS = 40; const uint8_t MAX_DISPLAYED_EOBJS = 40;
const int32_t INVALID_GAME_OBJECT_ID = 0xE0000000; const int32_t INVALID_GAME_OBJECT_ID = 0xE0000000;
struct FFXIVARR_POSITION3 struct FFXIVARR_POSITION3
{ {
float x; float x;
float y; float y;
float z; float z;
}; };
enum InventoryOperation : uint8_t enum InventoryOperation :
{ uint8_t
{
Discard = 0x07, Discard = 0x07,
Move = 0x08, Move = 0x08,
Swap = 0x09, Swap = 0x09,
Merge = 0x0C, Merge = 0x0C,
Split = 0x0A Split = 0x0A
}; };
enum ClientLanguage : uint8_t enum ClientLanguage :
{ uint8_t
{
Japanese = 1, Japanese = 1,
English = 2, English = 2,
German = 4, German = 4,
French = 8 French = 8
}; };
enum ObjKind : uint8_t enum ObjKind :
{ uint8_t
{
None = 0x00, None = 0x00,
Player = 0x01, Player = 0x01,
BattleNpc = 0x02, BattleNpc = 0x02,
@ -61,26 +64,29 @@ namespace Common {
Housing = 0x0C, Housing = 0x0C,
Cutscene = 0x0D, Cutscene = 0x0D,
CardStand = 0x0E, CardStand = 0x0E,
}; };
enum Stance : uint8_t enum Stance :
{ uint8_t
{
Passive = 0, Passive = 0,
Active = 1, Active = 1,
}; };
enum class DisplayFlags : uint16_t enum class DisplayFlags :
{ uint16_t
{
ActiveStance = 0x001, ActiveStance = 0x001,
Invisible = 0x020, Invisible = 0x020,
HideHead = 0x040, HideHead = 0x040,
HideWeapon = 0x080, HideWeapon = 0x080,
Faded = 0x100, Faded = 0x100,
Visor = 0x800, Visor = 0x800,
}; };
enum struct ActorStatus : uint8_t enum struct ActorStatus :
{ uint8_t
{
Idle = 0x01, Idle = 0x01,
Dead = 0x02, Dead = 0x02,
Sitting = 0x03, Sitting = 0x03,
@ -91,10 +97,11 @@ namespace Common {
SMachine = 0x08, SMachine = 0x08,
Carry = 0x09, Carry = 0x09,
EmoteMode = 0x0B EmoteMode = 0x0B
}; };
enum GearSetSlot : uint8_t enum GearSetSlot :
{ uint8_t
{
MainHand = 0, MainHand = 0,
OffHand = 1, OffHand = 1,
Head = 2, Head = 2,
@ -109,10 +116,11 @@ namespace Common {
Ring1 = 11, Ring1 = 11,
Ring2 = 12, Ring2 = 12,
SoulCrystal = 13, SoulCrystal = 13,
}; };
enum EquipSlotCategory : uint8_t enum EquipSlotCategory :
{ uint8_t
{
Unequippable = 0, Unequippable = 0,
// main slots // main slots
@ -149,10 +157,11 @@ namespace Common {
BodyDisallowHands = 20, BodyDisallowHands = 20,
/*! Cannot equip gear to legs & feet slots */ /*! Cannot equip gear to legs & feet slots */
BodyDisallowLegsFeet = 21, BodyDisallowLegsFeet = 21,
}; };
enum InventoryType : uint16_t enum InventoryType :
{ uint16_t
{
Bag0 = 0, Bag0 = 0,
Bag1 = 1, Bag1 = 1,
Bag2 = 2, Bag2 = 2,
@ -201,20 +210,22 @@ namespace Common {
FreeCompanyBag2 = 20002, FreeCompanyBag2 = 20002,
FreeCompanyGil = 22000, FreeCompanyGil = 22000,
FreeCompanyCrystal = 22001 FreeCompanyCrystal = 22001
}; };
enum ContainerType : uint16_t enum ContainerType :
{ uint16_t
{
Unknown = 0, Unknown = 0,
Bag = 1, Bag = 1,
GearSet = 2, GearSet = 2,
CurrencyCrystal = 3, CurrencyCrystal = 3,
Armory = 4 Armory = 4
}; };
enum CurrencyType : uint8_t enum CurrencyType :
{ uint8_t
{
Gil = 0x01, Gil = 0x01,
StormSeal = 0x02, StormSeal = 0x02,
SerpentSeal = 0x03, SerpentSeal = 0x03,
@ -229,10 +240,11 @@ namespace Common {
TomestoneLaw = 0x0C, TomestoneLaw = 0x0C,
TomestoneEso = 0x0D, TomestoneEso = 0x0D,
TomestoneLore = 0x0E TomestoneLore = 0x0E
}; };
enum CrystalType : uint8_t enum CrystalType :
{ uint8_t
{
FireShard = 0x01, FireShard = 0x01,
IceShard = 0x02, IceShard = 0x02,
WindShard = 0x03, WindShard = 0x03,
@ -253,34 +265,37 @@ namespace Common {
EarthCluster = 0x10, EarthCluster = 0x10,
LightningCluster = 0x11, LightningCluster = 0x11,
WaterCluster = 0x12 WaterCluster = 0x12
}; };
enum struct ZoneingType : uint8_t enum struct ZoneingType :
{ uint8_t
{
None = 1, None = 1,
Teleport = 2, Teleport = 2,
Return = 3, Return = 3,
ReturnDead = 4, ReturnDead = 4,
FadeIn = 5, FadeIn = 5,
}; };
enum struct ResurrectType : uint8_t enum struct ResurrectType :
{ uint8_t
{
None = 0, None = 0,
RaiseSpell = 5, RaiseSpell = 5,
Return = 8 Return = 8
}; };
enum Gender : uint8_t enum Gender :
{ uint8_t
{
Male = 0, Male = 0,
Female = 1, Female = 1,
}; };
enum struct GCRank :
enum struct GCRank : uint8_t uint8_t
{ {
None = 0, None = 0,
PrivateThirdClass = 1, PrivateThirdClass = 1,
PrivateSecondClass = 2, PrivateSecondClass = 2,
@ -301,22 +316,23 @@ namespace Common {
Marshal = 17, Marshal = 17,
GrandMarshal = 18, GrandMarshal = 18,
Champion = 19, Champion = 19,
}; };
/** /**
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* Send the entire StatusEffect list * Send the entire StatusEffect list
*/ */
struct StatusEffect struct StatusEffect
{ {
uint16_t effect_id; uint16_t effect_id;
uint16_t unknown1; uint16_t unknown1;
float duration; float duration;
uint32_t sourceActorId; uint32_t sourceActorId;
}; };
enum CharaLook : uint8_t enum CharaLook :
{ uint8_t
{
Race = 0x00, Race = 0x00,
Gender = 0x01, Gender = 0x01,
Tribe = 0x04, Tribe = 0x04,
@ -344,26 +360,28 @@ namespace Common {
Facepaint = 0x18, Facepaint = 0x18,
FacepaintColor = 0x19, FacepaintColor = 0x19,
}; };
enum MoveType : uint8_t enum MoveType :
{ uint8_t
{
Running = 0x00, Running = 0x00,
Walking = 0x02, Walking = 0x02,
Strafing = 0x04, Strafing = 0x04,
Jumping = 0x10, Jumping = 0x10,
BackWalk = 0x06, BackWalk = 0x06,
}; };
enum MoveState : uint8_t enum MoveState :
{ uint8_t
{
No = 0x00, No = 0x00,
Land = 0x02, Land = 0x02,
Fall = 0x04, Fall = 0x04,
}; };
struct QuestActive struct QuestActive
{ {
QuestActive() QuestActive()
{ {
c.questId = 0; c.questId = 0;
@ -453,10 +471,11 @@ namespace Common {
}; };
}; };
enum struct ActionAspect : uint8_t enum struct ActionAspect :
{ uint8_t
{
None = 0, // Doesn't imply unaspected None = 0, // Doesn't imply unaspected
Fire = 1, Fire = 1,
Ice = 2, Ice = 2,
@ -465,10 +484,11 @@ namespace Common {
Lightning = 5, Lightning = 5,
Water = 6, Water = 6,
Unaspected = 7 // Doesn't imply magical unaspected damage - could be unaspected physical Unaspected = 7 // Doesn't imply magical unaspected damage - could be unaspected physical
}; };
enum class ActionType : int8_t enum class ActionType :
{ int8_t
{
WeaponOverride = -1, // Needs more investigation (takes the damage type of the equipped weapon)? WeaponOverride = -1, // Needs more investigation (takes the damage type of the equipped weapon)?
Unknown_0 = 0, Unknown_0 = 0,
Slashing = 1, Slashing = 1,
@ -479,10 +499,11 @@ namespace Common {
Darkness = 6, Darkness = 6,
Unknown_7 = 7, Unknown_7 = 7,
LimitBreak = 8, LimitBreak = 8,
}; };
enum ActionEffectType : uint8_t enum ActionEffectType :
{ uint8_t
{
Nothing = 0, Nothing = 0,
Miss = 1, Miss = 1,
FullResist = 2, FullResist = 2,
@ -500,27 +521,30 @@ namespace Common {
GpGain = 14, GpGain = 14,
Knockback = 33, Knockback = 33,
Mount = 38 Mount = 38
}; };
enum class ActionHitSeverityType : uint8_t enum class ActionHitSeverityType :
{ uint8_t
{
NormalDamage = 0, NormalDamage = 0,
CritHeal = 0, CritHeal = 0,
CritDamage = 1, CritDamage = 1,
NormalHeal = 1, NormalHeal = 1,
DirectHitDamage = 2, DirectHitDamage = 2,
CritDirectHitDamage = 3 CritDirectHitDamage = 3
}; };
enum ActionEffectDisplayType : uint8_t enum ActionEffectDisplayType :
{ uint8_t
{
HideActionName = 0, HideActionName = 0,
ShowActionName = 1, ShowActionName = 1,
ShowItemName = 2, ShowItemName = 2,
}; };
enum class ActionCollisionType : uint8_t enum class ActionCollisionType :
{ uint8_t
{
None, None,
SingleTarget, SingleTarget,
Circle, Circle,
@ -530,31 +554,35 @@ namespace Common {
Unknown2, Unknown2,
PersistentArea, // for when you set aoe like asylum PersistentArea, // for when you set aoe like asylum
Unknown3 Unknown3
}; };
enum HandleActionType : uint8_t enum HandleActionType :
{ uint8_t
{
Event, Event,
Spell, Spell,
Teleport Teleport
}; };
enum HandleSkillType : uint8_t enum HandleSkillType :
{ uint8_t
{
StdDamage, StdDamage,
StdHeal, StdHeal,
StdDot, StdDot,
}; };
enum InvincibilityType : uint8_t enum InvincibilityType :
{ uint8_t
{
InvincibilityNone, InvincibilityNone,
InvincibilityRefill, InvincibilityRefill,
InvincibilityStayAlive, InvincibilityStayAlive,
}; };
enum PlayerStateFlag : uint8_t enum PlayerStateFlag :
{ uint8_t
{
HideUILockChar = 0, // as the name suggests, hides the ui and logs the char... HideUILockChar = 0, // as the name suggests, hides the ui and logs the char...
InCombat = 1, // in Combat, locks gearchange/return/teleport InCombat = 1, // in Combat, locks gearchange/return/teleport
Casting = 2, Casting = 2,
@ -567,18 +595,20 @@ namespace Common {
WatchingCutscene = 50, // this is actually just a dummy, this id is different WatchingCutscene = 50, // this is actually just a dummy, this id is different
}; };
enum struct FateStatus : uint8_t enum struct FateStatus :
{ uint8_t
{
Active = 2, Active = 2,
Inactive = 4, Inactive = 4,
Preparing = 7, Preparing = 7,
Completed = 8, Completed = 8,
}; };
enum struct ChatType : uint16_t enum struct ChatType :
{ uint16_t
{
LogKindError, LogKindError,
ServerDebug, ServerDebug,
ServerUrgent, ServerUrgent,
@ -680,10 +710,11 @@ namespace Common {
Unused98, Unused98,
Unused99, Unused99,
Unused100 Unused100
}; };
enum EquipDisplayFlags : uint8_t enum EquipDisplayFlags :
{ uint8_t
{
HideNothing = 0x0, HideNothing = 0x0,
HideHead = 0x1, HideHead = 0x1,
HideWeapon = 0x2, HideWeapon = 0x2,
@ -693,15 +724,16 @@ namespace Common {
StoreCraftedItemsInInventory = 0x20, StoreCraftedItemsInInventory = 0x20,
Visor = 0x40, Visor = 0x40,
}; };
enum SkillType : uint8_t enum SkillType :
{ uint8_t
{
Normal = 0x1, Normal = 0x1,
MountSkill = 0xD, MountSkill = 0xD,
}; };
typedef std::vector< PlayerStateFlag > PlayerStateFlagList; typedef std::vector< PlayerStateFlag > PlayerStateFlagList;
} /* Common */ } /* Common */
} /* Core */ } /* Core */

View file

@ -5,37 +5,164 @@
namespace Core { namespace Core {
namespace Common { namespace Common {
bool operator==( const ActionCategory& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } bool operator==( const ActionCategory& t, const uint8_t& g )
bool operator==( const uint8_t& g, const ActionCategory& t ) { return static_cast< uint8_t >( t ) == g; } {
bool operator==( const BeastReputationRank& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } return static_cast< uint8_t >( t ) == g;
bool operator==( const uint8_t& g, const BeastReputationRank& t ) { return static_cast< uint8_t >( t ) == g; } }
bool operator==( const BeastTribe& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; }
bool operator==( const uint8_t& g, const BeastTribe& t ) { return static_cast< uint8_t >( t ) == g; } bool operator==( const uint8_t& g, const ActionCategory& t )
bool operator==( const ClassJob& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } {
bool operator==( const uint8_t& g, const ClassJob& t ) { return static_cast< uint8_t >( t ) == g; } return static_cast< uint8_t >( t ) == g;
bool operator==( const ContentType& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } }
bool operator==( const uint8_t& g, const ContentType& t ) { return static_cast< uint8_t >( t ) == g; }
bool operator==( const EmoteCategory& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } bool operator==( const BeastReputationRank& t, const uint8_t& g )
bool operator==( const uint8_t& g, const EmoteCategory& t ) { return static_cast< uint8_t >( t ) == g; } {
bool operator==( const ExVersion& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } return static_cast< uint8_t >( t ) == g;
bool operator==( const uint8_t& g, const ExVersion& t ) { return static_cast< uint8_t >( t ) == g; } }
bool operator==( const GrandCompany& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; }
bool operator==( const uint8_t& g, const GrandCompany& t ) { return static_cast< uint8_t >( t ) == g; } bool operator==( const uint8_t& g, const BeastReputationRank& t )
bool operator==( const GuardianDeity& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } {
bool operator==( const uint8_t& g, const GuardianDeity& t ) { return static_cast< uint8_t >( t ) == g; } return static_cast< uint8_t >( t ) == g;
bool operator==( const ItemUICategory& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } }
bool operator==( const uint8_t& g, const ItemUICategory& t ) { return static_cast< uint8_t >( t ) == g; }
bool operator==( const ItemSearchCategory& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } bool operator==( const BeastTribe& t, const uint8_t& g )
bool operator==( const uint8_t& g, const ItemSearchCategory& t ) { return static_cast< uint8_t >( t ) == g; } {
bool operator==( const OnlineStatus& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } return static_cast< uint8_t >( t ) == g;
bool operator==( const uint8_t& g, const OnlineStatus& t ) { return static_cast< uint8_t >( t ) == g; } }
bool operator==( const Race& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; }
bool operator==( const uint8_t& g, const Race& t ) { return static_cast< uint8_t >( t ) == g; } bool operator==( const uint8_t& g, const BeastTribe& t )
bool operator==( const Tribe& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } {
bool operator==( const uint8_t& g, const Tribe& t ) { return static_cast< uint8_t >( t ) == g; } return static_cast< uint8_t >( t ) == g;
bool operator==( const Town& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } }
bool operator==( const uint8_t& g, const Town& t ) { return static_cast< uint8_t >( t ) == g; }
bool operator==( const Weather& t, const uint8_t& g ) { return static_cast< uint8_t >( t ) == g; } bool operator==( const ClassJob& t, const uint8_t& g )
bool operator==( const uint8_t& g, const Weather& t ) { return static_cast< uint8_t >( t ) == g; } {
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const ClassJob& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const ContentType& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const ContentType& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const EmoteCategory& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const EmoteCategory& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const ExVersion& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const ExVersion& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const GrandCompany& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const GrandCompany& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const GuardianDeity& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const GuardianDeity& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const ItemUICategory& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const ItemUICategory& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const ItemSearchCategory& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const ItemSearchCategory& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const OnlineStatus& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const OnlineStatus& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const Race& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const Race& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const Tribe& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const Tribe& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const Town& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const Town& t )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const Weather& t, const uint8_t& g )
{
return static_cast< uint8_t >( t ) == g;
}
bool operator==( const uint8_t& g, const Weather& t )
{
return static_cast< uint8_t >( t ) == g;
}
} }
} }

View file

@ -9,10 +9,11 @@
namespace Core { namespace Core {
namespace Common { namespace Common {
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//ActionCategory.exd //ActionCategory.exd
enum class ActionCategory : uint8_t enum class ActionCategory :
{ uint8_t
{
Autoattack = 1, Autoattack = 1,
Spell = 2, Spell = 2,
Weaponskill = 3, Weaponskill = 3,
@ -28,12 +29,13 @@ namespace Common {
Glamour = 13, Glamour = 13,
ItemManipulation = 14, ItemManipulation = 14,
AdrenalineRush = 15, AdrenalineRush = 15,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//BeastReputationRank.exd //BeastReputationRank.exd
enum class BeastReputationRank : uint8_t enum class BeastReputationRank :
{ uint8_t
{
None = 0, None = 0,
Neutral = 1, Neutral = 1,
Recognized = 2, Recognized = 2,
@ -43,18 +45,20 @@ namespace Common {
Honored = 6, Honored = 6,
Sworn = 7, Sworn = 7,
Allied = 8, Allied = 8,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//BeastTribe.exd //BeastTribe.exd
enum class BeastTribe : uint8_t enum class BeastTribe :
{ uint8_t
}; {
};
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//ClassJob.exd //ClassJob.exd
enum class ClassJob : uint8_t enum class ClassJob :
{ uint8_t
{
Adventurer = 0, Adventurer = 0,
Gladiator = 1, Gladiator = 1,
Pugilist = 2, Pugilist = 2,
@ -91,12 +95,13 @@ namespace Common {
Astrologian = 33, Astrologian = 33,
Samurai = 34, Samurai = 34,
Redmage = 35, Redmage = 35,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//ContentType.exd //ContentType.exd
enum class ContentType : uint8_t enum class ContentType :
{ uint8_t
{
DutyRoulette = 1, DutyRoulette = 1,
Dungeons = 2, Dungeons = 2,
Guildhests = 3, Guildhests = 3,
@ -119,40 +124,44 @@ namespace Common {
DeepDungeons = 21, DeepDungeons = 21,
WondrousTails = 24, WondrousTails = 24,
CustomDeliveries = 25, CustomDeliveries = 25,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//EmoteCategory.exd //EmoteCategory.exd
enum class EmoteCategory : uint8_t enum class EmoteCategory :
{ uint8_t
{
General = 1, General = 1,
Persistent = 2, Persistent = 2,
Expressions = 3, Expressions = 3,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//ExVersion.exd //ExVersion.exd
enum class ExVersion : uint8_t enum class ExVersion :
{ uint8_t
{
ARealmReborn = 0, ARealmReborn = 0,
Heavensward = 1, Heavensward = 1,
Stormblood = 2, Stormblood = 2,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//GrandCompany.exd //GrandCompany.exd
enum class GrandCompany : uint8_t enum class GrandCompany :
{ uint8_t
{
None = 0, None = 0,
Maelstrom = 1, Maelstrom = 1,
OrderoftheTwinAdder = 2, OrderoftheTwinAdder = 2,
ImmortalFlames = 3, ImmortalFlames = 3,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//GuardianDeity.exd //GuardianDeity.exd
enum class GuardianDeity : uint8_t enum class GuardianDeity :
{ uint8_t
{
HalonetheFury = 1, HalonetheFury = 1,
MenphinatheLover = 2, MenphinatheLover = 2,
ThaliaktheScholar = 3, ThaliaktheScholar = 3,
@ -165,12 +174,13 @@ namespace Common {
NaldthaltheTraders = 10, NaldthaltheTraders = 10,
NophicatheMatron = 11, NophicatheMatron = 11,
AlthyktheKeeper = 12, AlthyktheKeeper = 12,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//ItemUICategory.exd //ItemUICategory.exd
enum class ItemUICategory : uint8_t enum class ItemUICategory :
{ uint8_t
{
PugilistsArm = 1, PugilistsArm = 1,
GladiatorsArm = 2, GladiatorsArm = 2,
MaraudersArm = 3, MaraudersArm = 3,
@ -271,12 +281,13 @@ namespace Common {
ScholarsArm = 98, ScholarsArm = 98,
FishersSecondaryTool = 99, FishersSecondaryTool = 99,
Currency = 100, Currency = 100,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//ItemSearchCategory.exd //ItemSearchCategory.exd
enum class ItemSearchCategory : uint8_t enum class ItemSearchCategory :
{ uint8_t
{
PrimaryArms = 1, PrimaryArms = 1,
PrimaryTools = 2, PrimaryTools = 2,
PrimaryTools1 = 3, PrimaryTools1 = 3,
@ -362,12 +373,13 @@ namespace Common {
SamuraisArms = 83, SamuraisArms = 83,
RedMagesArms = 84, RedMagesArms = 84,
ScholarsArms = 85, ScholarsArms = 85,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//OnlineStatus.exd //OnlineStatus.exd
enum class OnlineStatus : uint8_t enum class OnlineStatus :
{ uint8_t
{
Producer = 1, Producer = 1,
GameMaster = 2, GameMaster = 2,
GameMaster1 = 3, GameMaster1 = 3,
@ -415,24 +427,26 @@ namespace Common {
FreeCompany = 45, FreeCompany = 45,
GrandCompany = 46, GrandCompany = 46,
Online = 47, Online = 47,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//Race.exd //Race.exd
enum class Race : uint8_t enum class Race :
{ uint8_t
{
Hyur = 1, Hyur = 1,
Elezen = 2, Elezen = 2,
Lalafell = 3, Lalafell = 3,
Miqote = 4, Miqote = 4,
Roegadyn = 5, Roegadyn = 5,
AuRa = 6, AuRa = 6,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//Tribe.exd //Tribe.exd
enum class Tribe : uint8_t enum class Tribe :
{ uint8_t
{
Midlander = 1, Midlander = 1,
Highlander = 2, Highlander = 2,
Wildwood = 3, Wildwood = 3,
@ -445,24 +459,26 @@ namespace Common {
Hellsguard = 10, Hellsguard = 10,
Raen = 11, Raen = 11,
Xaela = 12, Xaela = 12,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//Town.exd //Town.exd
enum class Town : uint8_t enum class Town :
{ uint8_t
{
Nowheresville = 0, Nowheresville = 0,
LimsaLominsa = 1, LimsaLominsa = 1,
Gridania = 2, Gridania = 2,
Uldah = 3, Uldah = 3,
Ishgard = 4, Ishgard = 4,
Kugane = 7, Kugane = 7,
}; };
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
//Weather.exd //Weather.exd
enum class Weather : uint8_t enum class Weather :
{ uint8_t
{
None = 0, None = 0,
ClearSkies = 1, ClearSkies = 1,
FairSkies = 2, FairSkies = 2,
@ -554,7 +570,7 @@ namespace Common {
Thunder3 = 88, Thunder3 = 88,
DimensionalDisruption3 = 89, DimensionalDisruption3 = 89,
FairSkies9 = 90, FairSkies9 = 90,
}; };
} }
} }
#endif #endif

View file

@ -3,12 +3,12 @@
#include <boost/property_tree/ptree.hpp> #include <boost/property_tree/ptree.hpp>
namespace Core namespace Core {
class ConfigMgr
{ {
class ConfigMgr public:
{
public:
ConfigMgr() = default; ConfigMgr() = default;
~ConfigMgr() = default; ~ConfigMgr() = default;
bool loadConfig( const std::string& configName ); bool loadConfig( const std::string& configName );
@ -32,14 +32,14 @@ namespace Core
m_propTree.put( name, defaultValue ); m_propTree.put( name, defaultValue );
} }
private: private:
bool copyDefaultConfig( const std::string& configName ); bool copyDefaultConfig( const std::string& configName );
boost::property_tree::ptree m_propTree; boost::property_tree::ptree m_propTree;
const std::string m_globalConfigFile = "global.ini"; const std::string m_globalConfigFile = "global.ini";
const std::string m_configFolderRoot = "./config/"; const std::string m_configFolderRoot = "./config/";
const std::string m_configDefaultSuffix = ".default"; const std::string m_configDefaultSuffix = ".default";
}; };
} }
#endif //SAPPHIRE_CONFIGMGR_H #endif //SAPPHIRE_CONFIGMGR_H

View file

@ -1,7 +1,7 @@
/* /*
base64.cpp and base64.h base64.cpp and base64.h
Copyright (C) 2004-2008 René Nyffenegger Copyright (C) 2004-2008 Ren<EFBFBD> Nyffenegger
This source code is provided 'as-is', without any express or implied This source code is provided 'as-is', without any express or implied
warranty. In no event will the author be held liable for any damages warranty. In no event will the author be held liable for any damages
@ -21,7 +21,7 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
René Nyffenegger rene.nyffenegger@adp-gmbh.ch Ren<EFBFBD> Nyffenegger rene.nyffenegger@adp-gmbh.ch
*/ */
@ -29,32 +29,36 @@
#include <iostream> #include <iostream>
static const std::string base64_chars = static const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ" "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz" "abcdefghijklmnopqrstuvwxyz"
"0123456789+/"; "0123456789+/";
static inline bool is_base64( uint8_t c ) { static inline bool is_base64( uint8_t c )
{
return ( isalnum( c ) || ( c == '+' ) || ( c == '/' ) ); return ( isalnum( c ) || ( c == '+' ) || ( c == '/' ) );
} }
std::string Core::Util::base64_encode( uint8_t const* bytes_to_encode, uint32_t in_len ) { std::string Core::Util::base64_encode( uint8_t const* bytes_to_encode, uint32_t in_len )
{
std::string ret; std::string ret;
int32_t i = 0; int32_t i = 0;
int32_t j = 0; int32_t j = 0;
uint8_t char_array_3[3]; uint8_t char_array_3[3];
uint8_t char_array_4[4]; uint8_t char_array_4[4];
while( in_len-- ) { while( in_len-- )
char_array_3[i++] = *( bytes_to_encode++ ); {
if( i == 3 ) { char_array_3[ i++ ] = *( bytes_to_encode++ );
char_array_4[0] = ( char_array_3[0] & 0xfc ) >> 2; if( i == 3 )
char_array_4[1] = ( ( char_array_3[0] & 0x03 ) << 4 ) + ( ( char_array_3[1] & 0xf0 ) >> 4 ); {
char_array_4[2] = ( ( char_array_3[1] & 0x0f ) << 2 ) + ( ( char_array_3[2] & 0xc0 ) >> 6 ); char_array_4[ 0 ] = ( char_array_3[ 0 ] & 0xfc ) >> 2;
char_array_4[3] = char_array_3[2] & 0x3f; char_array_4[ 1 ] = ( ( char_array_3[ 0 ] & 0x03 ) << 4 ) + ( ( char_array_3[ 1 ] & 0xf0 ) >> 4 );
char_array_4[ 2 ] = ( ( char_array_3[ 1 ] & 0x0f ) << 2 ) + ( ( char_array_3[ 2 ] & 0xc0 ) >> 6 );
char_array_4[ 3 ] = char_array_3[ 2 ] & 0x3f;
for( i = 0; ( i < 4 ); i++ ) for( i = 0; ( i < 4 ); i++ )
ret += base64_chars[char_array_4[i]]; ret += base64_chars[ char_array_4[ i ] ];
i = 0; i = 0;
} }
} }
@ -62,15 +66,15 @@ std::string Core::Util::base64_encode( uint8_t const* bytes_to_encode, uint32_t
if( i ) if( i )
{ {
for( j = i; j < 3; j++ ) for( j = i; j < 3; j++ )
char_array_3[j] = '\0'; char_array_3[ j ] = '\0';
char_array_4[0] = ( char_array_3[0] & 0xfc ) >> 2; char_array_4[ 0 ] = ( char_array_3[ 0 ] & 0xfc ) >> 2;
char_array_4[1] = ( ( char_array_3[0] & 0x03 ) << 4 ) + ( ( char_array_3[1] & 0xf0 ) >> 4 ); char_array_4[ 1 ] = ( ( char_array_3[ 0 ] & 0x03 ) << 4 ) + ( ( char_array_3[ 1 ] & 0xf0 ) >> 4 );
char_array_4[2] = ( ( char_array_3[1] & 0x0f ) << 2 ) + ( ( char_array_3[2] & 0xc0 ) >> 6 ); char_array_4[ 2 ] = ( ( char_array_3[ 1 ] & 0x0f ) << 2 ) + ( ( char_array_3[ 2 ] & 0xc0 ) >> 6 );
char_array_4[3] = char_array_3[2] & 0x3f; char_array_4[ 3 ] = char_array_3[ 2 ] & 0x3f;
for( j = 0; ( j < i + 1 ); j++ ) for( j = 0; ( j < i + 1 ); j++ )
ret += base64_chars[char_array_4[j]]; ret += base64_chars[ char_array_4[ j ] ];
while( ( i++ < 3 ) ) while( ( i++ < 3 ) )
ret += '='; ret += '=';
@ -81,7 +85,8 @@ std::string Core::Util::base64_encode( uint8_t const* bytes_to_encode, uint32_t
} }
std::string Core::Util::base64_decode( std::string const& encoded_string ) { std::string Core::Util::base64_decode( std::string const& encoded_string )
{
int32_t in_len = encoded_string.size(); int32_t in_len = encoded_string.size();
int32_t i = 0; int32_t i = 0;
int32_t j = 0; int32_t j = 0;
@ -89,34 +94,39 @@ std::string Core::Util::base64_decode( std::string const& encoded_string ) {
uint8_t char_array_4[4], char_array_3[3]; uint8_t char_array_4[4], char_array_3[3];
std::string ret; std::string ret;
while( in_len-- && ( encoded_string[in_] != '=' ) && is_base64( encoded_string[in_] ) ) { while( in_len-- && ( encoded_string[ in_ ] != '=' ) && is_base64( encoded_string[ in_ ] ) )
char_array_4[i++] = encoded_string[in_]; in_++; {
if( i == 4 ) { char_array_4[ i++ ] = encoded_string[ in_ ];
in_++;
if( i == 4 )
{
for( i = 0; i < 4; i++ ) for( i = 0; i < 4; i++ )
char_array_4[i] = static_cast< uint8_t >( base64_chars.find( char_array_4[i] ) ); char_array_4[ i ] = static_cast< uint8_t >( base64_chars.find( char_array_4[ i ] ) );
char_array_3[0] = ( char_array_4[0] << 2 ) + ( ( char_array_4[1] & 0x30 ) >> 4 ); char_array_3[ 0 ] = ( char_array_4[ 0 ] << 2 ) + ( ( char_array_4[ 1 ] & 0x30 ) >> 4 );
char_array_3[1] = ( ( char_array_4[1] & 0xf ) << 4 ) + ( ( char_array_4[2] & 0x3c ) >> 2 ); char_array_3[ 1 ] = ( ( char_array_4[ 1 ] & 0xf ) << 4 ) + ( ( char_array_4[ 2 ] & 0x3c ) >> 2 );
char_array_3[2] = ( ( char_array_4[2] & 0x3 ) << 6 ) + char_array_4[3]; char_array_3[ 2 ] = ( ( char_array_4[ 2 ] & 0x3 ) << 6 ) + char_array_4[ 3 ];
for( i = 0; ( i < 3 ); i++ ) for( i = 0; ( i < 3 ); i++ )
ret += char_array_3[i]; ret += char_array_3[ i ];
i = 0; i = 0;
} }
} }
if( i ) { if( i )
{
for( j = i; j < 4; j++ ) for( j = i; j < 4; j++ )
char_array_4[j] = 0; char_array_4[ j ] = 0;
for( j = 0; j < 4; j++ ) for( j = 0; j < 4; j++ )
char_array_4[j] = static_cast< uint8_t >( base64_chars.find( char_array_4[j] ) ); char_array_4[ j ] = static_cast< uint8_t >( base64_chars.find( char_array_4[ j ] ) );
char_array_3[0] = ( char_array_4[0] << 2 ) + ( ( char_array_4[1] & 0x30 ) >> 4 ); char_array_3[ 0 ] = ( char_array_4[ 0 ] << 2 ) + ( ( char_array_4[ 1 ] & 0x30 ) >> 4 );
char_array_3[1] = ( ( char_array_4[1] & 0xf ) << 4 ) + ( ( char_array_4[2] & 0x3c ) >> 2 ); char_array_3[ 1 ] = ( ( char_array_4[ 1 ] & 0xf ) << 4 ) + ( ( char_array_4[ 2 ] & 0x3c ) >> 2 );
char_array_3[2] = ( ( char_array_4[2] & 0x3 ) << 6 ) + char_array_4[3]; char_array_3[ 2 ] = ( ( char_array_4[ 2 ] & 0x3 ) << 6 ) + char_array_4[ 3 ];
for( j = 0; ( j < i - 1 ); j++ ) ret += char_array_3[j]; for( j = 0; ( j < i - 1 ); j++ )
ret += char_array_3[ j ];
} }
return ret; return ret;

View file

@ -1,11 +1,10 @@
#include <string> #include <string>
namespace Core namespace Core {
{ namespace Util {
namespace Util std::string base64_encode( uint8_t const*, uint32_t len );
{
std::string base64_encode( uint8_t const*, uint32_t len ); std::string base64_decode( std::string const& s );
std::string base64_decode( std::string const& s ); }
}
} }

View file

@ -8,86 +8,102 @@
#include "blowfish.h" #include "blowfish.h"
#include "blowfish.h2" // holds the random digit tables #include "blowfish.h2" // holds the random digit tables
#define S(x,i) (SBoxes[i][x.w.byte##i]) #define S( x, i ) (SBoxes[i][x.w.byte##i])
#define bf_F(x) (((S(x,0) + S(x,1)) ^ S(x,2)) + S(x,3)) #define bf_F( x ) (((S(x,0) + S(x,1)) ^ S(x,2)) + S(x,3))
#define ROUND(a,b,n) (a.dword ^= bf_F(b) ^ PArray[n]) #define ROUND( a, b, n ) (a.dword ^= bf_F(b) ^ PArray[n])
BlowFish::BlowFish () BlowFish::BlowFish()
{ {
PArray = new DWORD [18] ; PArray = new DWORD[18];
SBoxes = new DWORD [4][256] ; SBoxes = new DWORD[4][256];
} }
BlowFish::~BlowFish () BlowFish::~BlowFish()
{ {
delete PArray ; delete PArray;
delete [] SBoxes ; delete[] SBoxes;
} }
// the low level (private) encryption function // the low level (private) encryption function
void BlowFish::Blowfish_encipher (DWORD *xl, DWORD *xr) void BlowFish::Blowfish_encipher( DWORD* xl, DWORD* xr )
{ {
union aword Xl, Xr ; union aword Xl, Xr;
Xl.dword = *xl ; Xl.dword = *xl;
Xr.dword = *xr ; Xr.dword = *xr;
Xl.dword ^= PArray [0]; Xl.dword ^= PArray[ 0 ];
ROUND (Xr, Xl, 1) ; ROUND (Xl, Xr, 2) ; ROUND ( Xr, Xl, 1 );
ROUND (Xr, Xl, 3) ; ROUND (Xl, Xr, 4) ; ROUND ( Xl, Xr, 2 );
ROUND (Xr, Xl, 5) ; ROUND (Xl, Xr, 6) ; ROUND ( Xr, Xl, 3 );
ROUND (Xr, Xl, 7) ; ROUND (Xl, Xr, 8) ; ROUND ( Xl, Xr, 4 );
ROUND (Xr, Xl, 9) ; ROUND (Xl, Xr, 10) ; ROUND ( Xr, Xl, 5 );
ROUND (Xr, Xl, 11) ; ROUND (Xl, Xr, 12) ; ROUND ( Xl, Xr, 6 );
ROUND (Xr, Xl, 13) ; ROUND (Xl, Xr, 14) ; ROUND ( Xr, Xl, 7 );
ROUND (Xr, Xl, 15) ; ROUND (Xl, Xr, 16) ; ROUND ( Xl, Xr, 8 );
Xr.dword ^= PArray [17] ; ROUND ( Xr, Xl, 9 );
ROUND ( Xl, Xr, 10 );
ROUND ( Xr, Xl, 11 );
ROUND ( Xl, Xr, 12 );
ROUND ( Xr, Xl, 13 );
ROUND ( Xl, Xr, 14 );
ROUND ( Xr, Xl, 15 );
ROUND ( Xl, Xr, 16 );
Xr.dword ^= PArray[ 17 ];
*xr = Xl.dword ; *xr = Xl.dword;
*xl = Xr.dword ; *xl = Xr.dword;
} }
// the low level (private) decryption function // the low level (private) decryption function
void BlowFish::Blowfish_decipher (DWORD *xl, DWORD *xr) void BlowFish::Blowfish_decipher( DWORD* xl, DWORD* xr )
{ {
union aword Xl ; union aword Xl;
union aword Xr ; union aword Xr;
Xl.dword = *xl ; Xl.dword = *xl;
Xr.dword = *xr ; Xr.dword = *xr;
Xl.dword ^= PArray [17] ; Xl.dword ^= PArray[ 17 ];
ROUND (Xr, Xl, 16) ; ROUND (Xl, Xr, 15) ; ROUND ( Xr, Xl, 16 );
ROUND (Xr, Xl, 14) ; ROUND (Xl, Xr, 13) ; ROUND ( Xl, Xr, 15 );
ROUND (Xr, Xl, 12) ; ROUND (Xl, Xr, 11) ; ROUND ( Xr, Xl, 14 );
ROUND (Xr, Xl, 10) ; ROUND (Xl, Xr, 9) ; ROUND ( Xl, Xr, 13 );
ROUND (Xr, Xl, 8) ; ROUND (Xl, Xr, 7) ; ROUND ( Xr, Xl, 12 );
ROUND (Xr, Xl, 6) ; ROUND (Xl, Xr, 5) ; ROUND ( Xl, Xr, 11 );
ROUND (Xr, Xl, 4) ; ROUND (Xl, Xr, 3) ; ROUND ( Xr, Xl, 10 );
ROUND (Xr, Xl, 2) ; ROUND (Xl, Xr, 1) ; ROUND ( Xl, Xr, 9 );
Xr.dword ^= PArray[0]; ROUND ( Xr, Xl, 8 );
ROUND ( Xl, Xr, 7 );
ROUND ( Xr, Xl, 6 );
ROUND ( Xl, Xr, 5 );
ROUND ( Xr, Xl, 4 );
ROUND ( Xl, Xr, 3 );
ROUND ( Xr, Xl, 2 );
ROUND ( Xl, Xr, 1 );
Xr.dword ^= PArray[ 0 ];
*xl = Xr.dword; *xl = Xr.dword;
*xr = Xl.dword; *xr = Xl.dword;
} }
// constructs the enctryption sieve // constructs the enctryption sieve
void BlowFish::initialize (BYTE key[], int32_t keybytes) void BlowFish::initialize( BYTE key[], int32_t keybytes )
{ {
int i, j ; int i, j;
DWORD datal, datar ; DWORD datal, datar;
// first fill arrays from data tables // first fill arrays from data tables
for (i = 0 ; i < 18 ; i++) for( i = 0; i < 18; i++ )
PArray [i] = bf_P [i] ; PArray[ i ] = bf_P[ i ];
for (i = 0 ; i < 4 ; i++) for( i = 0; i < 4; i++ )
{ {
for (j = 0 ; j < 256 ; j++) for( j = 0; j < 256; j++ )
SBoxes [i][j] = bf_S [i][j] ; SBoxes[ i ][ j ] = bf_S[ i ][ j ];
} }
int32_t v12; // eax@6 int32_t v12; // eax@6
@ -104,155 +120,155 @@ void BlowFish::initialize (BYTE key[], int32_t keybytes)
int32_t v10 = keybytes; int32_t v10 = keybytes;
uintptr_t v9 = (uintptr_t)key; uintptr_t v9 = ( uintptr_t ) key;
int32_t v8 = 0; int32_t v8 = 0;
int32_t v11 = 0; int32_t v11 = 0;
do { do
v13 = (char)(*(BYTE *)(v8 + v9)); {
v13 = ( char ) ( *( BYTE* ) ( v8 + v9 ) );
v12 = v8 + 1; v12 = v8 + 1;
if ( v12 >= v10 ) if( v12 >= v10 )
v12 = 0; v12 = 0;
v16 = (char)*(BYTE *)(v12 + v9); v16 = ( char ) *( BYTE* ) ( v12 + v9 );
v14 = v12 + 1; v14 = v12 + 1;
v15 = (v13 << 8) | v16; v15 = ( v13 << 8 ) | v16;
if ( v14 >= v10 ) if( v14 >= v10 )
v14 = 0; v14 = 0;
v19 = (char)*(BYTE *)(v14 + v9); v19 = ( char ) *( BYTE* ) ( v14 + v9 );
v17 = v14 + 1; v17 = v14 + 1;
v18 = (v15 << 8) | v19; v18 = ( v15 << 8 ) | v19;
if ( v17 >= v10 ) if( v17 >= v10 )
v17 = 0; v17 = 0;
v21 = (char)*(BYTE *)(v17 + v9); v21 = ( char ) *( BYTE* ) ( v17 + v9 );
v8 = v17 + 1; v8 = v17 + 1;
v20 = (v18 << 8) | v21; v20 = ( v18 << 8 ) | v21;
if ( v8 >= v10 ) if( v8 >= v10 )
v8 = 0; v8 = 0;
*((DWORD *)PArray + v11++) ^= v20; *( ( DWORD* ) PArray + v11++ ) ^= v20;
} while ( v11 < 18 ); } while( v11 < 18 );
datal = 0;
datar = 0;
datal = 0 ; for( i = 0; i < NPASS + 2; i += 2 )
datar = 0 ;
for (i = 0 ; i < NPASS + 2 ; i += 2)
{ {
Blowfish_encipher (&datal, &datar) ; Blowfish_encipher( &datal, &datar );
PArray [i] = datal ; PArray[ i ] = datal;
PArray [i + 1] = datar ; PArray[ i + 1 ] = datar;
} }
for (i = 0 ; i < 4 ; ++i) for( i = 0; i < 4; ++i )
{ {
for (j = 0 ; j < 256 ; j += 2) for( j = 0; j < 256; j += 2 )
{ {
Blowfish_encipher (&datal, &datar) ; Blowfish_encipher( &datal, &datar );
SBoxes [i][j] = datal ; SBoxes[ i ][ j ] = datal;
SBoxes [i][j + 1] = datar ; SBoxes[ i ][ j + 1 ] = datar;
} }
} }
} }
// get output length, which must be even MOD 8 // get output length, which must be even MOD 8
DWORD BlowFish::GetOutputLength (DWORD lInputLong) DWORD BlowFish::GetOutputLength( DWORD lInputLong )
{ {
DWORD lVal ; DWORD lVal;
lVal = lInputLong % 8 ; // find out if uneven number of bytes at the end lVal = lInputLong % 8; // find out if uneven number of bytes at the end
if (lVal != 0) if( lVal != 0 )
return lInputLong + 8 - lVal ; return lInputLong + 8 - lVal;
else else
return lInputLong ; return lInputLong;
} }
// Encode pIntput into pOutput. Input length in lSize. Returned value // Encode pIntput into pOutput. Input length in lSize. Returned value
// is length of output which will be even MOD 8 bytes. Input buffer and // is length of output which will be even MOD 8 bytes. Input buffer and
// output buffer can be the same, but be sure buffer length is even MOD 8. // output buffer can be the same, but be sure buffer length is even MOD 8.
DWORD BlowFish::Encode (BYTE * pInput, BYTE * pOutput, DWORD lSize) DWORD BlowFish::Encode( BYTE* pInput, BYTE* pOutput, DWORD lSize )
{ {
DWORD lCount, lOutSize, lGoodBytes ; DWORD lCount, lOutSize, lGoodBytes;
BYTE *pi, *po ; BYTE* pi, * po;
int i, j ; int i, j;
int SameDest = (pInput == pOutput ? 1 : 0) ; int SameDest = ( pInput == pOutput ? 1 : 0 );
lOutSize = GetOutputLength (lSize) ; lOutSize = GetOutputLength( lSize );
for (lCount = 0 ; lCount < lOutSize ; lCount += 8) for( lCount = 0; lCount < lOutSize; lCount += 8 )
{ {
if (SameDest) // if encoded data is being written into input buffer if( SameDest ) // if encoded data is being written into input buffer
{ {
if (lCount < lSize - 7) // if not dealing with uneven bytes at end if( lCount < lSize - 7 ) // if not dealing with uneven bytes at end
{ {
Blowfish_encipher ((DWORD *) pInput, Blowfish_encipher( ( DWORD* ) pInput,
(DWORD *) (pInput + 4)) ; ( DWORD* ) ( pInput + 4 ) );
} }
else // pad end of data with null bytes to complete encryption else // pad end of data with null bytes to complete encryption
{ {
po = pInput + lSize ; // point at byte past the end of actual data po = pInput + lSize; // point at byte past the end of actual data
j = (int) (lOutSize - lSize) ; // number of bytes to set to null j = ( int ) ( lOutSize - lSize ); // number of bytes to set to null
for (i = 0 ; i < j ; i++) for( i = 0; i < j; i++ )
*po++ = 0 ; *po++ = 0;
Blowfish_encipher ((DWORD *) pInput, Blowfish_encipher( ( DWORD* ) pInput,
(DWORD *) (pInput + 4)) ; ( DWORD* ) ( pInput + 4 ) );
} }
pInput += 8 ; pInput += 8;
} }
else // output buffer not equal to input buffer, so must copy else // output buffer not equal to input buffer, so must copy
{ // input to output buffer prior to encrypting { // input to output buffer prior to encrypting
if (lCount < lSize - 7) // if not dealing with uneven bytes at end if( lCount < lSize - 7 ) // if not dealing with uneven bytes at end
{ {
pi = pInput ; pi = pInput;
po = pOutput ; po = pOutput;
for (i = 0 ; i < 8 ; i++) for( i = 0; i < 8; i++ )
// copy bytes to output // copy bytes to output
*po++ = *pi++ ; *po++ = *pi++;
Blowfish_encipher ((DWORD *) pOutput, // now encrypt them Blowfish_encipher( ( DWORD* ) pOutput, // now encrypt them
(DWORD *) (pOutput + 4)) ; ( DWORD* ) ( pOutput + 4 ) );
} }
else // pad end of data with null bytes to complete encryption else // pad end of data with null bytes to complete encryption
{ {
lGoodBytes = lSize - lCount ; // number of remaining data bytes lGoodBytes = lSize - lCount; // number of remaining data bytes
po = pOutput ; po = pOutput;
for (i = 0 ; i < (int) lGoodBytes ; i++) for( i = 0; i < ( int ) lGoodBytes; i++ )
*po++ = *pInput++ ; *po++ = *pInput++;
for (j = i ; j < 8 ; j++) for( j = i; j < 8; j++ )
*po++ = 0 ; *po++ = 0;
Blowfish_encipher ((DWORD *) pOutput, Blowfish_encipher( ( DWORD* ) pOutput,
(DWORD *) (pOutput + 4)) ; ( DWORD* ) ( pOutput + 4 ) );
} }
pInput += 8 ; pInput += 8;
pOutput += 8 ; pOutput += 8;
} }
} }
return lOutSize ; return lOutSize;
} }
// Decode pIntput into pOutput. Input length in lSize. Input buffer and // Decode pIntput into pOutput. Input length in lSize. Input buffer and
// output buffer can be the same, but be sure buffer length is even MOD 8. // output buffer can be the same, but be sure buffer length is even MOD 8.
void BlowFish::Decode (BYTE * pInput, BYTE * pOutput, DWORD lSize) void BlowFish::Decode( BYTE* pInput, BYTE* pOutput, DWORD lSize )
{ {
DWORD lCount ; DWORD lCount;
BYTE *pi, *po ; BYTE* pi, * po;
int i ; int i;
int SameDest = (pInput == pOutput ? 1 : 0) ; int SameDest = ( pInput == pOutput ? 1 : 0 );
for (lCount = 0 ; lCount < lSize ; lCount += 8) for( lCount = 0; lCount < lSize; lCount += 8 )
{ {
if (SameDest) // if encoded data is being written into input buffer if( SameDest ) // if encoded data is being written into input buffer
{ {
Blowfish_decipher ((DWORD *) pInput, Blowfish_decipher( ( DWORD* ) pInput,
(DWORD *) (pInput + 4)) ; ( DWORD* ) ( pInput + 4 ) );
pInput += 8 ; pInput += 8;
} }
else // output buffer not equal to input buffer else // output buffer not equal to input buffer
{ // so copy input to output before decoding { // so copy input to output before decoding
pi = pInput ; pi = pInput;
po = pOutput ; po = pOutput;
for (i = 0 ; i < 8 ; i++) for( i = 0; i < 8; i++ )
*po++ = *pi++ ; *po++ = *pi++;
Blowfish_decipher ((DWORD *) pOutput, Blowfish_decipher( ( DWORD* ) pOutput,
(DWORD *) (pOutput + 4)) ; ( DWORD* ) ( pOutput + 4 ) );
pInput += 8 ; pInput += 8;
pOutput += 8 ; pOutput += 8;
} }
} }
} }

View file

@ -16,39 +16,48 @@
class BlowFish class BlowFish
{ {
private: private:
DWORD * PArray ; DWORD* PArray;
DWORD (* SBoxes)[256]; DWORD (* SBoxes)[256];
void Blowfish_encipher (DWORD *xl, DWORD *xr) ;
void Blowfish_decipher (DWORD *xl, DWORD *xr) ; void Blowfish_encipher( DWORD* xl, DWORD* xr );
void Blowfish_decipher( DWORD* xl, DWORD* xr );
public: public:
BlowFish () ; BlowFish();
~BlowFish () ;
void initialize (BYTE key[], int32_t keybytes) ;
DWORD GetOutputLength (DWORD lInputLong) ;
DWORD Encode (BYTE * pInput, BYTE * pOutput, DWORD lSize) ;
void Decode (BYTE * pInput, BYTE * pOutput, DWORD lSize) ;
} ; ~BlowFish();
void initialize( BYTE key[], int32_t keybytes );
DWORD GetOutputLength( DWORD lInputLong );
DWORD Encode( BYTE* pInput, BYTE* pOutput, DWORD lSize );
void Decode( BYTE* pInput, BYTE* pOutput, DWORD lSize );
};
// choose a byte order for your hardware // choose a byte order for your hardware
#define ORDER_DCBA // chosing Intel in this case #define ORDER_DCBA // chosing Intel in this case
#ifdef ORDER_DCBA // DCBA - little endian - intel #ifdef ORDER_DCBA // DCBA - little endian - intel
union aword { union aword
{
DWORD dword; DWORD dword;
BYTE byte [4]; BYTE byte[4];
struct { struct
{
uint32_t byte3:8; uint32_t byte3:8;
uint32_t byte2:8; uint32_t byte2:8;
uint32_t byte1:8; uint32_t byte1:8;
uint32_t byte0:8; uint32_t byte0:8;
} w; } w;
}; };
#endif #endif
#ifdef ORDER_ABCD // ABCD - big endian - motorola #ifdef ORDER_ABCD // ABCD - big endian - motorola
union aword { union aword {
DWORD dword; DWORD dword;
BYTE byte [4]; BYTE byte [4];
struct { struct {
@ -57,11 +66,11 @@ public:
uint32_t byte2:8; uint32_t byte2:8;
uint32_t byte3:8; uint32_t byte3:8;
} w; } w;
}; };
#endif #endif
#ifdef ORDER_BADC // BADC - vax #ifdef ORDER_BADC // BADC - vax
union aword { union aword {
DWORD dword; DWORD dword;
BYTE byte [4]; BYTE byte [4];
struct { struct {

View file

@ -21,7 +21,7 @@
#include <string.h> #include <string.h>
#include "md5.h" #include "md5.h"
#define GET_UINT32(n,b,i) \ #define GET_UINT32( n, b, i ) \
{ \ { \
(n) = ( (uint32_t) (b)[(i) ] ) \ (n) = ( (uint32_t) (b)[(i) ] ) \
| ( (uint32_t) (b)[(i) + 1] << 8 ) \ | ( (uint32_t) (b)[(i) + 1] << 8 ) \
@ -29,7 +29,7 @@
| ( (uint32_t) (b)[(i) + 3] << 24 ); \ | ( (uint32_t) (b)[(i) + 3] << 24 ); \
} }
#define PUT_UINT32(n,b,i) \ #define PUT_UINT32( n, b, i ) \
{ \ { \
(b)[(i) ] = (uint8_t) ( (n) ); \ (b)[(i) ] = (uint8_t) ( (n) ); \
(b)[(i) + 1] = (uint8_t) ( (n) >> 8 ); \ (b)[(i) + 1] = (uint8_t) ( (n) >> 8 ); \
@ -37,51 +37,51 @@
(b)[(i) + 3] = (uint8_t) ( (n) >> 24 ); \ (b)[(i) + 3] = (uint8_t) ( (n) >> 24 ); \
} }
void Core::Util::md5_starts( md5_context *ctx ) void Core::Util::md5_starts( md5_context* ctx )
{ {
ctx->total[0] = 0; ctx->total[ 0 ] = 0;
ctx->total[1] = 0; ctx->total[ 1 ] = 0;
ctx->state[0] = 0x67452301; ctx->state[ 0 ] = 0x67452301;
ctx->state[1] = 0xEFCDAB89; ctx->state[ 1 ] = 0xEFCDAB89;
ctx->state[2] = 0x98BADCFE; ctx->state[ 2 ] = 0x98BADCFE;
ctx->state[3] = 0x10325476; ctx->state[ 3 ] = 0x10325476;
} }
void md5_process( Core::Util::md5_context *ctx, uint8_t data[64] ) void md5_process( Core::Util::md5_context* ctx, uint8_t data[64] )
{ {
uint32_t X[16], A, B, C, D; uint32_t X[16], A, B, C, D;
GET_UINT32( X[0], data, 0 ); GET_UINT32( X[ 0 ], data, 0 );
GET_UINT32( X[1], data, 4 ); GET_UINT32( X[ 1 ], data, 4 );
GET_UINT32( X[2], data, 8 ); GET_UINT32( X[ 2 ], data, 8 );
GET_UINT32( X[3], data, 12 ); GET_UINT32( X[ 3 ], data, 12 );
GET_UINT32( X[4], data, 16 ); GET_UINT32( X[ 4 ], data, 16 );
GET_UINT32( X[5], data, 20 ); GET_UINT32( X[ 5 ], data, 20 );
GET_UINT32( X[6], data, 24 ); GET_UINT32( X[ 6 ], data, 24 );
GET_UINT32( X[7], data, 28 ); GET_UINT32( X[ 7 ], data, 28 );
GET_UINT32( X[8], data, 32 ); GET_UINT32( X[ 8 ], data, 32 );
GET_UINT32( X[9], data, 36 ); GET_UINT32( X[ 9 ], data, 36 );
GET_UINT32( X[10], data, 40 ); GET_UINT32( X[ 10 ], data, 40 );
GET_UINT32( X[11], data, 44 ); GET_UINT32( X[ 11 ], data, 44 );
GET_UINT32( X[12], data, 48 ); GET_UINT32( X[ 12 ], data, 48 );
GET_UINT32( X[13], data, 52 ); GET_UINT32( X[ 13 ], data, 52 );
GET_UINT32( X[14], data, 56 ); GET_UINT32( X[ 14 ], data, 56 );
GET_UINT32( X[15], data, 60 ); GET_UINT32( X[ 15 ], data, 60 );
#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) #define S( x, n ) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n)))
#define P(a,b,c,d,k,s,t) \ #define P( a, b, c, d, k, s, t ) \
{ \ { \
a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \ a += F(b,c,d) + X[k] + t; a = S(a,s) + b; \
} }
A = ctx->state[0]; A = ctx->state[ 0 ];
B = ctx->state[1]; B = ctx->state[ 1 ];
C = ctx->state[2]; C = ctx->state[ 2 ];
D = ctx->state[3]; D = ctx->state[ 3 ];
#define F(x,y,z) (z ^ (x & (y ^ z))) #define F( x, y, z ) (z ^ (x & (y ^ z)))
P( A, B, C, D, 0, 7, 0xD76AA478 ); P( A, B, C, D, 0, 7, 0xD76AA478 );
P( D, A, B, C, 1, 12, 0xE8C7B756 ); P( D, A, B, C, 1, 12, 0xE8C7B756 );
@ -102,7 +102,7 @@ void md5_process( Core::Util::md5_context *ctx, uint8_t data[64] )
#undef F #undef F
#define F(x,y,z) (y ^ (z & (x ^ y))) #define F( x, y, z ) (y ^ (z & (x ^ y)))
P( A, B, C, D, 1, 5, 0xF61E2562 ); P( A, B, C, D, 1, 5, 0xF61E2562 );
P( D, A, B, C, 6, 9, 0xC040B340 ); P( D, A, B, C, 6, 9, 0xC040B340 );
@ -123,7 +123,7 @@ void md5_process( Core::Util::md5_context *ctx, uint8_t data[64] )
#undef F #undef F
#define F(x,y,z) (x ^ y ^ z) #define F( x, y, z ) (x ^ y ^ z)
P( A, B, C, D, 5, 4, 0xFFFA3942 ); P( A, B, C, D, 5, 4, 0xFFFA3942 );
P( D, A, B, C, 8, 11, 0x8771F681 ); P( D, A, B, C, 8, 11, 0x8771F681 );
@ -144,7 +144,7 @@ void md5_process( Core::Util::md5_context *ctx, uint8_t data[64] )
#undef F #undef F
#define F(x,y,z) (y ^ (x | ~z)) #define F( x, y, z ) (y ^ (x | ~z))
P( A, B, C, D, 0, 6, 0xF4292244 ); P( A, B, C, D, 0, 6, 0xF4292244 );
P( D, A, B, C, 7, 10, 0x432AFF97 ); P( D, A, B, C, 7, 10, 0x432AFF97 );
@ -165,31 +165,32 @@ void md5_process( Core::Util::md5_context *ctx, uint8_t data[64] )
#undef F #undef F
ctx->state[0] += A; ctx->state[ 0 ] += A;
ctx->state[1] += B; ctx->state[ 1 ] += B;
ctx->state[2] += C; ctx->state[ 2 ] += C;
ctx->state[3] += D; ctx->state[ 3 ] += D;
} }
void Core::Util::md5_update( md5_context *ctx, uint8_t *input, uint32_t length ) void Core::Util::md5_update( md5_context* ctx, uint8_t* input, uint32_t length )
{ {
uint32_t left, fill; uint32_t left, fill;
if( !length ) return; if( !length )
return;
left = ctx->total[0] & 0x3F; left = ctx->total[ 0 ] & 0x3F;
fill = 64 - left; fill = 64 - left;
ctx->total[0] += length; ctx->total[ 0 ] += length;
ctx->total[0] &= 0xFFFFFFFF; ctx->total[ 0 ] &= 0xFFFFFFFF;
if( ctx->total[0] < length ) if( ctx->total[ 0 ] < length )
ctx->total[1]++; ctx->total[ 1 ]++;
if( left && length >= fill ) if( left && length >= fill )
{ {
memcpy( ( void * )( ctx->buffer + left ), memcpy( ( void* ) ( ctx->buffer + left ),
( void * )input, fill ); ( void* ) input, fill );
md5_process( ctx, ctx->buffer ); md5_process( ctx, ctx->buffer );
length -= fill; length -= fill;
input += fill; input += fill;
@ -205,52 +206,52 @@ void Core::Util::md5_update( md5_context *ctx, uint8_t *input, uint32_t length )
if( length ) if( length )
{ {
memcpy( ( void * )( ctx->buffer + left ), memcpy( ( void* ) ( ctx->buffer + left ),
( void * )input, length ); ( void* ) input, length );
} }
} }
static uint8_t md5_padding[64] = static uint8_t md5_padding[64] =
{ {
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}; };
void Core::Util::md5_finish( md5_context *ctx, uint8_t digest[16] ) void Core::Util::md5_finish( md5_context* ctx, uint8_t digest[16] )
{ {
uint32_t last, padn; uint32_t last, padn;
uint32_t high, low; uint32_t high, low;
uint8_t msglen[8]; uint8_t msglen[8];
high = ( ctx->total[0] >> 29 ) high = ( ctx->total[ 0 ] >> 29 )
| ( ctx->total[1] << 3 ); | ( ctx->total[ 1 ] << 3 );
low = ( ctx->total[0] << 3 ); low = ( ctx->total[ 0 ] << 3 );
PUT_UINT32( low, msglen, 0 ); PUT_UINT32( low, msglen, 0 );
PUT_UINT32( high, msglen, 4 ); PUT_UINT32( high, msglen, 4 );
last = ctx->total[0] & 0x3F; last = ctx->total[ 0 ] & 0x3F;
padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last );
md5_update( ctx, md5_padding, padn ); md5_update( ctx, md5_padding, padn );
md5_update( ctx, msglen, 8 ); md5_update( ctx, msglen, 8 );
PUT_UINT32( ctx->state[0], digest, 0 ); PUT_UINT32( ctx->state[ 0 ], digest, 0 );
PUT_UINT32( ctx->state[1], digest, 4 ); PUT_UINT32( ctx->state[ 1 ], digest, 4 );
PUT_UINT32( ctx->state[2], digest, 8 ); PUT_UINT32( ctx->state[ 2 ], digest, 8 );
PUT_UINT32( ctx->state[3], digest, 12 ); PUT_UINT32( ctx->state[ 3 ], digest, 12 );
} }
/* /*
* those are the standard RFC 1321 test vectors * those are the standard RFC 1321 test vectors
*/ */
void Core::Util::md5( uint8_t *text, uint8_t *hash, int32_t size ) void Core::Util::md5( uint8_t* text, uint8_t* hash, int32_t size )
{ {
md5_context ctx; md5_context ctx;
md5_starts( &ctx ); md5_starts( &ctx );
md5_update( &ctx, ( uint8_t * )text, size ); md5_update( &ctx, ( uint8_t* ) text, size );
md5_finish( &ctx, hash ); md5_finish( &ctx, hash );
} }

View file

@ -1,25 +1,27 @@
#ifndef _MD52_H #ifndef _MD52_H
#define _MD52_H #define _MD52_H
#include <stdint.h> #include <stdint.h>
namespace Core namespace Core {
namespace Util {
using md5_context = struct
{ {
namespace Util
{
using md5_context = struct
{
uint32_t total[2]; uint32_t total[2];
uint32_t state[4]; uint32_t state[4];
uint8_t buffer[64]; uint8_t buffer[64];
}; };
void md5( uint8_t *text, uint8_t *hash, int32_t size ); void md5( uint8_t* text, uint8_t* hash, int32_t size );
void md5_starts( md5_context *ctx );
void md5_update( md5_context *ctx, uint8_t *input, uint32_t length );
void md5_finish( md5_context *ctx, uint8_t digest[16] );
static const char *msg[] = void md5_starts( md5_context* ctx );
void md5_update( md5_context* ctx, uint8_t* input, uint32_t length );
void md5_finish( md5_context* ctx, uint8_t digest[16] );
static const char* msg[] =
{ {
"", "",
"a", "a",
@ -31,7 +33,7 @@ namespace Core
"345678901234567890" "345678901234567890"
}; };
static const char *val[] = static const char* val[] =
{ {
"d41d8cd98f00b204e9800998ecf8427e", "d41d8cd98f00b204e9800998ecf8427e",
"0cc175b9c0f1b6a831c399e269772661", "0cc175b9c0f1b6a831c399e269772661",
@ -42,7 +44,7 @@ namespace Core
"57edf4a22be3c955ac49da2e2107b67a" "57edf4a22be3c955ac49da2e2107b67a"
}; };
} }
} }

View file

@ -1,12 +1,14 @@
#include "CharaDbConnection.h" #include "CharaDbConnection.h"
#include <MySqlConnector.h> #include <MySqlConnector.h>
Core::Db::CharaDbConnection::CharaDbConnection( ConnectionInfo& connInfo ) : DbConnection( connInfo ) Core::Db::CharaDbConnection::CharaDbConnection( ConnectionInfo& connInfo ) :
DbConnection( connInfo )
{ {
} }
Core::Db::CharaDbConnection::CharaDbConnection( Core::LockedWaitQueue< boost::shared_ptr< Operation > >* q, Core::Db::CharaDbConnection::CharaDbConnection( Core::LockedWaitQueue< boost::shared_ptr< Operation > >* q,
ConnectionInfo& connInfo) : DbConnection( q, connInfo ) ConnectionInfo& connInfo ) :
DbConnection( q, connInfo )
{ {
} }
@ -61,56 +63,86 @@ void Core::Db::CharaDbConnection::doPrepareStatements()
CONNECTION_SYNC ); CONNECTION_SYNC );
prepareStatement( CHARA_UP_NAME, "UPDATE charainfo SET Name = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_NAME, "UPDATE charainfo SET Name = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_HPMP, "UPDATE charainfo SET Hp = ?, Mp = ?, Tp = ?, Gp = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_HPMP, "UPDATE charainfo SET Hp = ?, Mp = ?, Tp = ?, Gp = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_MODE, "UPDATE charainfo SET Mode = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_MODE, "UPDATE charainfo SET Mode = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_MOUNT, "UPDATE charainfo SET Mount = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_MOUNT, "UPDATE charainfo SET Mount = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_INVINCIBLE, "UPDATE charainfo SET InvincibleGM = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_INVINCIBLE, "UPDATE charainfo SET InvincibleGM = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_CUSTOMIZE, "UPDATE charainfo SET Customize = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_CUSTOMIZE, "UPDATE charainfo SET Customize = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_MODELMAINWEAP, "UPDATE charainfo SET ModelMainWeapon = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_MODELMAINWEAP, "UPDATE charainfo SET ModelMainWeapon = ? WHERE CharacterId = ?;",
prepareStatement( CHARA_UP_MODELSUBWEAP, "UPDATE charainfo SET ModelSubWeapon = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); CONNECTION_ASYNC );
prepareStatement( CHARA_UP_MODELSYSWEAP, "UPDATE charainfo SET ModelSystemWeapon = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_MODELSUBWEAP, "UPDATE charainfo SET ModelSubWeapon = ? WHERE CharacterId = ?;",
prepareStatement( CHARA_UP_MODELEQUIP, "UPDATE charainfo SET ModelEquip = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); CONNECTION_ASYNC );
prepareStatement( CHARA_UP_EMOTEMODETYPE, "UPDATE charainfo SET EmoteModeType = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_MODELSYSWEAP, "UPDATE charainfo SET ModelSystemWeapon = ? WHERE CharacterId = ?;",
prepareStatement( CHARA_UP_FIRSTLOGINTIME, "UPDATE charainfo SET FirstLoginTime = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); CONNECTION_ASYNC );
prepareStatement( CHARA_UP_MODELEQUIP, "UPDATE charainfo SET ModelEquip = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_EMOTEMODETYPE, "UPDATE charainfo SET EmoteModeType = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_FIRSTLOGINTIME, "UPDATE charainfo SET FirstLoginTime = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_LANGUAGE, "UPDATE charainfo SET Language = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_LANGUAGE, "UPDATE charainfo SET Language = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_ISNEWGAME, "UPDATE charainfo SET IsNewGame = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_ISNEWGAME, "UPDATE charainfo SET IsNewGame = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_ISNEWADV, "UPDATE charainfo SET IsNewAdventurer = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_ISNEWADV, "UPDATE charainfo SET IsNewAdventurer = ? WHERE CharacterId = ?;",
prepareStatement( CHARA_UP_TERRITORY, "UPDATE charainfo SET TerritoryType = ?, TerritoryId = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); CONNECTION_ASYNC );
prepareStatement( CHARA_UP_POS, "UPDATE charainfo SET OPosX = ?, OPosY = ?, OPosZ = ?, OPosR = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_TERRITORY,
"UPDATE charainfo SET TerritoryType = ?, TerritoryId = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_POS,
"UPDATE charainfo SET OPosX = ?, OPosY = ?, OPosZ = ?, OPosR = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_CLASS, "UPDATE charainfo SET Class = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_CLASS, "UPDATE charainfo SET Class = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_STATUS, "UPDATE charainfo SET Status = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_STATUS, "UPDATE charainfo SET Status = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_TOTALPLAYTIME, "UPDATE charainfo SET TotalPlayTime = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_TOTALPLAYTIME, "UPDATE charainfo SET TotalPlayTime = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_HOMEPOINT, "UPDATE charainfo SET Homepoint = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_HOMEPOINT, "UPDATE charainfo SET Homepoint = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_FAVOPOINT, "UPDATE charainfo SET FavoritePoint = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_FAVOPOINT, "UPDATE charainfo SET FavoritePoint = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_TITLE, "UPDATE charainfo SET ActiveTitle = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_TITLE, "UPDATE charainfo SET ActiveTitle = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_TITLELIST, "UPDATE charainfo SET TitleList = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_TITLELIST, "UPDATE charainfo SET TitleList = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_ACHIEVEMENTS, "UPDATE charainfo SET Achievement = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_ACHIEVEMENTS, "UPDATE charainfo SET Achievement = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_AETHERYTE, "UPDATE charainfo SET Aetheryte = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_AETHERYTE, "UPDATE charainfo SET Aetheryte = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_HOWTO, "UPDATE charainfo SET HowTo = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_HOWTO, "UPDATE charainfo SET HowTo = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_MINIONS, "UPDATE charainfo SET Minions = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_MINIONS, "UPDATE charainfo SET Minions = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_MOUNTS, "UPDATE charainfo SET Mounts = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_MOUNTS, "UPDATE charainfo SET Mounts = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_GEARSET, "UPDATE charainfo SET EquippedMannequin = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_GEARSET, "UPDATE charainfo SET EquippedMannequin = ? WHERE CharacterId = ?;",
prepareStatement( CHARA_UP_CONFIGFLAGS, "UPDATE charainfo SET ConfigFlags = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); CONNECTION_ASYNC );
prepareStatement( CHARA_UP_QUESTCOMPLETE, "UPDATE charainfo SET QuestCompleteFlags = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_CONFIGFLAGS, "UPDATE charainfo SET ConfigFlags = ? WHERE CharacterId = ?;",
prepareStatement( CHARA_UP_OPENINGSEQ, "UPDATE charainfo SET OpeningSequence = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); CONNECTION_ASYNC );
prepareStatement( CHARA_UP_QUESTTRACKING, "UPDATE charainfo SET QuestTracking = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_QUESTCOMPLETE, "UPDATE charainfo SET QuestCompleteFlags = ? WHERE CharacterId = ?;",
prepareStatement( CHARA_UP_GRANDCOMPANY, "UPDATE charainfo SET GrandCompany = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); CONNECTION_ASYNC );
prepareStatement( CHARA_UP_GRANDCOMPANYRANKS, "UPDATE charainfo SET GrandCompanyRank = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_OPENINGSEQ, "UPDATE charainfo SET OpeningSequence = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_QUESTTRACKING, "UPDATE charainfo SET QuestTracking = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_GRANDCOMPANY, "UPDATE charainfo SET GrandCompany = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_GRANDCOMPANYRANKS, "UPDATE charainfo SET GrandCompanyRank = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_DISCOVERY, "UPDATE charainfo SET Discovery = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_DISCOVERY, "UPDATE charainfo SET Discovery = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_GMRANK, "UPDATE charainfo SET GMRank = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_GMRANK, "UPDATE charainfo SET GMRank = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_EQUIPDISPLAYFLAGS, "UPDATE charainfo SET EquipDisplayFlags = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_EQUIPDISPLAYFLAGS, "UPDATE charainfo SET EquipDisplayFlags = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_UP_UNLOCKS, "UPDATE charainfo SET Unlocks = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_UNLOCKS, "UPDATE charainfo SET Unlocks = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_UP_CFPENATLY, "UPDATE charainfo SET CFPenaltyUntil = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_CFPENATLY, "UPDATE charainfo SET CFPenaltyUntil = ? WHERE CharacterId = ?;",
CONNECTION_ASYNC );
/// SEARCH INFO /// SEARCH INFO
prepareStatement( CHARA_SEARCHINFO_INS, "INSERT INTO charainfosearch (CharacterId, UPDATE_DATE ) VALUES ( ?, NOW() );", CONNECTION_BOTH ); prepareStatement( CHARA_SEARCHINFO_INS,
prepareStatement( CHARA_SEARCHINFO_UP_SELECTCLASS, "UPDATE charainfosearch SET SelectClassId = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); "INSERT INTO charainfosearch (CharacterId, UPDATE_DATE ) VALUES ( ?, NOW() );", CONNECTION_BOTH );
prepareStatement( CHARA_SEARCHINFO_UP_SELECTREGION, "UPDATE charainfosearch SET SelectRegion = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_SEARCHINFO_UP_SELECTCLASS,
prepareStatement( CHARA_SEARCHINFO_UP_SEARCHCOMMENT, "UPDATE charainfosearch SET SearchComment = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); "UPDATE charainfosearch SET SelectClassId = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_SEARCHINFO_UP_SELECTREGION,
"UPDATE charainfosearch SET SelectRegion = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_SEARCHINFO_UP_SEARCHCOMMENT,
"UPDATE charainfosearch SET SearchComment = ? WHERE CharacterId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_SEARCHINFO_SEL, "SELECT * FROM charainfosearch WHERE CharacterId = ?;", CONNECTION_SYNC ); prepareStatement( CHARA_SEARCHINFO_SEL, "SELECT * FROM charainfosearch WHERE CharacterId = ?;", CONNECTION_SYNC );
/// QUEST INFO /// QUEST INFO
prepareStatement( CHARA_QUEST_INS, "INSERT INTO charaquestnew ( CharacterId, SlotId, QuestId, Sequence, Flags, Variables_0, " prepareStatement( CHARA_QUEST_INS,
"INSERT INTO charaquestnew ( CharacterId, SlotId, QuestId, Sequence, Flags, Variables_0, "
"Variables_1, Variables_2, Variables_3, Variables_4, " "Variables_1, Variables_2, Variables_3, Variables_4, "
"Variables_5, Variables_6 ) VALUES( ?,?,?,?,?,?,?,?,?,?,?,? );", CONNECTION_ASYNC ); "Variables_5, Variables_6 ) VALUES( ?,?,?,?,?,?,?,?,?,?,?,? );", CONNECTION_ASYNC );
@ -119,23 +151,29 @@ void Core::Db::CharaDbConnection::doPrepareStatements()
"Variables_4 = ?, Variables_5 = ?, Variables_6 = ? " "Variables_4 = ?, Variables_5 = ?, Variables_6 = ? "
"WHERE CharacterId = ? AND QuestId = ?;", CONNECTION_ASYNC ); "WHERE CharacterId = ? AND QuestId = ?;", CONNECTION_ASYNC );
prepareStatement( CHARA_QUEST_DEL, "DELETE FROM charaquestnew WHERE CharacterId = ? AND QuestId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_QUEST_DEL, "DELETE FROM charaquestnew WHERE CharacterId = ? AND QuestId = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_QUEST_SEL, "SELECT * FROM charaquestnew WHERE CharacterId = ?;", CONNECTION_SYNC ); prepareStatement( CHARA_QUEST_SEL, "SELECT * FROM charaquestnew WHERE CharacterId = ?;", CONNECTION_SYNC );
/// CLASS INFO /// CLASS INFO
prepareStatement( CHARA_CLASS_SEL, "SELECT ClassIdx, Exp, Lvl FROM characlass WHERE CharacterId = ?;", CONNECTION_SYNC ); prepareStatement( CHARA_CLASS_SEL, "SELECT ClassIdx, Exp, Lvl FROM characlass WHERE CharacterId = ?;",
prepareStatement( CHARA_CLASS_INS, "INSERT INTO characlass ( CharacterId, ClassIdx, Exp, Lvl ) VALUES( ?,?,?,? );", CONNECTION_BOTH ); CONNECTION_SYNC );
prepareStatement( CHARA_CLASS_UP, "UPDATE characlass SET Exp = ?, Lvl = ? WHERE CharacterId = ? AND ClassIdx = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_CLASS_INS, "INSERT INTO characlass ( CharacterId, ClassIdx, Exp, Lvl ) VALUES( ?,?,?,? );",
CONNECTION_BOTH );
prepareStatement( CHARA_CLASS_UP, "UPDATE characlass SET Exp = ?, Lvl = ? WHERE CharacterId = ? AND ClassIdx = ?;",
CONNECTION_ASYNC );
prepareStatement( CHARA_CLASS_DEL, "DELETE FROM characlass WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_CLASS_DEL, "DELETE FROM characlass WHERE CharacterId = ?;", CONNECTION_ASYNC );
/// INVENTORY INFO /// INVENTORY INFO
prepareStatement( CHARA_ITEMINV_INS, "INSERT INTO charaiteminventory ( CharacterId, storageId, UPDATE_DATE ) VALUES ( ?, ?, NOW() );", CONNECTION_BOTH ); prepareStatement( CHARA_ITEMINV_INS,
"INSERT INTO charaiteminventory ( CharacterId, storageId, UPDATE_DATE ) VALUES ( ?, ?, NOW() );",
CONNECTION_BOTH );
/// ITEM GLOBAL /// ITEM GLOBAL
prepareStatement( CHARA_ITEMGLOBAL_INS, "INSERT INTO charaglobalitem ( CharacterId, ItemId, catalogId, UPDATE_DATE ) VALUES ( ?, ?, ?, NOW() );", CONNECTION_BOTH ); prepareStatement( CHARA_ITEMGLOBAL_INS,
"INSERT INTO charaglobalitem ( CharacterId, ItemId, catalogId, UPDATE_DATE ) VALUES ( ?, ?, ?, NOW() );",
CONNECTION_BOTH );
} }

View file

@ -3,13 +3,12 @@
#include "DbConnection.h" #include "DbConnection.h"
namespace Core namespace Core {
{ namespace Db {
namespace Db
{
class DbConnectionInfo; class DbConnectionInfo;
enum CharaDbStatements : uint32_t enum CharaDbStatements :
uint32_t
{ {
CHARA_SEL, CHARA_SEL,
CHARA_SEL_MINIMAL, CHARA_SEL_MINIMAL,
@ -79,13 +78,15 @@ enum CharaDbStatements : uint32_t
MAX_STATEMENTS MAX_STATEMENTS
}; };
class CharaDbConnection : public DbConnection class CharaDbConnection :
public DbConnection
{ {
public: public:
using Statements = CharaDbStatements; using Statements = CharaDbStatements;
CharaDbConnection( ConnectionInfo& connInfo ); CharaDbConnection( ConnectionInfo& connInfo );
CharaDbConnection( Core::LockedWaitQueue< boost::shared_ptr< Operation > >* q, ConnectionInfo &connInfo );
CharaDbConnection( Core::LockedWaitQueue< boost::shared_ptr< Operation > >* q, ConnectionInfo& connInfo );
~CharaDbConnection(); ~CharaDbConnection();

View file

@ -9,7 +9,7 @@
extern Core::Framework g_fw; extern Core::Framework g_fw;
Core::Db::DbConnection::DbConnection( ConnectionInfo &connInfo ) : Core::Db::DbConnection::DbConnection( ConnectionInfo& connInfo ) :
m_reconnecting( false ), m_reconnecting( false ),
m_prepareError( false ), m_prepareError( false ),
m_queue( nullptr ), m_queue( nullptr ),
@ -140,7 +140,8 @@ boost::shared_ptr< Mysql::ResultSet > Core::Db::DbConnection::query( const std::
} }
boost::shared_ptr< Mysql::ResultSet > Core::Db::DbConnection::query( boost::shared_ptr< Core::Db::PreparedStatement > stmt ) boost::shared_ptr< Mysql::ResultSet >
Core::Db::DbConnection::query( boost::shared_ptr< Core::Db::PreparedStatement > stmt )
{ {
boost::shared_ptr< Mysql::ResultSet > res( nullptr ); boost::shared_ptr< Mysql::ResultSet > res( nullptr );
if( !stmt ) if( !stmt )
@ -204,14 +205,14 @@ bool Core::Db::DbConnection::execute( boost::shared_ptr< Core::Db::PreparedState
boost::shared_ptr< Mysql::PreparedStatement > Core::Db::DbConnection::getPreparedStatement( uint32_t index ) boost::shared_ptr< Mysql::PreparedStatement > Core::Db::DbConnection::getPreparedStatement( uint32_t index )
{ {
assert( index < m_stmts.size() ); assert( index < m_stmts.size() );
auto ret = m_stmts[index]; auto ret = m_stmts[ index ];
if( !ret ) if( !ret )
nullptr; nullptr;
return ret; return ret;
} }
void Core::Db::DbConnection::prepareStatement( uint32_t index, const std::string &sql, Core::Db::ConnectionFlags flags ) void Core::Db::DbConnection::prepareStatement( uint32_t index, const std::string& sql, Core::Db::ConnectionFlags flags )
{ {
m_queries.insert( PreparedStatementMap::value_type( index, std::make_pair( sql, flags ) ) ); m_queries.insert( PreparedStatementMap::value_type( index, std::make_pair( sql, flags ) ) );
@ -220,7 +221,7 @@ void Core::Db::DbConnection::prepareStatement( uint32_t index, const std::string
// to save memory that will not be used. // to save memory that will not be used.
if( !( m_connectionFlags & flags ) ) if( !( m_connectionFlags & flags ) )
{ {
m_stmts[index].reset(); m_stmts[ index ].reset();
return; return;
} }
@ -236,7 +237,7 @@ void Core::Db::DbConnection::prepareStatement( uint32_t index, const std::string
m_prepareError = true; m_prepareError = true;
} }
m_stmts[index] = boost::shared_ptr< Mysql::PreparedStatement >( pStmt ); m_stmts[ index ] = boost::shared_ptr< Mysql::PreparedStatement >( pStmt );
} }

View file

@ -10,34 +10,37 @@
#include <boost/scoped_ptr.hpp> #include <boost/scoped_ptr.hpp>
#include <boost/enable_shared_from_this.hpp> #include <boost/enable_shared_from_this.hpp>
namespace Mysql namespace Mysql {
{ class Connection;
class Connection;
class ResultSet; class ResultSet;
class PreparedResultSet;
class PreparedStatement; class PreparedResultSet;
class PreparedStatement;
} }
namespace Core namespace Core {
{ namespace Db {
namespace Db class DatabaseWorker;
{
class DatabaseWorker;
class PreparedStatement;
class Operation;
class DbWorker;
using PreparedStmtScopedPtr = boost::scoped_ptr< PreparedStatement >; class PreparedStatement;
enum ConnectionFlags class Operation;
{
class DbWorker;
using PreparedStmtScopedPtr = boost::scoped_ptr< PreparedStatement >;
enum ConnectionFlags
{
CONNECTION_ASYNC = 0x1, CONNECTION_ASYNC = 0x1,
CONNECTION_SYNC = 0x2, CONNECTION_SYNC = 0x2,
CONNECTION_BOTH = CONNECTION_ASYNC | CONNECTION_SYNC CONNECTION_BOTH = CONNECTION_ASYNC | CONNECTION_SYNC
}; };
struct ConnectionInfo struct ConnectionInfo
{ {
std::string user; std::string user;
std::string password; std::string password;
std::string database; std::string database;
@ -45,53 +48,68 @@ namespace Db
uint16_t port; uint16_t port;
uint8_t syncThreads; uint8_t syncThreads;
uint8_t asyncThreads; uint8_t asyncThreads;
}; };
using PreparedStatementMap = std::map< uint32_t, std::pair< std::string, ConnectionFlags > >; using PreparedStatementMap = std::map< uint32_t, std::pair< std::string, ConnectionFlags > >;
class DbConnection : public boost::enable_shared_from_this< DbConnection > class DbConnection :
{ public boost::enable_shared_from_this< DbConnection >
public: {
public:
// Constructor for synchronous connections. // Constructor for synchronous connections.
DbConnection( ConnectionInfo& connInfo ); DbConnection( ConnectionInfo& connInfo );
// Constructor for asynchronous connections. // Constructor for asynchronous connections.
DbConnection( Core::LockedWaitQueue< boost::shared_ptr< Operation > >* queue, ConnectionInfo& connInfo ); DbConnection( Core::LockedWaitQueue< boost::shared_ptr< Operation > >* queue, ConnectionInfo& connInfo );
virtual ~DbConnection(); virtual ~DbConnection();
virtual uint32_t open(); virtual uint32_t open();
void close(); void close();
bool prepareStatements(); bool prepareStatements();
bool execute( const std::string& sql ); bool execute( const std::string& sql );
bool execute( boost::shared_ptr< PreparedStatement > stmt ); bool execute( boost::shared_ptr< PreparedStatement > stmt );
boost::shared_ptr< Mysql::ResultSet > query( const std::string& sql ); boost::shared_ptr< Mysql::ResultSet > query( const std::string& sql );
boost::shared_ptr< Mysql::ResultSet > query( boost::shared_ptr< PreparedStatement > stmt ); boost::shared_ptr< Mysql::ResultSet > query( boost::shared_ptr< PreparedStatement > stmt );
void beginTransaction(); void beginTransaction();
void rollbackTransaction(); void rollbackTransaction();
void commitTransaction(); void commitTransaction();
bool ping(); bool ping();
uint32_t getLastError(); uint32_t getLastError();
bool lockIfReady(); bool lockIfReady();
void unlock(); void unlock();
boost::shared_ptr< Mysql::Connection > getConnection() { return m_pConnection; } boost::shared_ptr< Mysql::Connection > getConnection()
{
return m_pConnection;
}
boost::shared_ptr< Mysql::PreparedStatement > getPreparedStatement( uint32_t index ); boost::shared_ptr< Mysql::PreparedStatement > getPreparedStatement( uint32_t index );
void prepareStatement( uint32_t index, const std::string& sql, ConnectionFlags flags ); void prepareStatement( uint32_t index, const std::string& sql, ConnectionFlags flags );
virtual void doPrepareStatements() = 0; virtual void doPrepareStatements() = 0;
protected: protected:
std::vector< boost::shared_ptr< Mysql::PreparedStatement > > m_stmts; std::vector< boost::shared_ptr< Mysql::PreparedStatement > > m_stmts;
PreparedStatementMap m_queries; PreparedStatementMap m_queries;
bool m_reconnecting; bool m_reconnecting;
bool m_prepareError; bool m_prepareError;
private: private:
LockedWaitQueue< boost::shared_ptr< Operation > >* m_queue; LockedWaitQueue< boost::shared_ptr< Operation > >* m_queue;
boost::shared_ptr< DbWorker > m_worker; boost::shared_ptr< DbWorker > m_worker;
boost::shared_ptr< Mysql::Connection > m_pConnection; boost::shared_ptr< Mysql::Connection > m_pConnection;
@ -100,8 +118,9 @@ namespace Db
std::mutex m_mutex; std::mutex m_mutex;
DbConnection( DbConnection const& right ) = delete; DbConnection( DbConnection const& right ) = delete;
DbConnection& operator=( DbConnection const& right ) = delete; DbConnection& operator=( DbConnection const& right ) = delete;
}; };
} }
} }

View file

@ -11,11 +11,11 @@ Core::Db::DbLoader::DbLoader()
{ {
} }
template <class T> template< class T >
Core::Db::DbLoader& Core::Db::DbLoader::addDb( Core::Db::DbWorkerPool< T >& pool, const ConnectionInfo& info ) Core::Db::DbLoader& Core::Db::DbLoader::addDb( Core::Db::DbWorkerPool< T >& pool, const ConnectionInfo& info )
{ {
m_open.push([this, info, &pool]() -> bool m_open.push( [ this, info, &pool ]()->bool
{ {
auto pLog = g_fw.get< Logger >(); auto pLog = g_fw.get< Logger >();
@ -24,7 +24,8 @@ Core::Db::DbLoader& Core::Db::DbLoader::addDb( Core::Db::DbWorkerPool< T >& pool
if( asyncThreads < 1 || asyncThreads > 32 ) if( asyncThreads < 1 || asyncThreads > 32 )
{ {
pLog->error( "database: invalid number of worker threads specified. Please pick a value between 1 and 32." ); pLog->error(
"database: invalid number of worker threads specified. Please pick a value between 1 and 32." );
return false; return false;
} }
@ -44,12 +45,13 @@ Core::Db::DbLoader& Core::Db::DbLoader::addDb( Core::Db::DbWorkerPool< T >& pool
} }
} }
m_close.push( [&pool] { pool.close(); } ); m_close.push( [ &pool ]
{ pool.close(); } );
return true; return true;
}); } );
m_prepare.push([this, info, &pool]() -> bool m_prepare.push( [ this, info, &pool ]()->bool
{ {
if( !pool.prepareStatements() ) if( !pool.prepareStatements() )
{ {
@ -58,7 +60,7 @@ Core::Db::DbLoader& Core::Db::DbLoader::addDb( Core::Db::DbWorkerPool< T >& pool
return false; return false;
} }
return true; return true;
}); } );
return *this; return *this;
} }
@ -107,6 +109,6 @@ bool Core::Db::DbLoader::process( std::queue< Predicate >& queue )
template template
Core::Db::DbLoader& Core::Db::DbLoader&
Core::Db::DbLoader::addDb< Core::Db::CharaDbConnection >( Core::Db::DbWorkerPool< Core::Db::CharaDbConnection >&, Core::Db::DbLoader::addDb< Core::Db::CharaDbConnection >( Core::Db::DbWorkerPool< Core::Db::CharaDbConnection >&,
const ConnectionInfo& ); const ConnectionInfo& );

View file

@ -8,17 +8,15 @@
#include <string> #include <string>
#include "DbConnection.h" #include "DbConnection.h"
namespace Core namespace Core {
namespace Db {
template< class T >
class DbWorkerPool;
class DbLoader
{ {
namespace Db public:
{
template< class T >
class DbWorkerPool;
class DbLoader
{
public:
DbLoader(); DbLoader();
template< class T > template< class T >
@ -33,8 +31,9 @@ namespace Core
DATABASE_MASK_ALL = DATABASE_CHARACTER DATABASE_MASK_ALL = DATABASE_CHARACTER
}; };
private: private:
bool openDatabases(); bool openDatabases();
bool prepareStatements(); bool prepareStatements();
using Predicate = std::function< bool() >; using Predicate = std::function< bool() >;
@ -45,7 +44,7 @@ namespace Core
std::queue< Predicate > m_open; std::queue< Predicate > m_open;
std::queue< Predicate > m_prepare; std::queue< Predicate > m_prepare;
std::stack< Closer > m_close; std::stack< Closer > m_close;
}; };
} }
} }

View file

@ -6,34 +6,35 @@
#include "Util/LockedWaitQueue.h" #include "Util/LockedWaitQueue.h"
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
namespace Core namespace Core {
{ namespace Db {
namespace Db class DbConnection;
{
class DbConnection;
class Operation;
class DbWorker class Operation;
{
public: class DbWorker
{
public:
DbWorker( LockedWaitQueue< boost::shared_ptr< Operation > >* newQueue, DbConnection* connection ); DbWorker( LockedWaitQueue< boost::shared_ptr< Operation > >* newQueue, DbConnection* connection );
~DbWorker(); ~DbWorker();
private: private:
LockedWaitQueue< boost::shared_ptr< Operation > >* m_queue; LockedWaitQueue< boost::shared_ptr< Operation > >* m_queue;
DbConnection* m_pConn; DbConnection* m_pConn;
void workerThread(); void workerThread();
std::thread m_workerThread; std::thread m_workerThread;
std::atomic< bool > m_cancelationToken; std::atomic< bool > m_cancelationToken;
DbWorker( DbWorker const& right ) = delete; DbWorker( DbWorker const& right ) = delete;
DbWorker& operator=( DbWorker const& right ) = delete;
};
}
}
DbWorker& operator=( DbWorker const& right ) = delete;
};
}
}
#endif //SAPPHIRE_DBWORKER_H #endif //SAPPHIRE_DBWORKER_H

View file

@ -12,7 +12,8 @@
extern Core::Framework g_fw; extern Core::Framework g_fw;
class PingOperation : public Core::Db::Operation class PingOperation :
public Core::Db::Operation
{ {
bool execute() override bool execute() override
{ {
@ -22,8 +23,9 @@ class PingOperation : public Core::Db::Operation
}; };
template< class T > template< class T >
Core::Db::DbWorkerPool<T>::DbWorkerPool() Core::Db::DbWorkerPool< T >::DbWorkerPool()
: m_queue( new Core::LockedWaitQueue< boost::shared_ptr< Operation > >() ), :
m_queue( new Core::LockedWaitQueue< boost::shared_ptr< Operation > >() ),
m_asyncThreads( 0 ), m_asyncThreads( 0 ),
m_synchThreads( 0 ) m_synchThreads( 0 )
{ {
@ -38,7 +40,7 @@ Core::Db::DbWorkerPool< T >::~DbWorkerPool()
template< class T > template< class T >
void Core::Db::DbWorkerPool< T >::setConnectionInfo( const ConnectionInfo& info, void Core::Db::DbWorkerPool< T >::setConnectionInfo( const ConnectionInfo& info,
uint8_t asyncThreads, uint8_t asyncThreads,
uint8_t synchThreads) uint8_t synchThreads )
{ {
m_connectionInfo = info; m_connectionInfo = info;
m_asyncThreads = asyncThreads; m_asyncThreads = asyncThreads;
@ -63,7 +65,7 @@ uint32_t Core::Db::DbWorkerPool< T >::open()
if( !error ) if( !error )
{ {
pLog->info( "[DbPool] DatabasePool " + getDatabaseName() + " opened successfully. " + pLog->info( "[DbPool] DatabasePool " + getDatabaseName() + " opened successfully. " +
std::to_string( ( m_connections[IDX_SYNCH].size() + m_connections[IDX_ASYNC].size() ) ) + std::to_string( ( m_connections[ IDX_SYNCH ].size() + m_connections[ IDX_ASYNC ].size() ) ) +
" total connections running." ); " total connections running." );
} }
@ -74,14 +76,14 @@ template< class T >
void Core::Db::DbWorkerPool< T >::close() void Core::Db::DbWorkerPool< T >::close()
{ {
auto pLog = g_fw.get< Logger >(); auto pLog = g_fw.get< Logger >();
pLog->info("[DbPool] Closing down DatabasePool " + getDatabaseName() ); pLog->info( "[DbPool] Closing down DatabasePool " + getDatabaseName() );
m_connections[IDX_ASYNC].clear(); m_connections[ IDX_ASYNC ].clear();
m_connections[IDX_SYNCH].clear(); m_connections[ IDX_SYNCH ].clear();
pLog->info("[DbPool] All connections on DatabasePool " + getDatabaseName() + "closed." ); pLog->info( "[DbPool] All connections on DatabasePool " + getDatabaseName() + "closed." );
} }
template< class T > template< class T >
bool Core::Db::DbWorkerPool<T>::prepareStatements() bool Core::Db::DbWorkerPool< T >::prepareStatements()
{ {
for( auto& connections : m_connections ) for( auto& connections : m_connections )
for( auto& connection : connections ) for( auto& connection : connections )
@ -101,7 +103,8 @@ bool Core::Db::DbWorkerPool<T>::prepareStatements()
} }
template< class T > template< class T >
boost::shared_ptr< Mysql::ResultSet > Core::Db::DbWorkerPool< T >::query( const std::string& sql, boost::shared_ptr< T > connection ) boost::shared_ptr< Mysql::ResultSet >
Core::Db::DbWorkerPool< T >::query( const std::string& sql, boost::shared_ptr< T > connection )
{ {
if( !connection ) if( !connection )
connection = getFreeConnection(); connection = getFreeConnection();
@ -113,7 +116,8 @@ boost::shared_ptr< Mysql::ResultSet > Core::Db::DbWorkerPool< T >::query( const
} }
template< class T > template< class T >
boost::shared_ptr< Mysql::PreparedResultSet > Core::Db::DbWorkerPool< T >::query( boost::shared_ptr< PreparedStatement > stmt ) boost::shared_ptr< Mysql::PreparedResultSet >
Core::Db::DbWorkerPool< T >::query( boost::shared_ptr< PreparedStatement > stmt )
{ {
auto connection = getFreeConnection(); auto connection = getFreeConnection();
auto ret = boost::static_pointer_cast< Mysql::PreparedResultSet >( connection->query( stmt ) ); auto ret = boost::static_pointer_cast< Mysql::PreparedResultSet >( connection->query( stmt ) );
@ -123,7 +127,8 @@ boost::shared_ptr< Mysql::PreparedResultSet > Core::Db::DbWorkerPool< T >::query
} }
template< class T > template< class T >
boost::shared_ptr< Core::Db::PreparedStatement > Core::Db::DbWorkerPool< T >::getPreparedStatement( PreparedStatementIndex index ) boost::shared_ptr< Core::Db::PreparedStatement >
Core::Db::DbWorkerPool< T >::getPreparedStatement( PreparedStatementIndex index )
{ {
return boost::make_shared< PreparedStatement >( index ); return boost::make_shared< PreparedStatement >( index );
} }
@ -143,7 +148,7 @@ void Core::Db::DbWorkerPool< T >::escapeString( std::string& str )
template< class T > template< class T >
void Core::Db::DbWorkerPool< T >::keepAlive() void Core::Db::DbWorkerPool< T >::keepAlive()
{ {
for( auto& connection : m_connections[IDX_SYNCH] ) for( auto& connection : m_connections[ IDX_SYNCH ] )
{ {
if( connection->lockIfReady() ) if( connection->lockIfReady() )
{ {
@ -152,7 +157,7 @@ void Core::Db::DbWorkerPool< T >::keepAlive()
} }
} }
const auto count = m_connections[IDX_ASYNC].size(); const auto count = m_connections[ IDX_ASYNC ].size();
for( uint8_t i = 0; i < count; ++i ) for( uint8_t i = 0; i < count; ++i )
enqueue( boost::make_shared< PingOperation >() ); enqueue( boost::make_shared< PingOperation >() );
} }
@ -163,8 +168,9 @@ uint32_t Core::Db::DbWorkerPool< T >::openConnections( InternalIndex type, uint8
for( uint8_t i = 0; i < numConnections; ++i ) for( uint8_t i = 0; i < numConnections; ++i )
{ {
// Create the connection // Create the connection
auto connection = [&] { auto connection = [ & ]
switch (type) {
switch( type )
{ {
case IDX_ASYNC: case IDX_ASYNC:
return boost::make_shared< T >( m_queue.get(), m_connectionInfo ); return boost::make_shared< T >( m_queue.get(), m_connectionInfo );
@ -178,23 +184,23 @@ uint32_t Core::Db::DbWorkerPool< T >::openConnections( InternalIndex type, uint8
if( uint32_t error = connection->open() ) if( uint32_t error = connection->open() )
{ {
// Failed to open a connection or invalid version, abort and cleanup // Failed to open a connection or invalid version, abort and cleanup
m_connections[type].clear(); m_connections[ type ].clear();
return error; return error;
} }
m_connections[type].push_back( connection ); m_connections[ type ].push_back( connection );
} }
return 0; return 0;
} }
template< class T > template< class T >
unsigned long Core::Db::DbWorkerPool< T >::escapeString( char *to, const char *from, unsigned long length ) unsigned long Core::Db::DbWorkerPool< T >::escapeString( char* to, const char* from, unsigned long length )
{ {
if( !to || !from || !length ) if( !to || !from || !length )
return 0; return 0;
return mysql_real_escape_string( return mysql_real_escape_string(
m_connections[IDX_SYNCH].front()->getConnection()->getRawCon(), to, from, length ); m_connections[ IDX_SYNCH ].front()->getConnection()->getRawCon(), to, from, length );
} }
template< class T > template< class T >
@ -207,12 +213,12 @@ template< class T >
boost::shared_ptr< T > Core::Db::DbWorkerPool< T >::getFreeConnection() boost::shared_ptr< T > Core::Db::DbWorkerPool< T >::getFreeConnection()
{ {
uint8_t i = 0; uint8_t i = 0;
const auto numCons = m_connections[IDX_SYNCH].size(); const auto numCons = m_connections[ IDX_SYNCH ].size();
boost::shared_ptr< T > connection = nullptr; boost::shared_ptr< T > connection = nullptr;
while( true ) while( true )
{ {
connection = m_connections[IDX_SYNCH][i++ % numCons]; connection = m_connections[ IDX_SYNCH ][ i++ % numCons ];
if( connection->lockIfReady() ) if( connection->lockIfReady() )
break; break;
@ -277,4 +283,5 @@ void DatabaseWorkerPool<T>::ExecuteOrAppend(SQLTransaction& trans, PreparedState
} }
*/ */
template class Core::Db::DbWorkerPool< Core::Db::CharaDbConnection >; template
class Core::Db::DbWorkerPool< Core::Db::CharaDbConnection >;

View file

@ -7,15 +7,17 @@
#include <ResultSet.h> #include <ResultSet.h>
#include "Util/LockedWaitQueue.h" #include "Util/LockedWaitQueue.h"
#include "DbConnection.h" #include "DbConnection.h"
namespace Core
{ namespace Core {
namespace Db namespace Db {
{
template< typename T > template< typename T >
class LockedWaitQueue; class LockedWaitQueue;
class Operation; class Operation;
class PreparedStatement; class PreparedStatement;
struct ConnectionInfo; struct ConnectionInfo;
template< class T > template< class T >
@ -34,7 +36,7 @@ public:
~DbWorkerPool(); ~DbWorkerPool();
void setConnectionInfo( const ConnectionInfo& info, uint8_t asyncThreads, uint8_t synchThreads); void setConnectionInfo( const ConnectionInfo& info, uint8_t asyncThreads, uint8_t synchThreads );
uint32_t open(); uint32_t open();
@ -49,12 +51,17 @@ public:
// Async execution // Async execution
void execute( const std::string& sql ); void execute( const std::string& sql );
void execute( boost::shared_ptr< PreparedStatement > stmt ); void execute( boost::shared_ptr< PreparedStatement > stmt );
// Sync execution // Sync execution
void directExecute( const std::string& sql ); void directExecute( const std::string& sql );
void directExecute( boost::shared_ptr< PreparedStatement > stmt ); void directExecute( boost::shared_ptr< PreparedStatement > stmt );
boost::shared_ptr< Mysql::ResultSet > query( const std::string& sql, boost::shared_ptr< T > connection = nullptr );
boost::shared_ptr< Mysql::ResultSet >
query( const std::string& sql, boost::shared_ptr< T > connection = nullptr );
boost::shared_ptr< Mysql::PreparedResultSet > query( boost::shared_ptr< PreparedStatement > stmt ); boost::shared_ptr< Mysql::PreparedResultSet > query( boost::shared_ptr< PreparedStatement > stmt );
using PreparedStatementIndex = typename T::Statements; using PreparedStatementIndex = typename T::Statements;
@ -68,7 +75,7 @@ public:
private: private:
uint32_t openConnections( InternalIndex type, uint8_t numConnections ); uint32_t openConnections( InternalIndex type, uint8_t numConnections );
unsigned long escapeString( char *to, const char *from, unsigned long length ); unsigned long escapeString( char* to, const char* from, unsigned long length );
void enqueue( boost::shared_ptr< Operation > op ); void enqueue( boost::shared_ptr< Operation > op );

View file

@ -1,38 +1,48 @@
#ifndef SAPPHIRE_OPERATION_H #ifndef SAPPHIRE_OPERATION_H
#define SAPPHIRE_OPERATION_H #define SAPPHIRE_OPERATION_H
namespace Mysql namespace Mysql {
{ class Connection;
class Connection;
} }
namespace Core namespace Core {
{ namespace Db {
namespace Db class DbConnection;
{
class DbConnection;
class PreparedStatement;
class Operation class PreparedStatement;
class Operation
{
public:
Operation() :
m_pConn( nullptr )
{ {
public: }
Operation() : m_pConn( nullptr ) { }
virtual ~Operation() { } virtual ~Operation()
{
}
virtual int call() virtual int call()
{ {
execute(); execute();
return 0; return 0;
} }
virtual bool execute() = 0; virtual bool execute() = 0;
virtual void setConnection( DbConnection* pCon ) { m_pConn = pCon; }
virtual void setConnection( DbConnection* pCon )
{
m_pConn = pCon;
}
DbConnection* m_pConn; DbConnection* m_pConn;
private: private:
Operation( Operation const& right ) = delete; Operation( Operation const& right ) = delete;
Operation& operator=( Operation const& right ) = delete; Operation& operator=( Operation const& right ) = delete;
}; };
} }

View file

@ -8,9 +8,13 @@
Core::Db::PreparedStatement::PreparedStatement( uint32_t index ) : Core::Db::PreparedStatement::PreparedStatement( uint32_t index ) :
m_stmt( nullptr ), m_stmt( nullptr ),
m_index( index ) { } m_index( index )
{
}
Core::Db::PreparedStatement::~PreparedStatement() { } Core::Db::PreparedStatement::~PreparedStatement()
{
}
void Core::Db::PreparedStatement::bindParameters() void Core::Db::PreparedStatement::bindParameters()
{ {
@ -19,34 +23,34 @@ void Core::Db::PreparedStatement::bindParameters()
uint8_t i = 1; uint8_t i = 1;
for( ; i < m_statementData.size(); i++ ) for( ; i < m_statementData.size(); i++ )
{ {
switch( m_statementData[i].type) switch( m_statementData[ i ].type )
{ {
case TYPE_BOOL: case TYPE_BOOL:
m_stmt->setBoolean( i, m_statementData[i].data.boolean ); m_stmt->setBoolean( i, m_statementData[ i ].data.boolean );
break; break;
case TYPE_UI: case TYPE_UI:
m_stmt->setUInt( i, m_statementData[i].data.ui32 ); m_stmt->setUInt( i, m_statementData[ i ].data.ui32 );
break; break;
case TYPE_I: case TYPE_I:
m_stmt->setInt( i, m_statementData[i].data.i32 ); m_stmt->setInt( i, m_statementData[ i ].data.i32 );
break; break;
case TYPE_UI64: case TYPE_UI64:
m_stmt->setUInt64( i, m_statementData[i].data.ui64 ); m_stmt->setUInt64( i, m_statementData[ i ].data.ui64 );
break; break;
case TYPE_I64: case TYPE_I64:
m_stmt->setInt64( i, m_statementData[i].data.i64 ); m_stmt->setInt64( i, m_statementData[ i ].data.i64 );
break; break;
case TYPE_DOUBLE: case TYPE_DOUBLE:
m_stmt->setDouble( i, m_statementData[i].data.d ); m_stmt->setDouble( i, m_statementData[ i ].data.d );
break; break;
case TYPE_STRING: case TYPE_STRING:
m_stmt->setString( i, std::string( reinterpret_cast< char* >( m_statementData[i].binary.data() ) ) ); m_stmt->setString( i, std::string( reinterpret_cast< char* >( m_statementData[ i ].binary.data() ) ) );
break; break;
case TYPE_BINARY: case TYPE_BINARY:
{ {
std::stringstream *is = new std::stringstream; std::stringstream* is = new std::stringstream;
for( auto entry : m_statementData[i].binary ) for( auto entry : m_statementData[ i ].binary )
is->rdbuf()->sputc( static_cast< char > ( entry ) ); is->rdbuf()->sputc( static_cast< char > ( entry ) );
m_stmt->setBlob( i, is ); m_stmt->setBlob( i, is );
@ -65,17 +69,17 @@ void Core::Db::PreparedStatement::setBool( uint8_t index, const bool value )
if( index >= m_statementData.size() ) if( index >= m_statementData.size() )
m_statementData.resize( index + 1 ); m_statementData.resize( index + 1 );
m_statementData[index].data.boolean = value; m_statementData[ index ].data.boolean = value;
m_statementData[index].type = TYPE_BOOL; m_statementData[ index ].type = TYPE_BOOL;
} }
void Core::Db::PreparedStatement::setUInt( uint8_t index, uint32_t value ) void Core::Db::PreparedStatement::setUInt( uint8_t index, uint32_t value )
{ {
if( index >= m_statementData.size() ) if( index >= m_statementData.size() )
m_statementData.resize(index+1); m_statementData.resize( index + 1 );
m_statementData[index].data.ui32 = value; m_statementData[ index ].data.ui32 = value;
m_statementData[index].type = TYPE_UI; m_statementData[ index ].type = TYPE_UI;
} }
void Core::Db::PreparedStatement::setUInt64( uint8_t index, uint64_t value ) void Core::Db::PreparedStatement::setUInt64( uint8_t index, uint64_t value )
@ -83,8 +87,8 @@ void Core::Db::PreparedStatement::setUInt64( uint8_t index, uint64_t value )
if( index >= m_statementData.size() ) if( index >= m_statementData.size() )
m_statementData.resize( index + 1 ); m_statementData.resize( index + 1 );
m_statementData[index].data.ui64 = value; m_statementData[ index ].data.ui64 = value;
m_statementData[index].type = TYPE_UI64; m_statementData[ index ].type = TYPE_UI64;
} }
void Core::Db::PreparedStatement::setInt( uint8_t index, int32_t value ) void Core::Db::PreparedStatement::setInt( uint8_t index, int32_t value )
@ -92,17 +96,17 @@ void Core::Db::PreparedStatement::setInt( uint8_t index, int32_t value )
if( index >= m_statementData.size() ) if( index >= m_statementData.size() )
m_statementData.resize( index + 1 ); m_statementData.resize( index + 1 );
m_statementData[index].data.i32 = value; m_statementData[ index ].data.i32 = value;
m_statementData[index].type = TYPE_I; m_statementData[ index ].type = TYPE_I;
} }
void Core::Db::PreparedStatement::setInt64( uint8_t index, int64_t value ) void Core::Db::PreparedStatement::setInt64( uint8_t index, int64_t value )
{ {
if( index >= m_statementData.size() ) if( index >= m_statementData.size() )
m_statementData.resize( index + 1); m_statementData.resize( index + 1 );
m_statementData[index].data.i64 = value; m_statementData[ index ].data.i64 = value;
m_statementData[index].type = TYPE_I64; m_statementData[ index ].type = TYPE_I64;
} }
void Core::Db::PreparedStatement::setDouble( uint8_t index, double value ) void Core::Db::PreparedStatement::setDouble( uint8_t index, double value )
@ -110,8 +114,8 @@ void Core::Db::PreparedStatement::setDouble( uint8_t index, double value )
if( index >= m_statementData.size() ) if( index >= m_statementData.size() )
m_statementData.resize( index + 1 ); m_statementData.resize( index + 1 );
m_statementData[index].data.d = value; m_statementData[ index ].data.d = value;
m_statementData[index].type = TYPE_DOUBLE; m_statementData[ index ].type = TYPE_DOUBLE;
} }
void Core::Db::PreparedStatement::setString( uint8_t index, const std::string& value ) void Core::Db::PreparedStatement::setString( uint8_t index, const std::string& value )
@ -119,9 +123,9 @@ void Core::Db::PreparedStatement::setString( uint8_t index, const std::string& v
if( index >= m_statementData.size() ) if( index >= m_statementData.size() )
m_statementData.resize( index + 1 ); m_statementData.resize( index + 1 );
m_statementData[index].binary.resize( value.length() + 1 ); m_statementData[ index ].binary.resize( value.length() + 1 );
memcpy( m_statementData[index].binary.data(), value.c_str(), value.length() + 1 ); memcpy( m_statementData[ index ].binary.data(), value.c_str(), value.length() + 1 );
m_statementData[index].type = TYPE_STRING; m_statementData[ index ].type = TYPE_STRING;
} }
void Core::Db::PreparedStatement::setBinary( uint8_t index, const std::vector< uint8_t >& value ) void Core::Db::PreparedStatement::setBinary( uint8_t index, const std::vector< uint8_t >& value )
@ -129,8 +133,8 @@ void Core::Db::PreparedStatement::setBinary( uint8_t index, const std::vector< u
if( index >= m_statementData.size() ) if( index >= m_statementData.size() )
m_statementData.resize( index + 1 ); m_statementData.resize( index + 1 );
m_statementData[index].binary = value; m_statementData[ index ].binary = value;
m_statementData[index].type = TYPE_BINARY; m_statementData[ index ].type = TYPE_BINARY;
} }
void Core::Db::PreparedStatement::setNull( uint8_t index ) void Core::Db::PreparedStatement::setNull( uint8_t index )
@ -138,7 +142,7 @@ void Core::Db::PreparedStatement::setNull( uint8_t index )
if( index >= m_statementData.size() ) if( index >= m_statementData.size() )
m_statementData.resize( index + 1 ); m_statementData.resize( index + 1 );
m_statementData[index].type = TYPE_NULL; m_statementData[ index ].type = TYPE_NULL;
} }
uint32_t Core::Db::PreparedStatement::getIndex() const uint32_t Core::Db::PreparedStatement::getIndex() const
@ -146,7 +150,7 @@ uint32_t Core::Db::PreparedStatement::getIndex() const
return m_index; return m_index;
} }
void Core::Db::PreparedStatement::setMysqlPS( boost::shared_ptr< Mysql::PreparedStatement> pStmt ) void Core::Db::PreparedStatement::setMysqlPS( boost::shared_ptr< Mysql::PreparedStatement > pStmt )
{ {
m_stmt = pStmt; m_stmt = pStmt;
} }

View file

@ -1,32 +1,30 @@
#ifndef SAPPHIRE_PREPAREDSTATEMENT_H #ifndef SAPPHIRE_PREPAREDSTATEMENT_H
#define SAPPHIRE_PREPAREDSTATEMENT_H #define SAPPHIRE_PREPAREDSTATEMENT_H
#include <stdint.h> #include <stdint.h>
#include <vector> #include <vector>
#include <string> #include <string>
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include "Operation.h" #include "Operation.h"
namespace Mysql namespace Mysql {
{ class PreparedStatement;
class PreparedStatement;
} }
namespace Core namespace Core {
namespace Db {
union PreparedStatementDataUnion
{ {
namespace Db
{
union PreparedStatementDataUnion
{
bool boolean; bool boolean;
uint32_t ui32; uint32_t ui32;
int32_t i32; int32_t i32;
uint64_t ui64; uint64_t ui64;
int64_t i64; int64_t i64;
double d; double d;
}; };
enum PreparedStatementValueType enum PreparedStatementValueType
{ {
TYPE_BOOL, TYPE_BOOL,
TYPE_UI, TYPE_UI,
TYPE_UI64, TYPE_UI64,
@ -36,49 +34,59 @@ namespace Db
TYPE_STRING, TYPE_STRING,
TYPE_BINARY, TYPE_BINARY,
TYPE_NULL TYPE_NULL
}; };
struct PreparedStatementData struct PreparedStatementData
{ {
PreparedStatementDataUnion data; PreparedStatementDataUnion data;
PreparedStatementValueType type; PreparedStatementValueType type;
std::vector< uint8_t > binary; std::vector< uint8_t > binary;
}; };
class PreparedStatement class PreparedStatement
{ {
public: public:
explicit PreparedStatement( uint32_t index ); explicit PreparedStatement( uint32_t index );
~PreparedStatement(); ~PreparedStatement();
void setBool( uint8_t index, bool value ); void setBool( uint8_t index, bool value );
void setUInt( uint8_t index, uint32_t value ); void setUInt( uint8_t index, uint32_t value );
void setUInt64( uint8_t index, uint64_t value ); void setUInt64( uint8_t index, uint64_t value );
void setInt( uint8_t index, int32_t value ); void setInt( uint8_t index, int32_t value );
void setInt64( uint8_t index, int64_t value ); void setInt64( uint8_t index, int64_t value );
void setDouble( uint8_t index, double value ); void setDouble( uint8_t index, double value );
void setString( uint8_t index, const std::string& value ); void setString( uint8_t index, const std::string& value );
void setBinary( uint8_t index, const std::vector< uint8_t >& value ); void setBinary( uint8_t index, const std::vector< uint8_t >& value );
void setNull( uint8_t index ); void setNull( uint8_t index );
uint32_t getIndex() const; uint32_t getIndex() const;
void setMysqlPS( boost::shared_ptr< Mysql::PreparedStatement > pStmt ); void setMysqlPS( boost::shared_ptr< Mysql::PreparedStatement > pStmt );
void bindParameters(); void bindParameters();
protected: protected:
boost::shared_ptr< Mysql::PreparedStatement > m_stmt; boost::shared_ptr< Mysql::PreparedStatement > m_stmt;
uint32_t m_index; uint32_t m_index;
std::vector< PreparedStatementData > m_statementData; std::vector< PreparedStatementData > m_statementData;
PreparedStatement( PreparedStatement const& right ) = delete; PreparedStatement( PreparedStatement const& right ) = delete;
PreparedStatement& operator=( PreparedStatement const& right ) = delete; PreparedStatement& operator=( PreparedStatement const& right ) = delete;
}; };
} }
} }
#endif //SAPPHIRE_PREPAREDSTATEMENT_H #endif //SAPPHIRE_PREPAREDSTATEMENT_H

View file

@ -4,7 +4,7 @@
#include "DbConnection.h" #include "DbConnection.h"
#include "PreparedStatement.h" #include "PreparedStatement.h"
Core::Db::StatementTask::StatementTask( const std::string &sql, bool async ) Core::Db::StatementTask::StatementTask( const std::string& sql, bool async )
{ {
m_sql = sql; m_sql = sql;
m_hasResult = async; // If the operation is async, then there's a result m_hasResult = async; // If the operation is async, then there's a result
@ -38,10 +38,10 @@ bool Core::Db::StatementTask::execute()
} }
Core::Db::PreparedStatementTask::PreparedStatementTask( boost::shared_ptr< Core::Db::PreparedStatement > stmt,
Core::Db::PreparedStatementTask::PreparedStatementTask( boost::shared_ptr< Core::Db::PreparedStatement > stmt, bool async ) : bool async ) :
m_stmt(stmt) m_stmt( stmt )
//, m_result(nullptr) //, m_result(nullptr)
{ {
m_hasResult = async; // If the operation is async, then there's a result m_hasResult = async; // If the operation is async, then there's a result
} }

View file

@ -5,15 +5,14 @@
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include "Operation.h" #include "Operation.h"
namespace Core namespace Core {
{ namespace Db {
namespace Db class PreparedStatement;
{
class PreparedStatement;
class StatementTask : public Operation class StatementTask :
{ public Operation
public: {
public:
StatementTask( const std::string& sql, bool async = false ); StatementTask( const std::string& sql, bool async = false );
@ -26,26 +25,28 @@ namespace Db
// return m_result->get_future(); // return m_result->get_future();
// } // }
private: private:
std::string m_sql; std::string m_sql;
bool m_hasResult; bool m_hasResult;
// QueryResultPromise *m_result; // QueryResultPromise *m_result;
}; };
class PreparedStatementTask :
public Operation
{
public:
PreparedStatementTask( boost::shared_ptr< PreparedStatement > stmt, bool async = false );
class PreparedStatementTask : public Operation
{
public:
PreparedStatementTask( boost::shared_ptr< PreparedStatement > stmt, bool async = false);
~PreparedStatementTask(); ~PreparedStatementTask();
bool execute() override; bool execute() override;
//PreparedQueryResultFuture getFuture() { return m_result->get_future(); } //PreparedQueryResultFuture getFuture() { return m_result->get_future(); }
protected: protected:
boost::shared_ptr< PreparedStatement > m_stmt; boost::shared_ptr< PreparedStatement > m_stmt;
bool m_hasResult; bool m_hasResult;
//PreparedQueryResultPromise* m_result; //PreparedQueryResultPromise* m_result;
}; };
} }
} }

View file

@ -114,12 +114,12 @@ bool Core::Data::ExdData::loadZoneInfo()
break; break;
sumPc += getField< uint8_t >( weatherRateFields, i + 1 ); sumPc += getField< uint8_t >( weatherRateFields, i + 1 );
info.weather_rate_map[sumPc] = weatherId; info.weather_rate_map[ sumPc ] = weatherId;
i += 2; i += 2;
} }
m_zoneInfoMap[id] = info; m_zoneInfoMap[ id ] = info;
} }
@ -136,7 +136,7 @@ bool Core::Data::ExdData::loadStatusEffectInfo()
auto& fields = row.second; auto& fields = row.second;
uint32_t id = row.first; uint32_t id = row.first;
StatusEffectInfo info { 0 }; StatusEffectInfo info{ 0 };
info.id = id; info.id = id;
info.name = getField< std::string >( fields, 0 ); info.name = getField< std::string >( fields, 0 );
info.lock_movement = getField< bool >( fields, 7 ); // 7 info.lock_movement = getField< bool >( fields, 7 ); // 7
@ -149,7 +149,7 @@ bool Core::Data::ExdData::loadStatusEffectInfo()
info.is_fc_buff = getField< bool >( fields, 21 ); // 21 info.is_fc_buff = getField< bool >( fields, 21 ); // 21
info.invisibility = getField< bool >( fields, 22 ); // 22 info.invisibility = getField< bool >( fields, 22 ); // 22
m_statusEffectInfoMap[id] = info; m_statusEffectInfoMap[ id ] = info;
} }
return true; return true;
@ -204,7 +204,7 @@ bool Core::Data::ExdData::loadClassJobInfo()
for( auto row : rows ) for( auto row : rows )
{ {
auto& fields = row.second; auto& fields = row.second;
ClassJobInfo info { 0 }; ClassJobInfo info{ 0 };
uint32_t id = row.first; uint32_t id = row.first;
@ -230,7 +230,7 @@ bool Core::Data::ExdData::loadClassJobInfo()
info.mod_mnd = getField< uint16_t >( fields, 15 ); info.mod_mnd = getField< uint16_t >( fields, 15 );
info.mod_pie = getField< uint16_t >( fields, 16 ); info.mod_pie = getField< uint16_t >( fields, 16 );
m_classJobInfoMap[id] = info; m_classJobInfoMap[ id ] = info;
} }
return true; return true;
@ -245,7 +245,7 @@ bool Core::Data::ExdData::loadParamGrowInfo()
{ {
auto& fields = row.second; auto& fields = row.second;
ParamGrowthInfo info { 0 }; ParamGrowthInfo info{ 0 };
uint32_t id = row.first; uint32_t id = row.first;
info.level = id; info.level = id;
info.needed_exp = getField< int32_t >( fields, 0 ); info.needed_exp = getField< int32_t >( fields, 0 );
@ -253,10 +253,10 @@ bool Core::Data::ExdData::loadParamGrowInfo()
info.mp_const = getField< int32_t >( fields, 4 ); // 4 info.mp_const = getField< int32_t >( fields, 4 ); // 4
info.base_secondary = getField< int32_t >( fields, 5 );// 5 info.base_secondary = getField< int32_t >( fields, 5 );// 5
info.quest_exp_mod = getField< uint8_t >( fields, 7 ); // 7 info.quest_exp_mod = getField< uint8_t >( fields, 7 ); // 7
info.hp_mod = getField< uint16_t >(fields, 8); // 8 info.hp_mod = getField< uint16_t >( fields, 8 ); // 8
m_paramGrowthInfoMap[id] = info; m_paramGrowthInfoMap[ id ] = info;
} }
return true; return true;
@ -271,7 +271,7 @@ bool Core::Data::ExdData::loadTribeInfo()
{ {
auto& fields = row.second; auto& fields = row.second;
TribeInfo info { 0 }; TribeInfo info{ 0 };
uint32_t id = row.first; uint32_t id = row.first;
info.id = id; info.id = id;
info.name = getField< std::string >( fields, 0 ); info.name = getField< std::string >( fields, 0 );
@ -282,7 +282,7 @@ bool Core::Data::ExdData::loadTribeInfo()
info.mod_mnd = getField< int8_t >( fields, 8 ); info.mod_mnd = getField< int8_t >( fields, 8 );
info.mod_pie = getField< int8_t >( fields, 9 ); info.mod_pie = getField< int8_t >( fields, 9 );
m_tribeInfoMap[id] = info; m_tribeInfoMap[ id ] = info;
} }
return true; return true;
@ -297,7 +297,7 @@ bool Core::Data::ExdData::loadEventActionInfo()
{ {
auto& fields = row.second; auto& fields = row.second;
EventActionInfo info { 0 }; EventActionInfo info{ 0 };
uint32_t id = row.first; uint32_t id = row.first;
@ -313,7 +313,7 @@ bool Core::Data::ExdData::loadEventActionInfo()
info.name = name; info.name = name;
info.castTime = time * 1000; info.castTime = time * 1000;
m_EventActionInfoMap[id] = info; m_EventActionInfoMap[ id ] = info;
} }
@ -343,7 +343,7 @@ bool Core::Data::ExdData::loadActionInfo()
uint8_t unlock_level = getField< uint8_t >( fields, 11 ); // 11 uint8_t unlock_level = getField< uint8_t >( fields, 11 ); // 11
int8_t range = getField< int8_t >( fields, 14 ); // 13 int8_t range = getField< int8_t >( fields, 14 ); // 13
bool can_target_self = getField< bool >( fields, 15 ); // 14 bool can_target_self = getField< bool >( fields, 15 ); // 14
bool can_target_party = getField< bool>( fields, 16 ); // 15 bool can_target_party = getField< bool >( fields, 16 ); // 15
bool can_target_friendly = getField< bool >( fields, 17 ); // 16 bool can_target_friendly = getField< bool >( fields, 17 ); // 16
bool can_target_enemy = getField< bool >( fields, 18 ); // 17 bool can_target_enemy = getField< bool >( fields, 18 ); // 17
@ -418,7 +418,7 @@ bool Core::Data::ExdData::loadActionInfo()
} }
boost::shared_ptr< Core::Data::PlaceNameInfo > boost::shared_ptr< Core::Data::PlaceNameInfo >
Core::Data::ExdData::getPlaceNameInfo( uint32_t placeNameId ) Core::Data::ExdData::getPlaceNameInfo( uint32_t placeNameId )
{ {
try try
{ {
@ -438,7 +438,7 @@ boost::shared_ptr< Core::Data::PlaceNameInfo >
} }
boost::shared_ptr< Core::Data::ItemInfo > boost::shared_ptr< Core::Data::ItemInfo >
Core::Data::ExdData::getItemInfo( uint32_t catalogId ) Core::Data::ExdData::getItemInfo( uint32_t catalogId )
{ {
try try
{ {
@ -470,11 +470,11 @@ boost::shared_ptr< Core::Data::ItemInfo >
} }
boost::shared_ptr< Core::Data::AetheryteInfo > boost::shared_ptr< Core::Data::AetheryteInfo >
Core::Data::ExdData::getAetheryteInfo( uint32_t aetheryteId ) Core::Data::ExdData::getAetheryteInfo( uint32_t aetheryteId )
{ {
try try
{ {
return m_aetheryteInfoMap[aetheryteId]; return m_aetheryteInfoMap[ aetheryteId ];
} }
catch( ... ) catch( ... )
{ {
@ -490,9 +490,9 @@ Core::Data::ExdData::getActionInfo( uint32_t actionId )
{ {
try try
{ {
return m_actionInfoMap[actionId]; return m_actionInfoMap[ actionId ];
} }
catch ( ... ) catch( ... )
{ {
return nullptr; return nullptr;
} }
@ -502,7 +502,7 @@ Core::Data::ExdData::getActionInfo( uint32_t actionId )
} }
boost::shared_ptr< Core::Data::CustomTalkInfo > boost::shared_ptr< Core::Data::CustomTalkInfo >
Core::Data::ExdData::getCustomTalkInfo( uint32_t customTalkId ) Core::Data::ExdData::getCustomTalkInfo( uint32_t customTalkId )
{ {
try try
@ -524,7 +524,7 @@ boost::shared_ptr< Core::Data::CustomTalkInfo >
} }
boost::shared_ptr< Core::Data::QuestInfo > boost::shared_ptr< Core::Data::QuestInfo >
Core::Data::ExdData::getQuestInfo( uint32_t questId ) Core::Data::ExdData::getQuestInfo( uint32_t questId )
{ {
@ -614,7 +614,7 @@ boost::shared_ptr< Core::Data::QuestInfo >
} }
boost::shared_ptr< Core::Data::EventItemInfo > boost::shared_ptr< Core::Data::EventItemInfo >
Core::Data::ExdData::getEventItemInfo( uint32_t eventItemId ) Core::Data::ExdData::getEventItemInfo( uint32_t eventItemId )
{ {
try try
@ -637,7 +637,7 @@ boost::shared_ptr< Core::Data::EventItemInfo >
} }
boost::shared_ptr< Core::Data::LevelInfo > boost::shared_ptr< Core::Data::LevelInfo >
Core::Data::ExdData::getLevelInfo( uint32_t levelId ) Core::Data::ExdData::getLevelInfo( uint32_t levelId )
{ {
try try
{ {
@ -660,7 +660,8 @@ boost::shared_ptr< Core::Data::LevelInfo >
return nullptr; return nullptr;
} }
const std::vector<boost::shared_ptr< Core::Data::AetheryteInfo > > Core::Data::ExdData::getAetheryteInfoForZone( uint16_t zoneId ) const std::vector< boost::shared_ptr< Core::Data::AetheryteInfo > >
Core::Data::ExdData::getAetheryteInfoForZone( uint16_t zoneId )
{ {
std::vector< boost::shared_ptr< AetheryteInfo > > aetheryteList; std::vector< boost::shared_ptr< AetheryteInfo > > aetheryteList;
@ -676,7 +677,7 @@ const std::vector<boost::shared_ptr< Core::Data::AetheryteInfo > > Core::Data::E
boost::shared_ptr< Core::Data::OpeningInfo > boost::shared_ptr< Core::Data::OpeningInfo >
Core::Data::ExdData::getOpeningInfo( uint32_t openingId ) Core::Data::ExdData::getOpeningInfo( uint32_t openingId )
{ {
try try
{ {
@ -696,7 +697,7 @@ boost::shared_ptr< Core::Data::OpeningInfo >
} }
boost::shared_ptr< Core::Data::RaceInfo > boost::shared_ptr< Core::Data::RaceInfo >
Core::Data::ExdData::getRaceInfo( uint32_t raceId ) Core::Data::ExdData::getRaceInfo( uint32_t raceId )
{ {
try try
{ {

View file

@ -22,10 +22,10 @@ case DataType::uint64: 9
namespace Core { namespace Core {
namespace Data { namespace Data {
struct ZoneInfo struct ZoneInfo
{ {
uint16_t id; uint16_t id;
std::string zone_str; std::string zone_str;
std::string zone_name; std::string zone_name;
@ -34,14 +34,14 @@ namespace Core {
int16_t discovery_index; int16_t discovery_index;
bool is_two_byte; bool is_two_byte;
uint16_t weather_rate; uint16_t weather_rate;
std::map< uint8_t, int32_t> weather_rate_map; std::map< uint8_t, int32_t > weather_rate_map;
int32_t aetheryte_index; int32_t aetheryte_index;
uint8_t zone_type; uint8_t zone_type;
}; };
struct ClassJobInfo struct ClassJobInfo
{ {
uint8_t id; uint8_t id;
std::string name; std::string name;
std::string name_short; std::string name_short;
@ -55,10 +55,10 @@ namespace Core {
uint16_t mod_int; uint16_t mod_int;
uint16_t mod_mnd; uint16_t mod_mnd;
uint16_t mod_pie; uint16_t mod_pie;
}; };
struct QuestInfo struct QuestInfo
{ {
uint32_t id; uint32_t id;
std::string name; std::string name;
std::string name_intern; std::string name_intern;
@ -93,26 +93,25 @@ namespace Core {
uint8_t reward_reputation; uint8_t reward_reputation;
std::vector< std::string > script_entity; std::vector< std::string > script_entity;
std::vector< uint32_t > script_value; std::vector< uint32_t > script_value;
}; };
struct EventActionInfo struct EventActionInfo
{ {
uint32_t id; uint32_t id;
std::string name; std::string name;
uint32_t castTime; uint32_t castTime;
}; };
struct OpeningInfo struct OpeningInfo
{ {
uint32_t id; uint32_t id;
std::string name; std::string name;
}; };
struct ParamGrowthInfo struct ParamGrowthInfo
{ {
uint32_t level; uint32_t level;
uint32_t needed_exp; uint32_t needed_exp;
int16_t hp_mod; int16_t hp_mod;
@ -120,22 +119,22 @@ namespace Core {
int16_t mp_mod; int16_t mp_mod;
int32_t base_secondary; int32_t base_secondary;
uint16_t quest_exp_mod; uint16_t quest_exp_mod;
}; };
struct CustomTalkInfo struct CustomTalkInfo
{ {
uint32_t id; uint32_t id;
std::string name_intern; std::string name_intern;
}; };
struct PlaceNameInfo struct PlaceNameInfo
{ {
uint32_t id; uint32_t id;
std::string placename; std::string placename;
}; };
struct AetheryteInfo struct AetheryteInfo
{ {
uint32_t id; uint32_t id;
std::string placename; std::string placename;
std::string placename_aethernet; std::string placename_aethernet;
@ -145,10 +144,10 @@ namespace Core {
int16_t map_coord_x; int16_t map_coord_x;
int16_t map_coord_y; int16_t map_coord_y;
}; };
struct RaceInfo struct RaceInfo
{ {
uint32_t id; uint32_t id;
std::string name; std::string name;
uint32_t male_body; uint32_t male_body;
@ -166,10 +165,10 @@ namespace Core {
int8_t mod_int; int8_t mod_int;
int8_t mod_mnd; int8_t mod_mnd;
int8_t mod_pie; int8_t mod_pie;
}; };
struct TribeInfo struct TribeInfo
{ {
uint32_t id; uint32_t id;
std::string name; std::string name;
@ -179,10 +178,10 @@ namespace Core {
int8_t mod_int; int8_t mod_int;
int8_t mod_mnd; int8_t mod_mnd;
int8_t mod_pie; int8_t mod_pie;
}; };
struct LevelInfo struct LevelInfo
{ {
uint32_t id; uint32_t id;
float x; float x;
float y; float y;
@ -190,17 +189,17 @@ namespace Core {
float r; float r;
uint32_t actor_id; uint32_t actor_id;
uint32_t zone_id; uint32_t zone_id;
}; };
struct ClassJobCategoryInfo struct ClassJobCategoryInfo
{ {
uint32_t id; uint32_t id;
// should they add new jobs, this needs to be changed // should they add new jobs, this needs to be changed
bool can_equip[0x33]; bool can_equip[0x33];
}; };
struct ItemInfo struct ItemInfo
{ {
uint32_t id; uint32_t id;
std::string name; //0 std::string name; //0
uint16_t item_level; //11 uint16_t item_level; //11
@ -218,10 +217,10 @@ namespace Core {
bool is_unique; //72 bool is_unique; //72
bool is_untradeable; //73 bool is_untradeable; //73
uint32_t class_job_index; //86 uint32_t class_job_index; //86
}; };
struct ActionInfo struct ActionInfo
{ {
uint32_t id; uint32_t id;
std::string name; // 0 std::string name; // 0
uint16_t category; // 3 uint16_t category; // 3
@ -261,18 +260,18 @@ namespace Core {
bool is_aoe; // Internal only bool is_aoe; // Internal only
}; };
struct EventItemInfo struct EventItemInfo
{ {
uint32_t id; uint32_t id;
std::string name; //0 std::string name; //0
uint32_t eventId; uint32_t eventId;
uint32_t castTime; uint32_t castTime;
}; };
struct StatusEffectInfo struct StatusEffectInfo
{ {
uint32_t id; uint32_t id;
std::string name; // 0 std::string name; // 0
bool lock_movement; // 7 bool lock_movement; // 7
@ -284,13 +283,14 @@ namespace Core {
bool inflicted_by_actor; // 17 bool inflicted_by_actor; // 17
bool is_fc_buff; // 21 bool is_fc_buff; // 21
bool invisibility; // 22 bool invisibility; // 22
}; };
class ExdData class ExdData
{ {
public: public:
ExdData(); ExdData();
~ExdData(void);
~ExdData( void );
bool init( const std::string& path ); bool init( const std::string& path );
@ -302,8 +302,8 @@ namespace Core {
return *boost::get< T >( &fields.at( index ) ); return *boost::get< T >( &fields.at( index ) );
} }
boost::shared_ptr<xiv::dat::GameData> m_data; boost::shared_ptr< xiv::dat::GameData > m_data;
boost::shared_ptr<xiv::exd::ExdData> m_exd_data; boost::shared_ptr< xiv::exd::ExdData > m_exd_data;
xiv::exd::Exd m_questDat; xiv::exd::Exd m_questDat;
xiv::exd::Exd m_openingDat; xiv::exd::Exd m_openingDat;
@ -316,40 +316,56 @@ namespace Core {
xiv::exd::Exd m_raceDat; xiv::exd::Exd m_raceDat;
xiv::exd::Exd m_eventItemDat; xiv::exd::Exd m_eventItemDat;
std::map<uint32_t, ZoneInfo> m_zoneInfoMap; std::map< uint32_t, ZoneInfo > m_zoneInfoMap;
std::map<uint8_t, ClassJobInfo> m_classJobInfoMap; std::map< uint8_t, ClassJobInfo > m_classJobInfoMap;
std::map<uint32_t, ParamGrowthInfo> m_paramGrowthInfoMap; std::map< uint32_t, ParamGrowthInfo > m_paramGrowthInfoMap;
std::map<uint16_t, EventActionInfo> m_EventActionInfoMap; std::map< uint16_t, EventActionInfo > m_EventActionInfoMap;
std::map<uint16_t, boost::shared_ptr< ActionInfo > > m_actionInfoMap; std::map< uint16_t, boost::shared_ptr< ActionInfo > > m_actionInfoMap;
std::map<uint16_t, StatusEffectInfo> m_statusEffectInfoMap; std::map< uint16_t, StatusEffectInfo > m_statusEffectInfoMap;
std::map<uint32_t, boost::shared_ptr< AetheryteInfo > > m_aetheryteInfoMap; std::map< uint32_t, boost::shared_ptr< AetheryteInfo > > m_aetheryteInfoMap;
std::map<uint32_t, TribeInfo > m_tribeInfoMap; std::map< uint32_t, TribeInfo > m_tribeInfoMap;
bool loadZoneInfo(); bool loadZoneInfo();
bool loadClassJobInfo(); bool loadClassJobInfo();
bool loadParamGrowInfo(); bool loadParamGrowInfo();
bool loadEventActionInfo(); bool loadEventActionInfo();
bool loadActionInfo(); bool loadActionInfo();
bool loadStatusEffectInfo(); bool loadStatusEffectInfo();
bool loadAetheryteInfo(); bool loadAetheryteInfo();
bool loadTribeInfo(); bool loadTribeInfo();
boost::shared_ptr< QuestInfo > getQuestInfo( uint32_t questId ); boost::shared_ptr< QuestInfo > getQuestInfo( uint32_t questId );
boost::shared_ptr< OpeningInfo > getOpeningInfo( uint32_t openingId ); boost::shared_ptr< OpeningInfo > getOpeningInfo( uint32_t openingId );
boost::shared_ptr< CustomTalkInfo > getCustomTalkInfo( uint32_t customTalkId ); boost::shared_ptr< CustomTalkInfo > getCustomTalkInfo( uint32_t customTalkId );
boost::shared_ptr< AetheryteInfo > getAetheryteInfo( uint32_t aetheryteId ); boost::shared_ptr< AetheryteInfo > getAetheryteInfo( uint32_t aetheryteId );
boost::shared_ptr< ActionInfo > getActionInfo( uint32_t actionId ); boost::shared_ptr< ActionInfo > getActionInfo( uint32_t actionId );
boost::shared_ptr< PlaceNameInfo > getPlaceNameInfo( uint32_t placeNameId ); boost::shared_ptr< PlaceNameInfo > getPlaceNameInfo( uint32_t placeNameId );
boost::shared_ptr< ItemInfo > getItemInfo( uint32_t catalogId ); boost::shared_ptr< ItemInfo > getItemInfo( uint32_t catalogId );
boost::shared_ptr< RaceInfo > getRaceInfo( uint32_t raceId ); boost::shared_ptr< RaceInfo > getRaceInfo( uint32_t raceId );
boost::shared_ptr< EventItemInfo > getEventItemInfo( uint32_t eventItemId ); boost::shared_ptr< EventItemInfo > getEventItemInfo( uint32_t eventItemId );
boost::shared_ptr< LevelInfo > getLevelInfo( uint32_t levelId ); boost::shared_ptr< LevelInfo > getLevelInfo( uint32_t levelId );
const std::vector< boost::shared_ptr< AetheryteInfo > > getAetheryteInfoForZone( uint16_t zoneId ); const std::vector< boost::shared_ptr< AetheryteInfo > > getAetheryteInfoForZone( uint16_t zoneId );
}; };
} }
} }
#endif #endif

View file

@ -4,7 +4,6 @@
#include <boost/variant.hpp> #include <boost/variant.hpp>
Core::Data::Achievement::Achievement( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::Achievement::Achievement( uint32_t row_id, Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_AchievementDat.get_row( row_id ); auto row = exdData->m_AchievementDat.get_row( row_id );
@ -244,7 +243,8 @@ Core::Data::AirshipExplorationLog::AirshipExplorationLog( uint32_t row_id, Core:
text = exdData->getField< std::string >( row, 0 ); text = exdData->getField< std::string >( row, 0 );
} }
Core::Data::AirshipExplorationParamType::AirshipExplorationParamType( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::AirshipExplorationParamType::AirshipExplorationParamType( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_AirshipExplorationParamTypeDat.get_row( row_id ); auto row = exdData->m_AirshipExplorationParamTypeDat.get_row( row_id );
name = exdData->getField< std::string >( row, 0 ); name = exdData->getField< std::string >( row, 0 );
@ -306,7 +306,8 @@ Core::Data::AnimaWeapon5SpiritTalk::AnimaWeapon5SpiritTalk( uint32_t row_id, Cor
dialogue = exdData->getField< int32_t >( row, 0 ); dialogue = exdData->getField< int32_t >( row, 0 );
} }
Core::Data::AnimaWeapon5SpiritTalkParam::AnimaWeapon5SpiritTalkParam( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::AnimaWeapon5SpiritTalkParam::AnimaWeapon5SpiritTalkParam( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_AnimaWeapon5SpiritTalkParamDat.get_row( row_id ); auto row = exdData->m_AnimaWeapon5SpiritTalkParamDat.get_row( row_id );
prologue = exdData->getField< std::string >( row, 0 ); prologue = exdData->getField< std::string >( row, 0 );
@ -959,13 +960,15 @@ Core::Data::CompanyCraftDraft::CompanyCraftDraft( uint32_t row_id, Core::Data::E
order = exdData->getField< uint32_t >( row, 8 ); order = exdData->getField< uint32_t >( row, 8 );
} }
Core::Data::CompanyCraftDraftCategory::CompanyCraftDraftCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::CompanyCraftDraftCategory::CompanyCraftDraftCategory( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_CompanyCraftDraftCategoryDat.get_row( row_id ); auto row = exdData->m_CompanyCraftDraftCategoryDat.get_row( row_id );
name = exdData->getField< std::string >( row, 0 ); name = exdData->getField< std::string >( row, 0 );
} }
Core::Data::CompanyCraftManufactoryState::CompanyCraftManufactoryState( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::CompanyCraftManufactoryState::CompanyCraftManufactoryState( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_CompanyCraftManufactoryStateDat.get_row( row_id ); auto row = exdData->m_CompanyCraftManufactoryStateDat.get_row( row_id );
name = exdData->getField< std::string >( row, 0 ); name = exdData->getField< std::string >( row, 0 );
@ -1072,7 +1075,8 @@ Core::Data::ContentFinderCondition::ContentFinderCondition( uint32_t row_id, Cor
icon = exdData->getField< uint32_t >( row, 37 ); icon = exdData->getField< uint32_t >( row, 37 );
} }
Core::Data::ContentFinderConditionTransient::ContentFinderConditionTransient( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::ContentFinderConditionTransient::ContentFinderConditionTransient( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_ContentFinderConditionTransientDat.get_row( row_id ); auto row = exdData->m_ContentFinderConditionTransientDat.get_row( row_id );
description = exdData->getField< std::string >( row, 0 ); description = exdData->getField< std::string >( row, 0 );
@ -1602,7 +1606,8 @@ Core::Data::EurekaGrowData::EurekaGrowData( uint32_t row_id, Core::Data::ExdData
baseResistance = exdData->getField< uint16_t >( row, 0 ); baseResistance = exdData->getField< uint16_t >( row, 0 );
} }
Core::Data::EurekaSphereElementAdjust::EurekaSphereElementAdjust( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::EurekaSphereElementAdjust::EurekaSphereElementAdjust( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_EurekaSphereElementAdjustDat.get_row( row_id ); auto row = exdData->m_EurekaSphereElementAdjustDat.get_row( row_id );
powerModifier = exdData->getField< uint16_t >( row, 0 ); powerModifier = exdData->getField< uint16_t >( row, 0 );
@ -1828,7 +1833,8 @@ Core::Data::GatheringItem::GatheringItem( uint32_t row_id, Core::Data::ExdDataGe
isHidden = exdData->getField< bool >( row, 2 ); isHidden = exdData->getField< bool >( row, 2 );
} }
Core::Data::GatheringItemLevelConvertTable::GatheringItemLevelConvertTable( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::GatheringItemLevelConvertTable::GatheringItemLevelConvertTable( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_GatheringItemLevelConvertTableDat.get_row( row_id ); auto row = exdData->m_GatheringItemLevelConvertTableDat.get_row( row_id );
gatheringItemLevel = exdData->getField< uint8_t >( row, 0 ); gatheringItemLevel = exdData->getField< uint8_t >( row, 0 );
@ -2024,7 +2030,8 @@ Core::Data::GcArmyExpedition::GcArmyExpedition( uint32_t row_id, Core::Data::Exd
description = exdData->getField< std::string >( row, 9 ); description = exdData->getField< std::string >( row, 9 );
} }
Core::Data::GcArmyExpeditionMemberBonus::GcArmyExpeditionMemberBonus( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::GcArmyExpeditionMemberBonus::GcArmyExpeditionMemberBonus( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_GcArmyExpeditionMemberBonusDat.get_row( row_id ); auto row = exdData->m_GcArmyExpeditionMemberBonusDat.get_row( row_id );
race = exdData->getField< uint8_t >( row, 0 ); race = exdData->getField< uint8_t >( row, 0 );
@ -2623,7 +2630,8 @@ Core::Data::MasterpieceSupplyDuty::MasterpieceSupplyDuty( uint32_t row_id, Core:
rewardCurrency = exdData->getField< uint16_t >( row, 2 ); rewardCurrency = exdData->getField< uint16_t >( row, 2 );
} }
Core::Data::MasterpieceSupplyMultiplier::MasterpieceSupplyMultiplier( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::MasterpieceSupplyMultiplier::MasterpieceSupplyMultiplier( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_MasterpieceSupplyMultiplierDat.get_row( row_id ); auto row = exdData->m_MasterpieceSupplyMultiplierDat.get_row( row_id );
xpMultiplier.push_back( exdData->getField< uint16_t >( row, 0 ) ); xpMultiplier.push_back( exdData->getField< uint16_t >( row, 0 ) );
@ -3370,7 +3378,8 @@ Core::Data::RacingChocoboName::RacingChocoboName( uint32_t row_id, Core::Data::E
name = exdData->getField< std::string >( row, 0 ); name = exdData->getField< std::string >( row, 0 );
} }
Core::Data::RacingChocoboNameCategory::RacingChocoboNameCategory( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::RacingChocoboNameCategory::RacingChocoboNameCategory( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_RacingChocoboNameCategoryDat.get_row( row_id ); auto row = exdData->m_RacingChocoboNameCategoryDat.get_row( row_id );
sortKey = exdData->getField< uint8_t >( row, 0 ); sortKey = exdData->getField< uint8_t >( row, 0 );
@ -3768,7 +3777,8 @@ Core::Data::ScenarioTreeTips::ScenarioTreeTips( uint32_t row_id, Core::Data::Exd
tips2 = exdData->getField< uint32_t >( row, 3 ); tips2 = exdData->getField< uint32_t >( row, 3 );
} }
Core::Data::ScenarioTreeTipsClassQuest::ScenarioTreeTipsClassQuest( uint32_t row_id, Core::Data::ExdDataGenerated* exdData ) Core::Data::ScenarioTreeTipsClassQuest::ScenarioTreeTipsClassQuest( uint32_t row_id,
Core::Data::ExdDataGenerated* exdData )
{ {
auto row = exdData->m_ScenarioTreeTipsClassQuestDat.get_row( row_id ); auto row = exdData->m_ScenarioTreeTipsClassQuestDat.get_row( row_id );
quest = exdData->getField< uint32_t >( row, 0 ); quest = exdData->getField< uint32_t >( row, 0 );

File diff suppressed because it is too large Load diff

View file

@ -3,35 +3,34 @@
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
namespace Core namespace Core {
{
class ConfigMgr; class ConfigMgr;
typedef boost::shared_ptr< ConfigMgr > ConfigMgrPtr; typedef boost::shared_ptr< ConfigMgr > ConfigMgrPtr;
namespace Network namespace Network {
{ class Hive;
class Hive;
class Acceptor;
class Connection;
typedef boost::shared_ptr< Hive > HivePtr; class Acceptor;
typedef boost::shared_ptr< Acceptor > AcceptorPtr;
typedef boost::shared_ptr< Connection > ConnectionPtr;
namespace Packets class Connection;
{
class GamePacket;
class FFXIVPacketBase;
typedef boost::shared_ptr< GamePacket > GamePacketPtr; typedef boost::shared_ptr< Hive > HivePtr;
typedef boost::shared_ptr< FFXIVPacketBase > FFXIVPacketBasePtr; typedef boost::shared_ptr< Acceptor > AcceptorPtr;
} typedef boost::shared_ptr< Connection > ConnectionPtr;
} namespace Packets {
class GamePacket;
class FFXIVPacketBase;
typedef boost::shared_ptr< GamePacket > GamePacketPtr;
typedef boost::shared_ptr< FFXIVPacketBase > FFXIVPacketBasePtr;
}
}
} }

View file

@ -7,15 +7,14 @@
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include <cassert> #include <cassert>
namespace Core namespace Core {
{
class Framework class Framework
{ {
using TypenameToObject = std::map< std::type_index, boost::shared_ptr< void > >; using TypenameToObject = std::map< std::type_index, boost::shared_ptr< void > >;
TypenameToObject ObjectMap; TypenameToObject ObjectMap;
public: public:
template< typename T > template< typename T >
boost::shared_ptr< T > get() boost::shared_ptr< T > get()
{ {
@ -28,9 +27,9 @@ namespace Core
void set( boost::shared_ptr< T > value ) void set( boost::shared_ptr< T > value )
{ {
assert( value ); // why would anyone store nullptrs.... assert( value ); // why would anyone store nullptrs....
ObjectMap[typeid( T )] = value; ObjectMap[ typeid( T ) ] = value;
} }
}; };
} }

View file

@ -17,72 +17,75 @@
namespace Core { namespace Core {
Logger::Logger() Logger::Logger()
{ {
} }
Logger::~Logger() Logger::~Logger()
{ {
} }
void Logger::setLogPath(const std::string& logPath) void Logger::setLogPath( const std::string& logPath )
{ {
m_logFile = logPath; m_logFile = logPath;
} }
void Logger::init() void Logger::init()
{ {
auto format = ( auto format = (
boost::log::expressions::stream << boost::log::expressions::stream <<
boost::log::expressions::format_date_time< boost::posix_time::ptime >("TimeStamp", "[%H:%M:%S]") << boost::log::expressions::format_date_time< boost::posix_time::ptime >(
"TimeStamp", "[%H:%M:%S]" ) <<
"[" << boost::log::trivial::severity << "] " << "[" << boost::log::trivial::severity << "] " <<
boost::log::expressions::smessage boost::log::expressions::smessage
); );
boost::log::add_file_log boost::log::add_file_log
( (
boost::log::keywords::file_name = m_logFile + "%Y-%m-%d.log", /*< file name pattern >*/ boost::log::keywords::file_name =
boost::log::keywords::rotation_size = 10 * 1024 * 1024, /*< rotate files every 10 MiB... >*/ m_logFile + "%Y-%m-%d.log", /*< file name pattern >*/
boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point(0, 0, 0), /*< ...or at midnight >*/ boost::log::keywords::rotation_size =
10 * 1024 * 1024, /*< rotate files every 10 MiB... >*/
boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point( 0, 0,
0 ), /*< ...or at midnight >*/
boost::log::keywords::open_mode = std::ios::app, boost::log::keywords::open_mode = std::ios::app,
boost::log::keywords::format = format, boost::log::keywords::format = format,
boost::log::keywords::auto_flush = true boost::log::keywords::auto_flush = true
); );
boost::log::add_console_log(std::cout, boost::log::keywords::format = format); boost::log::add_console_log( std::cout, boost::log::keywords::format = format );
boost::log::add_common_attributes(); boost::log::add_common_attributes();
} }
void Logger::Log(LoggingSeverity logSev, const std::string& text) void Logger::Log( LoggingSeverity logSev, const std::string& text )
{ {
BOOST_LOG_SEV(m_lg, (boost::log::trivial::severity_level)logSev) << text; BOOST_LOG_SEV( m_lg, ( boost::log::trivial::severity_level ) logSev ) << text;
} }
void Logger::error( const std::string& text ) void Logger::error( const std::string& text )
{ {
BOOST_LOG_SEV( m_lg, boost::log::trivial::severity_level::error ) << text; BOOST_LOG_SEV( m_lg, boost::log::trivial::severity_level::error ) << text;
} }
void Logger::info( const std::string& text ) void Logger::info( const std::string& text )
{ {
BOOST_LOG_SEV( m_lg, boost::log::trivial::severity_level::info ) << text; BOOST_LOG_SEV( m_lg, boost::log::trivial::severity_level::info ) << text;
} }
void Logger::debug( const std::string& text ) void Logger::debug( const std::string& text )
{ {
BOOST_LOG_SEV( m_lg, boost::log::trivial::severity_level::debug ) << text; BOOST_LOG_SEV( m_lg, boost::log::trivial::severity_level::debug ) << text;
} }
void Logger::fatal( const std::string& text ) void Logger::fatal( const std::string& text )
{ {
BOOST_LOG_SEV( m_lg, boost::log::trivial::severity_level::fatal ) << text; BOOST_LOG_SEV( m_lg, boost::log::trivial::severity_level::fatal ) << text;
} }
} }

View file

@ -6,46 +6,48 @@
namespace Core { namespace Core {
enum struct LoggingSeverity : uint8_t enum struct LoggingSeverity :
{ uint8_t
{
trace = 0, trace = 0,
debug = 1, debug = 1,
info = 2, info = 2,
warning = 3, warning = 3,
error = 4, error = 4,
fatal = 5 fatal = 5
}; };
class Logger class Logger
{ {
private: private:
boost::log::sources::severity_logger_mt< boost::log::trivial::severity_level > m_lg; boost::log::sources::severity_logger_mt< boost::log::trivial::severity_level > m_lg;
std::string m_logFile; std::string m_logFile;
public: public:
Logger(); Logger();
~Logger(); ~Logger();
void init(); void init();
void Log(LoggingSeverity logSev, const std::string& text); void Log( LoggingSeverity logSev, const std::string& text );
void error( const std::string& text ); void error( const std::string& text );
void info( const std::string& text ); void info( const std::string& text );
void debug( const std::string& text ); void debug( const std::string& text );
void fatal( const std::string& text ); void fatal( const std::string& text );
void setLogPath(const std::string& logPath); void setLogPath( const std::string& logPath );
};
};
} }
#endif #endif

View file

@ -4,39 +4,38 @@
#include <boost/interprocess/detail/atomic.hpp> #include <boost/interprocess/detail/atomic.hpp>
#include <boost/bind.hpp> #include <boost/bind.hpp>
namespace Core namespace Core {
{ namespace Network {
namespace Network
{
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Acceptor::Acceptor( HivePtr hive ) Acceptor::Acceptor( HivePtr hive )
: m_hive( hive ), :
m_hive( hive ),
m_acceptor( hive->GetService() ), m_acceptor( hive->GetService() ),
m_io_strand( hive->GetService() ), m_io_strand( hive->GetService() ),
m_error_state( 0 ) m_error_state( 0 )
{ {
} }
Acceptor::~Acceptor() Acceptor::~Acceptor()
{ {
} }
bool Acceptor::OnAccept( ConnectionPtr connection, const std::string & host, uint16_t port ) bool Acceptor::OnAccept( ConnectionPtr connection, const std::string& host, uint16_t port )
{ {
return true; return true;
} }
void Acceptor::OnError( const boost::system::error_code & error ) void Acceptor::OnError( const boost::system::error_code& error )
{ {
} }
void Acceptor::StartError( const boost::system::error_code & error ) void Acceptor::StartError( const boost::system::error_code& error )
{ {
if( boost::interprocess::ipcdetail::atomic_cas32( &m_error_state, 1, 0 ) == 0 ) if( boost::interprocess::ipcdetail::atomic_cas32( &m_error_state, 1, 0 ) == 0 )
{ {
boost::system::error_code ec; boost::system::error_code ec;
@ -44,19 +43,19 @@ namespace Core
m_acceptor.close( ec ); m_acceptor.close( ec );
OnError( error ); OnError( error );
} }
} }
void Acceptor::DispatchAccept( ConnectionPtr connection ) void Acceptor::DispatchAccept( ConnectionPtr connection )
{ {
m_acceptor.async_accept( connection->GetSocket(), m_acceptor.async_accept( connection->GetSocket(),
connection->GetStrand().wrap( boost::bind( &Acceptor::HandleAccept, connection->GetStrand().wrap( boost::bind( &Acceptor::HandleAccept,
shared_from_this(), shared_from_this(),
_1, _1,
connection ) ) ); connection ) ) );
} }
void Acceptor::HandleAccept( const boost::system::error_code & error, ConnectionPtr connection ) void Acceptor::HandleAccept( const boost::system::error_code& error, ConnectionPtr connection )
{ {
if( error || HasError() || m_hive->HasStopped() ) if( error || HasError() || m_hive->HasStopped() )
{ {
connection->StartError( error ); connection->StartError( error );
@ -69,7 +68,8 @@ namespace Core
connection->GetSocket().remote_endpoint().address().to_string(), connection->GetSocket().remote_endpoint().address().to_string(),
connection->GetSocket().remote_endpoint().port() ) ) connection->GetSocket().remote_endpoint().port() ) )
{ {
connection->OnAccept( m_acceptor.local_endpoint().address().to_string(), m_acceptor.local_endpoint().port() ); connection->OnAccept( m_acceptor.local_endpoint().address().to_string(),
m_acceptor.local_endpoint().port() );
connection->Recv(); connection->Recv();
} }
} }
@ -78,20 +78,20 @@ namespace Core
connection->StartError( error ); connection->StartError( error );
} }
} }
} }
void Acceptor::Stop() void Acceptor::Stop()
{ {
} }
void Acceptor::Accept( ConnectionPtr connection ) void Acceptor::Accept( ConnectionPtr connection )
{ {
m_io_strand.post( boost::bind( &Acceptor::DispatchAccept, shared_from_this(), connection ) ); m_io_strand.post( boost::bind( &Acceptor::DispatchAccept, shared_from_this(), connection ) );
} }
void Acceptor::Listen( const std::string & host, const uint16_t & port ) void Acceptor::Listen( const std::string& host, const uint16_t& port )
{ {
try try
{ {
boost::asio::ip::tcp::resolver resolver( m_hive->GetService() ); boost::asio::ip::tcp::resolver resolver( m_hive->GetService() );
@ -109,22 +109,22 @@ namespace Core
assert( true ); assert( true );
} }
} }
HivePtr Acceptor::GetHive() HivePtr Acceptor::GetHive()
{ {
return m_hive; return m_hive;
} }
boost::asio::ip::tcp::acceptor & Acceptor::GetAcceptor() boost::asio::ip::tcp::acceptor& Acceptor::GetAcceptor()
{ {
return m_acceptor; return m_acceptor;
} }
bool Acceptor::HasError() bool Acceptor::HasError()
{ {
return ( boost::interprocess::ipcdetail::atomic_cas32( &m_error_state, 1, 1 ) == 1 ); return ( boost::interprocess::ipcdetail::atomic_cas32( &m_error_state, 1, 1 ) == 1 );
} }
} }
} }

View file

@ -7,62 +7,66 @@
#include <boost/shared_ptr.hpp> #include <boost/shared_ptr.hpp>
#include "Forwards.h" #include "Forwards.h"
namespace Core namespace Core {
namespace Network {
class Connection;
class Acceptor :
public boost::enable_shared_from_this< Acceptor >
{ {
namespace Network
{
class Connection;
class Acceptor : public boost::enable_shared_from_this< Acceptor >
{
friend class Hive; friend class Hive;
private: private:
HivePtr m_hive; HivePtr m_hive;
boost::asio::ip::tcp::acceptor m_acceptor; boost::asio::ip::tcp::acceptor m_acceptor;
boost::asio::strand m_io_strand; boost::asio::strand m_io_strand;
volatile uint32_t m_error_state; volatile uint32_t m_error_state;
private: private:
Acceptor( const Acceptor & rhs ); Acceptor( const Acceptor& rhs );
Acceptor & operator =( const Acceptor & rhs );
void StartError( const boost::system::error_code & error );
void DispatchAccept( ConnectionPtr connection );
void HandleAccept( const boost::system::error_code & error, ConnectionPtr connection );
private: Acceptor& operator=( const Acceptor& rhs );
void StartError( const boost::system::error_code& error );
void DispatchAccept( ConnectionPtr connection );
void HandleAccept( const boost::system::error_code& error, ConnectionPtr connection );
private:
// Called when a connection has connected to the server. This function // Called when a connection has connected to the server. This function
// should return true to invoke the connection's OnAccept function if the // should return true to invoke the connection's OnAccept function if the
// connection will be kept. If the connection will not be kept, the // connection will be kept. If the connection will not be kept, the
// connection's Disconnect function should be called and the function // connection's Disconnect function should be called and the function
// should return false. // should return false.
virtual bool OnAccept( ConnectionPtr connection, const std::string & host, uint16_t port ); virtual bool OnAccept( ConnectionPtr connection, const std::string& host, uint16_t port );
// Called when an error is encountered. Most typically, this is when the // Called when an error is encountered. Most typically, this is when the
// acceptor is being closed via the Stop function or if the Listen is // acceptor is being closed via the Stop function or if the Listen is
// called on an address that is not available. // called on an address that is not available.
virtual void OnError( const boost::system::error_code & error ); virtual void OnError( const boost::system::error_code& error );
public: public:
Acceptor( HivePtr hive ); Acceptor( HivePtr hive );
virtual ~Acceptor(); virtual ~Acceptor();
// Returns the Hive object. // Returns the Hive object.
HivePtr GetHive(); HivePtr GetHive();
// Returns the acceptor object. // Returns the acceptor object.
boost::asio::ip::tcp::acceptor & GetAcceptor(); boost::asio::ip::tcp::acceptor& GetAcceptor();
// Returns the strand object. // Returns the strand object.
boost::asio::strand & GetStrand(); boost::asio::strand& GetStrand();
// Returns true if this object has an error associated with it. // Returns true if this object has an error associated with it.
bool HasError(); bool HasError();
public: public:
// Begin listening on the specific network interface. // Begin listening on the specific network interface.
void Listen( const std::string & host, const uint16_t & port ); void Listen( const std::string& host, const uint16_t& port );
// Posts the connection to the listening interface. The next client that // Posts the connection to the listening interface. The next client that
// connections will be given this connection. If multiple calls to Accept // connections will be given this connection. If multiple calls to Accept
@ -71,8 +75,8 @@ namespace Core
// Stop the Acceptor from listening. // Stop the Acceptor from listening.
void Stop(); void Stop();
}; };
} }
} }
#endif #endif

View file

@ -12,11 +12,12 @@
// They are also defined within the Core::Common namespace to avoid collisions. // They are also defined within the Core::Common namespace to avoid collisions.
// +--------------------------------------------------------------------------- // +---------------------------------------------------------------------------
namespace Core { namespace Core {
namespace Network { namespace Network {
namespace ActorControl { namespace ActorControl {
enum ActorControlType : uint16_t enum ActorControlType :
{ uint16_t
{
/*! Toggles weapon status -> Sheathed/UnSheathed /*! Toggles weapon status -> Sheathed/UnSheathed
\param param1 status 0|1 */ \param param1 status 0|1 */
ToggleWeapon = 0x00, ToggleWeapon = 0x00,
@ -222,10 +223,10 @@ namespace Core {
SetDutyActionHud = 0x5E9, // disable/enable SetDutyActionHud = 0x5E9, // disable/enable
SetDutyActionActive = 0x5EA, SetDutyActionActive = 0x5EA,
SetDutyActionRemaining = 0x5EB, SetDutyActionRemaining = 0x5EB,
}; };
enum ClientTriggerType enum ClientTriggerType
{ {
ToggleSheathe = 0x01, ToggleSheathe = 0x01,
ToggleAutoAttack = 0x02, ToggleAutoAttack = 0x02,
ChangeTarget = 0x03, ChangeTarget = 0x03,
@ -291,10 +292,10 @@ namespace Core {
OpenDuelUI = 0x898, // Open a duel ui OpenDuelUI = 0x898, // Open a duel ui
DuelRequestResult = 0x899, // either accept/reject DuelRequestResult = 0x899, // either accept/reject
}; };
} /* ActorControl */ } /* ActorControl */
} /* Common */ } /* Common */
} /* Core */ } /* Core */
#endif #endif

View file

@ -70,12 +70,12 @@ struct FFXIVARR_PACKET_HEADER
uint32_t unknown_24; uint32_t unknown_24;
}; };
inline ostream& operator << ( ostream& os, const FFXIVARR_PACKET_HEADER& hdr ) inline ostream& operator<<( ostream& os, const FFXIVARR_PACKET_HEADER& hdr )
{ {
return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr ); return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr );
} }
inline istream& operator >> ( istream& is, FFXIVARR_PACKET_HEADER& hdr ) inline istream& operator>>( istream& is, FFXIVARR_PACKET_HEADER& hdr )
{ {
return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr ); return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr );
} }
@ -108,20 +108,24 @@ struct FFXIVARR_PACKET_SEGMENT_HEADER
uint16_t padding; uint16_t padding;
}; };
inline ostream& operator << ( ostream& os, const FFXIVARR_PACKET_SEGMENT_HEADER& hdr ) inline ostream& operator<<( ostream& os, const FFXIVARR_PACKET_SEGMENT_HEADER& hdr )
{ {
return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr ); return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr );
} }
inline istream& operator >> ( istream& is, FFXIVARR_PACKET_SEGMENT_HEADER& hdr ) inline istream& operator>>( istream& is, FFXIVARR_PACKET_SEGMENT_HEADER& hdr )
{ {
return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr ); return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr );
} }
template < int T > struct FFXIVIpcBasePacket template< int T >
struct FFXIVIpcBasePacket
{ {
/** Creates a constant representing the IPC type */ /** Creates a constant representing the IPC type */
enum { _ServerIpcType = T }; enum
{
_ServerIpcType = T
};
}; };
struct FFXIVARR_PACKET_RAW struct FFXIVARR_PACKET_RAW
@ -167,12 +171,12 @@ struct FFXIVARR_IPC_HEADER
uint32_t padding1; uint32_t padding1;
}; };
inline ostream& operator << ( ostream& os, const FFXIVARR_IPC_HEADER& hdr ) inline ostream& operator<<( ostream& os, const FFXIVARR_IPC_HEADER& hdr )
{ {
return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr ); return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr );
} }
inline istream& operator >> ( istream& is, FFXIVARR_IPC_HEADER& hdr ) inline istream& operator>>( istream& is, FFXIVARR_IPC_HEADER& hdr )
{ {
return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr ); return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr );
} }

View file

@ -4,32 +4,33 @@
#include <boost/bind.hpp> #include <boost/bind.hpp>
namespace Core { namespace Core {
namespace Network { namespace Network {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Connection::Connection( HivePtr hive ) Connection::Connection( HivePtr hive )
: m_hive( hive ), :
m_hive( hive ),
m_socket( hive->GetService() ), m_socket( hive->GetService() ),
m_io_strand( hive->GetService() ), m_io_strand( hive->GetService() ),
m_receive_buffer_size( 32000 ), m_receive_buffer_size( 32000 ),
m_error_state( 0 ) m_error_state( 0 )
{ {
} }
Connection::~Connection() Connection::~Connection()
{ {
} }
void Connection::Bind( const std::string & ip, uint16_t port ) void Connection::Bind( const std::string& ip, uint16_t port )
{ {
boost::asio::ip::tcp::endpoint endpoint( boost::asio::ip::address::from_string( ip ), port ); boost::asio::ip::tcp::endpoint endpoint( boost::asio::ip::address::from_string( ip ), port );
m_socket.open( endpoint.protocol() ); m_socket.open( endpoint.protocol() );
m_socket.set_option( boost::asio::ip::tcp::acceptor::reuse_address( false ) ); m_socket.set_option( boost::asio::ip::tcp::acceptor::reuse_address( false ) );
m_socket.bind( endpoint ); m_socket.bind( endpoint );
} }
void Connection::StartSend() void Connection::StartSend()
{ {
if( !m_pending_sends.empty() ) if( !m_pending_sends.empty() )
{ {
boost::asio::async_write( m_socket, boost::asio::async_write( m_socket,
@ -39,10 +40,10 @@ namespace Core {
boost::asio::placeholders::error, boost::asio::placeholders::error,
m_pending_sends.begin() ) ) ); m_pending_sends.begin() ) ) );
} }
} }
void Connection::StartRecv( int32_t total_bytes ) void Connection::StartRecv( int32_t total_bytes )
{ {
if( total_bytes > 0 ) if( total_bytes > 0 )
{ {
m_recv_buffer.resize( total_bytes ); m_recv_buffer.resize( total_bytes );
@ -62,10 +63,10 @@ namespace Core {
_1, _1,
_2 ) ) ); _2 ) ) );
} }
} }
void Connection::StartError( const boost::system::error_code & error ) void Connection::StartError( const boost::system::error_code& error )
{ {
if( boost::interprocess::ipcdetail::atomic_cas32( &m_error_state, 1, 0 ) == 0 ) if( boost::interprocess::ipcdetail::atomic_cas32( &m_error_state, 1, 0 ) == 0 )
{ {
boost::system::error_code ec; boost::system::error_code ec;
@ -73,10 +74,10 @@ namespace Core {
m_socket.close( ec ); m_socket.close( ec );
OnError( error ); OnError( error );
} }
} }
void Connection::HandleConnect( const boost::system::error_code & error ) void Connection::HandleConnect( const boost::system::error_code& error )
{ {
if( error || HasError() || m_hive->HasStopped() ) if( error || HasError() || m_hive->HasStopped() )
{ {
StartError( error ); StartError( error );
@ -93,10 +94,11 @@ namespace Core {
StartError( error ); StartError( error );
} }
} }
} }
void Connection::HandleSend( const boost::system::error_code & error, std::list< std::vector< uint8_t > >::iterator itr ) void
{ Connection::HandleSend( const boost::system::error_code& error, std::list< std::vector< uint8_t > >::iterator itr )
{
if( error || HasError() || m_hive->HasStopped() ) if( error || HasError() || m_hive->HasStopped() )
{ {
StartError( error ); StartError( error );
@ -107,10 +109,10 @@ namespace Core {
m_pending_sends.erase( itr ); m_pending_sends.erase( itr );
StartSend(); StartSend();
} }
} }
void Connection::HandleRecv( const boost::system::error_code & error, int32_t actual_bytes ) void Connection::HandleRecv( const boost::system::error_code& error, int32_t actual_bytes )
{ {
if( error || HasError() || m_hive->HasStopped() ) if( error || HasError() || m_hive->HasStopped() )
{ {
StartError( error ); StartError( error );
@ -126,85 +128,86 @@ namespace Core {
StartRecv( m_pending_recvs.front() ); StartRecv( m_pending_recvs.front() );
} }
} }
} }
void Connection::DispatchSend( std::vector< uint8_t > buffer ) void Connection::DispatchSend( std::vector< uint8_t > buffer )
{ {
bool should_start_send = m_pending_sends.empty(); bool should_start_send = m_pending_sends.empty();
m_pending_sends.push_back( buffer ); m_pending_sends.push_back( buffer );
if( should_start_send ) if( should_start_send )
{ {
StartSend(); StartSend();
} }
} }
void Connection::DispatchRecv( int32_t total_bytes ) void Connection::DispatchRecv( int32_t total_bytes )
{ {
bool should_start_receive = m_pending_recvs.empty(); bool should_start_receive = m_pending_recvs.empty();
m_pending_recvs.push_back( total_bytes ); m_pending_recvs.push_back( total_bytes );
if( should_start_receive ) if( should_start_receive )
{ {
StartRecv( total_bytes ); StartRecv( total_bytes );
} }
} }
void Connection::Connect( const std::string & host, uint16_t port) void Connection::Connect( const std::string& host, uint16_t port )
{ {
boost::asio::ip::tcp::resolver resolver( m_hive->GetService() ); boost::asio::ip::tcp::resolver resolver( m_hive->GetService() );
boost::asio::ip::tcp::resolver::query query( host, std::to_string( port ) ); boost::asio::ip::tcp::resolver::query query( host, std::to_string( port ) );
boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve( query ); boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve( query );
m_socket.async_connect( *iterator, m_io_strand.wrap( boost::bind( &Connection::HandleConnect, shared_from_this(), _1 ) ) ); m_socket.async_connect( *iterator,
m_io_strand.wrap( boost::bind( &Connection::HandleConnect, shared_from_this(), _1 ) ) );
} }
void Connection::Disconnect() void Connection::Disconnect()
{ {
OnDisconnect(); OnDisconnect();
m_socket.close(); m_socket.close();
} }
void Connection::Recv( int32_t total_bytes ) void Connection::Recv( int32_t total_bytes )
{ {
m_io_strand.post( boost::bind( &Connection::DispatchRecv, shared_from_this(), total_bytes ) ); m_io_strand.post( boost::bind( &Connection::DispatchRecv, shared_from_this(), total_bytes ) );
} }
void Connection::Send( const std::vector< uint8_t > & buffer ) void Connection::Send( const std::vector< uint8_t >& buffer )
{ {
m_io_strand.post( boost::bind( &Connection::DispatchSend, shared_from_this(), buffer ) ); m_io_strand.post( boost::bind( &Connection::DispatchSend, shared_from_this(), buffer ) );
} }
boost::asio::ip::tcp::socket & Connection::GetSocket() boost::asio::ip::tcp::socket& Connection::GetSocket()
{ {
return m_socket; return m_socket;
} }
boost::asio::strand & Connection::GetStrand() boost::asio::strand& Connection::GetStrand()
{ {
return m_io_strand; return m_io_strand;
} }
HivePtr Connection::GetHive() HivePtr Connection::GetHive()
{ {
return m_hive; return m_hive;
} }
void Connection::SetReceiveBufferSize( int32_t size ) void Connection::SetReceiveBufferSize( int32_t size )
{ {
m_receive_buffer_size = size; m_receive_buffer_size = size;
} }
int32_t Connection::GetReceiveBufferSize() const int32_t Connection::GetReceiveBufferSize() const
{ {
return m_receive_buffer_size; return m_receive_buffer_size;
} }
bool Connection::HasError() bool Connection::HasError()
{ {
return ( boost::interprocess::ipcdetail::atomic_cas32( &m_error_state, 1, 1 ) == 1 ); return ( boost::interprocess::ipcdetail::atomic_cas32( &m_error_state, 1, 1 ) == 1 );
} }
} }
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------

View file

@ -14,21 +14,25 @@
namespace Core { namespace Core {
namespace Network { namespace Network {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class Hive; class Hive;
class Acceptor;
class Connection;
//----------------------------------------------------------------------------- class Acceptor;
class Connection : public boost::enable_shared_from_this< Connection > class Connection;
{
//-----------------------------------------------------------------------------
class Connection :
public boost::enable_shared_from_this< Connection >
{
friend class Acceptor; friend class Acceptor;
friend class Hive; friend class Hive;
protected: protected:
HivePtr m_hive; HivePtr m_hive;
boost::asio::ip::tcp::socket m_socket; boost::asio::ip::tcp::socket m_socket;
boost::asio::strand m_io_strand; boost::asio::strand m_io_strand;
@ -40,49 +44,71 @@ namespace Core {
Connection( HivePtr hive ); Connection( HivePtr hive );
virtual ~Connection(); virtual ~Connection();
private: private:
Connection( const Connection & rhs ); Connection( const Connection& rhs );
Connection & operator =( const Connection & rhs );
Connection& operator=( const Connection& rhs );
void StartSend(); void StartSend();
void StartRecv( int32_t total_bytes ); void StartRecv( int32_t total_bytes );
void StartError( const boost::system::error_code & error );
void StartError( const boost::system::error_code& error );
void DispatchSend( std::vector< uint8_t > buffer ); void DispatchSend( std::vector< uint8_t > buffer );
void DispatchRecv( int32_t total_bytes ); void DispatchRecv( int32_t total_bytes );
void HandleConnect( const boost::system::error_code & error );
void HandleSend( const boost::system::error_code & error, std::list< std::vector< uint8_t > >::iterator itr ); void HandleConnect( const boost::system::error_code& error );
void HandleRecv( const boost::system::error_code & error, int32_t actual_bytes );
void HandleSend( const boost::system::error_code& error, std::list< std::vector< uint8_t > >::iterator itr );
void HandleRecv( const boost::system::error_code& error, int32_t actual_bytes );
private: private:
// Called when the connection has successfully connected to the local host. // Called when the connection has successfully connected to the local host.
virtual void OnAccept( const std::string & host, uint16_t port ) {}; virtual void OnAccept( const std::string& host, uint16_t port )
{
};
// Called when the connection has successfully connected to the remote host. // Called when the connection has successfully connected to the remote host.
virtual void OnConnect( const std::string & host, uint16_t port ) {}; virtual void OnConnect( const std::string& host, uint16_t port )
{
};
// Called when data has been sent by the connection. // Called when data has been sent by the connection.
virtual void OnSend( const std::vector< uint8_t > & buffer ) {}; virtual void OnSend( const std::vector< uint8_t >& buffer )
{
};
// Called when data has been received by the connection. // Called when data has been received by the connection.
virtual void OnRecv( std::vector< uint8_t > & buffer ) {}; virtual void OnRecv( std::vector< uint8_t >& buffer )
{
};
// Called when an error is encountered. // Called when an error is encountered.
virtual void OnError( const boost::system::error_code & error ) {}; virtual void OnError( const boost::system::error_code& error )
{
};
// Called when the connection has been disconnected // Called when the connection has been disconnected
virtual void OnDisconnect() {}; virtual void OnDisconnect()
{
};
public: public:
// Returns the Hive object. // Returns the Hive object.
HivePtr GetHive(); HivePtr GetHive();
// Returns the socket object. // Returns the socket object.
boost::asio::ip::tcp::socket & GetSocket(); boost::asio::ip::tcp::socket& GetSocket();
// Returns the strand object. // Returns the strand object.
boost::asio::strand & GetStrand(); boost::asio::strand& GetStrand();
// Sets the application specific receive buffer size used. For stream // Sets the application specific receive buffer size used. For stream
// based protocols such as HTTP, you want this to be pretty large, like // based protocols such as HTTP, you want this to be pretty large, like
@ -98,13 +124,13 @@ namespace Core {
bool HasError(); bool HasError();
// Binds the socket to the specified interface. // Binds the socket to the specified interface.
void Bind( const std::string & ip, uint16_t port ); void Bind( const std::string& ip, uint16_t port );
// Starts an a/synchronous connect. // Starts an a/synchronous connect.
void Connect( const std::string & host, uint16_t port ); void Connect( const std::string& host, uint16_t port );
// Posts data to be sent to the connection. // Posts data to be sent to the connection.
void Send( const std::vector< uint8_t > & buffer ); void Send( const std::vector< uint8_t >& buffer );
// Posts a recv for the connection to process. If total_bytes is 0, then // Posts a recv for the connection to process. If total_bytes is 0, then
// as many bytes as possible up to GetReceiveBufferSize() will be // as many bytes as possible up to GetReceiveBufferSize() will be
@ -114,15 +140,15 @@ namespace Core {
// Posts an asynchronous disconnect event for the object to process. // Posts an asynchronous disconnect event for the object to process.
void Disconnect(); void Disconnect();
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
template<class T> template< class T >
boost::shared_ptr< T > addServerToHive( const std::string& listenIp, uint32_t port, HivePtr pHive ) boost::shared_ptr< T > addServerToHive( const std::string& listenIp, uint32_t port, HivePtr pHive )
{ {
try try
{ {
AcceptorPtr acceptor( new Acceptor( pHive ) ); AcceptorPtr acceptor( new Acceptor( pHive ) );
@ -135,9 +161,9 @@ namespace Core {
{ {
throw; throw;
} }
} }
} }
} }

View file

@ -22,7 +22,7 @@ namespace Packets {
// Must forward define these in order to enable the compiler to produce the // Must forward define these in order to enable the compiler to produce the
// correct template functions. // correct template functions.
template < typename T, typename T1 > template< typename T, typename T1 >
class FFXIVIpcPacket; class FFXIVIpcPacket;
template< class T > template< class T >
@ -62,11 +62,12 @@ boost::shared_ptr< LobbyChannelPacket< T > > makeLobbyPacket( Args... args )
/** /**
* The base implementation of a game packet. Needed for parsing packets. * The base implementation of a game packet. Needed for parsing packets.
*/ */
template < typename T1 > template< typename T1 >
class FFXIVIpcPacketBase class FFXIVIpcPacketBase
{ {
public: public:
virtual ~FFXIVIpcPacketBase() = default; virtual ~FFXIVIpcPacketBase() = default;
/** /**
* @brief Gets the IPC type of this packet. (Useful for determining the * @brief Gets the IPC type of this packet. (Useful for determining the
* type of a parsed packet.) * type of a parsed packet.)
@ -109,8 +110,15 @@ protected:
uint16_t m_segmentType; uint16_t m_segmentType;
public: public:
virtual uint32_t getContentSize() { return 0; }; virtual uint32_t getContentSize()
virtual std::vector< uint8_t > getContent() { return{}; }; {
return 0;
};
virtual std::vector< uint8_t > getContent()
{
return {};
};
/** /**
* @brief Gets the segment type of this packet. * @brief Gets the segment type of this packet.
@ -169,8 +177,9 @@ public:
}; };
template < typename T, typename T1 > template< typename T, typename T1 >
class FFXIVIpcPacket : public FFXIVIpcPacketBase< T1 >, public FFXIVPacketBase class FFXIVIpcPacket :
public FFXIVIpcPacketBase< T1 >, public FFXIVPacketBase
{ {
public: public:
FFXIVIpcPacket< T, T1 >( uint32_t sourceActorId, uint32_t targetActorId ) : FFXIVIpcPacket< T, T1 >( uint32_t sourceActorId, uint32_t targetActorId ) :
@ -191,7 +200,7 @@ public:
auto copySize = std::min< uint32_t >( sizeof( T ), rawPacket.segHdr.size - ipcHdrSize ); auto copySize = std::min< uint32_t >( sizeof( T ), rawPacket.segHdr.size - ipcHdrSize );
memcpy( &m_segHdr, &rawPacket.segHdr, sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ) ); memcpy( &m_segHdr, &rawPacket.segHdr, sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ) );
memcpy( &m_data, &rawPacket.data[0] + ipcHdrSize, copySize ); memcpy( &m_data, &rawPacket.data[ 0 ] + ipcHdrSize, copySize );
memset( &m_ipcHdr, 0, ipcHdrSize ); memset( &m_ipcHdr, 0, ipcHdrSize );
m_ipcHdr.type = static_cast< ServerZoneIpcType >( m_data._ServerIpcType ); m_ipcHdr.type = static_cast< ServerZoneIpcType >( m_data._ServerIpcType );
@ -218,9 +227,9 @@ public:
std::vector< uint8_t > data( segmentHeaderSize + ipcHeaderSize + dataSize ); std::vector< uint8_t > data( segmentHeaderSize + ipcHeaderSize + dataSize );
memcpy( &data[0], &m_segHdr, segmentHeaderSize ); memcpy( &data[ 0 ], &m_segHdr, segmentHeaderSize );
memcpy( &data[segmentHeaderSize], &m_ipcHdr, ipcHeaderSize ); memcpy( &data[ segmentHeaderSize ], &m_ipcHdr, ipcHeaderSize );
memcpy( &data[segmentHeaderSize + ipcHeaderSize], &m_data, dataSize ); memcpy( &data[ segmentHeaderSize + ipcHeaderSize ], &m_data, dataSize );
return data; return data;
} }
@ -231,9 +240,15 @@ public:
}; };
/** Gets a reference to the underlying IPC data structure. */ /** Gets a reference to the underlying IPC data structure. */
T& data() { return m_data; }; T& data()
{
return m_data;
};
const T& data() const { return m_data; } const T& data() const
{
return m_data;
}
protected: protected:
/** Initializes the fields of the header structures */ /** Initializes the fields of the header structures */
@ -257,7 +272,8 @@ protected:
}; };
class FFXIVRawPacket : public FFXIVPacketBase class FFXIVRawPacket :
public FFXIVPacketBase
{ {
public: public:
FFXIVRawPacket( uint16_t type, uint32_t size, uint32_t sourceActorId, uint32_t targetActorId ) : FFXIVRawPacket( uint16_t type, uint32_t size, uint32_t sourceActorId, uint32_t targetActorId ) :
@ -273,7 +289,7 @@ public:
{ {
auto segmentHdrSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ); auto segmentHdrSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER );
memcpy( &m_data[0], data + segmentHdrSize, size - segmentHdrSize ); memcpy( &m_data[ 0 ], data + segmentHdrSize, size - segmentHdrSize );
memcpy( &m_segHdr, data, segmentHdrSize ); memcpy( &m_segHdr, data, segmentHdrSize );
} }
@ -291,21 +307,24 @@ public:
{ {
std::vector< uint8_t > data( sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ) + m_data.size() ); std::vector< uint8_t > data( sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ) + m_data.size() );
memcpy( &data[0], &m_segHdr, sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ) ); memcpy( &data[ 0 ], &m_segHdr, sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ) );
memcpy( &data[sizeof( FFXIVARR_PACKET_SEGMENT_HEADER )], &m_data[0], m_data.size() ); memcpy( &data[ sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ) ], &m_data[ 0 ], m_data.size() );
return data; return data;
} }
/** Gets a reference to the underlying IPC data structure. */ /** Gets a reference to the underlying IPC data structure. */
std::vector< uint8_t >& data() { return m_data; }; std::vector< uint8_t >& data()
{
return m_data;
};
protected: protected:
/** Initializes the fields of the header structures */ /** Initializes the fields of the header structures */
virtual void initialize() virtual void initialize()
{ {
// Zero out the structures. // Zero out the structures.
memset( &m_data[0], 0, m_data.size() ); memset( &m_data[ 0 ], 0, m_data.size() );
}; };
protected: protected:

View file

@ -5,9 +5,9 @@
using namespace Core::Network::Packets; using namespace Core::Network::Packets;
PacketParseResult Core::Network::Packets::getHeader( const std::vector< uint8_t > &buffer, PacketParseResult Core::Network::Packets::getHeader( const std::vector< uint8_t >& buffer,
const uint32_t offset, const uint32_t offset,
FFXIVARR_PACKET_HEADER &header ) FFXIVARR_PACKET_HEADER& header )
{ {
const auto headerSize = sizeof( FFXIVARR_PACKET_HEADER ); const auto headerSize = sizeof( FFXIVARR_PACKET_HEADER );
@ -19,15 +19,15 @@ PacketParseResult Core::Network::Packets::getHeader( const std::vector< uint8_t
// Copy packet header. // Copy packet header.
memcpy( &header, buffer.data() + offset, headerSize ); memcpy( &header, buffer.data() + offset, headerSize );
if( !checkHeader(header) ) if( !checkHeader( header ) )
return Malformed; return Malformed;
return Success; return Success;
} }
PacketParseResult Core::Network::Packets::getSegmentHeader( const std::vector< uint8_t > &buffer, PacketParseResult Core::Network::Packets::getSegmentHeader( const std::vector< uint8_t >& buffer,
const uint32_t offset, const uint32_t offset,
FFXIVARR_PACKET_SEGMENT_HEADER &header ) FFXIVARR_PACKET_SEGMENT_HEADER& header )
{ {
const auto headerSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ); const auto headerSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER );
@ -42,10 +42,10 @@ PacketParseResult Core::Network::Packets::getSegmentHeader( const std::vector< u
return Success; return Success;
} }
PacketParseResult Core::Network::Packets::getPackets( const std::vector< uint8_t > &buffer, PacketParseResult Core::Network::Packets::getPackets( const std::vector< uint8_t >& buffer,
const uint32_t offset, const uint32_t offset,
const FFXIVARR_PACKET_HEADER &packetHeader, const FFXIVARR_PACKET_HEADER& packetHeader,
std::vector< FFXIVARR_PACKET_RAW > &packets ) std::vector< FFXIVARR_PACKET_RAW >& packets )
{ {
// sanity check: check there's enough bytes in the buffer // sanity check: check there's enough bytes in the buffer
const auto bytesExpected = packetHeader.size - sizeof( struct FFXIVARR_PACKET_HEADER ); const auto bytesExpected = packetHeader.size - sizeof( struct FFXIVARR_PACKET_HEADER );
@ -81,8 +81,8 @@ PacketParseResult Core::Network::Packets::getPackets( const std::vector< uint8_t
return Success; return Success;
} }
PacketParseResult Core::Network::Packets::getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset, PacketParseResult Core::Network::Packets::getPacket( const std::vector< uint8_t >& buffer, const uint32_t offset,
FFXIVARR_PACKET_RAW &packet ) FFXIVARR_PACKET_RAW& packet )
{ {
// Copy segment header // Copy segment header
const auto headerResult = getSegmentHeader( buffer, offset, packet.segHdr ); const auto headerResult = getSegmentHeader( buffer, offset, packet.segHdr );
@ -103,7 +103,7 @@ PacketParseResult Core::Network::Packets::getPacket( const std::vector< uint8_t
return Success; return Success;
} }
bool Core::Network::Packets::checkHeader( const FFXIVARR_PACKET_HEADER &header ) bool Core::Network::Packets::checkHeader( const FFXIVARR_PACKET_HEADER& header )
{ {
// Max size of the packet is capped at 1MB for now. // Max size of the packet is capped at 1MB for now.
if( header.size > 1 * 1024 * 1024 ) if( header.size > 1 * 1024 * 1024 )
@ -116,7 +116,7 @@ bool Core::Network::Packets::checkHeader( const FFXIVARR_PACKET_HEADER &header )
return true; return true;
} }
bool Core::Network::Packets::checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER &header ) bool Core::Network::Packets::checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER& header )
{ {
// Max size of individual message is capped at 256KB for now. // Max size of individual message is capped at 256KB for now.
if( header.size > 256 * 1024 ) if( header.size > 256 * 1024 )

View file

@ -1,13 +1,14 @@
#ifndef _GAMEPACKETPARSER_H #ifndef _GAMEPACKETPARSER_H
#define _GAMEPACKETPARSER_H #define _GAMEPACKETPARSER_H
#include "CommonNetwork.h" #include "CommonNetwork.h"
namespace Core { namespace Core {
namespace Network { namespace Network {
namespace Packets { namespace Packets {
enum PacketParseResult enum PacketParseResult
{ {
/// Dissected game packet successfully /// Dissected game packet successfully
Success, Success,
@ -16,32 +17,33 @@ namespace Packets {
/// Invalid data detected. /// Invalid data detected.
Malformed Malformed
}; };
/// Read packet header from buffer with given offset. /// Read packet header from buffer with given offset.
/// Buffer with given offset must be pointing to start of the new FFXIV packet. /// Buffer with given offset must be pointing to start of the new FFXIV packet.
PacketParseResult getHeader( const std::vector< uint8_t > &buffer, const uint32_t offset, PacketParseResult getHeader( const std::vector< uint8_t >& buffer, const uint32_t offset,
FFXIVARR_PACKET_HEADER &header ); FFXIVARR_PACKET_HEADER& header );
/// Read packet header from buffer with given offset. /// Read packet header from buffer with given offset.
/// Buffer with given offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data. /// Buffer with given offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data.
/// Keep in mind that this function does check for data validity. Call checkSegmentHeader() if that's needed. /// Keep in mind that this function does check for data validity. Call checkSegmentHeader() if that's needed.
PacketParseResult getSegmentHeader( const std::vector< uint8_t > &buffer, const uint32_t offset, PacketParseResult getSegmentHeader( const std::vector< uint8_t >& buffer, const uint32_t offset,
FFXIVARR_PACKET_SEGMENT_HEADER &header ); FFXIVARR_PACKET_SEGMENT_HEADER& header );
/// Read packets from the buffer with given offset. /// Read packets from the buffer with given offset.
/// Buffer with given offset must be pointing to end of FFXIVARR_PACKET_HEADER data. /// Buffer with given offset must be pointing to end of FFXIVARR_PACKET_HEADER data.
PacketParseResult getPackets( const std::vector< uint8_t > &buffer, const uint32_t offset, PacketParseResult getPackets( const std::vector< uint8_t >& buffer, const uint32_t offset,
const FFXIVARR_PACKET_HEADER &header, const FFXIVARR_PACKET_HEADER& header,
std::vector< Packets::FFXIVARR_PACKET_RAW > &packets ); std::vector< Packets::FFXIVARR_PACKET_RAW >& packets );
/// Read single packet from the buffer with given offset. /// Read single packet from the buffer with given offset.
/// Buffer with an offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data. /// Buffer with an offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data.
PacketParseResult getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset, PacketParseResult getPacket( const std::vector< uint8_t >& buffer, const uint32_t offset,
FFXIVARR_PACKET_RAW &packet ); FFXIVARR_PACKET_RAW& packet );
bool checkHeader(const FFXIVARR_PACKET_HEADER &header); bool checkHeader( const FFXIVARR_PACKET_HEADER& header );
bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header);
bool checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER& header );
} }
} }

View file

@ -4,58 +4,59 @@
#include "Hive.h" #include "Hive.h"
namespace Core { namespace Core {
namespace Network { namespace Network {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
Hive::Hive() Hive::Hive()
: m_work_ptr( new boost::asio::io_service::work( m_io_service ) ), :
m_work_ptr( new boost::asio::io_service::work( m_io_service ) ),
m_shutdown( 0 ) m_shutdown( 0 )
{ {
} }
Hive::~Hive() Hive::~Hive()
{ {
} }
boost::asio::io_service & Hive::GetService() boost::asio::io_service& Hive::GetService()
{ {
return m_io_service; return m_io_service;
} }
bool Hive::HasStopped() bool Hive::HasStopped()
{ {
return ( boost::interprocess::ipcdetail::atomic_cas32( &m_shutdown, 1, 1 ) == 1 ); return ( boost::interprocess::ipcdetail::atomic_cas32( &m_shutdown, 1, 1 ) == 1 );
} }
void Hive::Poll() void Hive::Poll()
{ {
m_io_service.poll(); m_io_service.poll();
} }
void Hive::Run() void Hive::Run()
{ {
m_io_service.run(); m_io_service.run();
} }
void Hive::Stop() void Hive::Stop()
{ {
if( boost::interprocess::ipcdetail::atomic_cas32( &m_shutdown, 1, 0 ) == 0 ) if( boost::interprocess::ipcdetail::atomic_cas32( &m_shutdown, 1, 0 ) == 0 )
{ {
m_work_ptr.reset(); m_work_ptr.reset();
m_io_service.run(); m_io_service.run();
m_io_service.stop(); m_io_service.stop();
} }
} }
void Hive::Reset() void Hive::Reset()
{ {
if( boost::interprocess::ipcdetail::atomic_cas32( &m_shutdown, 0, 1 ) == 1 ) if( boost::interprocess::ipcdetail::atomic_cas32( &m_shutdown, 0, 1 ) == 1 )
{ {
m_io_service.reset(); m_io_service.reset();
m_work_ptr.reset( new boost::asio::io_service::work( m_io_service ) ); m_work_ptr.reset( new boost::asio::io_service::work( m_io_service ) );
} }
} }
} }
} }

View file

@ -6,25 +6,28 @@
#include <boost/enable_shared_from_this.hpp> #include <boost/enable_shared_from_this.hpp>
namespace Core { namespace Core {
namespace Network { namespace Network {
class Hive : public boost::enable_shared_from_this< Hive > class Hive :
{ public boost::enable_shared_from_this< Hive >
private: {
private:
boost::asio::io_service m_io_service; boost::asio::io_service m_io_service;
boost::shared_ptr< boost::asio::io_service::work > m_work_ptr; boost::shared_ptr< boost::asio::io_service::work > m_work_ptr;
volatile uint32_t m_shutdown; volatile uint32_t m_shutdown;
private: private:
Hive( const Hive & rhs ); Hive( const Hive& rhs );
Hive & operator =( const Hive & rhs );
public: Hive& operator=( const Hive& rhs );
public:
Hive(); Hive();
virtual ~Hive(); virtual ~Hive();
// Returns the io_service of this object. // Returns the io_service of this object.
boost::asio::io_service & GetService(); boost::asio::io_service& GetService();
// Returns true if the Stop function has been called. // Returns true if the Stop function has been called.
bool HasStopped(); bool HasStopped();
@ -46,9 +49,9 @@ namespace Core {
// Restarts the networking system after Stop as been called. A new work // Restarts the networking system after Stop as been called. A new work
// object is created ad the shutdown flag is cleared. // object is created ad the shutdown flag is cleared.
void Reset(); void Reset();
}; };
} }
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
#endif #endif

View file

@ -33,7 +33,7 @@ void Core::Network::Packets::PacketContainer::addPacket( Core::Network::Packets:
void Core::Network::Packets::PacketContainer::fillSendBuffer( std::vector< uint8_t >& sendBuffer ) void Core::Network::Packets::PacketContainer::fillSendBuffer( std::vector< uint8_t >& sendBuffer )
{ {
std::vector< uint8_t > tempBuffer( m_ipcHdr.size ); std::vector< uint8_t > tempBuffer( m_ipcHdr.size );
memset( &tempBuffer[0], 0, m_ipcHdr.size ); memset( &tempBuffer[ 0 ], 0, m_ipcHdr.size );
using namespace std::chrono; using namespace std::chrono;
auto ms = duration_cast< milliseconds >( system_clock::now().time_since_epoch() ); auto ms = duration_cast< milliseconds >( system_clock::now().time_since_epoch() );
@ -43,7 +43,7 @@ void Core::Network::Packets::PacketContainer::fillSendBuffer( std::vector< uint8
m_ipcHdr.timestamp = tick; m_ipcHdr.timestamp = tick;
m_ipcHdr.unknown_20 = 1; m_ipcHdr.unknown_20 = 1;
memcpy( &tempBuffer[0], &m_ipcHdr, sizeof( FFXIVARR_PACKET_HEADER ) ); memcpy( &tempBuffer[ 0 ], &m_ipcHdr, sizeof( FFXIVARR_PACKET_HEADER ) );
auto it = m_entryList.begin(); auto it = m_entryList.begin();
std::size_t offset = 0; std::size_t offset = 0;
@ -53,7 +53,7 @@ void Core::Network::Packets::PacketContainer::fillSendBuffer( std::vector< uint8
for( ; it != m_entryList.end(); ++it ) for( ; it != m_entryList.end(); ++it )
{ {
auto pPacket = (*it); auto pPacket = ( *it );
if( m_segmentTargetOverride != 0 && pPacket->getSegmentType() == SEGMENTTYPE_IPC ) if( m_segmentTargetOverride != 0 && pPacket->getSegmentType() == SEGMENTTYPE_IPC )
{ {
@ -61,11 +61,11 @@ void Core::Network::Packets::PacketContainer::fillSendBuffer( std::vector< uint8
} }
auto data = pPacket->getData(); auto data = pPacket->getData();
memcpy( &tempBuffer[0] + sizeof( FFXIVARR_PACKET_HEADER ) + offset, &data[0], pPacket->getSize() ); memcpy( &tempBuffer[ 0 ] + sizeof( FFXIVARR_PACKET_HEADER ) + offset, &data[ 0 ], pPacket->getSize() );
offset += pPacket->getSize(); offset += pPacket->getSize();
} }
sendBuffer.assign( &tempBuffer[0], &tempBuffer[0] + m_ipcHdr.size ); sendBuffer.assign( &tempBuffer[ 0 ], &tempBuffer[ 0 ] + m_ipcHdr.size );
} }
@ -78,7 +78,7 @@ std::string Core::Network::Packets::PacketContainer::toString()
std::string str = "\n"; std::string str = "\n";
for( uint32_t i = 0; i < m_ipcHdr.size; i++ ) for( uint32_t i = 0; i < m_ipcHdr.size; i++ )
{ {
str += boost::str( boost::format( "%|02X|" ) % static_cast< int32_t >( tmpBuffer[i] & 0xFF ) ) + " "; str += boost::str( boost::format( "%|02X|" ) % static_cast< int32_t >( tmpBuffer[ i ] & 0xFF ) ) + " ";
if( ( i + 1 ) % 16 == 0 ) if( ( i + 1 ) % 16 == 0 )
str += "\n"; str += "\n";

View file

@ -18,6 +18,7 @@ class PacketContainer
{ {
public: public:
PacketContainer( uint32_t segmentTargetOverride = 0 ); PacketContainer( uint32_t segmentTargetOverride = 0 );
~PacketContainer(); ~PacketContainer();
void addPacket( FFXIVPacketBasePtr entry ); void addPacket( FFXIVPacketBasePtr entry );

View file

@ -13,7 +13,8 @@ namespace Server {
* Structural representation of the packet sent by the server as response * Structural representation of the packet sent by the server as response
* to a tell request * to a tell request
*/ */
struct FFXIVIpcTell : FFXIVIpcBasePacket<Tell> struct FFXIVIpcTell :
FFXIVIpcBasePacket< Tell >
{ {
uint32_t u1; uint32_t u1;
uint16_t u2a; uint16_t u2a;
@ -25,11 +26,12 @@ struct FFXIVIpcTell : FFXIVIpcBasePacket<Tell>
char msg[1031]; char msg[1031];
}; };
/** /**
* Structural representation of the packet sent by the server as response * Structural representation of the packet sent by the server as response
* to a failed tell because of unavailable target player * to a failed tell because of unavailable target player
*/ */
struct FFXIVIpcTellErrNotFound : FFXIVIpcBasePacket<TellErrNotFound> struct FFXIVIpcTellErrNotFound :
FFXIVIpcBasePacket< TellErrNotFound >
{ {
char receipientName[32]; char receipientName[32];
}; };

View file

@ -7,13 +7,14 @@ namespace Core {
namespace Network { namespace Network {
namespace Packets { namespace Packets {
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// Lobby Connection IPC Codes /// Lobby Connection IPC Codes
/** /**
* Server IPC Lobby Type Codes. * Server IPC Lobby Type Codes.
*/ */
enum ServerLobbyIpcType : uint16_t enum ServerLobbyIpcType :
{ uint16_t
{
LobbyError = 0x0002, LobbyError = 0x0002,
LobbyServiceAccountList = 0x000C, LobbyServiceAccountList = 0x000C,
LobbyCharList = 0x000D, LobbyCharList = 0x000D,
@ -22,28 +23,30 @@ namespace Packets {
LobbyServerList = 0x0015, LobbyServerList = 0x0015,
LobbyRetainerList = 0x0017, LobbyRetainerList = 0x0017,
}; };
/** /**
* Client IPC Lobby Type Codes. * Client IPC Lobby Type Codes.
*/ */
enum ClientLobbyIpcType : uint16_t enum ClientLobbyIpcType :
{ uint16_t
{
ReqCharList = 0x0003, ReqCharList = 0x0003,
ReqEnterWorld = 0x0004, ReqEnterWorld = 0x0004,
ReqServiceAccountList = 0x0005, ReqServiceAccountList = 0x0005,
ReqCharDelete = 0x000A, ReqCharDelete = 0x000A,
ReqCharCreate = 0x000B, ReqCharCreate = 0x000B,
}; };
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// Zone Connection IPC Codes /// Zone Connection IPC Codes
/** /**
* Server IPC Zone Type Codes. * Server IPC Zone Type Codes.
*/ */
enum ServerZoneIpcType : uint16_t enum ServerZoneIpcType :
{ uint16_t
{
// static opcode ( the ones that rarely, if ever, change ) // static opcode ( the ones that rarely, if ever, change )
Ping = 0x0065, Ping = 0x0065,
@ -190,13 +193,14 @@ namespace Packets {
IPCTYPE_UNK_320 = 0x024C, // updated 4.3 IPCTYPE_UNK_320 = 0x024C, // updated 4.3
IPCTYPE_UNK_322 = 0x024E, // updated 4.3 IPCTYPE_UNK_322 = 0x024E, // updated 4.3
}; };
/** /**
* Client IPC Zone Type Codes. * Client IPC Zone Type Codes.
*/ */
enum ClientZoneIpcType : uint16_t enum ClientZoneIpcType :
{ uint16_t
{
PingHandler = 0x0065, // unchanged 4.3 PingHandler = 0x0065, // unchanged 4.3
InitHandler = 0x0066, // unchanged 4.3 InitHandler = 0x0066, // unchanged 4.3
@ -206,7 +210,6 @@ namespace Packets {
CFCommenceHandler = 0x006F, CFCommenceHandler = 0x006F,
CFRegisterDuty = 0x0071, CFRegisterDuty = 0x0071,
CFRegisterRoulette = 0x0072, CFRegisterRoulette = 0x0072,
PlayTimeHandler = 0x0073, // unchanged 4.3 PlayTimeHandler = 0x0073, // unchanged 4.3
@ -272,26 +275,28 @@ namespace Packets {
ReqEquipDisplayFlagsChange = 0x0178, // updated 4.3 ReqEquipDisplayFlagsChange = 0x0178, // updated 4.3
}; };
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// Chat Connection IPC Codes /// Chat Connection IPC Codes
/** /**
* Server IPC Chat Type Codes. * Server IPC Chat Type Codes.
*/ */
enum ServerChatIpcType : uint16_t enum ServerChatIpcType :
{ uint16_t
{
Tell = 0x0064, // updated for sb Tell = 0x0064, // updated for sb
TellErrNotFound = 0x0066, TellErrNotFound = 0x0066,
}; };
/** /**
* Client IPC Chat Type Codes. * Client IPC Chat Type Codes.
*/ */
enum ClientChatIpcType : uint16_t enum ClientChatIpcType :
{ uint16_t
{
TellReq = 0x0064, TellReq = 0x0064,
}; };
} /* Packets */ } /* Packets */

View file

@ -9,14 +9,16 @@ namespace Network {
namespace Packets { namespace Packets {
namespace Server { namespace Server {
struct FFXIVIpcRetainerList : FFXIVIpcBasePacket<LobbyRetainerList> struct FFXIVIpcRetainerList :
FFXIVIpcBasePacket< LobbyRetainerList >
{ {
uint8_t padding[0x210]; uint8_t padding[0x210];
}; };
/** /**
*/ */
struct FFXIVIpcServiceIdInfo : FFXIVIpcBasePacket<LobbyServiceAccountList> struct FFXIVIpcServiceIdInfo :
FFXIVIpcBasePacket< LobbyServiceAccountList >
{ {
uint64_t seq; uint64_t seq;
uint8_t padding; uint8_t padding;
@ -35,7 +37,8 @@ struct FFXIVIpcServiceIdInfo : FFXIVIpcBasePacket<LobbyServiceAccountList>
}; };
struct FFXIVIpcServerList : FFXIVIpcBasePacket<LobbyServerList> struct FFXIVIpcServerList :
FFXIVIpcBasePacket< LobbyServerList >
{ {
uint64_t seq; uint64_t seq;
uint16_t final; uint16_t final;
@ -56,7 +59,8 @@ struct FFXIVIpcServerList : FFXIVIpcBasePacket<LobbyServerList>
} server[6]; } server[6];
}; };
struct FFXIVIpcCharList : FFXIVIpcBasePacket<LobbyCharList> struct FFXIVIpcCharList :
FFXIVIpcBasePacket< LobbyCharList >
{ {
uint64_t seq; uint64_t seq;
uint8_t counter; // current packet count * 4, count * 4 +1 on last packet. uint8_t counter; // current packet count * 4, count * 4 +1 on last packet.
@ -96,7 +100,8 @@ struct FFXIVIpcCharList : FFXIVIpcBasePacket<LobbyCharList>
}; };
struct FFXIVIpcEnterWorld : FFXIVIpcBasePacket<LobbyEnterWorld> struct FFXIVIpcEnterWorld :
FFXIVIpcBasePacket< LobbyEnterWorld >
{ {
uint64_t seq; uint64_t seq;
uint32_t charId; uint32_t charId;
@ -110,7 +115,8 @@ struct FFXIVIpcEnterWorld : FFXIVIpcBasePacket<LobbyEnterWorld>
uint64_t padding4; uint64_t padding4;
}; };
struct FFXIVIpcCharCreate : FFXIVIpcBasePacket<LobbyCharCreate> struct FFXIVIpcCharCreate :
FFXIVIpcBasePacket< LobbyCharCreate >
{ {
uint64_t seq; uint64_t seq;
uint8_t unknown; uint8_t unknown;
@ -129,7 +135,8 @@ struct FFXIVIpcCharCreate : FFXIVIpcBasePacket<LobbyCharCreate>
char world[32]; char world[32];
}; };
struct FFXIVIpcLobbyError : FFXIVIpcBasePacket<LobbyError> struct FFXIVIpcLobbyError :
FFXIVIpcBasePacket< LobbyError >
{ {
uint64_t seq; uint64_t seq;
uint32_t error_id; uint32_t error_id;

View file

@ -9,7 +9,8 @@ namespace Network {
namespace Packets { namespace Packets {
namespace Client { namespace Client {
struct FFXIVIpcGmCommand1 : FFXIVIpcBasePacket< GMCommand1 > struct FFXIVIpcGmCommand1 :
FFXIVIpcBasePacket< GMCommand1 >
{ {
/* 0000 */ uint32_t commandId; /* 0000 */ uint32_t commandId;
/* 0004 */ uint32_t param1; /* 0004 */ uint32_t param1;
@ -18,14 +19,16 @@ struct FFXIVIpcGmCommand1 : FFXIVIpcBasePacket< GMCommand1 >
/* 0018 */ uint32_t param3; /* 0018 */ uint32_t param3;
}; };
struct FFXIVIpcGmCommand2 : FFXIVIpcBasePacket< GMCommand2 > struct FFXIVIpcGmCommand2 :
FFXIVIpcBasePacket< GMCommand2 >
{ {
/* 0000 */ uint32_t commandId; /* 0000 */ uint32_t commandId;
/* 0004 */ char unk_4[0x10]; /* 0004 */ char unk_4[0x10];
/* 0014 */ char param1[0x20]; /* 0014 */ char param1[0x20];
}; };
struct FFXIVIpcClientTrigger : FFXIVIpcBasePacket< ClientTrigger > struct FFXIVIpcClientTrigger :
FFXIVIpcBasePacket< ClientTrigger >
{ {
/* 0000 */ uint16_t commandId; /* 0000 */ uint16_t commandId;
/* 0002 */ uint8_t unk_2[2]; /* 0002 */ uint8_t unk_2[2];
@ -36,7 +39,8 @@ struct FFXIVIpcClientTrigger : FFXIVIpcBasePacket< ClientTrigger >
/* 0018 */ uint64_t param3; /* 0018 */ uint64_t param3;
}; };
struct FFXIVIpcSkillHandler : FFXIVIpcBasePacket< SkillHandler > struct FFXIVIpcSkillHandler :
FFXIVIpcBasePacket< SkillHandler >
{ {
/* 0000 */ char pad_0000[1]; /* 0000 */ char pad_0000[1];
/* 0001 */ uint8_t type; /* 0001 */ uint8_t type;
@ -47,17 +51,20 @@ struct FFXIVIpcSkillHandler : FFXIVIpcBasePacket< SkillHandler >
/* 0010 */ uint64_t targetId; /* 0010 */ uint64_t targetId;
}; };
struct FFXIVIpcZoneLineHandler : FFXIVIpcBasePacket< ZoneLineHandler > struct FFXIVIpcZoneLineHandler :
FFXIVIpcBasePacket< ZoneLineHandler >
{ {
/* 0000 */ uint32_t zoneLineId; /* 0000 */ uint32_t zoneLineId;
}; };
struct FFXIVIpcDiscoveryHandler : FFXIVIpcBasePacket< DiscoveryHandler > struct FFXIVIpcDiscoveryHandler :
FFXIVIpcBasePacket< DiscoveryHandler >
{ {
/* 0000 */ uint32_t positionRef; /* 0000 */ uint32_t positionRef;
}; };
struct FFXIVIpcEventHandlerReturn : FFXIVIpcBasePacket< ReturnEventHandler > struct FFXIVIpcEventHandlerReturn :
FFXIVIpcBasePacket< ReturnEventHandler >
{ {
/* 0000 */ uint32_t eventId; /* 0000 */ uint32_t eventId;
/* 0004 */ uint16_t scene; /* 0004 */ uint16_t scene;
@ -69,46 +76,53 @@ struct FFXIVIpcEventHandlerReturn : FFXIVIpcBasePacket< ReturnEventHandler >
/* 0010 */ uint16_t param4; /* 0010 */ uint16_t param4;
}; };
struct FFXIVIpcEnterTerritoryHandler : FFXIVIpcBasePacket< EnterTeriEventHandler > struct FFXIVIpcEnterTerritoryHandler :
FFXIVIpcBasePacket< EnterTeriEventHandler >
{ {
/* 0000 */ uint32_t eventId; /* 0000 */ uint32_t eventId;
/* 0004 */ uint16_t param1; /* 0004 */ uint16_t param1;
/* 0006 */ uint16_t param2; /* 0006 */ uint16_t param2;
}; };
struct FFXIVIpcEventHandlerOutsideRange : FFXIVIpcBasePacket< OutOfRangeEventHandler > struct FFXIVIpcEventHandlerOutsideRange :
FFXIVIpcBasePacket< OutOfRangeEventHandler >
{ {
/* 0000 */ uint32_t param1; /* 0000 */ uint32_t param1;
/* 0004 */ uint32_t eventId; /* 0004 */ uint32_t eventId;
/* 0008 */ Common::FFXIVARR_POSITION3 position; /* 0008 */ Common::FFXIVARR_POSITION3 position;
}; };
struct FFXIVIpcEventHandlerWithinRange : FFXIVIpcBasePacket< WithinRangeEventHandler > struct FFXIVIpcEventHandlerWithinRange :
FFXIVIpcBasePacket< WithinRangeEventHandler >
{ {
/* 0000 */ uint32_t param1; /* 0000 */ uint32_t param1;
/* 0004 */ uint32_t eventId; /* 0004 */ uint32_t eventId;
/* 0008 */ Common::FFXIVARR_POSITION3 position; /* 0008 */ Common::FFXIVARR_POSITION3 position;
}; };
struct FFXIVIpcEventHandlerEmote : FFXIVIpcBasePacket< EmoteEventHandler > struct FFXIVIpcEventHandlerEmote :
FFXIVIpcBasePacket< EmoteEventHandler >
{ {
/* 0000 */ uint64_t actorId; /* 0000 */ uint64_t actorId;
/* 0008 */ uint32_t eventId; /* 0008 */ uint32_t eventId;
/* 000C */ uint16_t emoteId; /* 000C */ uint16_t emoteId;
}; };
struct FFXIVIpcEventHandlerTalk : FFXIVIpcBasePacket< TalkEventHandler > struct FFXIVIpcEventHandlerTalk :
FFXIVIpcBasePacket< TalkEventHandler >
{ {
/* 0000 */ uint64_t actorId; /* 0000 */ uint64_t actorId;
/* 0008 */ uint32_t eventId; /* 0008 */ uint32_t eventId;
}; };
struct FFXIVIpcPingHandler : FFXIVIpcBasePacket< PingHandler > struct FFXIVIpcPingHandler :
FFXIVIpcBasePacket< PingHandler >
{ {
/* 0000 */ uint32_t timestamp; // maybe lol.. /* 0000 */ uint32_t timestamp; // maybe lol..
}; };
struct FFXIVIpcSetSearchInfo : FFXIVIpcBasePacket< SetSearchInfoHandler > struct FFXIVIpcSetSearchInfo :
FFXIVIpcBasePacket< SetSearchInfoHandler >
{ {
union union
{ {
@ -125,14 +139,16 @@ struct FFXIVIpcSetSearchInfo : FFXIVIpcBasePacket< SetSearchInfoHandler >
/* 0012 */ char searchComment[193]; /* 0012 */ char searchComment[193];
}; };
struct FFXIVIpcTellHandler : FFXIVIpcBasePacket< TellReq > struct FFXIVIpcTellHandler :
FFXIVIpcBasePacket< TellReq >
{ {
/* 0000 */ char pad_0000[4]; /* 0000 */ char pad_0000[4];
/* 0004 */ char targetPCName[32]; /* 0004 */ char targetPCName[32];
/* 0024 */ char message[1012]; /* 0024 */ char message[1012];
}; };
struct FFXIVIpcChatHandler : FFXIVIpcBasePacket< ChatHandler > struct FFXIVIpcChatHandler :
FFXIVIpcBasePacket< ChatHandler >
{ {
/* 0000 */ char pad_0000[4]; /* 0000 */ char pad_0000[4];
/* 0004 */ uint32_t sourceId; /* 0004 */ uint32_t sourceId;
@ -141,7 +157,8 @@ struct FFXIVIpcChatHandler : FFXIVIpcBasePacket< ChatHandler >
/* 001A */ char message[1012]; /* 001A */ char message[1012];
}; };
struct FFXIVIpcLinkshellEventHandler : FFXIVIpcBasePacket< LinkshellEventHandler > struct FFXIVIpcLinkshellEventHandler :
FFXIVIpcBasePacket< LinkshellEventHandler >
{ {
/* 0000 */ uint32_t eventId; /* 0000 */ uint32_t eventId;
/* 0004 */ uint16_t scene; /* 0004 */ uint16_t scene;
@ -149,7 +166,8 @@ struct FFXIVIpcLinkshellEventHandler : FFXIVIpcBasePacket< LinkshellEventHandler
/* 0007 */ char lsName[21]; /* 0007 */ char lsName[21];
}; };
struct FFXIVIpcInventoryModifyHandler : FFXIVIpcBasePacket< InventoryModifyHandler > struct FFXIVIpcInventoryModifyHandler :
FFXIVIpcBasePacket< InventoryModifyHandler >
{ {
/* 0000 */ uint32_t seq; /* 0000 */ uint32_t seq;
/* 0004 */ Common::InventoryOperation action; /* 0004 */ Common::InventoryOperation action;

View file

@ -19,7 +19,8 @@ namespace Server {
* Structural representation of the packet sent by the server as response * Structural representation of the packet sent by the server as response
* to a ping packet * to a ping packet
*/ */
struct FFXIVIpcPing : FFXIVIpcBasePacket<Ping> struct FFXIVIpcPing :
FFXIVIpcBasePacket< Ping >
{ {
/* 0000 */ uint64_t timeInMilliseconds; /* 0000 */ uint64_t timeInMilliseconds;
/* 0008 */ uint8_t unknown_8[0x38]; /* 0008 */ uint8_t unknown_8[0x38];
@ -29,7 +30,8 @@ struct FFXIVIpcPing : FFXIVIpcBasePacket<Ping>
* Structural representation of the packet sent by the server as response * Structural representation of the packet sent by the server as response
* to a ping packet * to a ping packet
*/ */
struct FFXIVIpcInit : FFXIVIpcBasePacket<Init> struct FFXIVIpcInit :
FFXIVIpcBasePacket< Init >
{ {
uint64_t unknown; uint64_t unknown;
uint32_t charId; uint32_t charId;
@ -40,7 +42,8 @@ struct FFXIVIpcInit : FFXIVIpcBasePacket<Init>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* carrying chat messages * carrying chat messages
*/ */
struct FFXIVIpcChat : FFXIVIpcBasePacket<Chat> struct FFXIVIpcChat :
FFXIVIpcBasePacket< Chat >
{ {
/* 0000 */ uint8_t padding[14]; //Maybe this is SubCode, or some kind of talker ID... /* 0000 */ uint8_t padding[14]; //Maybe this is SubCode, or some kind of talker ID...
Common::ChatType chatType; Common::ChatType chatType;
@ -48,7 +51,8 @@ struct FFXIVIpcChat : FFXIVIpcBasePacket<Chat>
char msg[1012]; char msg[1012];
}; };
struct FFXIVIpcChatBanned : FFXIVIpcBasePacket<ChatBanned> struct FFXIVIpcChatBanned :
FFXIVIpcBasePacket< ChatBanned >
{ {
uint8_t padding[4]; // I was not sure reinterpreting ZST is valid behavior in C++. uint8_t padding[4]; // I was not sure reinterpreting ZST is valid behavior in C++.
// client doesn't care about the data (zero sized) for this opcode anyway. // client doesn't care about the data (zero sized) for this opcode anyway.
@ -58,7 +62,8 @@ struct FFXIVIpcChatBanned : FFXIVIpcBasePacket<ChatBanned>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* carrying chat messages * carrying chat messages
*/ */
struct FFXIVIpcLogout : FFXIVIpcBasePacket<Logout> struct FFXIVIpcLogout :
FFXIVIpcBasePacket< Logout >
{ {
uint32_t flags1; uint32_t flags1;
uint32_t flags2; uint32_t flags2;
@ -68,7 +73,8 @@ struct FFXIVIpcLogout : FFXIVIpcBasePacket<Logout>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* sent to show the play time * sent to show the play time
*/ */
struct FFXIVIpcPlayTime : FFXIVIpcBasePacket<Playtime> struct FFXIVIpcPlayTime :
FFXIVIpcBasePacket< Playtime >
{ {
uint32_t playTimeInMinutes; uint32_t playTimeInMinutes;
uint32_t padding; uint32_t padding;
@ -79,7 +85,8 @@ struct FFXIVIpcPlayTime : FFXIVIpcBasePacket<Playtime>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* with a list of players ( party list | friend list | search results ) * with a list of players ( party list | friend list | search results )
*/ */
struct PlayerEntry { struct PlayerEntry
{
uint64_t contentId; uint64_t contentId;
uint8_t bytes[12]; uint8_t bytes[12];
uint16_t zoneId; uint16_t zoneId;
@ -96,7 +103,8 @@ struct PlayerEntry {
char fcTag[9]; char fcTag[9];
}; };
struct FFXIVIpcSocialList : FFXIVIpcBasePacket<SocialList> struct FFXIVIpcSocialList :
FFXIVIpcBasePacket< SocialList >
{ {
uint32_t padding; uint32_t padding;
uint32_t padding1; uint32_t padding1;
@ -109,7 +117,8 @@ struct FFXIVIpcSocialList : FFXIVIpcBasePacket<SocialList>
}; };
struct FFXIVIpcSetSearchInfo : FFXIVIpcBasePacket<UpdateSearchInfo> struct FFXIVIpcSetSearchInfo :
FFXIVIpcBasePacket< UpdateSearchInfo >
{ {
uint64_t onlineStatusFlags; uint64_t onlineStatusFlags;
uint64_t unknown; uint64_t unknown;
@ -120,7 +129,8 @@ struct FFXIVIpcSetSearchInfo : FFXIVIpcBasePacket<UpdateSearchInfo>
uint8_t padding2; uint8_t padding2;
}; };
struct FFXIVIpcInitSearchInfo : FFXIVIpcBasePacket<InitSearchInfo> struct FFXIVIpcInitSearchInfo :
FFXIVIpcBasePacket< InitSearchInfo >
{ {
uint64_t onlineStatusFlags; uint64_t onlineStatusFlags;
uint64_t unknown; uint64_t unknown;
@ -134,18 +144,21 @@ struct FFXIVIpcInitSearchInfo : FFXIVIpcBasePacket<InitSearchInfo>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to display a server notice message * to display a server notice message
*/ */
struct FFXIVIpcServerNotice : FFXIVIpcBasePacket<ServerNotice> struct FFXIVIpcServerNotice :
FFXIVIpcBasePacket< ServerNotice >
{ {
/* 0000 */ uint8_t padding; /* 0000 */ uint8_t padding;
char message[307]; char message[307];
}; };
struct FFXIVIpcSetOnlineStatus : FFXIVIpcBasePacket<SetOnlineStatus> struct FFXIVIpcSetOnlineStatus :
FFXIVIpcBasePacket< SetOnlineStatus >
{ {
uint64_t onlineStatusFlags; uint64_t onlineStatusFlags;
}; };
struct FFXIVIpcBlackList : FFXIVIpcBasePacket<BlackList> struct FFXIVIpcBlackList :
FFXIVIpcBasePacket< BlackList >
{ {
struct BlEntry struct BlEntry
{ {
@ -158,7 +171,8 @@ struct FFXIVIpcBlackList : FFXIVIpcBasePacket<BlackList>
uint32_t padding2; uint32_t padding2;
}; };
struct FFXIVIpcLogMessage : FFXIVIpcBasePacket<LogMessage> struct FFXIVIpcLogMessage :
FFXIVIpcBasePacket< LogMessage >
{ {
uint32_t field_0; uint32_t field_0;
uint32_t field_4; uint32_t field_4;
@ -172,7 +186,8 @@ struct FFXIVIpcLogMessage : FFXIVIpcBasePacket<LogMessage>
uint32_t field_58; uint32_t field_58;
}; };
struct FFXIVIpcLinkshellList : FFXIVIpcBasePacket<LinkshellList> struct FFXIVIpcLinkshellList :
FFXIVIpcBasePacket< LinkshellList >
{ {
struct LsEntry struct LsEntry
{ {
@ -185,7 +200,8 @@ struct FFXIVIpcLinkshellList : FFXIVIpcBasePacket<LinkshellList>
} entry[8]; } entry[8];
}; };
struct FFXIVIpcStatusEffectList : FFXIVIpcBasePacket<StatusEffectList> struct FFXIVIpcStatusEffectList :
FFXIVIpcBasePacket< StatusEffectList >
{ {
uint8_t classId; uint8_t classId;
uint8_t level1; uint8_t level1;
@ -200,7 +216,8 @@ struct FFXIVIpcStatusEffectList : FFXIVIpcBasePacket<StatusEffectList>
uint32_t padding; uint32_t padding;
}; };
struct FFXIVGCAffiliation : FFXIVIpcBasePacket<GCAffiliation> struct FFXIVGCAffiliation :
FFXIVIpcBasePacket< GCAffiliation >
{ {
uint8_t gcId; uint8_t gcId;
uint8_t gcRank[3]; uint8_t gcRank[3];
@ -210,7 +227,8 @@ struct FFXIVGCAffiliation : FFXIVIpcBasePacket<GCAffiliation>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* add a status effect * add a status effect
*/ */
struct FFXIVIpcAddStatusEffect : FFXIVIpcBasePacket<AddStatusEffect> struct FFXIVIpcAddStatusEffect :
FFXIVIpcBasePacket< AddStatusEffect >
{ {
uint32_t unknown; uint32_t unknown;
uint32_t actor_id; uint32_t actor_id;
@ -237,7 +255,8 @@ struct FFXIVIpcAddStatusEffect : FFXIVIpcBasePacket<AddStatusEffect>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update certain player details / status * to update certain player details / status
*/ */
struct FFXIVIpcActorControl142 : FFXIVIpcBasePacket<ActorControl142> struct FFXIVIpcActorControl142 :
FFXIVIpcBasePacket< ActorControl142 >
{ {
/* 0000 */ uint16_t category; /* 0000 */ uint16_t category;
/* 0002 */ uint16_t padding; /* 0002 */ uint16_t padding;
@ -252,7 +271,8 @@ struct FFXIVIpcActorControl142 : FFXIVIpcBasePacket<ActorControl142>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update certain player details / status * to update certain player details / status
*/ */
struct FFXIVIpcActorControl143 : FFXIVIpcBasePacket<ActorControl143> struct FFXIVIpcActorControl143 :
FFXIVIpcBasePacket< ActorControl143 >
{ {
/* 0000 */ uint16_t category; /* 0000 */ uint16_t category;
/* 0002 */ uint16_t padding; /* 0002 */ uint16_t padding;
@ -269,7 +289,8 @@ struct FFXIVIpcActorControl143 : FFXIVIpcBasePacket<ActorControl143>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update certain player details / status * to update certain player details / status
*/ */
struct FFXIVIpcActorControl144 : FFXIVIpcBasePacket<ActorControl144> struct FFXIVIpcActorControl144 :
FFXIVIpcBasePacket< ActorControl144 >
{ {
/* 0000 */ uint16_t category; /* 0000 */ uint16_t category;
/* 0002 */ uint16_t padding; /* 0002 */ uint16_t padding;
@ -285,7 +306,8 @@ struct FFXIVIpcActorControl144 : FFXIVIpcBasePacket<ActorControl144>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update HP / MP / TP * to update HP / MP / TP
*/ */
struct FFXIVIpcUpdateHpMpTp : FFXIVIpcBasePacket<UpdateHpMpTp> struct FFXIVIpcUpdateHpMpTp :
FFXIVIpcBasePacket< UpdateHpMpTp >
{ {
/* 0000 */ uint32_t hp; /* 0000 */ uint32_t hp;
/* 0004 */ uint16_t mp; /* 0004 */ uint16_t mp;
@ -335,7 +357,8 @@ struct EffectHeader
uint32_t padding_22[2]; uint32_t padding_22[2];
}; };
struct FFXIVIpcEffect : FFXIVIpcBasePacket<Effect> struct FFXIVIpcEffect :
FFXIVIpcBasePacket< Effect >
{ {
EffectHeader header; EffectHeader header;
@ -365,17 +388,30 @@ struct FFXIVIpcAoeEffect
uint32_t padding_78; uint32_t padding_78;
}; };
struct FFXIVIpcAoeEffect8 : FFXIVIpcBasePacket< AoeEffect8 >, FFXIVIpcAoeEffect< 8 > {}; struct FFXIVIpcAoeEffect8 :
struct FFXIVIpcAoeEffect16 : FFXIVIpcBasePacket< AoeEffect16 >, FFXIVIpcAoeEffect< 16 > {}; FFXIVIpcBasePacket< AoeEffect8 >, FFXIVIpcAoeEffect< 8 >
struct FFXIVIpcAoeEffect24 : FFXIVIpcBasePacket< AoeEffect24 >, FFXIVIpcAoeEffect< 24 > {}; {
struct FFXIVIpcAoeEffect32 : FFXIVIpcBasePacket< AoeEffect32 >, FFXIVIpcAoeEffect< 32 > {}; };
struct FFXIVIpcAoeEffect16 :
FFXIVIpcBasePacket< AoeEffect16 >, FFXIVIpcAoeEffect< 16 >
{
};
struct FFXIVIpcAoeEffect24 :
FFXIVIpcBasePacket< AoeEffect24 >, FFXIVIpcAoeEffect< 24 >
{
};
struct FFXIVIpcAoeEffect32 :
FFXIVIpcBasePacket< AoeEffect32 >, FFXIVIpcAoeEffect< 32 >
{
};
/** /**
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to spawn an actor * to spawn an actor
*/ */
struct FFXIVIpcPlayerSpawn : FFXIVIpcBasePacket<PlayerSpawn> struct FFXIVIpcPlayerSpawn :
FFXIVIpcBasePacket< PlayerSpawn >
{ {
uint16_t title; uint16_t title;
uint16_t u1b; uint16_t u1b;
@ -451,7 +487,8 @@ struct FFXIVIpcPlayerSpawn : FFXIVIpcBasePacket<PlayerSpawn>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to spawn an actor * to spawn an actor
*/ */
struct FFXIVIpcNpcSpawn : FFXIVIpcBasePacket<NpcSpawn> struct FFXIVIpcNpcSpawn :
FFXIVIpcBasePacket< NpcSpawn >
{ {
uint32_t gimmickId; // needs to be existing in the map, mob will snap to it uint32_t gimmickId; // needs to be existing in the map, mob will snap to it
uint8_t u2b; uint8_t u2b;
@ -531,7 +568,8 @@ struct FFXIVIpcNpcSpawn : FFXIVIpcBasePacket<NpcSpawn>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to show player movement * to show player movement
*/ */
struct FFXIVIpcActorFreeSpawn : FFXIVIpcBasePacket<ActorFreeSpawn> struct FFXIVIpcActorFreeSpawn :
FFXIVIpcBasePacket< ActorFreeSpawn >
{ {
uint32_t spawnId; uint32_t spawnId;
uint32_t actorId; uint32_t actorId;
@ -541,7 +579,8 @@ struct FFXIVIpcActorFreeSpawn : FFXIVIpcBasePacket<ActorFreeSpawn>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to show player movement * to show player movement
*/ */
struct FFXIVIpcActorMove : FFXIVIpcBasePacket<ActorMove> struct FFXIVIpcActorMove :
FFXIVIpcBasePacket< ActorMove >
{ {
/* 0000 */ uint8_t rotation; /* 0000 */ uint8_t rotation;
/* 0001 */ uint8_t unknown_1; /* 0001 */ uint8_t unknown_1;
@ -558,7 +597,8 @@ struct FFXIVIpcActorMove : FFXIVIpcBasePacket<ActorMove>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to set an actors position * to set an actors position
*/ */
struct FFXIVIpcActorSetPos : FFXIVIpcBasePacket<ActorSetPos> struct FFXIVIpcActorSetPos :
FFXIVIpcBasePacket< ActorSetPos >
{ {
uint16_t r16; uint16_t r16;
uint8_t waitForLoad; uint8_t waitForLoad;
@ -572,12 +612,12 @@ struct FFXIVIpcActorSetPos : FFXIVIpcBasePacket<ActorSetPos>
}; };
/** /**
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to start an actors casting * to start an actors casting
*/ */
struct FFXIVIpcActorCast : FFXIVIpcBasePacket<ActorCast> struct FFXIVIpcActorCast :
FFXIVIpcBasePacket< ActorCast >
{ {
uint16_t action_id; uint16_t action_id;
Common::SkillType skillType; Common::SkillType skillType;
@ -593,7 +633,8 @@ struct FFXIVIpcActorCast : FFXIVIpcBasePacket<ActorCast>
uint16_t unknown_3; uint16_t unknown_3;
}; };
struct FFXIVIpcHateList : FFXIVIpcBasePacket<HateList> struct FFXIVIpcHateList :
FFXIVIpcBasePacket< HateList >
{ {
uint32_t numEntries; uint32_t numEntries;
struct LsEntry struct LsEntry
@ -606,7 +647,8 @@ struct FFXIVIpcHateList : FFXIVIpcBasePacket<HateList>
uint32_t padding; uint32_t padding;
}; };
struct FFXIVIpcUpdateClassInfo : FFXIVIpcBasePacket<UpdateClassInfo> struct FFXIVIpcUpdateClassInfo :
FFXIVIpcBasePacket< UpdateClassInfo >
{ {
uint8_t classId; uint8_t classId;
uint8_t level1; uint8_t level1;
@ -620,7 +662,8 @@ struct FFXIVIpcUpdateClassInfo : FFXIVIpcBasePacket<UpdateClassInfo>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to send the titles available to the player * to send the titles available to the player
*/ */
struct FFXIVIpcPlayerTitleList : FFXIVIpcBasePacket<PlayerTitleList> struct FFXIVIpcPlayerTitleList :
FFXIVIpcBasePacket< PlayerTitleList >
{ {
uint8_t titleList[48]; uint8_t titleList[48];
}; };
@ -629,7 +672,8 @@ struct FFXIVIpcPlayerTitleList : FFXIVIpcBasePacket<PlayerTitleList>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to initialize a zone for the player * to initialize a zone for the player
*/ */
struct FFXIVIpcInitZone : FFXIVIpcBasePacket<InitZone> struct FFXIVIpcInitZone :
FFXIVIpcBasePacket< InitZone >
{ {
uint16_t serverId; uint16_t serverId;
uint16_t zoneId; uint16_t zoneId;
@ -651,7 +695,8 @@ struct FFXIVIpcInitZone : FFXIVIpcBasePacket<InitZone>
* Structural representation of the packet sent by the server to initialize * Structural representation of the packet sent by the server to initialize
* the client UI upon initial connection. * the client UI upon initial connection.
*/ */
struct FFXIVIpcInitUI : FFXIVIpcBasePacket<InitUI> struct FFXIVIpcInitUI :
FFXIVIpcBasePacket< InitUI >
{ {
// plain C types for a bit until the packet is actually fixed. // plain C types for a bit until the packet is actually fixed.
// makes conversion between different editors easier. // makes conversion between different editors easier.
@ -799,7 +844,8 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket<InitUI>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to set a players stats * to set a players stats
*/ */
struct FFXIVIpcPlayerStats : FFXIVIpcBasePacket<PlayerStats> struct FFXIVIpcPlayerStats :
FFXIVIpcBasePacket< PlayerStats >
{ {
uint32_t strength; uint32_t strength;
uint32_t dexterity; uint32_t dexterity;
@ -855,7 +901,8 @@ struct FFXIVIpcPlayerStats : FFXIVIpcBasePacket<PlayerStats>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to set an actors current owner * to set an actors current owner
*/ */
struct FFXIVIpcActorOwner : FFXIVIpcBasePacket<ActorOwner> struct FFXIVIpcActorOwner :
FFXIVIpcBasePacket< ActorOwner >
{ {
uint8_t type; uint8_t type;
uint8_t padding[7]; uint8_t padding[7];
@ -867,7 +914,8 @@ struct FFXIVIpcActorOwner : FFXIVIpcBasePacket<ActorOwner>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to set a players state * to set a players state
*/ */
struct FFXIVIpcPlayerStateFlags : FFXIVIpcBasePacket<PlayerStateFlags> struct FFXIVIpcPlayerStateFlags :
FFXIVIpcBasePacket< PlayerStateFlags >
{ {
uint8_t flags[12]; uint8_t flags[12];
uint32_t padding; uint32_t padding;
@ -877,7 +925,8 @@ struct FFXIVIpcPlayerStateFlags : FFXIVIpcBasePacket<PlayerStateFlags>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* containing current class information * containing current class information
*/ */
struct FFXIVIpcPlayerClassInfo : FFXIVIpcBasePacket<PlayerClassInfo> struct FFXIVIpcPlayerClassInfo :
FFXIVIpcBasePacket< PlayerClassInfo >
{ {
uint16_t classId; uint16_t classId;
uint8_t unknown; uint8_t unknown;
@ -891,7 +940,8 @@ struct FFXIVIpcPlayerClassInfo : FFXIVIpcBasePacket<PlayerClassInfo>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update a players appearance * to update a players appearance
*/ */
struct FFXIVIpcModelEquip : FFXIVIpcBasePacket<ModelEquip> struct FFXIVIpcModelEquip :
FFXIVIpcBasePacket< ModelEquip >
{ {
/* 0000 */ uint64_t mainWeapon; /* 0000 */ uint64_t mainWeapon;
/* 0008 */ uint64_t offWeapon; /* 0008 */ uint64_t offWeapon;
@ -904,7 +954,8 @@ struct FFXIVIpcModelEquip : FFXIVIpcBasePacket<ModelEquip>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update a players appearance * to update a players appearance
*/ */
struct FFXIVIpcItemInfo : FFXIVIpcBasePacket<ItemInfo> struct FFXIVIpcItemInfo :
FFXIVIpcBasePacket< ItemInfo >
{ {
uint32_t sequence; uint32_t sequence;
uint32_t unknown; uint32_t unknown;
@ -938,7 +989,8 @@ struct FFXIVIpcItemInfo : FFXIVIpcBasePacket<ItemInfo>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update a players appearance * to update a players appearance
*/ */
struct FFXIVIpcContainerInfo : FFXIVIpcBasePacket<ContainerInfo> struct FFXIVIpcContainerInfo :
FFXIVIpcBasePacket< ContainerInfo >
{ {
uint32_t sequence; uint32_t sequence;
uint32_t numItems; uint32_t numItems;
@ -950,7 +1002,8 @@ struct FFXIVIpcContainerInfo : FFXIVIpcBasePacket<ContainerInfo>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update a players appearance * to update a players appearance
*/ */
struct FFXIVIpcCurrencyCrystalInfo : FFXIVIpcBasePacket<CurrencyCrystalInfo> struct FFXIVIpcCurrencyCrystalInfo :
FFXIVIpcBasePacket< CurrencyCrystalInfo >
{ {
uint32_t sequence; uint32_t sequence;
uint16_t containerId; uint16_t containerId;
@ -963,14 +1016,16 @@ struct FFXIVIpcCurrencyCrystalInfo : FFXIVIpcBasePacket<CurrencyCrystalInfo>
uint32_t unknown3; uint32_t unknown3;
}; };
struct FFXIVIpcInventoryTransactionFinish : FFXIVIpcBasePacket<InventoryTransactionFinish> struct FFXIVIpcInventoryTransactionFinish :
FFXIVIpcBasePacket< InventoryTransactionFinish >
{ {
uint32_t transactionId; uint32_t transactionId;
uint32_t transactionId1; uint32_t transactionId1;
uint64_t padding; uint64_t padding;
}; };
struct FFXIVIpcInventoryTransaction : FFXIVIpcBasePacket<InventoryTransaction> struct FFXIVIpcInventoryTransaction :
FFXIVIpcBasePacket< InventoryTransaction >
{ {
uint32_t transactionId; uint32_t transactionId;
uint8_t type; uint8_t type;
@ -988,7 +1043,8 @@ struct FFXIVIpcInventoryTransaction : FFXIVIpcBasePacket<InventoryTransaction>
}; };
struct FFXIVIpcInventoryActionAck : FFXIVIpcBasePacket<InventoryActionAck> struct FFXIVIpcInventoryActionAck :
FFXIVIpcBasePacket< InventoryActionAck >
{ {
uint32_t sequence; uint32_t sequence;
uint16_t type; uint16_t type;
@ -1002,7 +1058,8 @@ struct FFXIVIpcInventoryActionAck : FFXIVIpcBasePacket<InventoryActionAck>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update a slot in the inventory * to update a slot in the inventory
*/ */
struct FFXIVIpcUpdateInventorySlot : FFXIVIpcBasePacket<UpdateInventorySlot> struct FFXIVIpcUpdateInventorySlot :
FFXIVIpcBasePacket< UpdateInventorySlot >
{ {
uint32_t sequence; uint32_t sequence;
uint32_t unknown; uint32_t unknown;
@ -1035,7 +1092,8 @@ struct FFXIVIpcUpdateInventorySlot : FFXIVIpcBasePacket<UpdateInventorySlot>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to start an event, not actually playing it, but registering * to start an event, not actually playing it, but registering
*/ */
struct FFXIVIpcEventStart : FFXIVIpcBasePacket<EventStart> struct FFXIVIpcEventStart :
FFXIVIpcBasePacket< EventStart >
{ {
/* 0000 */ uint64_t actorId; /* 0000 */ uint64_t actorId;
/* 0008 */ uint32_t eventId; /* 0008 */ uint32_t eventId;
@ -1051,7 +1109,8 @@ struct FFXIVIpcEventStart : FFXIVIpcBasePacket<EventStart>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to play an event * to play an event
*/ */
struct FFXIVIpcEventPlay : FFXIVIpcBasePacket<EventPlay> struct FFXIVIpcEventPlay :
FFXIVIpcBasePacket< EventPlay >
{ {
uint64_t actorId; uint64_t actorId;
uint32_t eventId; uint32_t eventId;
@ -1065,11 +1124,12 @@ struct FFXIVIpcEventPlay : FFXIVIpcBasePacket<EventPlay>
uint8_t unknown[8]; uint8_t unknown[8];
}; };
/** /**
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to play an event * to play an event
*/ */
struct FFXIVIpcDirectorPlayScene : FFXIVIpcBasePacket<DirectorPlayScene> struct FFXIVIpcDirectorPlayScene :
FFXIVIpcBasePacket< DirectorPlayScene >
{ {
uint64_t actorId; uint64_t actorId;
uint32_t eventId; uint32_t eventId;
@ -1088,7 +1148,8 @@ struct FFXIVIpcDirectorPlayScene : FFXIVIpcBasePacket<DirectorPlayScene>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to finish an event * to finish an event
*/ */
struct FFXIVIpcEventFinish : FFXIVIpcBasePacket<EventFinish> struct FFXIVIpcEventFinish :
FFXIVIpcBasePacket< EventFinish >
{ {
/* 0000 */ uint32_t eventId; /* 0000 */ uint32_t eventId;
/* 0004 */ uint8_t param1; /* 0004 */ uint8_t param1;
@ -1098,7 +1159,8 @@ struct FFXIVIpcEventFinish : FFXIVIpcBasePacket<EventFinish>
/* 000C */ uint32_t padding1; /* 000C */ uint32_t padding1;
}; };
struct FFXIVIpcEventOpenGilShop : FFXIVIpcBasePacket<EventOpenGilShop> struct FFXIVIpcEventOpenGilShop :
FFXIVIpcBasePacket< EventOpenGilShop >
{ {
uint64_t actorId; uint64_t actorId;
uint32_t eventId; uint32_t eventId;
@ -1114,7 +1176,8 @@ struct FFXIVIpcEventOpenGilShop : FFXIVIpcBasePacket<EventOpenGilShop>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to respond to a linkshell creation event * to respond to a linkshell creation event
*/ */
struct FFXIVIpcEventLinkshell : FFXIVIpcBasePacket<EventLinkshell> struct FFXIVIpcEventLinkshell :
FFXIVIpcBasePacket< EventLinkshell >
{ {
uint32_t eventId; uint32_t eventId;
uint8_t scene; uint8_t scene;
@ -1131,7 +1194,8 @@ struct FFXIVIpcEventLinkshell : FFXIVIpcBasePacket<EventLinkshell>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to send the active quests * to send the active quests
*/ */
struct FFXIVIpcQuestActiveList : FFXIVIpcBasePacket<QuestActiveList> struct FFXIVIpcQuestActiveList :
FFXIVIpcBasePacket< QuestActiveList >
{ {
Common::QuestActive activeQuests[30]; Common::QuestActive activeQuests[30];
}; };
@ -1140,7 +1204,8 @@ struct FFXIVIpcQuestActiveList : FFXIVIpcBasePacket<QuestActiveList>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to send update a quest slot * to send update a quest slot
*/ */
struct FFXIVIpcQuestUpdate : FFXIVIpcBasePacket<QuestUpdate> struct FFXIVIpcQuestUpdate :
FFXIVIpcBasePacket< QuestUpdate >
{ {
uint16_t slot; uint16_t slot;
uint16_t padding; uint16_t padding;
@ -1151,7 +1216,8 @@ struct FFXIVIpcQuestUpdate : FFXIVIpcBasePacket<QuestUpdate>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to send the completed quests mask * to send the completed quests mask
*/ */
struct FFXIVIpcQuestCompleteList : FFXIVIpcBasePacket<QuestCompleteList> struct FFXIVIpcQuestCompleteList :
FFXIVIpcBasePacket< QuestCompleteList >
{ {
uint8_t questCompleteMask[396]; uint8_t questCompleteMask[396];
uint8_t unknownCompleteMask[32]; uint8_t unknownCompleteMask[32];
@ -1161,7 +1227,8 @@ struct FFXIVIpcQuestCompleteList : FFXIVIpcBasePacket<QuestCompleteList>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to finish a quest * to finish a quest
*/ */
struct FFXIVIpcQuestFinish : FFXIVIpcBasePacket<QuestFinish> struct FFXIVIpcQuestFinish :
FFXIVIpcBasePacket< QuestFinish >
{ {
uint16_t questId; uint16_t questId;
uint8_t flag1; uint8_t flag1;
@ -1176,7 +1243,8 @@ struct FFXIVIpcQuestFinish : FFXIVIpcBasePacket<QuestFinish>
* type 1 icon * type 1 icon
* type 5 status * type 5 status
*/ */
struct FFXIVIpcQuestMessage : FFXIVIpcBasePacket<QuestMessage> struct FFXIVIpcQuestMessage :
FFXIVIpcBasePacket< QuestMessage >
{ {
/* 0000 */ uint32_t questId; /* 0000 */ uint32_t questId;
/* 0000 */ uint8_t msgId; /* 0000 */ uint8_t msgId;
@ -1186,7 +1254,8 @@ struct FFXIVIpcQuestMessage : FFXIVIpcBasePacket<QuestMessage>
/* 0000 */ uint32_t var2; /* 0000 */ uint32_t var2;
}; };
struct FFXIVIpcQuestTracker : FFXIVIpcBasePacket<QuestTracker> struct FFXIVIpcQuestTracker :
FFXIVIpcBasePacket< QuestTracker >
{ {
struct TrackerEntry struct TrackerEntry
{ {
@ -1197,7 +1266,8 @@ struct FFXIVIpcQuestTracker : FFXIVIpcBasePacket<QuestTracker>
}; };
struct FFXIVIpcWeatherChange : FFXIVIpcBasePacket<WeatherChange> struct FFXIVIpcWeatherChange :
FFXIVIpcBasePacket< WeatherChange >
{ {
uint32_t weatherId; uint32_t weatherId;
float delay; float delay;
@ -1207,7 +1277,8 @@ struct FFXIVIpcWeatherChange : FFXIVIpcBasePacket<WeatherChange>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to send a unviel a map * to send a unviel a map
*/ */
struct FFXIVIpcDiscovery : FFXIVIpcBasePacket<Discovery> struct FFXIVIpcDiscovery :
FFXIVIpcBasePacket< Discovery >
{ {
/* 0000 */ uint32_t map_part_id; /* 0000 */ uint32_t map_part_id;
/* 0004 */ uint32_t map_id; /* 0004 */ uint32_t map_id;
@ -1217,7 +1288,8 @@ struct FFXIVIpcDiscovery : FFXIVIpcBasePacket<Discovery>
/** /**
* UNKOWN TYPE * UNKOWN TYPE
*/ */
struct FFXIVARR_IPC_UNK322 : FFXIVIpcBasePacket<IPCTYPE_UNK_322> struct FFXIVARR_IPC_UNK322 :
FFXIVIpcBasePacket< IPCTYPE_UNK_322 >
{ {
/* 0000 */ uint8_t unk[8]; /* 0000 */ uint8_t unk[8];
}; };
@ -1225,7 +1297,8 @@ struct FFXIVARR_IPC_UNK322 : FFXIVIpcBasePacket<IPCTYPE_UNK_322>
/** /**
* UNKOWN TYPE * UNKOWN TYPE
*/ */
struct FFXIVARR_IPC_UNK320 : FFXIVIpcBasePacket<IPCTYPE_UNK_320> struct FFXIVARR_IPC_UNK320 :
FFXIVIpcBasePacket< IPCTYPE_UNK_320 >
{ {
/* 0000 */ uint8_t unk[0x38]; /* 0000 */ uint8_t unk[0x38];
}; };
@ -1234,7 +1307,8 @@ struct FFXIVARR_IPC_UNK320 : FFXIVIpcBasePacket<IPCTYPE_UNK_320>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* prepare zoning, showing screenmessage * prepare zoning, showing screenmessage
*/ */
struct FFXIVIpcPrepareZoning : FFXIVIpcBasePacket<PrepareZoning> struct FFXIVIpcPrepareZoning :
FFXIVIpcBasePacket< PrepareZoning >
{ {
uint32_t logMessage; uint32_t logMessage;
uint16_t targetZone; uint16_t targetZone;
@ -1254,7 +1328,8 @@ struct FFXIVIpcPrepareZoning : FFXIVIpcBasePacket<PrepareZoning>
* *
* See https://gist.github.com/Minoost/c35843c4c8a7a931f31fdaac9bce64c2 * See https://gist.github.com/Minoost/c35843c4c8a7a931f31fdaac9bce64c2
*/ */
struct FFXIVIpcCFNotify : FFXIVIpcBasePacket<CFNotify> struct FFXIVIpcCFNotify :
FFXIVIpcBasePacket< CFNotify >
{ {
uint32_t state1; // 3 = cancelled, 4 = duty ready uint32_t state1; // 3 = cancelled, 4 = duty ready
uint32_t state2; // if state1 == 3, state2 is cancelled reason uint32_t state2; // if state1 == 3, state2 is cancelled reason
@ -1274,7 +1349,8 @@ struct FFXIVIpcCFNotify : FFXIVIpcBasePacket<CFNotify>
* Do note that this packet has to come early in login phase (around initui packet) * Do note that this packet has to come early in login phase (around initui packet)
* or it won't be applied until you reconnect * or it won't be applied until you reconnect
*/ */
struct FFXIVIpcCFAvailableContents : FFXIVIpcBasePacket<CFAvailableContents> struct FFXIVIpcCFAvailableContents :
FFXIVIpcBasePacket< CFAvailableContents >
{ {
uint8_t contents[0x48]; uint8_t contents[0x48];
}; };
@ -1283,7 +1359,8 @@ struct FFXIVIpcCFAvailableContents : FFXIVIpcBasePacket<CFAvailableContents>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update adventure in needs in duty roulette * to update adventure in needs in duty roulette
*/ */
struct FFXIVIpcCFPlayerInNeed : FFXIVIpcBasePacket<CFPlayerInNeed> struct FFXIVIpcCFPlayerInNeed :
FFXIVIpcBasePacket< CFPlayerInNeed >
{ {
// Ordered by roulette id // Ordered by roulette id
uint8_t inNeeds[0x10]; uint8_t inNeeds[0x10];
@ -1293,13 +1370,15 @@ struct FFXIVIpcCFPlayerInNeed : FFXIVIpcBasePacket<CFPlayerInNeed>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to update duty info in general * to update duty info in general
*/ */
struct FFXIVIpcCFDutyInfo : FFXIVIpcBasePacket<CFDutyInfo> struct FFXIVIpcCFDutyInfo :
FFXIVIpcBasePacket< CFDutyInfo >
{ {
uint8_t penaltyTime; uint8_t penaltyTime;
uint8_t unknown[7]; uint8_t unknown[7];
}; };
struct FFXIVIpcCFRegisterDuty : FFXIVIpcBasePacket<CFRegisterDuty> struct FFXIVIpcCFRegisterDuty :
FFXIVIpcBasePacket< CFRegisterDuty >
{ {
uint32_t unknown0; // 0x301 uint32_t unknown0; // 0x301
uint8_t rouletteId; // if it's a daily roulette uint8_t rouletteId; // if it's a daily roulette
@ -1308,7 +1387,8 @@ struct FFXIVIpcCFRegisterDuty : FFXIVIpcBasePacket<CFRegisterDuty>
}; };
struct FFXIVIpcCFMemberStatus : FFXIVIpcBasePacket<CFMemberStatus> struct FFXIVIpcCFMemberStatus :
FFXIVIpcBasePacket< CFMemberStatus >
{ {
uint16_t contentId; uint16_t contentId;
uint16_t unknown1; uint16_t unknown1;
@ -1321,7 +1401,8 @@ struct FFXIVIpcCFMemberStatus : FFXIVIpcBasePacket<CFMemberStatus>
uint32_t unknown3; uint32_t unknown3;
}; };
struct FFXIVIpcEorzeaTimeOffset : FFXIVIpcBasePacket<EorzeaTimeOffset> struct FFXIVIpcEorzeaTimeOffset :
FFXIVIpcBasePacket< EorzeaTimeOffset >
{ {
uint64_t timestamp; uint64_t timestamp;
}; };
@ -1330,7 +1411,8 @@ struct FFXIVIpcEorzeaTimeOffset : FFXIVIpcBasePacket<EorzeaTimeOffset>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to set the gear show/hide status of a character * to set the gear show/hide status of a character
*/ */
struct FFXIVIpcEquipDisplayFlags : FFXIVIpcBasePacket<EquipDisplayFlags> struct FFXIVIpcEquipDisplayFlags :
FFXIVIpcBasePacket< EquipDisplayFlags >
{ {
uint8_t bitmask; uint8_t bitmask;
}; };
@ -1339,7 +1421,8 @@ struct FFXIVIpcEquipDisplayFlags : FFXIVIpcBasePacket<EquipDisplayFlags>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to mount a player * to mount a player
*/ */
struct FFXIVIpcMount : FFXIVIpcBasePacket<Mount> struct FFXIVIpcMount :
FFXIVIpcBasePacket< Mount >
{ {
uint32_t id; uint32_t id;
}; };
@ -1348,7 +1431,8 @@ struct FFXIVIpcMount : FFXIVIpcBasePacket<Mount>
* Structural representation of the packet sent by the server * Structural representation of the packet sent by the server
* to mount a player * to mount a player
*/ */
struct FFXIVIpcDirectorVars : FFXIVIpcBasePacket<DirectorVars> struct FFXIVIpcDirectorVars :
FFXIVIpcBasePacket< DirectorVars >
{ {
/*! DirectorType | ContentId */ /*! DirectorType | ContentId */
uint32_t m_directorId; uint32_t m_directorId;
@ -1361,18 +1445,21 @@ struct FFXIVIpcDirectorVars : FFXIVIpcBasePacket<DirectorVars>
}; };
struct FFXIVIpcActorGauge : FFXIVIpcBasePacket<ActorGauge> struct FFXIVIpcActorGauge :
FFXIVIpcBasePacket< ActorGauge >
{ {
uint8_t classJobId; uint8_t classJobId;
uint8_t data[15]; // depends on classJobId uint8_t data[15]; // depends on classJobId
}; };
struct FFXIVIpcPerformNote : FFXIVIpcBasePacket<PerformNote> struct FFXIVIpcPerformNote :
FFXIVIpcBasePacket< PerformNote >
{ {
uint8_t data[32]; uint8_t data[32];
}; };
struct FFXIVIpcWardInfo : FFXIVIpcBasePacket<WardInfo> struct FFXIVIpcWardInfo :
FFXIVIpcBasePacket< WardInfo >
{ {
uint16_t unknown0; uint16_t unknown0;
uint16_t wardNum; // set 1 for "Mist, Ward 2" uint16_t wardNum; // set 1 for "Mist, Ward 2"
@ -1386,7 +1473,8 @@ struct FFXIVIpcWardInfo : FFXIVIpcBasePacket<WardInfo>
uint8_t unknown6; uint8_t unknown6;
uint8_t unknown7; uint8_t unknown7;
uint8_t unknown8; uint8_t unknown8;
struct { struct
{
uint8_t houseSize; //1 = small, 2 = middle, 3 = big; 1 uint8_t houseSize; //1 = small, 2 = middle, 3 = big; 1
uint8_t houseState; //1 = for sell, 2 = sold, 3 = hasOwner, 0x0A = House sharing; 2 uint8_t houseState; //1 = for sell, 2 = sold, 3 = hasOwner, 0x0A = House sharing; 2
uint8_t iconColor; //HouseState has to be 3; 1 = Private, 2 = FC House; 4 uint8_t iconColor; //HouseState has to be 3; 1 = Private, 2 = FC House; 4
@ -1405,7 +1493,8 @@ struct FFXIVIpcWardInfo : FFXIVIpcBasePacket<WardInfo>
} landSet[30]; } landSet[30];
}; };
struct FFXIVIpcWardYardInfo : FFXIVIpcBasePacket<WardYardInfo> struct FFXIVIpcWardYardInfo :
FFXIVIpcBasePacket< WardYardInfo >
{ {
/* consistency check? */ /* consistency check? */
uint32_t unknown1; //always 0xFFFFFFFF uint32_t unknown1; //always 0xFFFFFFFF
@ -1424,13 +1513,15 @@ struct FFXIVIpcWardYardInfo : FFXIVIpcBasePacket<WardYardInfo>
} object[100]; } object[100];
}; };
struct FFXIVIpcMSQTrackerProgress : FFXIVIpcBasePacket<MSQTrackerProgress> struct FFXIVIpcMSQTrackerProgress :
FFXIVIpcBasePacket< MSQTrackerProgress >
{ {
uint32_t id; uint32_t id;
uint32_t padding; uint32_t padding;
}; };
struct FFXIVIpcMSQTrackerComplete : FFXIVIpcBasePacket<MSQTrackerComplete> struct FFXIVIpcMSQTrackerComplete :
FFXIVIpcBasePacket< MSQTrackerComplete >
{ {
uint32_t id; uint32_t id;
uint32_t padding1; uint32_t padding1;
@ -1439,7 +1530,8 @@ struct FFXIVIpcMSQTrackerComplete : FFXIVIpcBasePacket<MSQTrackerComplete>
uint64_t padding4; // last 4 bytes is uint32_t but who cares uint64_t padding4; // last 4 bytes is uint32_t but who cares
}; };
struct FFXIVIpcObjectSpawn : FFXIVIpcBasePacket<ObjectSpawn> struct FFXIVIpcObjectSpawn :
FFXIVIpcBasePacket< ObjectSpawn >
{ {
uint8_t spawnIndex; uint8_t spawnIndex;
uint8_t objKind; uint8_t objKind;
@ -1464,13 +1556,15 @@ struct FFXIVIpcObjectSpawn : FFXIVIpcBasePacket<ObjectSpawn>
int16_t unknown3E; int16_t unknown3E;
}; };
struct FFXIVIpcObjectDespawn : FFXIVIpcBasePacket<ObjectDespawn> struct FFXIVIpcObjectDespawn :
FFXIVIpcBasePacket< ObjectDespawn >
{ {
uint8_t spawnIndex; uint8_t spawnIndex;
uint8_t padding[7]; uint8_t padding[7];
}; };
struct FFXIVIpcDuelChallenge : FFXIVIpcBasePacket<DuelChallenge> struct FFXIVIpcDuelChallenge :
FFXIVIpcBasePacket< DuelChallenge >
{ {
uint8_t otherClassJobId; uint8_t otherClassJobId;
uint8_t otherLevel; // class job level uint8_t otherLevel; // class job level

View file

@ -1,4 +1,5 @@
#pragma once #pragma once
#include <memory> #include <memory>
#include <thread> #include <thread>
#include <mutex> #include <mutex>
@ -7,62 +8,64 @@
namespace Core { namespace Core {
template<class T> template< class T >
class LockedQueue class LockedQueue
{ {
public: public:
LockedQueue(); LockedQueue();
~LockedQueue(); ~LockedQueue();
T pop(); T pop();
//we can pass this in by reference, instead of copying //we can pass this in by reference, instead of copying
void push(const T object); void push( const T object );
//we can pass this in by reference //we can pass this in by reference
//this will push it onto the queue, and swap the object //this will push it onto the queue, and swap the object
// with a default-constructed T at the same time. // with a default-constructed T at the same time.
void push_swap(T& object); void push_swap( T& object );
void push_reset(T& object);
void push_reset( T& object );
std::size_t size(); std::size_t size();
protected: protected:
std::queue<T> m_queue; std::queue< T > m_queue;
std::mutex m_mutex; std::mutex m_mutex;
}; };
template <class T> template< class T >
LockedQueue<T>::LockedQueue() LockedQueue< T >::LockedQueue()
{ {
} }
template <class T> template< class T >
std::size_t LockedQueue<T>::size() std::size_t LockedQueue< T >::size()
{ {
std::lock_guard<std::mutex> lock( m_mutex); std::lock_guard< std::mutex > lock( m_mutex );
return m_queue.size(); return m_queue.size();
} }
template <class T> template< class T >
LockedQueue<T>::~LockedQueue() LockedQueue< T >::~LockedQueue()
{ {
} }
template <class T> template< class T >
T LockedQueue<T>::pop() T LockedQueue< T >::pop()
{ {
std::lock_guard<std::mutex> lock( m_mutex); std::lock_guard< std::mutex > lock( m_mutex );
if( m_queue.empty()) if( m_queue.empty() )
{ {
return T(); return T();
} }
@ -72,27 +75,27 @@ namespace Core {
m_queue.pop(); m_queue.pop();
return result; return result;
} }
template <class T> template< class T >
void LockedQueue<T>::push(const T object) void LockedQueue< T >::push( const T object )
{ {
std::lock_guard<std::mutex> lock( m_mutex); std::lock_guard< std::mutex > lock( m_mutex );
m_queue.push(object); m_queue.push( object );
} }
template <class T> template< class T >
void LockedQueue<T>::push_swap(T& object) void LockedQueue< T >::push_swap( T& object )
{ {
std::lock_guard<std::mutex> lock( m_mutex); std::lock_guard< std::mutex > lock( m_mutex );
m_queue.push(object); m_queue.push( object );
T default_ctored_object = T(); T default_ctored_object = T();
//this is a special swap that will do a legit naive swap normally, //this is a special swap that will do a legit naive swap normally,
// except if there exists a function called T::swap(), which is // except if there exists a function called T::swap(), which is
// specialized and possibly faster. // specialized and possibly faster.
boost::swap(object, default_ctored_object); boost::swap( object, default_ctored_object );
@ -101,14 +104,14 @@ namespace Core {
// this will allow that the object on the queue is the *last* shared_ptr // this will allow that the object on the queue is the *last* shared_ptr
// in existance by the time this function returns. // in existance by the time this function returns.
} }
template <class T> template< class T >
void LockedQueue<T>::push_reset(T& object) void LockedQueue< T >::push_reset( T& object )
{ {
std::lock_guard<std::mutex> lock( m_mutex); std::lock_guard< std::mutex > lock( m_mutex );
m_queue.push(object); m_queue.push( object );
T default_ctored_object = T(); T default_ctored_object = T();
@ -119,6 +122,6 @@ namespace Core {
// this will allow that the object on the queue is the *last* shared_ptr // this will allow that the object on the queue is the *last* shared_ptr
// in existance by the time this function returns. // in existance by the time this function returns.
} }
} }

View file

@ -8,8 +8,7 @@
#include <type_traits> #include <type_traits>
#include <utility> #include <utility>
namespace Core namespace Core {
{
template< typename T > template< typename T >
class LockedWaitQueue class LockedWaitQueue
@ -18,11 +17,14 @@ private:
std::mutex m_queueLock; std::mutex m_queueLock;
std::queue< T > m_queue; std::queue< T > m_queue;
std::condition_variable m_condition; std::condition_variable m_condition;
std::atomic<bool> m_shutdown; std::atomic< bool > m_shutdown;
public: public:
LockedWaitQueue<T>() : m_shutdown(false) { } LockedWaitQueue< T >() :
m_shutdown( false )
{
}
void push( const T& value ) void push( const T& value )
{ {
@ -58,7 +60,7 @@ public:
std::unique_lock< std::mutex > lock( m_queueLock ); std::unique_lock< std::mutex > lock( m_queueLock );
while( m_queue.empty() && !m_shutdown ) while( m_queue.empty() && !m_shutdown )
m_condition.wait(lock); m_condition.wait( lock );
if( m_queue.empty() || m_shutdown ) if( m_queue.empty() || m_shutdown )
return; return;
@ -88,10 +90,15 @@ public:
private: private:
template< typename E = T > template< typename E = T >
typename std::enable_if< std::is_pointer< E >::value >::type deleteQueuedObject( E& obj ) { delete obj; } typename std::enable_if< std::is_pointer< E >::value >::type deleteQueuedObject( E& obj )
{
delete obj;
}
template< typename E = T > template< typename E = T >
typename std::enable_if< !std::is_pointer< E >::value >::type deleteQueuedObject( E const& ) { } typename std::enable_if< !std::is_pointer< E >::value >::type deleteQueuedObject( E const& )
{
}
}; };
} }

View file

@ -5,14 +5,12 @@
#include <unordered_map> #include <unordered_map>
#include <type_traits> #include <type_traits>
namespace Core namespace Core {
namespace Util {
template< typename T, typename ActorIdType = uint32_t >
class SpawnIndexAllocator
{ {
namespace Util public:
{
template< typename T, typename ActorIdType = uint32_t >
class SpawnIndexAllocator
{
public:
static_assert( std::is_same< T, uint8_t >::value || std::is_same< T, uint16_t >::value || static_assert( std::is_same< T, uint8_t >::value || std::is_same< T, uint16_t >::value ||
std::is_same< T, uint32_t >::value || std::is_same< T, uint64_t >::value, std::is_same< T, uint32_t >::value || std::is_same< T, uint64_t >::value,
"T must be uint8_t, uint16_t, uint32_t, uint64_t" ); "T must be uint8_t, uint16_t, uint32_t, uint64_t" );
@ -20,7 +18,8 @@ namespace Util
SpawnIndexAllocator() : SpawnIndexAllocator() :
m_maxSlotId( 0 ), m_maxSlotId( 0 ),
m_reserveFirstSlot( false ) m_reserveFirstSlot( false )
{ } {
}
void init( T maxSlotId, bool reserveFirstSlot = false ) void init( T maxSlotId, bool reserveFirstSlot = false )
{ {
@ -55,7 +54,7 @@ namespace Util
auto nextId = m_availableIds.front(); auto nextId = m_availableIds.front();
m_availableIds.pop(); m_availableIds.pop();
m_actorIdToAllocatedMap[actorId] = nextId; m_actorIdToAllocatedMap[ actorId ] = nextId;
return nextId; return nextId;
} }
@ -77,7 +76,7 @@ namespace Util
return static_cast< T >( -1 ); return static_cast< T >( -1 );
} }
protected: protected:
void setupQueue() void setupQueue()
{ {
assert( m_maxSlotId != 0 ); assert( m_maxSlotId != 0 );
@ -101,7 +100,7 @@ namespace Util
T m_maxSlotId; T m_maxSlotId;
bool m_reserveFirstSlot; bool m_reserveFirstSlot;
}; };
} }
} }

View file

@ -8,7 +8,7 @@ std::string Core::Util::binaryToHexString( uint8_t* pBinData, uint16_t size )
for( uint32_t i = 0; i < size; i++ ) for( uint32_t i = 0; i < size; i++ )
{ {
outStr += boost::str( boost::format( "%|02X|" ) % ( int32_t ) ( pBinData[i] & 0xFF ) ); outStr += boost::str( boost::format( "%|02X|" ) % ( int32_t ) ( pBinData[ i ] & 0xFF ) );
} }
return outStr; return outStr;
@ -24,7 +24,7 @@ std::string Core::Util::binaryToHexDump( uint8_t* pBinData, uint16_t size )
int byteBlock = offsetBlock + bytesPerLine * 3 + ( bytesPerLine - 1 ) / 8 + 2; int byteBlock = offsetBlock + bytesPerLine * 3 + ( bytesPerLine - 1 ) / 8 + 2;
int lineLength = byteBlock + bytesPerLine + 1; int lineLength = byteBlock + bytesPerLine + 1;
std::string line ( lineLength, ' ' ); std::string line( lineLength, ' ' );
int numLines = ( size + bytesPerLine - 1 ) / bytesPerLine; int numLines = ( size + bytesPerLine - 1 ) / bytesPerLine;
@ -32,37 +32,37 @@ std::string Core::Util::binaryToHexDump( uint8_t* pBinData, uint16_t size )
for( uint32_t i = 0; i < size; i += bytesPerLine ) for( uint32_t i = 0; i < size; i += bytesPerLine )
{ {
line[0] = hexChars[( i >> 28 ) & 0xF]; line[ 0 ] = hexChars[ ( i >> 28 ) & 0xF ];
line[1] = hexChars[( i >> 24 ) & 0xF]; line[ 1 ] = hexChars[ ( i >> 24 ) & 0xF ];
line[2] = hexChars[( i >> 20 ) & 0xF]; line[ 2 ] = hexChars[ ( i >> 20 ) & 0xF ];
line[3] = hexChars[( i >> 16 ) & 0xF]; line[ 3 ] = hexChars[ ( i >> 16 ) & 0xF ];
line[4] = hexChars[( i >> 12 ) & 0xF]; line[ 4 ] = hexChars[ ( i >> 12 ) & 0xF ];
line[5] = hexChars[( i >> 8 ) & 0xF]; line[ 5 ] = hexChars[ ( i >> 8 ) & 0xF ];
line[6] = hexChars[( i >> 4 ) & 0xF]; line[ 6 ] = hexChars[ ( i >> 4 ) & 0xF ];
line[7] = hexChars[( i >> 0 ) & 0xF]; line[ 7 ] = hexChars[ ( i >> 0 ) & 0xF ];
int hexColumn = offsetBlock; int hexColumn = offsetBlock;
int charColumn = byteBlock; int charColumn = byteBlock;
for( int j = 0; j < bytesPerLine; j++ ) for( int j = 0; j < bytesPerLine; j++ )
{ {
if( j > 0 && ( j & 7 ) == 0) if( j > 0 && ( j & 7 ) == 0 )
{ {
hexColumn++; hexColumn++;
} }
if( i + j >= size ) if( i + j >= size )
{ {
line[hexColumn] = ' '; line[ hexColumn ] = ' ';
line[hexColumn + 1] = ' '; line[ hexColumn + 1 ] = ' ';
line[charColumn] = ' '; line[ charColumn ] = ' ';
} }
else else
{ {
uint8_t by = pBinData[i + j]; uint8_t by = pBinData[ i + j ];
line[hexColumn] = hexChars[( by >> 4 ) & 0xF]; line[ hexColumn ] = hexChars[ ( by >> 4 ) & 0xF ];
line[hexColumn + 1] = hexChars[by & 0xF]; line[ hexColumn + 1 ] = hexChars[ by & 0xF ];
line[charColumn] = by < 32 ? '.' : static_cast< char >( by ); line[ charColumn ] = by < 32 ? '.' : static_cast< char >( by );
} }
hexColumn += 3; hexColumn += 3;

View file

@ -22,19 +22,21 @@ float calcAngTo( float x, float y, float x1, float y1 );
float calcAngFrom( float x, float y, float x1, float y1 ); float calcAngFrom( float x, float y, float x1, float y1 );
uint16_t floatToUInt16( float val ); uint16_t floatToUInt16( float val );
uint16_t floatToUInt16Rot( float val ); uint16_t floatToUInt16Rot( float val );
uint8_t floatToUInt8Rot( float val ); uint8_t floatToUInt8Rot( float val );
template template
<typename T> < typename T >
T clamp( T val, T minimum, T maximum ) T clamp( T val, T minimum, T maximum )
{ {
if (val > maximum) if( val > maximum )
{ {
return maximum; return maximum;
} }
if (val < minimum) if( val < minimum )
{ {
return minimum; return minimum;
} }

View file

@ -4,12 +4,12 @@
#include <string> #include <string>
namespace Core { namespace Core {
namespace Version { namespace Version {
extern const std::string GIT_HASH; extern const std::string GIT_HASH;
extern const std::string VERSION; extern const std::string VERSION;
} /* Version */ } /* Version */
} /* Core */ } /* Core */
#endif #endif

View file

@ -2,11 +2,14 @@
#include "../ScriptObject.h" #include "../ScriptObject.h"
#include <Actor/Player.h> #include <Actor/Player.h>
class ActionReturn6 : public ActionScript class ActionReturn6 :
public ActionScript
{ {
public: public:
ActionReturn6() : ActionScript( 6 ) ActionReturn6() :
{} ActionScript( 6 )
{
}
void onCastFinish( Core::Entity::Player& player, Core::Entity::Chara& targetActor ) override void onCastFinish( Core::Entity::Player& player, Core::Entity::Chara& targetActor ) override
{ {

View file

@ -1,11 +1,14 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class ActionSprint3 : public ActionScript class ActionSprint3 :
public ActionScript
{ {
public: public:
ActionSprint3() : ActionScript( 3 ) ActionSprint3() :
{} ActionScript( 3 )
{
}
void onCastFinish( Core::Entity::Player& player, Core::Entity::Chara& targetActor ) override void onCastFinish( Core::Entity::Player& player, Core::Entity::Chara& targetActor ) override
{ {

View file

@ -10,11 +10,14 @@
#define AETHERYTE_MENU_FAVORITE_POINT 4 #define AETHERYTE_MENU_FAVORITE_POINT 4
#define AETHERYTE_MENU_FAVORITE_POINT_SECURITY_TOKEN 5 #define AETHERYTE_MENU_FAVORITE_POINT_SECURITY_TOKEN 5
class Aethernet : public EventScript class Aethernet :
public EventScript
{ {
public: public:
Aethernet() : EventScript( EVENTSCRIPT_AETHERNET_ID ) Aethernet() :
{} EventScript( EVENTSCRIPT_AETHERNET_ID )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{ {
@ -30,12 +33,13 @@ public:
} }
else else
{ {
player.eventActionStart( eventId, ACTION_ATTUNE, []( Entity::Player& player, uint32_t eventId, uint64_t additional ) player.eventActionStart( eventId, ACTION_ATTUNE,
[]( Entity::Player& player, uint32_t eventId, uint64_t additional )
{ {
player.registerAetheryte( eventId & 0xFFFF ); player.registerAetheryte( eventId & 0xFFFF );
player.playScene( eventId, 3, 0, 0, 0 ); player.playScene( eventId, 3, 0, 0, 0 );
}, },
[] ( Entity::Player& ply, uint32_t evntId, uint64_t additional ) []( Entity::Player& ply, uint32_t evntId, uint64_t additional )
{ {
}, 0 ); }, 0 );

View file

@ -12,11 +12,14 @@
#define AETHERYTE_MENU_FAVORITE_POINT 4 #define AETHERYTE_MENU_FAVORITE_POINT 4
#define AETHERYTE_MENU_FAVORITE_POINT_SECURITY_TOKEN 5 #define AETHERYTE_MENU_FAVORITE_POINT_SECURITY_TOKEN 5
class Aetheryte : public EventScript class Aetheryte :
public EventScript
{ {
public: public:
Aetheryte() : EventScript( EVENTSCRIPT_AETHERYTE_ID ) Aetheryte() :
{} EventScript( EVENTSCRIPT_AETHERYTE_ID )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{ {
@ -28,7 +31,8 @@ public:
{ {
player.setHomepoint( result.eventId & 0xFFFF ); player.setHomepoint( result.eventId & 0xFFFF );
player.sendQuestMessage( result.eventId, 2, 0xEA, 0, 0 ); player.sendQuestMessage( result.eventId, 2, 0xEA, 0, 0 );
} else if( result.param1 == 512 ) // aethernet access }
else if( result.param1 == 512 ) // aethernet access
{ {
if( result.param2 == 4 ) if( result.param2 == 4 )
{ {
@ -48,7 +52,8 @@ public:
} }
else else
{ {
player.eventActionStart( eventId, ACTION_ATTUNE, []( Entity::Player& player, uint32_t eventId, uint64_t additional ) player.eventActionStart( eventId, ACTION_ATTUNE,
[]( Entity::Player& player, uint32_t eventId, uint64_t additional )
{ {
player.registerAetheryte( eventId & 0xFFFF ); player.registerAetheryte( eventId & 0xFFFF );
@ -62,7 +67,7 @@ public:
player.learnAction( ACTION_TELEPORT ); player.learnAction( ACTION_TELEPORT );
} }
}, },
[] ( Entity::Player& player, uint32_t eventId, uint64_t additional ) []( Entity::Player& player, uint32_t eventId, uint64_t additional )
{}, 0 ); {}, 0 );
} }
} }

View file

@ -1,15 +1,18 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class CmnDefCutSceneReplay : public EventScript class CmnDefCutSceneReplay :
public EventScript
{ {
public: public:
CmnDefCutSceneReplay() : EventScript( 721028 ) CmnDefCutSceneReplay() :
{} EventScript( 721028 )
{
}
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {
auto callback = [this]( Entity::Player& player, const Event::SceneResult& result ) auto callback = [ this ]( Entity::Player& player, const Event::SceneResult& result )
{ {
if( result.param2 != 0 ) if( result.param2 != 0 )
{ {

View file

@ -1,11 +1,14 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class CmnDefHousingSignboard : public EventScript class CmnDefHousingSignboard :
public EventScript
{ {
public: public:
CmnDefHousingSignboard() : EventScript( 721031 ) CmnDefHousingSignboard() :
{} EventScript( 721031 )
{
}
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {

View file

@ -1,16 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class CmnDefInnBed : public EventScript class CmnDefInnBed :
public EventScript
{ {
public: public:
CmnDefInnBed() : EventScript( 720916 ) CmnDefInnBed() :
{} EventScript( 720916 )
{
}
// menu // menu
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {
auto callback = [this]( Entity::Player& player, const Event::SceneResult& result ) auto callback = [ this ]( Entity::Player& player, const Event::SceneResult& result )
{ {
if( result.param2 > 0 ) if( result.param2 > 0 )
Scene00001( player, result.param2 ); Scene00001( player, result.param2 );
@ -22,7 +25,7 @@ public:
// lay down // lay down
void Scene00001( Entity::Player& player, uint16_t param ) void Scene00001( Entity::Player& player, uint16_t param )
{ {
auto callback = [this]( Entity::Player& player, const Event::SceneResult& result ) auto callback = [ this ]( Entity::Player& player, const Event::SceneResult& result )
{ {
Scene00002( player, result.param2 ); Scene00002( player, result.param2 );
}; };
@ -40,7 +43,7 @@ public:
void Scene00100( Entity::Player& player ) void Scene00100( Entity::Player& player )
{ {
auto callback = []( Entity::Player& player, const Event::SceneResult& result ) auto callback = []( Entity::Player& player, const Event::SceneResult& result )
{ }; {};
player.playScene( getId(), 100, 0x800, 0, 0, callback ); player.playScene( getId(), 100, 0x800, 0, 0, callback );
} }

View file

@ -5,15 +5,18 @@
#define ACTION_RENAME 3 #define ACTION_RENAME 3
#define ACTION_REMOVE 4 #define ACTION_REMOVE 4
class CmnDefLinkShell : public EventScript class CmnDefLinkShell :
public EventScript
{ {
public: public:
CmnDefLinkShell() : EventScript( 0xB0006 ) CmnDefLinkShell() :
{} EventScript( 0xB0006 )
{
}
void Scene00001( Entity::Player& player ) void Scene00001( Entity::Player& player )
{ {
auto callback = [this]( Entity::Player& player, const Event::SceneResult& result ) auto callback = [ this ]( Entity::Player& player, const Event::SceneResult& result )
{ {
switch( result.param2 ) switch( result.param2 )
{ {

View file

@ -1,11 +1,14 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class CmnDefMarketBoardGridania : public EventScript class CmnDefMarketBoardGridania :
public EventScript
{ {
public: public:
CmnDefMarketBoardGridania() : EventScript( 0xB0027 ) CmnDefMarketBoardGridania() :
{} EventScript( 0xB0027 )
{
}
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {

View file

@ -1,11 +1,14 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class CmnDefMogLetter : public EventScript class CmnDefMogLetter :
public EventScript
{ {
public: public:
CmnDefMogLetter() : EventScript( 720898 ) CmnDefMogLetter() :
{} EventScript( 720898 )
{
}
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{ {
@ -15,7 +18,7 @@ public:
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {
player.playScene( getId(), 0, 0, player.playScene( getId(), 0, 0,
[&]( Entity::Player& player, const Event::SceneResult& result ) [ & ]( Entity::Player& player, const Event::SceneResult& result )
{ {
} ); } );
} }

View file

@ -1,11 +1,14 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class CmnDefNpcRepair : public EventScript class CmnDefNpcRepair :
public EventScript
{ {
public: public:
CmnDefNpcRepair() : EventScript( 0xB0013 ) CmnDefNpcRepair() :
{} EventScript( 0xB0013 )
{
}
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {

View file

@ -1,16 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class CmnDefWeatherForeCast : public EventScript class CmnDefWeatherForeCast :
public EventScript
{ {
public: public:
CmnDefWeatherForeCast() : EventScript( 721100 ) CmnDefWeatherForeCast() :
{} EventScript( 721100 )
{
}
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {
player.playScene( getId(), 0, HIDE_HOTBAR, player.playScene( getId(), 0, HIDE_HOTBAR,
[&]( Entity::Player& player, const Event::SceneResult& result ) [ & ]( Entity::Player& player, const Event::SceneResult& result )
{ {
} ); } );
} }

View file

@ -1,11 +1,14 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class ComDefMobHuntBoard : public EventScript class ComDefMobHuntBoard :
public EventScript
{ {
public: public:
ComDefMobHuntBoard() : EventScript( 0xB00CA ) ComDefMobHuntBoard() :
{} EventScript( 0xB00CA )
{
}
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {

View file

@ -1,11 +1,14 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class GilShop : public EventScript class GilShop :
public EventScript
{ {
public: public:
GilShop() : EventScript( 0x00040001 ) GilShop() :
{} EventScript( 0x00040001 )
{
}
constexpr static auto SCENE_FLAGS = HIDE_HOTBAR | NO_DEFAULT_CAMERA; constexpr static auto SCENE_FLAGS = HIDE_HOTBAR | NO_DEFAULT_CAMERA;

View file

@ -1,11 +1,14 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Actor/Player.h> #include <Actor/Player.h>
class HouFurOrchestrion : public EventScript class HouFurOrchestrion :
public EventScript
{ {
public: public:
HouFurOrchestrion() : EventScript( 721226 ) HouFurOrchestrion() :
{} EventScript( 721226 )
{
}
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {

View file

@ -1,26 +1,36 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class AkhAfahAmphitheatreExtreme : public InstanceContentScript class AkhAfahAmphitheatreExtreme :
public InstanceContentScript
{ {
public: public:
AkhAfahAmphitheatreExtreme() : InstanceContentScript( 20025 ) AkhAfahAmphitheatreExtreme() :
{ } InstanceContentScript( 20025 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "unknown_0", 2004238, 4772738, 4, { -1.210436f, 0.000000f, -0.715586f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_0", 2004238, 4772738, 4, { -1.210436f, 0.000000f, -0.715586f }, 1.000000f,
instance->registerEObj( "sgvf_r1fc_b0472", 2004239, 4797573, 4, { 1.181316f, -0.000000f, 1.563968f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "sgvf_r1fc_b0472", 2004239, 4797573, 4, { 1.181316f, -0.000000f, 1.563968f }, 1.000000f,
0.000000f );
// States -> wind_def wind_def_anim wind_pop wind_pop_anim // States -> wind_def wind_def_anim wind_pop wind_pop_anim
instance->registerEObj( "sgvf_r1fc_b0471", 2004240, 4841629, 4, { 11.000000f, 0.000000f, -11.000000f }, 1.000000f, 0.793709f ); instance->registerEObj( "sgvf_r1fc_b0471", 2004240, 4841629, 4, { 11.000000f, 0.000000f, -11.000000f }, 1.000000f,
0.793709f );
// States -> magi_def magi_def_anim magi_pop magi_pop_anim // States -> magi_def magi_def_anim magi_pop magi_pop_anim
instance->registerEObj( "sgvf_r1fc_b0471_1", 2004349, 4841631, 4, { 12.811310f, -0.000000f, 9.376424f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_r1fc_b0471_1", 2004349, 4841631, 4, { 12.811310f, -0.000000f, 9.376424f }, 1.000000f,
0.000000f );
// States -> magi_def magi_def_anim magi_pop magi_pop_anim // States -> magi_def magi_def_anim magi_pop magi_pop_anim
instance->registerEObj( "sgvf_r1fc_b0471_2", 2004350, 4841632, 4, { -8.033875f, 0.000000f, 10.406790f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_r1fc_b0471_2", 2004350, 4841632, 4, { -8.033875f, 0.000000f, 10.406790f }, 1.000000f,
0.000000f );
// States -> magi_def magi_def_anim magi_pop magi_pop_anim // States -> magi_def magi_def_anim magi_pop magi_pop_anim
instance->registerEObj( "sgvf_r1fc_b0471_3", 2004351, 4841633, 4, { -8.319038f, -0.000001f, -10.997720f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_r1fc_b0471_3", 2004351, 4841633, 4, { -8.319038f, -0.000001f, -10.997720f },
1.000000f, 0.000000f );
// States -> magi_def magi_def_anim magi_pop magi_pop_anim // States -> magi_def magi_def_anim magi_pop magi_pop_anim
instance->registerEObj( "Entrance", 2000182, 4738599, 5, { 9.717670f, 0.000000f, 14.522430f }, 1.000000f, 0.000000f ); instance->registerEObj( "Entrance", 2000182, 4738599, 5, { 9.717670f, 0.000000f, 14.522430f }, 1.000000f,
0.000000f );
// States -> vf_lock_on vf_lock_of // States -> vf_lock_on vf_lock_of
instance->registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "Exit", 2000139, 0, 4, { 0.000000f, 0.000000f, -15.000000f }, 1.000000f, 0.000000f );

View file

@ -1,17 +1,22 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors101110 : public InstanceContentScript class ThePalaceoftheDeadFloors101110 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors101110() : InstanceContentScript( 60011 ) ThePalaceoftheDeadFloors101110() :
{ } InstanceContentScript( 60011 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6527847, 4, { -300.000000f, 0.000026f, -237.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6527847, 4, { -300.000000f, 0.000026f, -237.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
instance->registerEObj( "sgvf_w_lvd_b0959_1", 2000608, 6544382, 4, { 301.149902f, -0.045413f, 285.247589f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959_1", 2000608, 6544382, 4, { 301.149902f, -0.045413f, 285.247589f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors110 : public InstanceContentScript class ThePalaceoftheDeadFloors110 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors110() : InstanceContentScript( 60001 ) ThePalaceoftheDeadFloors110() :
{ } InstanceContentScript( 60001 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2002872, 6324883, 4, { -300.000000f, -0.000010f, -220.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2002872, 6324883, 4, { -300.000000f, -0.000010f, -220.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors111120 : public InstanceContentScript class ThePalaceoftheDeadFloors111120 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors111120() : InstanceContentScript( 60012 ) ThePalaceoftheDeadFloors111120() :
{ } InstanceContentScript( 60012 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6535115, 4, { -300.000000f, 0.000026f, -237.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6535115, 4, { -300.000000f, 0.000026f, -237.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors1120 : public InstanceContentScript class ThePalaceoftheDeadFloors1120 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors1120() : InstanceContentScript( 60002 ) ThePalaceoftheDeadFloors1120() :
{ } InstanceContentScript( 60002 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6353850, 4, { -300.000000f, 0.000026f, -237.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6353850, 4, { -300.000000f, 0.000026f, -237.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors121130 : public InstanceContentScript class ThePalaceoftheDeadFloors121130 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors121130() : InstanceContentScript( 60013 ) ThePalaceoftheDeadFloors121130() :
{ } InstanceContentScript( 60013 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6535115, 4, { -300.000000f, 0.000026f, -237.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6535115, 4, { -300.000000f, 0.000026f, -237.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors131140 : public InstanceContentScript class ThePalaceoftheDeadFloors131140 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors131140() : InstanceContentScript( 60014 ) ThePalaceoftheDeadFloors131140() :
{ } InstanceContentScript( 60014 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6535683, 4, { -300.000000f, -0.000205f, -237.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6535683, 4, { -300.000000f, -0.000205f, -237.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors141150 : public InstanceContentScript class ThePalaceoftheDeadFloors141150 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors141150() : InstanceContentScript( 60015 ) ThePalaceoftheDeadFloors141150() :
{ } InstanceContentScript( 60015 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6535683, 4, { -300.000000f, -0.000205f, -237.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6535683, 4, { -300.000000f, -0.000205f, -237.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors151160 : public InstanceContentScript class ThePalaceoftheDeadFloors151160 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors151160() : InstanceContentScript( 60016 ) ThePalaceoftheDeadFloors151160() :
{ } InstanceContentScript( 60016 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6534547, 4, { -301.179504f, 0.130118f, -301.014709f }, 1.000000f, -0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6534547, 4, { -301.179504f, 0.130118f, -301.014709f },
1.000000f, -0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors161170 : public InstanceContentScript class ThePalaceoftheDeadFloors161170 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors161170() : InstanceContentScript( 60017 ) ThePalaceoftheDeadFloors161170() :
{ } InstanceContentScript( 60017 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6534547, 4, { -301.179504f, 0.130118f, -301.014709f }, 1.000000f, -0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6534547, 4, { -301.179504f, 0.130118f, -301.014709f },
1.000000f, -0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors171180 : public InstanceContentScript class ThePalaceoftheDeadFloors171180 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors171180() : InstanceContentScript( 60018 ) ThePalaceoftheDeadFloors171180() :
{ } InstanceContentScript( 60018 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6534547, 4, { -301.179504f, 0.130118f, -301.014709f }, 1.000000f, -0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6534547, 4, { -301.179504f, 0.130118f, -301.014709f },
1.000000f, -0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors181190 : public InstanceContentScript class ThePalaceoftheDeadFloors181190 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors181190() : InstanceContentScript( 60019 ) ThePalaceoftheDeadFloors181190() :
{ } InstanceContentScript( 60019 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6534547, 4, { -301.179504f, 0.130118f, -301.014709f }, 1.000000f, -0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6534547, 4, { -301.179504f, 0.130118f, -301.014709f },
1.000000f, -0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors191200 : public InstanceContentScript class ThePalaceoftheDeadFloors191200 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors191200() : InstanceContentScript( 60020 ) ThePalaceoftheDeadFloors191200() :
{ } InstanceContentScript( 60020 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6534547, 4, { -301.179504f, 0.130118f, -301.014709f }, 1.000000f, -0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6534547, 4, { -301.179504f, 0.130118f, -301.014709f },
1.000000f, -0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors2130 : public InstanceContentScript class ThePalaceoftheDeadFloors2130 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors2130() : InstanceContentScript( 60003 ) ThePalaceoftheDeadFloors2130() :
{ } InstanceContentScript( 60003 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2002872, 6387948, 4, { -300.000000f, -0.116918f, -237.513199f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2002872, 6387948, 4, { -300.000000f, -0.116918f, -237.513199f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,24 +1,35 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors3140 : public InstanceContentScript class ThePalaceoftheDeadFloors3140 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors3140() : InstanceContentScript( 60004 ) ThePalaceoftheDeadFloors3140() :
{ } InstanceContentScript( 60004 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6367892, 4, { -300.000000f, 0.000000f, -225.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6367892, 4, { -300.000000f, 0.000000f, -225.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
instance->registerEObj( "sgvf_w_lvd_b0959_1", 2002872, 6392196, 4, { 300.000000f, 0.000000f, 374.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959_1", 2002872, 6392196, 4, { 300.000000f, 0.000000f, 374.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
instance->registerEObj( "unknown_0", 2007351, 6277715, 4, { 300.036102f, 0.000000f, 373.916687f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_0", 2007351, 6277715, 4, { 300.036102f, 0.000000f, 373.916687f }, 1.000000f,
instance->registerEObj( "unknown_1", 2007352, 6394671, 4, { 307.159912f, 0.000000f, 370.556702f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "unknown_2", 2007353, 6394677, 4, { 305.303894f, 0.000000f, 380.231415f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_1", 2007352, 6394671, 4, { 307.159912f, 0.000000f, 370.556702f }, 1.000000f,
instance->registerEObj( "unknown_3", 2007354, 6394673, 4, { 296.024109f, -0.000000f, 381.100189f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "unknown_4", 2007355, 6394675, 4, { 291.561890f, 0.000000f, 372.412689f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_2", 2007353, 6394677, 4, { 305.303894f, 0.000000f, 380.231415f }, 1.000000f,
instance->registerEObj( "unknown_5", 2007356, 6394674, 4, { 298.511902f, 0.000000f, 366.134003f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "unknown_3", 2007354, 6394673, 4, { 296.024109f, -0.000000f, 381.100189f }, 1.000000f,
0.000000f );
instance->registerEObj( "unknown_4", 2007355, 6394675, 4, { 291.561890f, 0.000000f, 372.412689f }, 1.000000f,
0.000000f );
instance->registerEObj( "unknown_5", 2007356, 6394674, 4, { 298.511902f, 0.000000f, 366.134003f }, 1.000000f,
0.000000f );
} }

View file

@ -1,24 +1,35 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors4150 : public InstanceContentScript class ThePalaceoftheDeadFloors4150 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors4150() : InstanceContentScript( 60005 ) ThePalaceoftheDeadFloors4150() :
{ } InstanceContentScript( 60005 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6367892, 4, { -300.000000f, 0.000000f, -225.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6367892, 4, { -300.000000f, 0.000000f, -225.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
instance->registerEObj( "sgvf_w_lvd_b0959_1", 2002872, 6392196, 4, { 300.000000f, 0.000000f, 374.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959_1", 2002872, 6392196, 4, { 300.000000f, 0.000000f, 374.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
instance->registerEObj( "unknown_0", 2007351, 6277715, 4, { 300.036102f, 0.000000f, 373.916687f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_0", 2007351, 6277715, 4, { 300.036102f, 0.000000f, 373.916687f }, 1.000000f,
instance->registerEObj( "unknown_1", 2007352, 6394671, 4, { 307.159912f, 0.000000f, 370.556702f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "unknown_2", 2007353, 6394677, 4, { 305.303894f, 0.000000f, 380.231415f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_1", 2007352, 6394671, 4, { 307.159912f, 0.000000f, 370.556702f }, 1.000000f,
instance->registerEObj( "unknown_3", 2007354, 6394673, 4, { 296.024109f, -0.000000f, 381.100189f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "unknown_4", 2007355, 6394675, 4, { 291.561890f, 0.000000f, 372.412689f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_2", 2007353, 6394677, 4, { 305.303894f, 0.000000f, 380.231415f }, 1.000000f,
instance->registerEObj( "unknown_5", 2007356, 6394674, 4, { 298.511902f, 0.000000f, 366.134003f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "unknown_3", 2007354, 6394673, 4, { 296.024109f, -0.000000f, 381.100189f }, 1.000000f,
0.000000f );
instance->registerEObj( "unknown_4", 2007355, 6394675, 4, { 291.561890f, 0.000000f, 372.412689f }, 1.000000f,
0.000000f );
instance->registerEObj( "unknown_5", 2007356, 6394674, 4, { 298.511902f, 0.000000f, 366.134003f }, 1.000000f,
0.000000f );
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors5160 : public InstanceContentScript class ThePalaceoftheDeadFloors5160 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors5160() : InstanceContentScript( 60006 ) ThePalaceoftheDeadFloors5160() :
{ } InstanceContentScript( 60006 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6521120, 4, { -300.000000f, 3.189805f, -241.061096f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6521120, 4, { -300.000000f, 3.189805f, -241.061096f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors6170 : public InstanceContentScript class ThePalaceoftheDeadFloors6170 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors6170() : InstanceContentScript( 60007 ) ThePalaceoftheDeadFloors6170() :
{ } InstanceContentScript( 60007 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6521120, 4, { -300.000000f, 3.189805f, -241.061096f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6521120, 4, { -300.000000f, 3.189805f, -241.061096f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,15 +1,19 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors7180 : public InstanceContentScript class ThePalaceoftheDeadFloors7180 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors7180() : InstanceContentScript( 60008 ) ThePalaceoftheDeadFloors7180() :
{ } InstanceContentScript( 60008 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6521120, 4, { -300.000000f, 3.189805f, -241.061096f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6521120, 4, { -300.000000f, 3.189805f, -241.061096f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,17 +1,22 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors8190 : public InstanceContentScript class ThePalaceoftheDeadFloors8190 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors8190() : InstanceContentScript( 60009 ) ThePalaceoftheDeadFloors8190() :
{ } InstanceContentScript( 60009 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6527847, 4, { -300.000000f, 0.000026f, -237.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6527847, 4, { -300.000000f, 0.000026f, -237.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
instance->registerEObj( "sgvf_w_lvd_b0959_1", 2000608, 6544382, 4, { 301.149902f, -0.045413f, 285.247589f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959_1", 2000608, 6544382, 4, { 301.149902f, -0.045413f, 285.247589f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,17 +1,22 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class ThePalaceoftheDeadFloors91100 : public InstanceContentScript class ThePalaceoftheDeadFloors91100 :
public InstanceContentScript
{ {
public: public:
ThePalaceoftheDeadFloors91100() : InstanceContentScript( 60010 ) ThePalaceoftheDeadFloors91100() :
{ } InstanceContentScript( 60010 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6527847, 4, { -300.000000f, 0.000026f, -237.000000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959", 2000608, 6527847, 4, { -300.000000f, 0.000026f, -237.000000f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
instance->registerEObj( "sgvf_w_lvd_b0959_1", 2000608, 6544382, 4, { 301.149902f, -0.045413f, 285.247589f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0959_1", 2000608, 6544382, 4, { 301.149902f, -0.045413f, 285.247589f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off // States -> vf_bextwall_on vf_bextwall_on2off vf_bextwall_off
} }

View file

@ -1,11 +1,14 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class AlaMhigo : public InstanceContentScript class AlaMhigo :
public InstanceContentScript
{ {
public: public:
AlaMhigo() : InstanceContentScript( 56 ) AlaMhigo() :
{ } InstanceContentScript( 56 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {

View file

@ -1,137 +1,219 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class AmdaporKeep : public InstanceContentScript class AmdaporKeep :
public InstanceContentScript
{ {
public: public:
AmdaporKeep() : InstanceContentScript( 14 ) AmdaporKeep() :
{ } InstanceContentScript( 14 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgbg_f1d3_a1_gar2", 2000551, 4277027, 4, { -3.577190f, 48.000000f, -12.625050f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgbg_f1d3_a1_gar2", 2000551, 4277027, 4, { -3.577190f, 48.000000f, -12.625050f },
1.000000f, 0.000000f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_1", 2000552, 4277005, 4, { 21.455280f, 48.000011f, -12.604770f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_1", 2000552, 4277005, 4, { 21.455280f, 48.000011f, -12.604770f },
1.000000f, 0.000000f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_2", 2000553, 4277029, 4, { -3.963791f, 48.000000f, 9.699657f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_2", 2000553, 4277029, 4, { -3.963791f, 48.000000f, 9.699657f },
1.000000f, 0.000000f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_3", 2000554, 4277028, 4, { 21.081841f, 47.999920f, 9.731779f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_3", 2000554, 4277028, 4, { 21.081841f, 47.999920f, 9.731779f },
1.000000f, 0.000000f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "Entrance", 2000491, 4246565, 5, { -254.388702f, -8.857766f, -0.323940f }, 1.000000f, 0.000000f ); instance->registerEObj( "Entrance", 2000491, 4246565, 5, { -254.388702f, -8.857766f, -0.323940f }, 1.000000f,
0.000000f );
// States -> vf_lock_on vf_lock_of // States -> vf_lock_on vf_lock_of
instance->registerEObj( "unknown_0", 2000492, 0, 4, { -266.179810f, -9.200000f, -0.162207f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_0", 2000492, 0, 4, { -266.179810f, -9.200000f, -0.162207f }, 1.000000f,
instance->registerEObj( "Exit", 2000493, 4246574, 4, { -12.466670f, 48.285069f, -0.015320f }, 0.991760f, 0.000048f ); 0.000000f );
instance->registerEObj( "Exit", 2000493, 4246574, 4, { -12.466670f, 48.285069f, -0.015320f }, 0.991760f,
0.000048f );
// States -> vf_htras1_on vf_htras1_of // States -> vf_htras1_on vf_htras1_of
instance->registerEObj( "sgvf_w_lvd_b0094", 2000494, 4246576, 4, { -81.527344f, 0.000003f, -1.602537f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0094", 2000494, 4246576, 4, { -81.527344f, 0.000003f, -1.602537f }, 1.000000f,
0.000000f );
// States -> vf_line_on vf_line_of // States -> vf_line_on vf_line_of
instance->registerEObj( "sgvf_w_lvd_b0118", 2000495, 4246594, 4, { -81.412201f, 0.000003f, 0.186550f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118", 2000495, 4246594, 4, { -81.412201f, 0.000003f, 0.186550f }, 1.000000f,
0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "sgvf_w_lvd_b0094_1", 2000496, 4246595, 4, { 199.816895f, 21.957701f, -104.781303f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgvf_w_lvd_b0094_1", 2000496, 4246595, 4, { 199.816895f, 21.957701f, -104.781303f },
0.991760f, 0.000048f );
// States -> vf_line_on vf_line_of // States -> vf_line_on vf_line_of
instance->registerEObj( "sgpl_w_lvd_b0118_f1d2", 2000497, 4246596, 4, { 200.915497f, 21.957701f, -104.598198f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgpl_w_lvd_b0118_f1d2", 2000497, 4246596, 4, { 200.915497f, 21.957701f, -104.598198f },
0.991760f, 0.000048f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "sgvf_w_lvd_b0249", 2000498, 4246617, 4, { 34.775269f, 48.081181f, 0.381470f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgvf_w_lvd_b0249", 2000498, 4246617, 4, { 34.775269f, 48.081181f, 0.381470f }, 0.991760f,
0.000048f );
// States -> vf_line_on vf_line_of // States -> vf_line_on vf_line_of
instance->registerEObj( "sgvf_w_lvd_b0250", 2000499, 4246618, 4, { 34.775269f, 48.081181f, -0.839294f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgvf_w_lvd_b0250", 2000499, 4246618, 4, { 34.775269f, 48.081181f, -0.839294f }, 0.991760f,
0.000048f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "Shortcut", 2000700, 0, 4, { -246.833496f, -8.499996f, 4.016408f }, 1.000000f, 0.000000f ); instance->registerEObj( "Shortcut", 2000700, 0, 4, { -246.833496f, -8.499996f, 4.016408f }, 1.000000f, 0.000000f );
instance->registerEObj( "Aetherialflow", 2000500, 4247835, 4, { -10.236110f, -0.000000f, -0.015320f }, 0.991760f, 0.000048f ); instance->registerEObj( "Aetherialflow", 2000500, 4247835, 4, { -10.236110f, -0.000000f, -0.015320f }, 0.991760f,
instance->registerEObj( "PresenceChamberdoor", 2000502, 4308888, 4, { 60.483269f, 48.174511f, -0.015320f }, 0.991760f, 0.000048f ); 0.000048f );
instance->registerEObj( "BloodyTranseptdoor", 2000687, 4308274, 4, { 199.985397f, 22.200001f, -103.389503f }, 1.000000f, 0.000000f ); instance->registerEObj( "PresenceChamberdoor", 2000502, 4308888, 4, { 60.483269f, 48.174511f, -0.015320f },
instance->registerEObj( "sgvf_f1d1_b0008", 2002741, 4388278, 4, { -82.462273f, 0.000002f, 0.045686f }, 1.000000f, 0.000000f ); 0.991760f, 0.000048f );
instance->registerEObj( "BloodyTranseptdoor", 2000687, 4308274, 4, { 199.985397f, 22.200001f, -103.389503f },
1.000000f, 0.000000f );
instance->registerEObj( "sgvf_f1d1_b0008", 2002741, 4388278, 4, { -82.462273f, 0.000002f, 0.045686f }, 1.000000f,
0.000000f );
// States -> vf_baria1_off vf_baria_on // States -> vf_baria1_off vf_baria_on
instance->registerEObj( "sgbg_f1d3_a1_gar1", 2000509, 4271520, 4, { 134.111496f, 22.079769f, -5.935791f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1", 2000509, 4271520, 4, { 134.111496f, 22.079769f, -5.935791f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_1", 2000510, 4271522, 4, { 142.229202f, 22.079769f, -6.088379f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_2", 2000511, 4271529, 4, { 158.129196f, 22.079769f, -6.088379f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_1", 2000510, 4271522, 4, { 142.229202f, 22.079769f, -6.088379f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_3", 2000512, 4271531, 4, { 133.958893f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_4", 2000513, 4271532, 4, { 142.015594f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_2", 2000511, 4271529, 4, { 158.129196f, 22.079769f, -6.088379f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_5", 2000514, 4271533, 4, { 158.190201f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_6", 2000521, 4274657, 4, { 193.987900f, 22.110291f, 42.099609f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_3", 2000512, 4271531, 4, { 133.958893f, 22.079769f, 6.271362f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_7", 2000522, 4274656, 4, { 193.804794f, 22.079769f, 57.938480f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_8", 2000523, 4274655, 4, { 193.804794f, 22.079769f, 65.964722f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_4", 2000513, 4271532, 4, { 142.015594f, 22.079769f, 6.271362f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_9", 2000524, 4274661, 4, { 206.317093f, 22.079769f, 42.038570f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_10", 2000525, 4274660, 4, { 206.286697f, 22.079769f, 57.968990f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_5", 2000514, 4271533, 4, { 158.190201f, 22.079769f, 6.271362f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_11", 2000526, 4274659, 4, { 206.286697f, 22.079769f, 65.995239f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_12", 2000533, 4274648, 4, { 241.992798f, 22.079769f, -6.332520f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_6", 2000521, 4274657, 4, { 193.987900f, 22.110291f, 42.099609f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_13", 2000534, 4274649, 4, { 258.075806f, 22.079769f, -6.332520f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_14", 2000535, 4274650, 4, { 265.949493f, 22.079769f, -6.271484f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_7", 2000522, 4274656, 4, { 193.804794f, 22.079769f, 57.938480f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_15", 2000536, 4274651, 4, { 241.931793f, 22.079769f, 6.240906f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_16", 2000537, 4274652, 4, { 258.075806f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_8", 2000523, 4274655, 4, { 193.804794f, 22.079769f, 65.964722f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_17", 2000538, 4274653, 4, { 266.071503f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_18", 2000545, 4274662, 4, { 193.804794f, 22.079769f, -34.042912f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_9", 2000524, 4274661, 4, { 206.317093f, 22.079769f, 42.038570f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_19", 2000546, 4274667, 4, { 193.804794f, 22.079769f, -42.008121f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_20", 2000547, 4274666, 4, { 193.804794f, 22.079769f, -58.335270f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_10", 2000525, 4274660, 4, { 206.286697f, 22.079769f, 57.968990f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_21", 2000548, 4274663, 4, { 206.317093f, 22.079769f, -33.890320f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_22", 2000549, 4274665, 4, { 206.317093f, 22.079769f, -41.916561f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_11", 2000526, 4274659, 4, { 206.286697f, 22.079769f, 65.995239f },
instance->registerEObj( "sgbg_f1d3_a1_gar1_23", 2000550, 4274664, 4, { 206.317093f, 22.079769f, -58.274231f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar2_4", 2000503, 4274671, 4, { 134.111496f, 22.079769f, -5.935791f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar1_12", 2000533, 4274648, 4, { 241.992798f, 22.079769f, -6.332520f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_13", 2000534, 4274649, 4, { 258.075806f, 22.079769f, -6.332520f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_14", 2000535, 4274650, 4, { 265.949493f, 22.079769f, -6.271484f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_15", 2000536, 4274651, 4, { 241.931793f, 22.079769f, 6.240906f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_16", 2000537, 4274652, 4, { 258.075806f, 22.079769f, 6.271362f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_17", 2000538, 4274653, 4, { 266.071503f, 22.079769f, 6.271362f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_18", 2000545, 4274662, 4, { 193.804794f, 22.079769f, -34.042912f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_19", 2000546, 4274667, 4, { 193.804794f, 22.079769f, -42.008121f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_20", 2000547, 4274666, 4, { 193.804794f, 22.079769f, -58.335270f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_21", 2000548, 4274663, 4, { 206.317093f, 22.079769f, -33.890320f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_22", 2000549, 4274665, 4, { 206.317093f, 22.079769f, -41.916561f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar1_23", 2000550, 4274664, 4, { 206.317093f, 22.079769f, -58.274231f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_f1d3_a1_gar2_4", 2000503, 4274671, 4, { 134.111496f, 22.079769f, -5.935791f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_5", 2000504, 4274672, 4, { 142.229202f, 22.079769f, -6.088379f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_5", 2000504, 4274672, 4, { 142.229202f, 22.079769f, -6.088379f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_6", 2000505, 4274673, 4, { 158.129196f, 22.079769f, -6.088379f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_6", 2000505, 4274673, 4, { 158.129196f, 22.079769f, -6.088379f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_7", 2000506, 4274674, 4, { 133.958893f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_7", 2000506, 4274674, 4, { 133.958893f, 22.079769f, 6.271362f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_8", 2000507, 4274675, 4, { 142.015594f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_8", 2000507, 4274675, 4, { 142.015594f, 22.079769f, 6.271362f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_9", 2000508, 4274676, 4, { 158.190201f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_9", 2000508, 4274676, 4, { 158.190201f, 22.079769f, 6.271362f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_10", 2000515, 4274685, 4, { 193.987900f, 22.110291f, 42.099609f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_10", 2000515, 4274685, 4, { 193.987900f, 22.110291f, 42.099609f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_11", 2000516, 4274684, 4, { 193.804794f, 22.079769f, 57.938480f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_11", 2000516, 4274684, 4, { 193.804794f, 22.079769f, 57.938480f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_12", 2000517, 4274683, 4, { 193.804794f, 22.079769f, 65.964722f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_12", 2000517, 4274683, 4, { 193.804794f, 22.079769f, 65.964722f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_13", 2000518, 4274688, 4, { 206.317093f, 22.079769f, 42.038570f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_13", 2000518, 4274688, 4, { 206.317093f, 22.079769f, 42.038570f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_14", 2000519, 4274687, 4, { 206.317093f, 22.079769f, 57.968990f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_14", 2000519, 4274687, 4, { 206.317093f, 22.079769f, 57.968990f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_15", 2000520, 4274686, 4, { 206.317093f, 22.079769f, 65.995239f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_15", 2000520, 4274686, 4, { 206.317093f, 22.079769f, 65.995239f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_16", 2000527, 4274677, 4, { 241.992798f, 22.079769f, -6.332520f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_16", 2000527, 4274677, 4, { 241.992798f, 22.079769f, -6.332520f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_17", 2000528, 4274678, 4, { 258.075806f, 22.079769f, -6.332520f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_17", 2000528, 4274678, 4, { 258.075806f, 22.079769f, -6.332520f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_18", 2000529, 4274679, 4, { 265.949493f, 22.079769f, -6.271484f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_18", 2000529, 4274679, 4, { 265.949493f, 22.079769f, -6.271484f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_19", 2000530, 4274680, 4, { 241.931793f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_19", 2000530, 4274680, 4, { 241.931793f, 22.079769f, 6.271362f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_20", 2000531, 4274681, 4, { 258.075806f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_20", 2000531, 4274681, 4, { 258.075806f, 22.079769f, 6.271362f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_21", 2000532, 4274682, 4, { 266.071503f, 22.079769f, 6.271362f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_21", 2000532, 4274682, 4, { 266.071503f, 22.079769f, 6.271362f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_22", 2000539, 4274689, 4, { 193.804794f, 22.079769f, -34.042912f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_22", 2000539, 4274689, 4, { 193.804794f, 22.079769f, -34.042912f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_23", 2000540, 4274694, 4, { 193.804794f, 22.079769f, -42.008121f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_23", 2000540, 4274694, 4, { 193.804794f, 22.079769f, -42.008121f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_24", 2000541, 4274693, 4, { 193.804794f, 22.079769f, -58.335270f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_24", 2000541, 4274693, 4, { 193.804794f, 22.079769f, -58.335270f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_25", 2000542, 4274690, 4, { 206.317093f, 22.079769f, -33.890320f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_25", 2000542, 4274690, 4, { 206.317093f, 22.079769f, -33.890320f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_26", 2000543, 4274692, 4, { 206.317093f, 22.079769f, -41.916561f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_26", 2000543, 4274692, 4, { 206.317093f, 22.079769f, -41.916561f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "sgbg_f1d3_a1_gar2_27", 2000544, 4274691, 4, { 206.317093f, 22.079769f, -58.274231f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_f1d3_a1_gar2_27", 2000544, 4274691, 4, { 206.317093f, 22.079769f, -58.274231f },
0.991760f, 0.000048f );
// States -> on off vfx_on // States -> on off vfx_on
instance->registerEObj( "Entrance_1", 2000182, 5608623, 5, { -156.520401f, -2.800003f, -5.140180f }, 1.000000f, 0.000000f ); instance->registerEObj( "Entrance_1", 2000182, 5608623, 5, { -156.520401f, -2.800003f, -5.140180f }, 1.000000f,
0.000000f );
// States -> vf_lock_on vf_lock_of // States -> vf_lock_on vf_lock_of
instance->registerEObj( "sgvf_w_lvd_b0118_1", 2002872, 5608617, 4, { -154.662003f, -2.800003f, 5.028913f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118_1", 2002872, 5608617, 4, { -154.662003f, -2.800003f, 5.028913f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_1", 2002735, 0, 4, { -151.232193f, -2.822998f, 0.289556f }, 1.174927f, -1.570451f ); instance->registerEObj( "unknown_1", 2002735, 0, 4, { -151.232193f, -2.822998f, 0.289556f }, 1.174927f,
instance->registerEObj( "sgvf_w_lvd_b0118_2", 2005128, 5608619, 4, { -112.240501f, -2.800003f, -0.701091f }, 1.000000f, 0.000000f ); -1.570451f );
instance->registerEObj( "sgvf_w_lvd_b0118_2", 2005128, 5608619, 4, { -112.240501f, -2.800003f, -0.701091f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_2", 2002735, 0, 4, { -46.585720f, 0.045776f, 0.190301f }, 1.179312f, -1.570451f ); instance->registerEObj( "unknown_2", 2002735, 0, 4, { -46.585720f, 0.045776f, 0.190301f }, 1.179312f, -1.570451f );
instance->registerEObj( "sgvf_w_lvd_b0118_3", 2002872, 5608620, 4, { -46.476231f, 0.000000f, -0.510445f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118_3", 2002872, 5608620, 4, { -46.476231f, 0.000000f, -0.510445f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "Exit_1", 2000139, 0, 4, { -7.766907f, -0.015320f, 0.015198f }, 0.991760f, 0.000048f ); instance->registerEObj( "Exit_1", 2000139, 0, 4, { -7.766907f, -0.015320f, 0.015198f }, 0.991760f, 0.000048f );
instance->registerEObj( "sgvf_f1d3_bo189", 2000561, 4248559, 4, { 200.121902f, 21.988159f, -114.000000f }, 1.000000f, 0.000048f ); instance->registerEObj( "sgvf_f1d3_bo189", 2000561, 4248559, 4, { 200.121902f, 21.988159f, -114.000000f },
instance->registerEObj( "sgbg_col_wall_00", 2000555, 4249099, 4, { 200.000000f, 21.988159f, -151.822800f }, 0.991760f, 0.000048f ); 1.000000f, 0.000048f );
instance->registerEObj( "Aetherialflow_1", 2000501, 4247838, 4, { 200.061005f, 22.000000f, -165.266006f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_col_wall_00", 2000555, 4249099, 4, { 200.000000f, 21.988159f, -151.822800f },
instance->registerEObj( "sgbg_col_wall_00_1", 2000556, 4249100, 4, { 200.000000f, 21.988159f, -146.822800f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_col_wall_00_2", 2000557, 4249101, 4, { 200.000000f, 21.988159f, -141.822800f }, 0.991760f, 0.000048f ); instance->registerEObj( "Aetherialflow_1", 2000501, 4247838, 4, { 200.061005f, 22.000000f, -165.266006f },
instance->registerEObj( "sgbg_col_wall_00_3", 2000560, 4249104, 4, { 200.000000f, 21.988159f, -126.822800f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_col_wall_00_4", 2000602, 4253048, 4, { 200.000000f, 21.988159f, -121.822800f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_col_wall_00_1", 2000556, 4249100, 4, { 200.000000f, 21.988159f, -146.822800f },
instance->registerEObj( "sgbg_col_wall_00_5", 2000559, 4249103, 4, { 200.000000f, 21.988159f, -131.822800f }, 0.991760f, 0.000048f ); 0.991760f, 0.000048f );
instance->registerEObj( "sgbg_col_wall_00_6", 2000558, 4249102, 4, { 200.000000f, 21.957701f, -136.838501f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgbg_col_wall_00_2", 2000557, 4249101, 4, { 200.000000f, 21.988159f, -141.822800f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_col_wall_00_3", 2000560, 4249104, 4, { 200.000000f, 21.988159f, -126.822800f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_col_wall_00_4", 2000602, 4253048, 4, { 200.000000f, 21.988159f, -121.822800f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_col_wall_00_5", 2000559, 4249103, 4, { 200.000000f, 21.988159f, -131.822800f },
0.991760f, 0.000048f );
instance->registerEObj( "sgbg_col_wall_00_6", 2000558, 4249102, 4, { 200.000000f, 21.957701f, -136.838501f },
0.991760f, 0.000048f );
} }

View file

@ -1,51 +1,80 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class AmdaporKeepHard : public InstanceContentScript class AmdaporKeepHard :
public InstanceContentScript
{ {
public: public:
AmdaporKeepHard() : InstanceContentScript( 29 ) AmdaporKeepHard() :
{ } InstanceContentScript( 29 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "sgvf_w_lvd_b0118", 2002872, 5040923, 4, { 203.452301f, 0.116688f, 208.657593f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118", 2002872, 5040923, 4, { 203.452301f, 0.116688f, 208.657593f }, 1.000000f,
0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_0", 2002735, 0, 4, { 199.471802f, 0.116693f, 210.128204f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_0", 2002735, 0, 4, { 199.471802f, 0.116693f, 210.128204f }, 1.000000f, 0.000000f );
instance->registerEObj( "sgbg_f1d7_a4_scy01", 2005153, 5619221, 4, { 198.706802f, -20.000010f, 229.113907f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgbg_f1d7_a4_scy01", 2005153, 5619221, 4, { 198.706802f, -20.000010f, 229.113907f },
instance->registerEObj( "unknown_1", 2004696, 5009720, 4, { -200.316895f, -4.301562f, -43.621670f }, 1.000000f, 0.000000f ); 1.000000f, 0.000000f );
instance->registerEObj( "unknown_2", 2004697, 5009721, 4, { -47.771290f, -0.000000f, -71.658272f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_1", 2004696, 5009720, 4, { -200.316895f, -4.301562f, -43.621670f }, 1.000000f,
instance->registerEObj( "sgbg_f1d7_a1_evl01", 2004698, 5031991, 4, { -125.087196f, -2.000000f, 28.417601f }, 1.000000f, -0.000000f ); 0.000000f );
instance->registerEObj( "unknown_2", 2004697, 5009721, 4, { -47.771290f, -0.000000f, -71.658272f }, 1.000000f,
0.000000f );
instance->registerEObj( "sgbg_f1d7_a1_evl01", 2004698, 5031991, 4, { -125.087196f, -2.000000f, 28.417601f },
1.000000f, -0.000000f );
// States -> evils_def evils_off_anim evils_on evils_on_anim // States -> evils_def evils_off_anim evils_on evils_on_anim
instance->registerEObj( "sgvf_f1d7_b0574", 2004699, 5031992, 4, { -104.790604f, -2.000000f, 47.174728f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_f1d7_b0574", 2004699, 5031992, 4, { -104.790604f, -2.000000f, 47.174728f }, 1.000000f,
0.000000f );
// States -> vf_baria1_off vf_baria_on // States -> vf_baria1_off vf_baria_on
instance->registerEObj( "unknown_3", 2004700, 0, 4, { 2.343430f, 48.179089f, -2.083742f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_3", 2004700, 0, 4, { 2.343430f, 48.179089f, -2.083742f }, 1.000000f, 0.000000f );
instance->registerEObj( "unknown_4", 2004702, 5009732, 4, { 125.604897f, 43.999989f, 3.999085f }, 1.000000f, 0.005971f ); instance->registerEObj( "unknown_4", 2004702, 5009732, 4, { 125.604897f, 43.999989f, 3.999085f }, 1.000000f,
0.005971f );
instance->registerEObj( "unknown_5", 2004701, 0, 4, { 149.666000f, 44.200001f, -0.006115f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_5", 2004701, 0, 4, { 149.666000f, 44.200001f, -0.006115f }, 1.000000f, 0.000000f );
instance->registerEObj( "unknown_6", 2004703, 5010816, 4, { 196.927399f, 44.000019f, -101.381798f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_6", 2004703, 5010816, 4, { 196.927399f, 44.000019f, -101.381798f }, 1.000000f,
instance->registerEObj( "sgbg_f1d7_a1_evl01_1", 2004704, 5032163, 4, { 199.696106f, 44.000000f, -181.197006f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "sgbg_f1d7_a1_evl01_1", 2004704, 5032163, 4, { 199.696106f, 44.000000f, -181.197006f },
1.000000f, 0.000000f );
// States -> evils_def evils_off_anim evils_on evils_on_anim // States -> evils_def evils_off_anim evils_on evils_on_anim
instance->registerEObj( "Aetherialflow", 2004705, 5032164, 4, { 199.682800f, 44.163898f, -180.392395f }, 1.000000f, -0.000000f ); instance->registerEObj( "Aetherialflow", 2004705, 5032164, 4, { 199.682800f, 44.163898f, -180.392395f }, 1.000000f,
instance->registerEObj( "Fellorb", 2004706, 5009746, 4, { 200.094101f, -0.000008f, 0.050249f }, 1.000000f, 0.000000f ); -0.000000f );
instance->registerEObj( "Aetherialflow_1", 2004707, 5033533, 4, { 199.899506f, 0.000000f, -3.297300f }, 1.000000f, -0.000000f ); instance->registerEObj( "Fellorb", 2004706, 5009746, 4, { 200.094101f, -0.000008f, 0.050249f }, 1.000000f,
instance->registerEObj( "unknown_7", 2004768, 5033548, 4, { 210.649307f, 0.116687f, -6.120441f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "unknown_8", 2004769, 5033549, 4, { 189.489807f, 0.116688f, -6.804901f }, 1.000000f, 0.000000f ); instance->registerEObj( "Aetherialflow_1", 2004707, 5033533, 4, { 199.899506f, 0.000000f, -3.297300f }, 1.000000f,
instance->registerEObj( "unknown_9", 2004770, 5033551, 4, { 204.506500f, 0.116687f, 9.902725f }, 1.000000f, 0.000000f ); -0.000000f );
instance->registerEObj( "sgvf_w_lvd_b0118_1", 2004708, 5034801, 4, { -119.510101f, -2.400002f, 18.885540f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_7", 2004768, 5033548, 4, { 210.649307f, 0.116687f, -6.120441f }, 1.000000f,
0.000000f );
instance->registerEObj( "unknown_8", 2004769, 5033549, 4, { 189.489807f, 0.116688f, -6.804901f }, 1.000000f,
0.000000f );
instance->registerEObj( "unknown_9", 2004770, 5033551, 4, { 204.506500f, 0.116687f, 9.902725f }, 1.000000f,
0.000000f );
instance->registerEObj( "sgvf_w_lvd_b0118_1", 2004708, 5034801, 4, { -119.510101f, -2.400002f, 18.885540f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "sgvf_w_lvd_b0118_2", 2002872, 5034800, 4, { -130.314606f, -2.400000f, -18.221069f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118_2", 2002872, 5034800, 4, { -130.314606f, -2.400000f, -18.221069f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_10", 2002735, 0, 4, { -125.041801f, -1.964380f, -20.543480f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_10", 2002735, 0, 4, { -125.041801f, -1.964380f, -20.543480f }, 1.000000f,
instance->registerEObj( "sgpl_f1d7_a1_gar0", 2004996, 5390927, 4, { -112.845497f, -2.400000f, 12.122500f }, 1.000000f, 0.785314f ); 0.000000f );
instance->registerEObj( "sgpl_f1d7_a1_gar0_1", 2004997, 5390928, 4, { -112.845497f, -2.400000f, -12.378100f }, 1.000000f, 0.785457f ); instance->registerEObj( "sgpl_f1d7_a1_gar0", 2004996, 5390927, 4, { -112.845497f, -2.400000f, 12.122500f },
instance->registerEObj( "sgpl_f1d7_a1_gar0_2", 2004998, 5390929, 4, { -137.250000f, -2.400000f, 12.122500f }, 1.000000f, -0.785410f ); 1.000000f, 0.785314f );
instance->registerEObj( "sgpl_f1d7_a1_gar0_3", 2004999, 5390930, 4, { -137.396194f, -2.400000f, -12.366500f }, 1.000000f, -0.785398f ); instance->registerEObj( "sgpl_f1d7_a1_gar0_1", 2004997, 5390928, 4, { -112.845497f, -2.400000f, -12.378100f },
instance->registerEObj( "sgvf_w_lvd_b0118_3", 2004782, 5038257, 4, { 198.459198f, 43.991699f, -172.369705f }, 1.000000f, 0.000048f ); 1.000000f, 0.785457f );
instance->registerEObj( "sgpl_f1d7_a1_gar0_2", 2004998, 5390929, 4, { -137.250000f, -2.400000f, 12.122500f },
1.000000f, -0.785410f );
instance->registerEObj( "sgpl_f1d7_a1_gar0_3", 2004999, 5390930, 4, { -137.396194f, -2.400000f, -12.366500f },
1.000000f, -0.785398f );
instance->registerEObj( "sgvf_w_lvd_b0118_3", 2004782, 5038257, 4, { 198.459198f, 43.991699f, -172.369705f },
1.000000f, 0.000048f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "sgvf_w_lvd_b0118_4", 2002872, 5038255, 4, { 197.802597f, 43.991699f, -125.932701f }, 1.000000f, -0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118_4", 2002872, 5038255, 4, { 197.802597f, 43.991699f, -125.932701f },
1.000000f, -0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_11", 2002735, 0, 4, { 199.511703f, 44.022221f, -130.601303f }, 1.000000f, -0.000000f ); instance->registerEObj( "unknown_11", 2002735, 0, 4, { 199.511703f, 44.022221f, -130.601303f }, 1.000000f,
instance->registerEObj( "Entrance", 2000182, 5018466, 5, { -255.724792f, -9.199999f, -5.249732f }, 1.000000f, 0.000000f ); -0.000000f );
instance->registerEObj( "Entrance", 2000182, 5018466, 5, { -255.724792f, -9.199999f, -5.249732f }, 1.000000f,
0.000000f );
// States -> vf_lock_on vf_lock_of // States -> vf_lock_on vf_lock_of
instance->registerEObj( "Shortcut", 2000700, 0, 4, { -252.173401f, -9.199999f, 5.737248f }, 1.000000f, 0.000000f ); instance->registerEObj( "Shortcut", 2000700, 0, 4, { -252.173401f, -9.199999f, 5.737248f }, 1.000000f, 0.000000f );
instance->registerEObj( "Exit", 2000139, 0, 4, { 200.798599f, -0.000008f, 240.880905f }, 1.000000f, 0.000000f ); instance->registerEObj( "Exit", 2000139, 0, 4, { 200.798599f, -0.000008f, 240.880905f }, 1.000000f, 0.000000f );

View file

@ -1,46 +1,73 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class BaelsarsWall : public InstanceContentScript class BaelsarsWall :
public InstanceContentScript
{ {
public: public:
BaelsarsWall() : InstanceContentScript( 48 ) BaelsarsWall() :
{ } InstanceContentScript( 48 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "unknown_0", 2002735, 0, 4, { -173.966797f, 3.049999f, 52.443710f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_0", 2002735, 0, 4, { -173.966797f, 3.049999f, 52.443710f }, 1.000000f, 0.000000f );
instance->registerEObj( "sgvf_w_lvd_b0118", 2002872, 6588628, 4, { -173.612198f, 3.049997f, 52.688000f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118", 2002872, 6588628, 4, { -173.612198f, 3.049997f, 52.688000f }, 1.000000f,
0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "sgvf_w_lvd_b0118_1", 2002872, 6588629, 4, { -154.029907f, 3.049906f, 72.262756f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118_1", 2002872, 6588629, 4, { -154.029907f, 3.049906f, 72.262756f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_1", 2002735, 0, 4, { 95.577843f, -300.028412f, 0.707827f }, 1.000000f, -1.570451f ); instance->registerEObj( "unknown_1", 2002735, 0, 4, { 95.577843f, -300.028412f, 0.707827f }, 1.000000f,
instance->registerEObj( "sgvf_w_lvd_b0118_2", 2002872, 6588652, 4, { 95.163948f, -300.028198f, 0.952097f }, 1.000000f, -1.570451f ); -1.570451f );
instance->registerEObj( "sgvf_w_lvd_b0118_2", 2002872, 6588652, 4, { 95.163948f, -300.028198f, 0.952097f },
1.000000f, -1.570451f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "sgvf_w_lvd_b0118_3", 2002872, 6588653, 4, { 135.748398f, -300.000092f, 0.172490f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118_3", 2002872, 6588653, 4, { 135.748398f, -300.000092f, 0.172490f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "sgvf_w_lvd_b0118_4", 2002872, 6588667, 4, { 371.527588f, 212.000000f, 391.566010f }, 1.000000f, -0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118_4", 2002872, 6588667, 4, { 371.527588f, 212.000000f, 391.566010f },
1.000000f, -0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_2", 2002735, 0, 4, { 371.795685f, 212.000000f, 391.643097f }, 1.000000f, -1.570451f ); instance->registerEObj( "unknown_2", 2002735, 0, 4, { 371.795685f, 212.000000f, 391.643097f }, 1.000000f,
instance->registerEObj( "Shortcut", 2000700, 0, 4, { -230.764297f, -0.932137f, -173.143600f }, 1.000000f, 0.000000f ); -1.570451f );
instance->registerEObj( "Shortcut", 2000700, 0, 4, { -230.764297f, -0.932137f, -173.143600f }, 1.000000f,
0.000000f );
instance->registerEObj( "Exit", 2000139, 0, 4, { 352.071411f, 212.000000f, 391.988892f }, 0.991760f, 0.000048f ); instance->registerEObj( "Exit", 2000139, 0, 4, { 352.071411f, 212.000000f, 391.988892f }, 0.991760f, 0.000048f );
instance->registerEObj( "Entrance", 2000182, 6562675, 5, { -228.044006f, -0.901261f, -183.153198f }, 1.000000f, 0.000000f ); instance->registerEObj( "Entrance", 2000182, 6562675, 5, { -228.044006f, -0.901261f, -183.153198f }, 1.000000f,
0.000000f );
// States -> vf_lock_on vf_lock_of // States -> vf_lock_on vf_lock_of
instance->registerEObj( "Imperialidentificationkey", 2007567, 0, 4, { -202.837997f, -0.966086f, -62.488140f }, 1.000000f, 0.000000f ); instance->registerEObj( "Imperialidentificationkey", 2007567, 0, 4, { -202.837997f, -0.966086f, -62.488140f },
instance->registerEObj( "Securityterminal", 2007571, 6640773, 4, { -206.023102f, 2.815013f, -48.897739f }, 1.000000f, 0.000000f ); 1.000000f, 0.000000f );
instance->registerEObj( "unknown_3", 2007575, 6501039, 4, { -203.861694f, 1.804717f, -49.827511f }, 1.000000f, 0.000000f ); instance->registerEObj( "Securityterminal", 2007571, 6640773, 4, { -206.023102f, 2.815013f, -48.897739f },
instance->registerEObj( "Imperialidentificationkey_1", 2007568, 0, 4, { -176.569397f, 2.150000f, 17.400681f }, 1.000000f, 0.000000f ); 1.000000f, 0.000000f );
instance->registerEObj( "Securityterminal_1", 2007572, 6516973, 4, { -187.083206f, 2.707914f, 19.031469f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_3", 2007575, 6501039, 4, { -203.861694f, 1.804717f, -49.827511f }, 1.000000f,
instance->registerEObj( "unknown_4", 2007576, 6502290, 4, { -174.854904f, 2.100000f, 23.458460f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "unknown_5", 2007776, 6500492, 4, { -126.770897f, 2.000089f, 72.952606f }, 1.000000f, 0.000000f ); instance->registerEObj( "Imperialidentificationkey_1", 2007568, 0, 4, { -176.569397f, 2.150000f, 17.400681f },
instance->registerEObj( "Controlpanel", 2007580, 0, 4, { -0.003809f, -299.760315f, 0.024599f }, 2.000000f, 0.000048f ); 1.000000f, 0.000000f );
instance->registerEObj( "Controlpanel_1", 2007581, 0, 4, { 177.511993f, -298.963196f, 4.224624f }, 0.991760f, 0.000048f ); instance->registerEObj( "Securityterminal_1", 2007572, 6516973, 4, { -187.083206f, 2.707914f, 19.031469f },
instance->registerEObj( "Controlpanel_2", 2007582, 6523203, 4, { 177.434006f, -298.072601f, 6.243333f }, 1.000000f, 0.000000f ); 1.000000f, 0.000000f );
instance->registerEObj( "unknown_6", 2007601, 6516974, 4, { 176.321396f, -299.105713f, 0.250570f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_4", 2007576, 6502290, 4, { -174.854904f, 2.100000f, 23.458460f }, 1.000000f,
instance->registerEObj( "Imperialidentificationkey_2", 2007569, 0, 4, { 317.032288f, 169.000107f, 230.153503f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "Securityterminal_2", 2007573, 6488516, 4, { 320.921600f, 169.867996f, 243.976807f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_5", 2007776, 6500492, 4, { -126.770897f, 2.000089f, 72.952606f }, 1.000000f,
instance->registerEObj( "unknown_7", 2007577, 6488509, 4, { 328.225189f, 169.000107f, 244.581894f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "unknown_8", 2007578, 6777152, 4, { 382.790100f, 203.000000f, 357.169403f }, 1.000000f, 0.000000f ); instance->registerEObj( "Controlpanel", 2007580, 0, 4, { -0.003809f, -299.760315f, 0.024599f }, 2.000000f,
0.000048f );
instance->registerEObj( "Controlpanel_1", 2007581, 0, 4, { 177.511993f, -298.963196f, 4.224624f }, 0.991760f,
0.000048f );
instance->registerEObj( "Controlpanel_2", 2007582, 6523203, 4, { 177.434006f, -298.072601f, 6.243333f }, 1.000000f,
0.000000f );
instance->registerEObj( "unknown_6", 2007601, 6516974, 4, { 176.321396f, -299.105713f, 0.250570f }, 1.000000f,
0.000000f );
instance->registerEObj( "Imperialidentificationkey_2", 2007569, 0, 4, { 317.032288f, 169.000107f, 230.153503f },
1.000000f, 0.000000f );
instance->registerEObj( "Securityterminal_2", 2007573, 6488516, 4, { 320.921600f, 169.867996f, 243.976807f },
1.000000f, 0.000000f );
instance->registerEObj( "unknown_7", 2007577, 6488509, 4, { 328.225189f, 169.000107f, 244.581894f }, 1.000000f,
0.000000f );
instance->registerEObj( "unknown_8", 2007578, 6777152, 4, { 382.790100f, 203.000000f, 357.169403f }, 1.000000f,
0.000000f );
} }

View file

@ -1,11 +1,14 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class BardamsMettle : public InstanceContentScript class BardamsMettle :
public InstanceContentScript
{ {
public: public:
BardamsMettle() : InstanceContentScript( 53 ) BardamsMettle() :
{ } InstanceContentScript( 53 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {

View file

@ -1,34 +1,50 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class BrayfloxsLongstop : public InstanceContentScript class BrayfloxsLongstop :
public InstanceContentScript
{ {
public: public:
BrayfloxsLongstop() : InstanceContentScript( 8 ) BrayfloxsLongstop() :
{ } InstanceContentScript( 8 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "unknown_0", 2001694, 0, 4, { -36.384769f, 34.915119f, -234.568405f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_0", 2001694, 0, 4, { -36.384769f, 34.915119f, -234.568405f }, 1.000000f,
0.000000f );
instance->registerEObj( "unknown_1", 2001461, 0, 4, { 142.567200f, -1.266762f, 67.804497f }, 0.991760f, 0.000048f ); instance->registerEObj( "unknown_1", 2001461, 0, 4, { 142.567200f, -1.266762f, 67.804497f }, 0.991760f, 0.000048f );
instance->registerEObj( "RunstopHeadgate", 2001462, 3996541, 4, { 105.920601f, 1.745684f, 11.445460f }, 1.000000f, 0.000000f ); instance->registerEObj( "RunstopHeadgate", 2001462, 3996541, 4, { 105.920601f, 1.745684f, 11.445460f }, 1.000000f,
instance->registerEObj( "RunstopGutgate", 2001463, 3970152, 4, { 113.391296f, -0.849704f, -33.166710f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "RunstopBackgate", 2001464, 3970154, 4, { -19.424801f, 7.919373f, -71.122383f }, 0.991760f, 0.000048f ); instance->registerEObj( "RunstopGutgate", 2001463, 3970152, 4, { 113.391296f, -0.849704f, -33.166710f }, 1.000000f,
instance->registerEObj( "LongstopHeadgate", 2001465, 3970153, 4, { -113.634499f, 1.332127f, -58.144779f }, 1.000000f, 0.000000f ); 0.000000f );
instance->registerEObj( "LongstopGutgate", 2001466, 3976772, 4, { -89.831360f, 14.042510f, -96.676224f }, 1.000000f, 0.000000f ); instance->registerEObj( "RunstopBackgate", 2001464, 3970154, 4, { -19.424801f, 7.919373f, -71.122383f }, 0.991760f,
instance->registerEObj( "sgvf_w_lvd_b0118", 2001584, 4086949, 4, { 106.822800f, -1.629326f, 2.541263f }, 1.000000f, 0.000000f ); 0.000048f );
instance->registerEObj( "LongstopHeadgate", 2001465, 3970153, 4, { -113.634499f, 1.332127f, -58.144779f },
1.000000f, 0.000000f );
instance->registerEObj( "LongstopGutgate", 2001466, 3976772, 4, { -89.831360f, 14.042510f, -96.676224f }, 1.000000f,
0.000000f );
instance->registerEObj( "sgvf_w_lvd_b0118", 2001584, 4086949, 4, { 106.822800f, -1.629326f, 2.541263f }, 1.000000f,
0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_2", 2001585, 0, 4, { 110.429604f, -1.663330f, 3.311157f }, 0.991760f, 0.214809f ); instance->registerEObj( "unknown_2", 2001585, 0, 4, { 110.429604f, -1.663330f, 3.311157f }, 0.991760f, 0.214809f );
instance->registerEObj( "sgvf_w_lvd_b0118_1", 2001586, 4088979, 4, { 8.021301f, 5.921407f, -69.090309f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118_1", 2001586, 4088979, 4, { 8.021301f, 5.921407f, -69.090309f }, 1.000000f,
0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_3", 2001587, 0, 4, { 6.458210f, 5.902269f, -67.560417f }, 1.000000f, -0.788830f ); instance->registerEObj( "unknown_3", 2001587, 0, 4, { 6.458210f, 5.902269f, -67.560417f }, 1.000000f, -0.788830f );
instance->registerEObj( "sgvf_w_lvd_b0118_2", 2001588, 4088985, 4, { -106.298798f, -2.123102f, -10.585170f }, 1.000000f, 0.000000f ); instance->registerEObj( "sgvf_w_lvd_b0118_2", 2001588, 4088985, 4, { -106.298798f, -2.123102f, -10.585170f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_4", 2001589, 0, 4, { -105.172897f, -2.123102f, -10.865350f }, 1.000000f, -0.043989f ); instance->registerEObj( "unknown_4", 2001589, 0, 4, { -105.172897f, -2.123102f, -10.865350f }, 1.000000f,
instance->registerEObj( "sgvf_w_lvd_b0118_3", 2001590, 4088991, 4, { -68.039551f, 33.716820f, -232.938904f }, 1.000000f, 0.000000f ); -0.043989f );
instance->registerEObj( "sgvf_w_lvd_b0118_3", 2001590, 4088991, 4, { -68.039551f, 33.716820f, -232.938904f },
1.000000f, 0.000000f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_5", 2001591, 0, 4, { -68.693542f, 33.682091f, -234.070496f }, 1.000000f, -1.318638f ); instance->registerEObj( "unknown_5", 2001591, 0, 4, { -68.693542f, 33.682091f, -234.070496f }, 1.000000f,
instance->registerEObj( "Entrance", 2000182, 4097104, 5, { 122.445702f, -1.119082f, 68.403687f }, 1.000000f, 0.000000f ); -1.318638f );
instance->registerEObj( "Entrance", 2000182, 4097104, 5, { 122.445702f, -1.119082f, 68.403687f }, 1.000000f,
0.000000f );
// States -> vf_lock_on vf_lock_of // States -> vf_lock_on vf_lock_of
instance->registerEObj( "Shortcut", 2000700, 0, 4, { 113.256897f, -1.172536f, 59.115589f }, 1.000000f, 0.000000f ); instance->registerEObj( "Shortcut", 2000700, 0, 4, { 113.256897f, -1.172536f, 59.115589f }, 1.000000f, 0.000000f );
instance->registerEObj( "Exit", 2000139, 0, 4, { -8.639429f, 35.641689f, -234.813797f }, 0.991760f, 0.000048f ); instance->registerEObj( "Exit", 2000139, 0, 4, { -8.639429f, 35.641689f, -234.813797f }, 0.991760f, 0.000048f );

View file

@ -1,43 +1,64 @@
#include <ScriptObject.h> #include <ScriptObject.h>
#include <Zone/InstanceContent.h> #include <Zone/InstanceContent.h>
class BrayfloxsLongstopHard : public InstanceContentScript class BrayfloxsLongstopHard :
public InstanceContentScript
{ {
public: public:
BrayfloxsLongstopHard() : InstanceContentScript( 20 ) BrayfloxsLongstopHard() :
{ } InstanceContentScript( 20 )
{
}
void onInit( InstanceContentPtr instance ) override void onInit( InstanceContentPtr instance ) override
{ {
instance->registerEObj( "unknown_0", 2003103, 0, 4, { -16.800230f, 25.375731f, -171.007904f }, 0.991760f, 0.000048f ); instance->registerEObj( "unknown_0", 2003103, 0, 4, { -16.800230f, 25.375731f, -171.007904f }, 0.991760f,
instance->registerEObj( "RunstopHeadgate", 2002182, 4542379, 4, { 105.912804f, 1.724182f, 11.428960f }, 0.991760f, 0.000048f ); 0.000048f );
instance->registerEObj( "sgvf_w_lvd_b0118", 2002183, 4621964, 4, { 111.650299f, 0.228821f, -49.790279f }, 0.991760f, 0.000048f ); instance->registerEObj( "RunstopHeadgate", 2002182, 4542379, 4, { 105.912804f, 1.724182f, 11.428960f }, 0.991760f,
0.000048f );
instance->registerEObj( "sgvf_w_lvd_b0118", 2002183, 4621964, 4, { 111.650299f, 0.228821f, -49.790279f }, 0.991760f,
0.000048f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "Shortcut", 2000700, 0, 4, { -75.025421f, -1.210333f, 73.659332f }, 0.991760f, 0.000048f ); instance->registerEObj( "Shortcut", 2000700, 0, 4, { -75.025421f, -1.210333f, 73.659332f }, 0.991760f, 0.000048f );
instance->registerEObj( "Entrance", 2000182, 4543753, 5, { -77.622681f, 0.605630f, 95.628304f }, 0.991760f, 0.000048f ); instance->registerEObj( "Entrance", 2000182, 4543753, 5, { -77.622681f, 0.605630f, 95.628304f }, 0.991760f,
0.000048f );
// States -> vf_lock_on vf_lock_of // States -> vf_lock_on vf_lock_of
instance->registerEObj( "unknown_1", 2002326, 0, 4, { -3.491464f, -0.354560f, -24.718349f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_1", 2002326, 0, 4, { -3.491464f, -0.354560f, -24.718349f }, 1.000000f, 0.000000f );
instance->registerEObj( "Tinykey", 2002325, 0, 4, { -62.769581f, -0.332854f, 36.199650f }, 1.000000f, 0.000000f ); instance->registerEObj( "Tinykey", 2002325, 0, 4, { -62.769581f, -0.332854f, 36.199650f }, 1.000000f, 0.000000f );
instance->registerEObj( "sgpl_w_lvd_b0118_wide", 2002872, 4543726, 4, { 111.888000f, -2.109839f, -6.942894f }, 0.991760f, 0.000048f ); instance->registerEObj( "sgpl_w_lvd_b0118_wide", 2002872, 4543726, 4, { 111.888000f, -2.109839f, -6.942894f },
0.991760f, 0.000048f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_2", 2002735, 0, 4, { 114.658699f, -2.093417f, -6.149437f }, 1.100000f, 0.000000f ); instance->registerEObj( "unknown_2", 2002735, 0, 4, { 114.658699f, -2.093417f, -6.149437f }, 1.100000f, 0.000000f );
instance->registerEObj( "unknown_3", 2002109, 4549243, 4, { 92.977211f, 5.002774f, -110.975502f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_3", 2002109, 4549243, 4, { 92.977211f, 5.002774f, -110.975502f }, 1.000000f,
instance->registerEObj( "unknown_4", 2002150, 4549448, 4, { 30.497520f, 8.248112f, -82.096916f }, 0.991760f, 0.000048f ); 0.000000f );
instance->registerEObj( "unknown_5", 2002180, 4549459, 4, { 27.134510f, 7.114878f, -120.719704f }, 1.000000f, 0.000000f ); instance->registerEObj( "unknown_4", 2002150, 4549448, 4, { 30.497520f, 8.248112f, -82.096916f }, 0.991760f,
instance->registerEObj( "unknown_6", 2002181, 4574849, 4, { 45.695850f, 7.015042f, -129.344604f }, 1.000000f, 0.000000f ); 0.000048f );
instance->registerEObj( "Stolenwares", 2002262, 4598415, 4, { -28.610241f, 25.192631f, -174.631195f }, 0.991760f, -0.000527f ); instance->registerEObj( "unknown_5", 2002180, 4549459, 4, { 27.134510f, 7.114878f, -120.719704f }, 1.000000f,
0.000000f );
instance->registerEObj( "unknown_6", 2002181, 4574849, 4, { 45.695850f, 7.015042f, -129.344604f }, 1.000000f,
0.000000f );
instance->registerEObj( "Stolenwares", 2002262, 4598415, 4, { -28.610241f, 25.192631f, -174.631195f }, 0.991760f,
-0.000527f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_7", 2002735, 0, 4, { 44.686901f, 7.015000f, -131.547394f }, 0.500000f, -0.532325f ); instance->registerEObj( "unknown_7", 2002735, 0, 4, { 44.686901f, 7.015000f, -131.547394f }, 0.500000f,
instance->registerEObj( "sgvf_w_lvd_b0118_1", 2002872, 4543729, 4, { 44.232769f, 7.015042f, -129.352997f }, 0.991760f, 0.000048f ); -0.532325f );
instance->registerEObj( "sgvf_w_lvd_b0118_1", 2002872, 4543729, 4, { 44.232769f, 7.015042f, -129.352997f },
0.991760f, 0.000048f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "ブレイフロクスの抜道", 2003429, 0, 4, { 44.358749f, 7.554582f, -132.341095f }, 1.000000f, 0.000000f ); instance->registerEObj( "ブレイフロクスの抜道", 2003429, 0, 4, { 44.358749f, 7.554582f, -132.341095f }, 1.000000f,
0.000000f );
instance->registerEObj( "Exit", 2000139, 0, 4, { -25.894650f, 35.019409f, -222.949600f }, 0.991760f, 0.000048f ); instance->registerEObj( "Exit", 2000139, 0, 4, { -25.894650f, 35.019409f, -222.949600f }, 0.991760f, 0.000048f );
instance->registerEObj( "SwiftmakeCheckgate", 2002184, 4549240, 4, { -95.264717f, 12.888430f, -122.593300f }, 1.000000f, 0.000000f ); instance->registerEObj( "SwiftmakeCheckgate", 2002184, 4549240, 4, { -95.264717f, 12.888430f, -122.593300f },
instance->registerEObj( "SwiftmakeCheckgate_1", 2002665, 4549241, 4, { -100.273201f, 20.310730f, -163.513397f }, 1.000000f, 0.000000f ); 1.000000f, 0.000000f );
instance->registerEObj( "SwiftmakeCheckgate_2", 2002884, 4572942, 4, { -102.647499f, 21.011600f, -187.365494f }, 0.991760f, 0.000048f ); instance->registerEObj( "SwiftmakeCheckgate_1", 2002665, 4549241, 4, { -100.273201f, 20.310730f, -163.513397f },
instance->registerEObj( "sgvf_w_lvd_b0250", 2002872, 4543735, 4, { -48.175251f, 34.706921f, -234.463196f }, 0.991760f, 0.000048f ); 1.000000f, 0.000000f );
instance->registerEObj( "SwiftmakeCheckgate_2", 2002884, 4572942, 4, { -102.647499f, 21.011600f, -187.365494f },
0.991760f, 0.000048f );
instance->registerEObj( "sgvf_w_lvd_b0250", 2002872, 4543735, 4, { -48.175251f, 34.706921f, -234.463196f },
0.991760f, 0.000048f );
// States -> vf_bextwall_on vf_bextwall_of // States -> vf_bextwall_on vf_bextwall_of
instance->registerEObj( "unknown_8", 2002735, 0, 4, { -48.271229f, 34.918541f, -235.574203f }, 1.000000f, -1.497719f ); instance->registerEObj( "unknown_8", 2002735, 0, 4, { -48.271229f, 34.918541f, -235.574203f }, 1.000000f,
-1.497719f );
} }

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