use 6x2F for infinite HP
This commit is contained in:
@@ -1926,9 +1926,9 @@ asio::awaitable<HandlerResult> C_6x(shared_ptr<Client> c, Channel::Message& msg)
|
||||
case 0x4A:
|
||||
case 0x4B:
|
||||
case 0x4C:
|
||||
if (!is_v1(c->version()) && c->check_flag(Client::Flag::INFINITE_HP_ENABLED)) {
|
||||
send_player_stats_change(c->channel, c->lobby_client_id, PlayerStatsChange::ADD_HP, 2550);
|
||||
send_player_stats_change(c->proxy_session->server_channel, c->lobby_client_id, PlayerStatsChange::ADD_HP, 2550);
|
||||
if (c->check_flag(Client::Flag::INFINITE_HP_ENABLED)) {
|
||||
send_change_player_hp(c->channel, c->lobby_client_id, PlayerHPChange::MAXIMIZE_HP, 0);
|
||||
send_change_player_hp(c->proxy_session->server_channel, c->lobby_client_id, PlayerHPChange::MAXIMIZE_HP, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -1680,10 +1680,9 @@ static asio::awaitable<void> on_player_revived(shared_ptr<Client> c, SubcommandM
|
||||
auto l = c->require_lobby();
|
||||
if (l->is_game()) {
|
||||
forward_subcommand(c, msg);
|
||||
bool player_cheats_enabled = !is_v1(c->version()) &&
|
||||
(l->check_flag(Lobby::Flag::CHEATS_ENABLED) || (c->login->account->check_flag(Account::Flag::CHEAT_ANYWHERE)));
|
||||
if (player_cheats_enabled && c->check_flag(Client::Flag::INFINITE_HP_ENABLED)) {
|
||||
send_player_stats_change(c, PlayerStatsChange::ADD_HP, 2550);
|
||||
if ((l->check_flag(Lobby::Flag::CHEATS_ENABLED) || (c->login->account->check_flag(Account::Flag::CHEAT_ANYWHERE))) &&
|
||||
c->check_flag(Client::Flag::INFINITE_HP_ENABLED)) {
|
||||
send_change_player_hp(l, c->lobby_client_id, PlayerHPChange::MAXIMIZE_HP, 0);
|
||||
}
|
||||
}
|
||||
co_return;
|
||||
@@ -1715,10 +1714,9 @@ static asio::awaitable<void> on_change_hp(shared_ptr<Client> c, SubcommandMessag
|
||||
}
|
||||
|
||||
forward_subcommand(c, msg);
|
||||
bool player_cheats_enabled = !is_v1(c->version()) &&
|
||||
(l->check_flag(Lobby::Flag::CHEATS_ENABLED) || (c->login->account->check_flag(Account::Flag::CHEAT_ANYWHERE)));
|
||||
if (player_cheats_enabled && c->check_flag(Client::Flag::INFINITE_HP_ENABLED)) {
|
||||
send_player_stats_change(c, PlayerStatsChange::ADD_HP, 2550);
|
||||
if ((l->check_flag(Lobby::Flag::CHEATS_ENABLED) || c->login->account->check_flag(Account::Flag::CHEAT_ANYWHERE)) &&
|
||||
c->check_flag(Client::Flag::INFINITE_HP_ENABLED)) {
|
||||
send_change_player_hp(l, c->lobby_client_id, PlayerHPChange::MAXIMIZE_HP, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2591,6 +2591,29 @@ void send_player_stats_change(std::shared_ptr<Channel> ch, uint16_t client_id, P
|
||||
send_command_vt(ch, (subs.size() > 0x400 / sizeof(G_UpdateEntityStat_6x9A)) ? 0x6C : 0x60, 0x00, subs);
|
||||
}
|
||||
|
||||
void send_change_player_hp(std::shared_ptr<Channel> ch, uint16_t client_id, PlayerHPChange what, int16_t amount) {
|
||||
uint8_t subcommand_number;
|
||||
if (ch->version == Version::DC_NTE) {
|
||||
subcommand_number = 0x2B;
|
||||
} else if (ch->version == Version::DC_11_2000) {
|
||||
subcommand_number = 0x2D;
|
||||
} else {
|
||||
subcommand_number = 0x2F;
|
||||
}
|
||||
G_ChangePlayerHP_6x2F cmd = {
|
||||
{subcommand_number, sizeof(G_ChangePlayerHP_6x2F) / 4, client_id},
|
||||
static_cast<uint32_t>(what), amount, client_id};
|
||||
send_command_t(ch, 0x60, 0x00, cmd);
|
||||
}
|
||||
|
||||
void send_change_player_hp(std::shared_ptr<Lobby> l, uint16_t client_id, PlayerHPChange what, int16_t amount) {
|
||||
for (const auto& lc : l->clients) {
|
||||
if (lc) {
|
||||
send_change_player_hp(lc->channel, client_id, what, amount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
asio::awaitable<void> send_remove_negative_conditions(shared_ptr<Client> c) {
|
||||
G_AddStatusEffect_6x0C cmd;
|
||||
cmd.header = {0x0C, sizeof(G_AddStatusEffect_6x0C) >> 2, c->lobby_client_id};
|
||||
|
||||
+13
-5
@@ -334,7 +334,7 @@ void send_arrow_update(std::shared_ptr<Lobby> l);
|
||||
void send_unblock_join(std::shared_ptr<Client> c);
|
||||
void send_resume_game(std::shared_ptr<Lobby> l, std::shared_ptr<Client> ready_client);
|
||||
|
||||
enum PlayerStatsChange {
|
||||
enum class PlayerStatsChange {
|
||||
SUBTRACT_HP = 0,
|
||||
SUBTRACT_TP = 1,
|
||||
SUBTRACT_MESETA = 2,
|
||||
@@ -342,10 +342,18 @@ enum PlayerStatsChange {
|
||||
ADD_TP = 4,
|
||||
};
|
||||
|
||||
void send_player_stats_change(
|
||||
std::shared_ptr<Client> c, PlayerStatsChange stat, uint32_t amount);
|
||||
void send_player_stats_change(
|
||||
std::shared_ptr<Channel> ch, uint16_t client_id, PlayerStatsChange stat, uint32_t amount);
|
||||
void send_player_stats_change(std::shared_ptr<Client> c, PlayerStatsChange stat, uint32_t amount);
|
||||
void send_player_stats_change(std::shared_ptr<Channel> ch, uint16_t client_id, PlayerStatsChange stat, uint32_t amount);
|
||||
|
||||
enum class PlayerHPChange {
|
||||
SET_HP = 0,
|
||||
INCREMENT_HP = 1,
|
||||
MAXIMIZE_HP = 2,
|
||||
};
|
||||
|
||||
void send_change_player_hp(std::shared_ptr<Channel> ch, uint16_t client_id, PlayerHPChange what, int16_t amount);
|
||||
void send_change_player_hp(std::shared_ptr<Lobby> l, uint16_t client_id, PlayerHPChange what, int16_t amount);
|
||||
|
||||
asio::awaitable<void> send_remove_negative_conditions(std::shared_ptr<Client> c);
|
||||
void send_remove_negative_conditions(std::shared_ptr<Channel> ch, uint16_t client_id);
|
||||
void send_warp(std::shared_ptr<Channel> ch, uint8_t client_id, uint32_t floor, bool is_private);
|
||||
|
||||
Reference in New Issue
Block a user