change curse list to int list, marked unavailable chars as taken

This commit is contained in:
scatterflower 2021-04-18 18:57:33 -05:00
parent 6dfd7d173a
commit 08ba6ef278
5 changed files with 37 additions and 11 deletions

View File

@ -272,7 +272,7 @@ class AOClient : public QObject {
*/ */
QTimer* afk_timer; QTimer* afk_timer;
QStringList charcurse_list; QList<int> charcurse_list;
/** /**
* @brief Temporary client permission if client is allowed to save a testimony to server storage. * @brief Temporary client permission if client is allowed to save a testimony to server storage.

View File

@ -259,6 +259,8 @@ class Server : public QObject {
*/ */
QStringList loadConfigFile(QString filename); QStringList loadConfigFile(QString filename);
QStringList getCursedCharsTaken(AOClient* client, QStringList chars_taken);
/** /**
* @brief List holding the contents of 8ball.txt, used by /8ball. * @brief List holding the contents of 8ball.txt, used by /8ball.
*/ */

View File

@ -148,7 +148,7 @@ bool AOClient::changeCharacter(int char_id)
if(char_id >= server->characters.length()) if(char_id >= server->characters.length())
return false; return false;
if (is_charcursed && !charcurse_list.contains(QString::number(char_id))) { if (is_charcursed && !charcurse_list.contains(char_id)) {
return false; return false;
} }

View File

@ -335,7 +335,7 @@ void AOClient::cmdCharCurse(int argc, QStringList argv)
} }
if (argc == 1) { if (argc == 1) {
target->charcurse_list.append(QString::number(server->getCharID(current_char))); target->charcurse_list.append(server->getCharID(current_char));
} }
else { else {
@ -343,23 +343,23 @@ void AOClient::cmdCharCurse(int argc, QStringList argv)
QString names = argv.join(" "); QString names = argv.join(" ");
argv = names.split(", "); argv = names.split(", ");
QString char_name; QString char_name;
target->charcurse_list.clear();
foreach (char_name, argv) { foreach (char_name, argv) {
QString converted_char_id = QString::number(server->getCharID(char_name)); target->charcurse_list.append(server->getCharID(char_name));
argv.replaceInStrings(char_name, converted_char_id);
} }
if (argv.contains("-1")) { if (target->charcurse_list.contains(-1)) {
sendServerMessage("One of these characters was not found."); sendServerMessage("One of these characters was not found.");
return; return;
} }
target->charcurse_list = argv;
} }
//Kick back to char select screen //Kick back to char select screen
if (!target->charcurse_list.contains(QString::number(server->getCharID(current_char)))) { if (!target->charcurse_list.contains(server->getCharID(current_char))) {
target->current_char = ""; target->changeCharacter(-1);
target->sendPacket("DONE"); target->sendPacket("DONE");
} }
target->is_charcursed = true; target->is_charcursed = true;
server->updateCharsTaken(server->areas.value(current_area));
target->sendServerMessage("You have been charcursed!"); target->sendServerMessage("You have been charcursed!");
sendServerMessage("Charcursed player."); sendServerMessage("Charcursed player.");
} }
@ -381,7 +381,8 @@ void AOClient::cmdUnCharCurse(int argc, QStringList argv)
} }
target->is_charcursed = false; target->is_charcursed = false;
target->charcurse_list.clear(); target->charcurse_list.clear();
sendServerMessage("Uncharcursed plater."); server->updateCharsTaken(server->areas.value(current_area));
sendServerMessage("Uncharcursed player.");
target->sendServerMessage("You were uncharcursed."); target->sendServerMessage("You were uncharcursed.");
} }

View File

@ -151,7 +151,30 @@ void Server::updateCharsTaken(AreaData* area)
} }
AOPacket response_cc("CharsCheck", chars_taken); AOPacket response_cc("CharsCheck", chars_taken);
broadcast(response_cc, area->index);
for (AOClient* client : clients) {
if (client->current_area == area->index){
if (!client->is_charcursed)
client->sendPacket(response_cc);
else {
QStringList chars_taken_cursed = getCursedCharsTaken(client, chars_taken);
AOPacket response_cc_cursed("CharsCheck", chars_taken_cursed);
client->sendPacket(response_cc_cursed);
}
}
}
}
QStringList Server::getCursedCharsTaken(AOClient* client, QStringList chars_taken)
{
QStringList chars_taken_cursed;
for (int i = 0; i < chars_taken.length(); i++) {
if (!client->charcurse_list.contains(i))
chars_taken_cursed.append("-1");
else
chars_taken_cursed.append(chars_taken.value(i));
}
return chars_taken_cursed;
} }
void Server::broadcast(AOPacket packet, int area_index) void Server::broadcast(AOPacket packet, int area_index)