FIRST PERSON SHOOTER

This commit is contained in:
simio 2025-08-11 02:47:06 -03:00
parent 07a9f7b565
commit da300b358e

View File

@ -111,6 +111,9 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const
} }
client.m_spoke = true; client.m_spoke = true;
if(client.hide_desk) l_incoming_deskmod = "0"; if(client.hide_desk) l_incoming_deskmod = "0";
else if(client.m_first_person){
l_incoming_deskmod = area->lastICMessage()[0];
}
if (allowed_desk_mods.contains(l_incoming_deskmod)) { if (allowed_desk_mods.contains(l_incoming_deskmod)) {
// **WARNING : THIS IS A HACK!** // **WARNING : THIS IS A HACK!**
// A proper solution would be to deprecate chat as an argument on the clientside // A proper solution would be to deprecate chat as an argument on the clientside
@ -198,14 +201,17 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const
// side // side
// this is validated clientside so w/e // this is validated clientside so w/e
QString l_incoming_side = client.m_first_person ? area->lastICMessage()[5] : l_incoming_args[5].toString();
QString side = area->side(); QString side = area->side();
if (side.isEmpty()) { if (side.isEmpty()) {
side = l_incoming_args[5].toString(); side = l_incoming_side;
} }
l_args.append(side); l_args.append(side);
if (client.m_pos != l_incoming_args[5].toString()) { if (client.m_pos != l_incoming_side) {
client.m_pos = l_incoming_args[5].toString(); client.m_pos = l_incoming_side;
client.m_pos.replace("../", "").replace("..\\", ""); client.m_pos.replace("../", "").replace("..\\", "");
client.updateEvidenceList(client.getServer()->getAreaById(client.areaId())); client.updateEvidenceList(client.getServer()->getAreaById(client.areaId()));
} }
@ -317,69 +323,72 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const
QString l_other_offset = "0"; QString l_other_offset = "0";
QString l_other_flip = "0"; QString l_other_flip = "0";
QString new_offset = l_incoming_args[17].toString(); QString new_offset = l_incoming_args[17].toString();
if (client.m_pairing_with != -1) { if(!client.m_first_person)
for (int l_client_id : area->joinedIDs()) { {
AOClient *l_client = client.getServer()->getClientByID(l_client_id); if (client.m_pairing_with != -1) {
if (l_client->m_pairing_with == client.m_char_id && l_other_charid != client.m_char_id && l_client->m_char_id == client.m_pairing_with && l_client->m_pos == client.m_pos) {
l_pairing = true;
l_other_name = l_client->m_current_iniswap;
l_other_emote = l_client->m_emote;
l_other_offset = l_client->m_offset;
l_other_flip = l_client->m_flipping;
}
}
}
if (!l_pairing) {
if (client.autopair && client.m_pos == "wit" && area->status() != AreaData::Status::CASING) {
int pair_index = -1;
for (int i = 0; i < 2; ++i) {
if (area->m_autopair[i] == client.m_char_id) {
pair_index = i;
}
}
if (pair_index == -1) {
int not_last_spoke_pair_index = 1;
for (int i = 0; i < 2; ++i) {
if (area->m_autopair[i] != area->m_lastWitChar) {
not_last_spoke_pair_index = i;
}
}
area->m_autopair[not_last_spoke_pair_index] = client.m_char_id;
pair_index = not_last_spoke_pair_index;
}
int other_index = pair_index == 0 ? 1 : 0;
l_other_charid = area->m_autopair[other_index];
bool client_found = false;
for (int l_client_id : area->joinedIDs()) { for (int l_client_id : area->joinedIDs()) {
if(l_client_id == client.clientId()) {
continue;
}
AOClient *l_client = client.getServer()->getClientByID(l_client_id); AOClient *l_client = client.getServer()->getClientByID(l_client_id);
if (l_client->m_char_id == l_other_charid && l_client->autopair && l_client->m_pos == client.m_pos) { if (!l_client->m_first_person && l_client->m_pairing_with == client.m_char_id && l_other_charid != client.m_char_id && l_client->m_char_id == client.m_pairing_with && l_client->m_pos == client.m_pos) {
client_found = true; l_pairing = true;
l_other_name = l_client->m_current_iniswap; l_other_name = l_client->m_current_iniswap;
l_other_emote = l_client->m_emote; l_other_emote = l_client->m_emote;
l_other_offset = l_client->m_offset;
l_other_flip = l_client->m_flipping; l_other_flip = l_client->m_flipping;
int offset = pair_index == 0 ? -25 : 25;
if(l_client->hide_desk || client.hide_desk) l_args[0] = "0";
if(new_offset == "0&0" || new_offset == "") new_offset = QString::number(offset);
if(l_client->m_offset == "0&0" || l_client->m_offset == "") l_other_offset = QString::number(offset * -1);
else l_other_offset = l_client->m_offset;
l_front_back = l_front_back == "" ? "^0" : l_front_back;
} }
} }
if (!client_found) { }
if (!l_pairing) {
if (client.autopair && client.m_pos == "wit" && area->status() != AreaData::Status::CASING) {
int pair_index = -1;
for (int i = 0; i < 2; ++i) {
if (area->m_autopair[i] == client.m_char_id) {
pair_index = i;
}
}
if (pair_index == -1) {
int not_last_spoke_pair_index = 1;
for (int i = 0; i < 2; ++i) {
if (area->m_autopair[i] != area->m_lastWitChar) {
not_last_spoke_pair_index = i;
}
}
area->m_autopair[not_last_spoke_pair_index] = client.m_char_id;
pair_index = not_last_spoke_pair_index;
}
int other_index = pair_index == 0 ? 1 : 0;
l_other_charid = area->m_autopair[other_index];
bool client_found = false;
for (int l_client_id : area->joinedIDs()) {
if(l_client_id == client.clientId()) {
continue;
}
AOClient *l_client = client.getServer()->getClientByID(l_client_id);
if (!l_client->m_first_person && l_client->m_char_id == l_other_charid && l_client->autopair && l_client->m_pos == client.m_pos) {
client_found = true;
l_other_name = l_client->m_current_iniswap;
l_other_emote = l_client->m_emote;
l_other_flip = l_client->m_flipping;
int offset = pair_index == 0 ? -25 : 25;
if(l_client->hide_desk || client.hide_desk) l_args[0] = "0";
if(new_offset == "0&0" || new_offset == "") new_offset = QString::number(offset);
if(l_client->m_offset == "0&0" || l_client->m_offset == "") l_other_offset = QString::number(offset * -1);
else l_other_offset = l_client->m_offset;
l_front_back = l_front_back == "" ? "^0" : l_front_back;
}
}
if (!client_found) {
l_other_charid = -1;
l_front_back = "";
area->m_autopair[other_index] = -1;
area->m_autopair[1] = client.m_char_id;
}
area->m_lastWitChar = client.m_char_id;
}else{
l_other_charid = -1; l_other_charid = -1;
l_front_back = ""; l_front_back = "";
area->m_autopair[other_index] = -1;
area->m_autopair[1] = client.m_char_id;
} }
area->m_lastWitChar = client.m_char_id;
}else{
l_other_charid = -1;
l_front_back = "";
} }
} }
l_args.append(QString::number(l_other_charid) + l_front_back); l_args.append(QString::number(l_other_charid) + l_front_back);