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,
|
||||
StatusEffect = 10,
|
||||
WARGauge = 22,
|
||||
// DRKGauge = 25,
|
||||
DRKGauge = 25,
|
||||
// AetherflowStack = 30,
|
||||
// Status = 32,
|
||||
SAMKenki = 39,
|
||||
SAMSen = 40,
|
||||
PLDGauge = 41,
|
||||
GNBAmmo = 55,
|
||||
WHMBloodLily = 56,
|
||||
WHMLily = 57,
|
||||
SAMMeditation = 63,
|
||||
// RDMGaugeBoth = 74,
|
||||
//// RDMGaugeBlack = 75, // not right?
|
||||
// DRGGauge3Eyes = 76,
|
||||
|
@ -1027,6 +1033,200 @@ namespace Sapphire::Common
|
|||
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 >;
|
||||
|
||||
}
|
||||
|
|
|
@ -106,6 +106,8 @@ Sapphire::Entity::Player::Player() :
|
|||
|
||||
m_objSpawnIndexAllocator.init( MAX_DISPLAYED_EOBJS );
|
||||
m_actorSpawnIndexAllocator.init( MAX_DISPLAYED_ACTORS, true );
|
||||
|
||||
gaugeClear();
|
||||
}
|
||||
|
||||
Sapphire::Entity::Player::~Player()
|
||||
|
@ -866,6 +868,9 @@ void Sapphire::Entity::Player::setClassJob( Common::ClassJob classJob )
|
|||
sendToInRangeSet( makeActorControl( getId(), ClassJobChange, 0x04 ), true );
|
||||
|
||||
sendStatusUpdate();
|
||||
|
||||
gaugeClear();
|
||||
sendActorGauge();
|
||||
}
|
||||
|
||||
void Sapphire::Entity::Player::setLevel( uint8_t level )
|
||||
|
@ -2236,3 +2241,23 @@ bool Sapphire::Entity::Player::checkAction()
|
|||
|
||||
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 );
|
||||
|
||||
// Job UI
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void gaugeClear();
|
||||
void sendActorGauge();
|
||||
void gaugeSetRaw( uint8_t* pData );
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Common::HuntingLogEntry& getHuntingLogEntry( uint8_t index );
|
||||
|
@ -1086,6 +1092,8 @@ namespace Sapphire::Entity
|
|||
bool m_bLoadingComplete;
|
||||
bool m_bAutoattack;
|
||||
|
||||
Common::JobGauge m_gauge;
|
||||
|
||||
Common::ZoneingType m_zoningType;
|
||||
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" )
|
||||
{
|
||||
int32_t id;
|
||||
|
|
|
@ -412,6 +412,9 @@ void Sapphire::Network::GameConnection::finishLoadingHandler( const Packets::FFX
|
|||
// spawn the player for himself
|
||||
player.spawn( player.getAsPlayer() );
|
||||
|
||||
player.gaugeClear();
|
||||
player.sendActorGauge();
|
||||
|
||||
// notify the zone of a change in position to force an "inRangeActor" update
|
||||
player.getCurrentTerritory()->updateActorPosition( player );
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue