change curse list to int list, marked unavailable chars as taken
This commit is contained in:
		
							parent
							
								
									6dfd7d173a
								
							
						
					
					
						commit
						08ba6ef278
					
				| @ -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. | ||||||
|  | |||||||
| @ -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. | ||||||
|      */ |      */ | ||||||
|  | |||||||
| @ -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; | ||||||
|     } |     } | ||||||
|      |      | ||||||
|  | |||||||
| @ -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."); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -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) | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 scatterflower
						scatterflower