mirror of
https://github.com/OpenFusionProject/OpenFusion.git
synced 2024-11-22 13:30:06 +00:00
Implemented guide changing.
This means the Time Machine works as well.
This commit is contained in:
parent
3b35e0017a
commit
72a811d6ab
@ -26,7 +26,8 @@ void CombatManager::pcAttackNpcs(CNSocket *sock, CNPacketData *data) {
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Due to the possibility of multiplication overflow (and regular buffer overflow),
|
* Due to the possibility of multiplication overflow (and regular buffer overflow),
|
||||||
* both incoming and outgoing variable-length packets must be validated.
|
* both incoming and outgoing variable-length packets must be validated, at least if
|
||||||
|
* the number of trailing structs isn't well known (ie. it's from the client).
|
||||||
*/
|
*/
|
||||||
if (!validOutVarPacket(sizeof(sP_FE2CL_PC_ATTACK_NPCs_SUCC), pkt->iNPCCnt, sizeof(sAttackResult))) {
|
if (!validOutVarPacket(sizeof(sP_FE2CL_PC_ATTACK_NPCs_SUCC), pkt->iNPCCnt, sizeof(sAttackResult))) {
|
||||||
std::cout << "[WARN] bad sP_FE2CL_PC_ATTACK_NPCs_SUCC packet size\n";
|
std::cout << "[WARN] bad sP_FE2CL_PC_ATTACK_NPCs_SUCC packet size\n";
|
||||||
@ -56,6 +57,7 @@ void CombatManager::pcAttackNpcs(CNSocket *sock, CNPacketData *data) {
|
|||||||
|
|
||||||
if (mob.appearanceData.iHP <= 0)
|
if (mob.appearanceData.iHP <= 0)
|
||||||
giveReward(sock);
|
giveReward(sock);
|
||||||
|
// TODO: despawn mobs when they die
|
||||||
|
|
||||||
respdata[i].iID = mob.appearanceData.iNPC_ID;
|
respdata[i].iID = mob.appearanceData.iNPC_ID;
|
||||||
respdata[i].iDamage = 100;
|
respdata[i].iDamage = 100;
|
||||||
|
@ -32,6 +32,7 @@ void PlayerManager::init() {
|
|||||||
REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_SPECIAL_STATE_SWITCH, PlayerManager::setSpecialSwitchPlayer);
|
REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_SPECIAL_STATE_SWITCH, PlayerManager::setSpecialSwitchPlayer);
|
||||||
REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_VEHICLE_ON, PlayerManager::enterPlayerVehicle);
|
REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_VEHICLE_ON, PlayerManager::enterPlayerVehicle);
|
||||||
REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_VEHICLE_OFF, PlayerManager::exitPlayerVehicle);
|
REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_VEHICLE_OFF, PlayerManager::exitPlayerVehicle);
|
||||||
|
REGISTER_SHARD_PACKET(P_CL2FE_REQ_PC_CHANGE_MENTOR, PlayerManager::changePlayerGuide);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerManager::addPlayer(CNSocket* key, Player plr) {
|
void PlayerManager::addPlayer(CNSocket* key, Player plr) {
|
||||||
@ -651,6 +652,21 @@ void PlayerManager::setSpecialSwitchPlayer(CNSocket* sock, CNPacketData* data) {
|
|||||||
sock->sendPacket((void*)&response, P_FE2CL_REP_PC_SPECIAL_STATE_SWITCH_SUCC, sizeof(sP_FE2CL_REP_PC_SPECIAL_STATE_SWITCH_SUCC));
|
sock->sendPacket((void*)&response, P_FE2CL_REP_PC_SPECIAL_STATE_SWITCH_SUCC, sizeof(sP_FE2CL_REP_PC_SPECIAL_STATE_SWITCH_SUCC));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlayerManager::changePlayerGuide(CNSocket *sock, CNPacketData *data) {
|
||||||
|
if (data->size != sizeof(sP_CL2FE_REQ_PC_CHANGE_MENTOR))
|
||||||
|
return;
|
||||||
|
|
||||||
|
sP_CL2FE_REQ_PC_CHANGE_MENTOR *pkt = (sP_CL2FE_REQ_PC_CHANGE_MENTOR*)data->buf;
|
||||||
|
INITSTRUCT(sP_FE2CL_REP_PC_CHANGE_MENTOR_SUCC, resp);
|
||||||
|
Player *plr = getPlayer(sock);
|
||||||
|
|
||||||
|
resp.iMentor = pkt->iMentor;
|
||||||
|
resp.iMentorCnt = 1;
|
||||||
|
resp.iFusionMatter = plr->fusionmatter; // no cost
|
||||||
|
|
||||||
|
sock->sendPacket((void*)&resp, P_FE2CL_REP_PC_CHANGE_MENTOR_SUCC, sizeof(sP_FE2CL_REP_PC_CHANGE_MENTOR_SUCC));
|
||||||
|
}
|
||||||
|
|
||||||
#pragma region Helper methods
|
#pragma region Helper methods
|
||||||
Player *PlayerManager::getPlayer(CNSocket* key) {
|
Player *PlayerManager::getPlayer(CNSocket* key) {
|
||||||
return players[key].plr;
|
return players[key].plr;
|
||||||
|
@ -45,6 +45,7 @@ namespace PlayerManager {
|
|||||||
void exitGame(CNSocket* sock, CNPacketData* data);
|
void exitGame(CNSocket* sock, CNPacketData* data);
|
||||||
|
|
||||||
void setSpecialSwitchPlayer(CNSocket* sock, CNPacketData* data);
|
void setSpecialSwitchPlayer(CNSocket* sock, CNPacketData* data);
|
||||||
|
void changePlayerGuide(CNSocket *sock, CNPacketData *data);
|
||||||
|
|
||||||
void enterPlayerVehicle(CNSocket* sock, CNPacketData* data);
|
void enterPlayerVehicle(CNSocket* sock, CNPacketData* data);
|
||||||
void exitPlayerVehicle(CNSocket* sock, CNPacketData* data);
|
void exitPlayerVehicle(CNSocket* sock, CNPacketData* data);
|
||||||
|
Loading…
Reference in New Issue
Block a user