mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-26 14:37:44 +00:00
JobGauge definition
This commit is contained in:
parent
ed88ad81c1
commit
484657f102
5 changed files with 252 additions and 6 deletions
|
@ -583,10 +583,16 @@ namespace Sapphire::Common
|
||||||
TacticsPoints = 5,
|
TacticsPoints = 5,
|
||||||
StatusEffect = 10,
|
StatusEffect = 10,
|
||||||
WARGauge = 22,
|
WARGauge = 22,
|
||||||
// DRKGauge = 25,
|
DRKGauge = 25,
|
||||||
// AetherflowStack = 30,
|
// AetherflowStack = 30,
|
||||||
// Status = 32,
|
// Status = 32,
|
||||||
|
SAMKenki = 39,
|
||||||
|
SAMSen = 40,
|
||||||
PLDGauge = 41,
|
PLDGauge = 41,
|
||||||
|
GNBAmmo = 55,
|
||||||
|
WHMBloodLily = 56,
|
||||||
|
WHMLily = 57,
|
||||||
|
SAMMeditation = 63,
|
||||||
// RDMGaugeBoth = 74,
|
// RDMGaugeBoth = 74,
|
||||||
//// RDMGaugeBlack = 75, // not right?
|
//// RDMGaugeBlack = 75, // not right?
|
||||||
// DRGGauge3Eyes = 76,
|
// DRGGauge3Eyes = 76,
|
||||||
|
@ -1027,6 +1033,200 @@ namespace Sapphire::Common
|
||||||
Gatherer
|
Gatherer
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class AstCardType : uint8_t
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Balance = 1,
|
||||||
|
Bole = 2,
|
||||||
|
Arrow = 3,
|
||||||
|
Spear = 4,
|
||||||
|
Ewer = 5,
|
||||||
|
Spire = 6,
|
||||||
|
Lord = 0x70,
|
||||||
|
Lady = 0x80,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class AstSealType : uint8_t
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Sun = 1,
|
||||||
|
Moon = 2,
|
||||||
|
Celestrial = 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class DrgState : uint8_t
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
BloodOfTheDragon = 1,
|
||||||
|
LifeOfTheDragon = 2,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class SamSen : uint8_t
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Setsu = 1,
|
||||||
|
Getsu = 2,
|
||||||
|
Ka = 4,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class SchDismissedFairy : uint8_t
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Eos = 6,
|
||||||
|
Selene = 7,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class SmnPet : uint8_t
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Ifrit = 3,
|
||||||
|
Titan = 4,
|
||||||
|
Garuda = 5,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class SmnPetGlam : uint8_t
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Emerald = 1,
|
||||||
|
Topaz = 2,
|
||||||
|
Ruby = 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class BrdSong : uint8_t
|
||||||
|
{
|
||||||
|
Mage = 5,
|
||||||
|
Army = 0x0A,
|
||||||
|
Wanderer = 0x0F,
|
||||||
|
};
|
||||||
|
|
||||||
|
union JobGauge
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t gauge_data[15];
|
||||||
|
} _raw;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32_t unused;
|
||||||
|
AstCardType card;
|
||||||
|
AstSealType seals[3];
|
||||||
|
} ast;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint16_t timeUntilNextPolyglot;
|
||||||
|
uint16_t elementTimer;
|
||||||
|
uint8_t elementStance;
|
||||||
|
uint8_t umbralhearts;
|
||||||
|
uint8_t polyglotStacks;
|
||||||
|
uint8_t enochainState;
|
||||||
|
} blm;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint16_t songTimer;
|
||||||
|
uint8_t songStacks;
|
||||||
|
uint8_t unused;
|
||||||
|
BrdSong song;
|
||||||
|
} brd;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t feathers;
|
||||||
|
uint8_t esprit;
|
||||||
|
uint8_t stepOrder[4];
|
||||||
|
uint8_t completeSteps;
|
||||||
|
} dnc;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint16_t dragonTimer;
|
||||||
|
DrgState dragonState;
|
||||||
|
uint8_t eyes;
|
||||||
|
} drg;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t blood;
|
||||||
|
uint8_t unused;
|
||||||
|
uint16_t darksideTimer;
|
||||||
|
uint8_t darkArts;
|
||||||
|
uint8_t unused2;
|
||||||
|
uint16_t shadowTimer;
|
||||||
|
} drk;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t ammo;
|
||||||
|
uint8_t unused;
|
||||||
|
uint16_t maxTimerDuration;
|
||||||
|
uint8_t ammoComboStep;
|
||||||
|
} gnb;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint16_t overheatTimer;
|
||||||
|
uint16_t robotTimer;
|
||||||
|
uint8_t heat;
|
||||||
|
uint8_t battery;
|
||||||
|
uint8_t lastRobotBatteryPower;
|
||||||
|
uint8_t activeTimerFlag;
|
||||||
|
} mch;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t greasedLightningTimer;
|
||||||
|
uint8_t unused;
|
||||||
|
uint8_t greasedLightningStacks;
|
||||||
|
uint8_t chakra;
|
||||||
|
uint8_t greasedLightningTimerFreezed;
|
||||||
|
} mnk;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint32_t hutonTimer;
|
||||||
|
uint8_t tenChiJinMudrasUsed;
|
||||||
|
uint8_t ninki;
|
||||||
|
uint8_t hutonManualCasts;
|
||||||
|
} nin;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t oathGauge;
|
||||||
|
} pld;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t whiteGauge;
|
||||||
|
uint8_t blackGauge;
|
||||||
|
} rdm;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint16_t unused;
|
||||||
|
uint8_t unused2;
|
||||||
|
uint8_t kenki;
|
||||||
|
uint8_t meditationStacks;
|
||||||
|
SamSen sen;
|
||||||
|
} sam;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint16_t unused;
|
||||||
|
uint8_t aetherflowStacks;
|
||||||
|
uint8_t fairyGauge;
|
||||||
|
uint16_t seraphTimer;
|
||||||
|
SchDismissedFairy dismissedFairy;
|
||||||
|
} sch;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint16_t timer;
|
||||||
|
SmnPet returnSummon;
|
||||||
|
SmnPetGlam petGlam;
|
||||||
|
uint8_t stacks;
|
||||||
|
} smn;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint8_t beastGauge;
|
||||||
|
} war;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
uint16_t unused;
|
||||||
|
uint16_t lilyTimer;
|
||||||
|
uint8_t lilies;
|
||||||
|
uint8_t bloodLilies;
|
||||||
|
} whm;
|
||||||
|
};
|
||||||
|
|
||||||
using PlayerStateFlagList = std::vector< PlayerStateFlag >;
|
using PlayerStateFlagList = std::vector< PlayerStateFlag >;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,6 +106,8 @@ Sapphire::Entity::Player::Player() :
|
||||||
|
|
||||||
m_objSpawnIndexAllocator.init( MAX_DISPLAYED_EOBJS );
|
m_objSpawnIndexAllocator.init( MAX_DISPLAYED_EOBJS );
|
||||||
m_actorSpawnIndexAllocator.init( MAX_DISPLAYED_ACTORS, true );
|
m_actorSpawnIndexAllocator.init( MAX_DISPLAYED_ACTORS, true );
|
||||||
|
|
||||||
|
gaugeClear();
|
||||||
}
|
}
|
||||||
|
|
||||||
Sapphire::Entity::Player::~Player()
|
Sapphire::Entity::Player::~Player()
|
||||||
|
@ -866,6 +868,9 @@ void Sapphire::Entity::Player::setClassJob( Common::ClassJob classJob )
|
||||||
sendToInRangeSet( makeActorControl( getId(), ClassJobChange, 0x04 ), true );
|
sendToInRangeSet( makeActorControl( getId(), ClassJobChange, 0x04 ), true );
|
||||||
|
|
||||||
sendStatusUpdate();
|
sendStatusUpdate();
|
||||||
|
|
||||||
|
gaugeClear();
|
||||||
|
sendActorGauge();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::Player::setLevel( uint8_t level )
|
void Sapphire::Entity::Player::setLevel( uint8_t level )
|
||||||
|
@ -2236,3 +2241,23 @@ bool Sapphire::Entity::Player::checkAction()
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Sapphire::Entity::Player::gaugeClear()
|
||||||
|
{
|
||||||
|
std::memset( &m_gauge, 0, sizeof( m_gauge ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sapphire::Entity::Player::sendActorGauge()
|
||||||
|
{
|
||||||
|
auto pPacket = makeZonePacket< FFXIVIpcActorGauge >( getId() );
|
||||||
|
pPacket->data().classJobId = static_cast< uint8_t >( getClass() );
|
||||||
|
std::memcpy( pPacket->data().data, &m_gauge, 15 );
|
||||||
|
|
||||||
|
queuePacket( pPacket );
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sapphire::Entity::Player::gaugeSetRaw( uint8_t* pData )
|
||||||
|
{
|
||||||
|
std::memcpy( &m_gauge, pData, 15 );
|
||||||
|
sendActorGauge();
|
||||||
|
}
|
|
@ -974,6 +974,12 @@ namespace Sapphire::Entity
|
||||||
|
|
||||||
Sapphire::ItemPtr dropInventoryItem( Common::InventoryType type, uint16_t slotId );
|
Sapphire::ItemPtr dropInventoryItem( Common::InventoryType type, uint16_t slotId );
|
||||||
|
|
||||||
|
// Job UI
|
||||||
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
void gaugeClear();
|
||||||
|
void sendActorGauge();
|
||||||
|
void gaugeSetRaw( uint8_t* pData );
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
Common::HuntingLogEntry& getHuntingLogEntry( uint8_t index );
|
Common::HuntingLogEntry& getHuntingLogEntry( uint8_t index );
|
||||||
|
@ -1086,6 +1092,8 @@ namespace Sapphire::Entity
|
||||||
bool m_bLoadingComplete;
|
bool m_bLoadingComplete;
|
||||||
bool m_bAutoattack;
|
bool m_bAutoattack;
|
||||||
|
|
||||||
|
Common::JobGauge m_gauge;
|
||||||
|
|
||||||
Common::ZoneingType m_zoningType;
|
Common::ZoneingType m_zoningType;
|
||||||
uint32_t m_territoryId;
|
uint32_t m_territoryId;
|
||||||
|
|
||||||
|
|
|
@ -361,6 +361,16 @@ void Sapphire::World::Manager::DebugCommandMgr::set( char* data, Entity::Player&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if( subCommand == "gauge" )
|
||||||
|
{
|
||||||
|
uint8_t values[15];
|
||||||
|
std::memset( values, 0, sizeof( values ) );
|
||||||
|
sscanf( params.c_str(), "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
|
||||||
|
&values[ 0 ], &values[ 1 ], &values[ 2 ], &values[ 3 ], &values[ 4 ],
|
||||||
|
&values[ 5 ], &values[ 6 ], &values[ 7 ], &values[ 8 ], &values[ 9 ],
|
||||||
|
&values[ 10 ], &values[ 11 ], &values[ 12 ], &values[ 13 ], &values[ 14 ] );
|
||||||
|
player.gaugeSetRaw( values );
|
||||||
|
}
|
||||||
else if( subCommand == "visual" )
|
else if( subCommand == "visual" )
|
||||||
{
|
{
|
||||||
int32_t id;
|
int32_t id;
|
||||||
|
|
|
@ -412,6 +412,9 @@ void Sapphire::Network::GameConnection::finishLoadingHandler( const Packets::FFX
|
||||||
// spawn the player for himself
|
// spawn the player for himself
|
||||||
player.spawn( player.getAsPlayer() );
|
player.spawn( player.getAsPlayer() );
|
||||||
|
|
||||||
|
player.gaugeClear();
|
||||||
|
player.sendActorGauge();
|
||||||
|
|
||||||
// notify the zone of a change in position to force an "inRangeActor" update
|
// notify the zone of a change in position to force an "inRangeActor" update
|
||||||
player.getCurrentTerritory()->updateActorPosition( player );
|
player.getCurrentTerritory()->updateActorPosition( player );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue