mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2025-10-21 04:40:21 +00:00
[WIP] Replace appearance data with individual fields
Storing certain things in appearance data and others in their own fields was gross. Now everything is stored on the same level and functions have been added to generate appearance data when it's needed by the client.
This commit is contained in:
@@ -39,15 +39,26 @@ Entity *EntityRef::getEntity() const {
|
||||
return NPCManager::NPCs[id];
|
||||
}
|
||||
|
||||
sNPCAppearanceData BaseNPC::getAppearanceData() {
|
||||
sNPCAppearanceData data = {};
|
||||
data.iAngle = angle;
|
||||
data.iBarkerType = barkerType;
|
||||
data.iConditionBitFlag = cbf;
|
||||
data.iHP = hp;
|
||||
data.iNPCType = type;
|
||||
data.iNPC_ID = id;
|
||||
data.iX = x;
|
||||
data.iY = y;
|
||||
data.iZ = z;
|
||||
return data;
|
||||
}
|
||||
|
||||
/*
|
||||
* Entity coming into view.
|
||||
*/
|
||||
void BaseNPC::enterIntoViewOf(CNSocket *sock) {
|
||||
INITSTRUCT(sP_FE2CL_NPC_ENTER, pkt);
|
||||
pkt.NPCAppearanceData = appearanceData;
|
||||
pkt.NPCAppearanceData.iX = x;
|
||||
pkt.NPCAppearanceData.iY = y;
|
||||
pkt.NPCAppearanceData.iZ = z;
|
||||
pkt.NPCAppearanceData = getAppearanceData();
|
||||
sock->sendPacket(pkt, P_FE2CL_NPC_ENTER);
|
||||
}
|
||||
|
||||
@@ -56,7 +67,7 @@ void Bus::enterIntoViewOf(CNSocket *sock) {
|
||||
|
||||
// TODO: Potentially decouple this from BaseNPC?
|
||||
pkt.AppearanceData = {
|
||||
3, appearanceData.iNPC_ID, appearanceData.iNPCType,
|
||||
3, id, type,
|
||||
x, y, z
|
||||
};
|
||||
|
||||
@@ -66,28 +77,36 @@ void Bus::enterIntoViewOf(CNSocket *sock) {
|
||||
void Egg::enterIntoViewOf(CNSocket *sock) {
|
||||
INITSTRUCT(sP_FE2CL_SHINY_ENTER, pkt);
|
||||
|
||||
Eggs::npcDataToEggData(x, y, z, &appearanceData, &pkt.ShinyAppearanceData);
|
||||
// TODO: Potentially decouple this from BaseNPC?
|
||||
pkt.ShinyAppearanceData = {
|
||||
id, type, 0, // client doesn't care about map num
|
||||
x, y, z
|
||||
};
|
||||
|
||||
sock->sendPacket(pkt, P_FE2CL_SHINY_ENTER);
|
||||
}
|
||||
|
||||
|
||||
sPCAppearanceData Player::getAppearanceData() {
|
||||
sPCAppearanceData data = {};
|
||||
data.iID = iID;
|
||||
data.iHP = HP;
|
||||
data.iLv = level;
|
||||
data.iX = x;
|
||||
data.iY = y;
|
||||
data.iZ = z;
|
||||
data.iAngle = angle;
|
||||
data.PCStyle = PCStyle;
|
||||
data.Nano = Nanos[activeNano];
|
||||
data.iPCState = iPCState;
|
||||
data.iSpecialState = iSpecialState;
|
||||
memcpy(data.ItemEquip, Equip, sizeof(sItemBase) * AEQUIP_COUNT);
|
||||
return data;
|
||||
}
|
||||
|
||||
// TODO: this is less effiecient than it was, because of memset()
|
||||
void Player::enterIntoViewOf(CNSocket *sock) {
|
||||
INITSTRUCT(sP_FE2CL_PC_NEW, pkt);
|
||||
|
||||
pkt.PCAppearanceData.iID = iID;
|
||||
pkt.PCAppearanceData.iHP = HP;
|
||||
pkt.PCAppearanceData.iLv = level;
|
||||
pkt.PCAppearanceData.iX = x;
|
||||
pkt.PCAppearanceData.iY = y;
|
||||
pkt.PCAppearanceData.iZ = z;
|
||||
pkt.PCAppearanceData.iAngle = angle;
|
||||
pkt.PCAppearanceData.PCStyle = PCStyle;
|
||||
pkt.PCAppearanceData.Nano = Nanos[activeNano];
|
||||
pkt.PCAppearanceData.iPCState = iPCState;
|
||||
pkt.PCAppearanceData.iSpecialState = iSpecialState;
|
||||
memcpy(pkt.PCAppearanceData.ItemEquip, Equip, sizeof(sItemBase) * AEQUIP_COUNT);
|
||||
|
||||
pkt.PCAppearanceData = getAppearanceData();
|
||||
sock->sendPacket(pkt, P_FE2CL_PC_NEW);
|
||||
}
|
||||
|
||||
@@ -96,20 +115,20 @@ void Player::enterIntoViewOf(CNSocket *sock) {
|
||||
*/
|
||||
void BaseNPC::disappearFromViewOf(CNSocket *sock) {
|
||||
INITSTRUCT(sP_FE2CL_NPC_EXIT, pkt);
|
||||
pkt.iNPC_ID = appearanceData.iNPC_ID;
|
||||
pkt.iNPC_ID = id;
|
||||
sock->sendPacket(pkt, P_FE2CL_NPC_EXIT);
|
||||
}
|
||||
|
||||
void Bus::disappearFromViewOf(CNSocket *sock) {
|
||||
INITSTRUCT(sP_FE2CL_TRANSPORTATION_EXIT, pkt);
|
||||
pkt.eTT = 3;
|
||||
pkt.iT_ID = appearanceData.iNPC_ID;
|
||||
pkt.iT_ID = id;
|
||||
sock->sendPacket(pkt, P_FE2CL_TRANSPORTATION_EXIT);
|
||||
}
|
||||
|
||||
void Egg::disappearFromViewOf(CNSocket *sock) {
|
||||
INITSTRUCT(sP_FE2CL_SHINY_EXIT, pkt);
|
||||
pkt.iShinyID = appearanceData.iNPC_ID;
|
||||
pkt.iShinyID = id;
|
||||
sock->sendPacket(pkt, P_FE2CL_SHINY_EXIT);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user