/** * Konstruktor von @p dskLobby. * * @author FloSoft * @author Devil */ dskLobby::dskLobby() : Desktop(LOADER.GetImageN("setup013", 0)), serverinfo(NULL), servercreate(NULL) { // Version AddVarText(0, 0, 600, _("Return To The Roots - v%s-%s"), COLOR_YELLOW, 0 | glArchivItem_Font::DF_BOTTOM, NormalFont, 2, GetWindowVersion(), GetWindowRevisionShort()); // URL AddText(1, 400, 600, _("http://www.siedler25.org"), COLOR_GREEN, glArchivItem_Font::DF_CENTER | glArchivItem_Font::DF_BOTTOM, NormalFont); // Copyright AddVarText(2, 800, 600, _("© 2005 - %s Settlers Freaks"), COLOR_YELLOW, glArchivItem_Font::DF_RIGHT | glArchivItem_Font::DF_BOTTOM, NormalFont, 1, GetCurrentYear()); // "Zurück" AddTextButton(3, 530, 530, 250, 22, TC_RED1, _("Back"), NormalFont); // "Verbinden" AddTextButton(4, 530, 470, 250, 22, TC_GREEN2, _("Connect"), NormalFont); // "Internet Ranking" AddTextButton(5, 530, 500, 250, 22, TC_GREEN2, _("Internet Ranking"), NormalFont); // "Server hinzufügen" AddTextButton(6, 530, 440, 250, 22, TC_GREEN2, _("Add Server"), NormalFont); // Gameserver-Tabelle - "ID", "Server", "Karte", "Spieler", "Version", "Ping" AddTable(10, 20, 20, 500, 262, TC_GREY, NormalFont, 6, _("ID"), 0, ctrlTable::SRT_NUMBER, _("Server"), 300, ctrlTable::SRT_STRING, _("Map"), 300, ctrlTable::SRT_STRING, _("Player"), 200, ctrlTable::SRT_NUMBER, _("Version"), 100, ctrlTable::SRT_STRING, _("Ping"), 100, ctrlTable::SRT_NUMBER); // Spieler-Tabelle - "Name", "Punkte", "Version" AddTable(11, 530, 20, 250, 410, TC_GREY, NormalFont, 3, _("Name"), 500, ctrlTable::SRT_STRING, _("Points"), 250, ctrlTable::SRT_STRING, _("Version"), 250, ctrlTable::SRT_STRING); // Chatfenster AddChatCtrl(20, 20, 290, 500, 238, TC_GREY, NormalFont); // Chatfenster-Edit AddEdit(21, 20, 530, 500, 22, TC_GREY, NormalFont); AddTimer(30, 5000); UpdateServerList(true); UpdatePlayerList(true); LOBBYCLIENT.SetInterface(this); LOBBYCLIENT.SendServerListRequest(); LOBBYCLIENT.SendPlayerListRequest(); GAMECLIENT.SetInterface(this); }
dskHostGame::dskHostGame(const ServerType serverType) : Desktop(LOADER.GetImageN("setup015", 0)), hasCountdown_(false), serverType(serverType), wasActivated(false) { if(!GAMECLIENT.GetLuaFilePath().empty()) { lua.reset(new LuaInterfaceSettings()); if(!lua->LoadScript(GAMECLIENT.GetLuaFilePath())) { WINDOWMANAGER.Show(new iwMsgbox(_("Error"), _("Lua script was found but failed to load. Map might not work as expected!"), this, MSB_OK, MSB_EXCLAMATIONRED, 1)); lua.reset(); } else if(!lua->EventSettingsInit(serverType == ServerType::LOCAL, GAMECLIENT.IsSavegame())) { RTTR_Assert(GAMECLIENT.IsHost()); // This should be done first for the host so others won't even see the script LOG.lprintf("Lua was disabled by the script itself\n"); lua.reset(); // Double check... if(GAMECLIENT.IsHost()) GAMESERVER.RemoveLuaScript(); } } const bool readonlySettings = !GAMECLIENT.IsHost() || GAMECLIENT.IsSavegame() || (lua && !lua->IsChangeAllowed("general")); allowAddonChange = GAMECLIENT.IsHost() && !GAMECLIENT.IsSavegame() && (!lua || lua->IsChangeAllowed("addonsAll") || lua->IsChangeAllowed("addonsSome")); // Kartenname AddText(0, 400, 5, GAMECLIENT.GetGameName(), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, LargeFont); // "Spielername" AddText(10, 95, 40, _("Player Name"), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, NormalFont); // "Einstufung" AddText(11, 205, 40, _("Classification"), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, NormalFont); // "Volk" AddText(12, 285, 40, _("Race"), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, NormalFont); // "Farbe" AddText(13, 355, 40, _("Color"), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, NormalFont); // "Team" AddText(14, 405, 40, _("Team"), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, NormalFont); if (!IsSinglePlayer()) { // "Bereit" AddText(15, 465, 40, _("Ready?"), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, NormalFont); // "Ping" AddText(16, 515, 40, _("Ping"), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, NormalFont); } // "Swap" if(GAMECLIENT.IsHost() && !GAMECLIENT.IsSavegame()) AddText(24, 10, 40, _("Swap"), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, NormalFont); // "Verschieben" (nur bei Savegames!) if(GAMECLIENT.IsSavegame()) AddText(17, 645, 40, _("Past player"), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, NormalFont); if (!IsSinglePlayer()) { // Chatfenster AddChatCtrl(1, 20, 320, 360, 218, TC_GREY, NormalFont); // Edit für Chatfenster AddEdit(4, 20, 540, 360, 22, TC_GREY, NormalFont); } // "Spiel starten" AddTextButton(2, 600, 560, 180, 22, TC_GREEN2, (GAMECLIENT.IsHost() ? _("Start game") : _("Ready")), NormalFont); // "Zurück" AddTextButton(3, 400, 560, 180, 22, TC_RED1, _("Return"), NormalFont); // "Teams sperren" AddCheckBox(20, 400, 460, 180, 26, TC_GREY, _("Lock teams:"), NormalFont, readonlySettings); // "Gemeinsame Team-Sicht" AddCheckBox(19, 600, 460, 180, 26, TC_GREY, _("Shared team view"), NormalFont, readonlySettings); // "Random Start Locations" AddCheckBox(23, 600, 430, 180, 26, TC_GREY, _("Random start locations"), NormalFont, readonlySettings); // "Enhancements" AddText(21, 400, 499, _("Addons:"), COLOR_YELLOW, 0, NormalFont); AddTextButton(22, 600, 495, 180, 22, TC_GREEN2, allowAddonChange ? _("Change Settings...") : _("View Settings..."), NormalFont); ctrlComboBox* combo; // umgedrehte Reihenfolge, damit die Listen nicht dahinter sind // "Aufklärung" AddText(30, 400, 405, _("Exploration:"), COLOR_YELLOW, 0, NormalFont); combo = AddComboBox(40, 600, 400, 180, 20, TC_GREY, NormalFont, 100, readonlySettings); combo->AddString(_("Off (all visible)")); combo->AddString(_("Classic (Settlers 2)")); combo->AddString(_("Fog of War")); combo->AddString(_("FoW - all explored")); // "Waren zu Beginn" AddText(31, 400, 375, _("Goods at start:"), COLOR_YELLOW, 0, NormalFont); combo = AddComboBox(41, 600, 370, 180, 20, TC_GREY, NormalFont, 100, readonlySettings); combo->AddString(_("Very Low")); combo->AddString(_("Low")); combo->AddString(_("Normal")); combo->AddString(_("A lot")); // "Spielziel" AddText(32, 400, 345, _("Goals:"), COLOR_YELLOW, 0, NormalFont); combo = AddComboBox(42, 600, 340, 180, 20, TC_GREY, NormalFont, 100, readonlySettings); combo->AddString(_("None")); // Kein Spielziel combo->AddString(_("Conquer 3/4 of map")); // Besitz 3/4 des Landes combo->AddString(_("Total domination")); // Alleinherrschaft // Lobby game? if(LOBBYCLIENT.LoggedIn()) { // Then add tournament modes as possible "objectives" for(unsigned i = 0; i < TOURNAMENT_MODES_COUNT; ++i) { char str[512]; sprintf (str, _("Tournament: %u minutes"), TOURNAMENT_MODES_DURATION[i]); combo->AddString(str); } } // "Geschwindigkeit" AddText(33, 400, 315, _("Speed:"), COLOR_YELLOW, 0, NormalFont); combo = AddComboBox(43, 600, 310, 180, 20, TC_GREY, NormalFont, 100, !GAMECLIENT.IsHost()); combo->AddString(_("Very slow")); // Sehr Langsam combo->AddString(_("Slow")); // Langsam combo->AddString(_("Normal")); // Normal combo->AddString(_("Fast")); // Schnell combo->AddString(_("Very fast")); // Sehr Schnell // Karte laden, um Kartenvorschau anzuzeigen if(GAMECLIENT.GetMapType() == MAPTYPE_OLDMAP) { // Map laden libsiedler2::ArchivInfo mapArchiv; // Karteninformationen laden if(libsiedler2::loader::LoadMAP(GAMECLIENT.GetMapPath(), mapArchiv) == 0) { glArchivItem_Map* map = static_cast<glArchivItem_Map*>(mapArchiv.get(0)); ctrlPreviewMinimap* preview = AddPreviewMinimap(70, 560, 40, 220, 220, map); // Titel der Karte, Y-Position relativ je nach Höhe der Minimap festlegen, daher nochmals danach // verschieben, da diese Position sonst skaliert wird! ctrlText* text = AddText(71, 670, 0, _("Map: ") + GAMECLIENT.GetMapTitle(), COLOR_YELLOW, glArchivItem_Font::DF_CENTER, NormalFont); text->Move(text->GetX(false), preview->GetY(false) + preview->GetBottom() + 10); } } if (IsSinglePlayer() && !GAMECLIENT.IsSavegame()) { // Setze initial auf KI for (unsigned char i = 0; i < GAMECLIENT.GetPlayerCount(); i++) { if (!GAMECLIENT.GetPlayer(i).is_host) GAMESERVER.TogglePlayerState(i); } } // Alle Spielercontrols erstellen for(unsigned char i = GAMECLIENT.GetPlayerCount(); i; --i) UpdatePlayerRow(i - 1); //swap buttons erstellen if(GAMECLIENT.IsHost() && !GAMECLIENT.IsSavegame() && (!lua || lua->IsChangeAllowed("swapping"))) { for(unsigned char i = GAMECLIENT.GetPlayerCount(); i; --i) AddTextButton(80 + i, 5, 80 + (i - 1) * 30, 10, 22, TC_RED1, _("-"), NormalFont);; } // GGS aktualisieren, zum ersten Mal GAMECLIENT.LoadGGS(); this->CI_GGSChanged(GAMECLIENT.GetGGS()); LOBBYCLIENT.SetInterface(this); if(serverType == ServerType::LOBBY && LOBBYCLIENT.LoggedIn()) { LOBBYCLIENT.SendServerJoinRequest(); LOBBYCLIENT.SendRankingInfoRequest(GAMECLIENT.GetPlayer(GAMECLIENT.GetPlayerID()).name); for(unsigned char i = 0; i < GAMECLIENT.GetPlayerCount(); ++i) { GameClientPlayer& player = GAMECLIENT.GetPlayer(i); if(player.ps == PS_OCCUPIED) LOBBYCLIENT.SendRankingInfoRequest(player.name); } } GAMECLIENT.SetInterface(this); }