Merge pull request #69 from jeromkiller/AddArchipelagoClientLib

Add archipelago client lib
This commit is contained in:
aMannus
2025-05-27 23:18:17 +02:00
committed by GitHub
2 changed files with 52 additions and 5 deletions

View File

@@ -113,8 +113,19 @@ bool ArchipelagoClient::StartClient() {
}
});
apClient->set_print_json_handler([&](const std::list<APClient::TextNode>& nodes) {
std::string text = apClient->render_json(nodes, APClient::RenderFormat::TEXT);
apClient->set_print_json_handler([&](const APClient::PrintJSONArgs& arg) {
std::string tag = "[" + arg.type + "] ";
const int slot = apClient->get_player_number();
if(arg.type == "ItemSend") {
if((*arg.item).player == slot) {
tag = "[Found] ";
} else if (*arg.receiving == slot ) {
tag = "[Received] ";
}
}
std::string text = tag + apClient->render_json(arg.data, APClient::RenderFormat::TEXT);
ArchipelagoConsole_SendMessage(text.c_str(), false);
});
@@ -184,6 +195,15 @@ void ArchipelagoClient::SynchRecievedLocations() {
void ArchipelagoClient::QueueExternalCheck(const int64_t apLocation) {
const std::string checkName = apClient->get_location_name(apLocation, AP_Client_consts::AP_GAME_NAME);
const uint32_t RC = static_cast<uint32_t>(Rando::StaticData::locationNameToEnum[checkName]);
// Don't queue checks we already have
if(Rando::Context::GetInstance()->GetItemLocation(RC)->HasObtained()) {
return;
}
std::string locationLog = "[LOG] Externaly checking" + checkName;
ArchipelagoConsole_SendMessage(locationLog.c_str(), true);
GameInteractor_ExecuteOnRandomizerExternalCheck(RC);
}
@@ -214,7 +234,7 @@ void ArchipelagoClient::OnItemReceived(const ApItem apItem) {
return;
}
std::string logMessage = "[Log] Recieved " + apItem.itemName;
std::string logMessage = "[LOG] Recieved " + apItem.itemName;
ArchipelagoConsole_SendMessage(logMessage.c_str(), true);
// add item to the queue
@@ -224,12 +244,12 @@ void ArchipelagoClient::OnItemReceived(const ApItem apItem) {
void ArchipelagoClient::QueueItem(const ApItem item) {
if(item.index < gSaveContext.ship.quest.data.archipelago.lastReceivedItemIndex) {
// Skip queueing any items we already have
std::string logMessage = "[Log] Skipping giving " + item.itemName + ". We recieved this previously.";
std::string logMessage = "[LOG] Skipping giving " + item.itemName + ". We recieved this previously.";
ArchipelagoConsole_SendMessage(logMessage.c_str(), true);
return;
}
std::string logMessage = "[Log] Giving " + item.itemName;
std::string logMessage = "[LOG] Giving " + item.itemName;
ArchipelagoConsole_SendMessage(logMessage.c_str(), true);
const RandomizerGet RG = Rando::StaticData::itemNameToEnum[item.itemName];
if(RG == RG_NONE) {

View File

@@ -42,6 +42,33 @@ void ArchipelagoConsoleWindow::DrawElement() {
} else if (strstr(item, "[LOG]")) {
color = ImVec4(0.7f, 0.7f, 1.0f, 1.0f);
hasColor = true;
} else if (strstr(item, "[Found]")) {
color = ImVec4(0.24f, 0.64f, 0.69f, 1.00f);
hasColor = true;
} else if (strstr(item, "[Received]")) {
color = ImVec4(0.18f, 0.76f, 0.42f, 1.00f);
hasColor = true;
} else if (strstr(item, "[ItemCheat]")) {
color = ImVec4(0.97f, 0.26f, 0.26f, 1.00f);
hasColor = true;
} else if (strstr(item, "[Hint]")) {
color = ImVec4(0.89f, 0.45f, 1.00f, 1.00f);
hasColor = true;
} else if (strstr(item, "[Join]")) {
color = ImVec4(0.00f, 0.80f, 0.11f, 1.00f);
hasColor = true;
} else if (strstr(item, "[Part]")) {
color = ImVec4(1.00f, 0.01f, 0.01f, 1.00f);
hasColor = true;
} else if (strstr(item, "[Goal]")) {
color = ImVec4(0.00f, 0.70f, 0.21f, 1.00f);
hasColor = true;
} else if (strstr(item, "[Release]")) {
color = ImVec4(0.51f, 0.21f, 0.61f, 1.00f);
hasColor = true;
} else if (strstr(item, "[Collect]")) {
color = ImVec4(0.51f, 0.21f, 0.61f, 1.00f);
hasColor = true;
}
if (hasColor) {
ImGui::PushStyleColor(ImGuiCol_Text, color);