=== added file 'src/AddonAllowCoinSetting.h' --- src/AddonAllowCoinSetting.h 1970-01-01 00:00:00 +0000 +++ src/AddonAllowCoinSetting.h 2010-03-24 22:58:40 +0000 @@ -0,0 +1,47 @@ +// $Id: AddonAllowCoinSetting.h 6019 2010-03-24 12:18:02Z Divan $ +// +// Copyright (c) 2005 - 2010 Settlers Freaks (sf-team at siedler25.org) +// +// This file is part of Siedler II.5 RTTR. +// +// Siedler II.5 RTTR is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 2 of the License, or +// (at your option) any later version. +// +// Siedler II.5 RTTR is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Siedler II.5 RTTR. If not, see . +#ifndef ADDONALLOWCOINSETTING_H_INCLUDED +#define ADDONALLOWCOINSETTING_H_INCLUDED + +#pragma once + +#include "Addons.h" + +/////////////////////////////////////////////////////////////////////////////// +/** + * Addon for allowing to chose a default coin allowance. + * + * @author GoGi + * @author Divan + */ +class AddonAllowCoinSetting : public AddonBool +{ +public: + AddonAllowCoinSetting() : AddonBool( + ADDON_ALLOW_COIN_SETTING, + ADDONGROUP_MILITARY|ADDONGROUP_GAMEPLAY, + gettext_noop("Allow disabling coin distribution"), + gettext_noop("Allows every player to disable gold coin distribution by default."), + 0) + { + } +}; + +#endif // !ADDONALLOWCOINSETTING_H_INCLUDED + === modified file 'src/AddonManager.cpp' --- src/AddonManager.cpp 2010-03-14 23:00:42 +0000 +++ src/AddonManager.cpp 2010-03-24 20:43:54 +0000 @@ -40,6 +40,8 @@ #include "AddonDefenderBehavior.h" +#include "AddonAllowCoinSetting.h" + /////////////////////////////////////////////////////////////////////////////// /** * @@ -95,6 +97,8 @@ registerAddon(new AddonStatisticsVisibility); registerAddon(new AddonDefenderBehavior); + + registerAddon(new AddonAllowCoinSetting); } } === modified file 'src/GameClient.h' --- src/GameClient.h 2010-03-01 20:10:51 +0000 +++ src/GameClient.h 2010-03-24 20:43:54 +0000 @@ -243,7 +243,7 @@ /// Werkzeugeinstellungen (in der Reihenfolge wie im Fenster!) std::vector tools_settings; - VisualSettings() : distribution(20), build_order(31), transport_order(14), military_settings(7), tools_settings(12) + VisualSettings() : distribution(20), build_order(31), transport_order(14), military_settings(8), tools_settings(12) {} } visual_settings, default_settings; === modified file 'src/GameClientPlayer.cpp' --- src/GameClientPlayer.cpp 2010-03-08 23:00:38 +0000 +++ src/GameClientPlayer.cpp 2010-03-24 20:43:54 +0000 @@ -66,7 +66,7 @@ * * @author OLiver */ -GameClientPlayer::GameClientPlayer(const unsigned playerid) : GamePlayerInfo(playerid), build_order(31), military_settings(7), tools_settings(12,0) +GameClientPlayer::GameClientPlayer(const unsigned playerid) : GamePlayerInfo(playerid), build_order(31), military_settings(8), tools_settings(12,0) { // Erstmal kein HQ (leerer Spieler) wie das bei manchen Karten der Fall ist hqy = hqx = 0xFFFF; @@ -156,6 +156,7 @@ military_settings[4] = 2; military_settings[5] = 4; military_settings[6] = 10; + military_settings[7] = 1; GAMECLIENT.visual_settings.military_settings = military_settings; GAMECLIENT.visual_settings.tools_settings = tools_settings; === modified file 'src/GameCommands.h' --- src/GameCommands.h 2010-03-01 20:10:51 +0000 +++ src/GameCommands.h 2010-03-24 20:43:54 +0000 @@ -338,7 +338,7 @@ { friend class GameClient; /// Größe der Distributionsdaten - static const unsigned DATA_SIZE = 7; + static const unsigned DATA_SIZE = 8; /// Daten der Distribution (einzelne Prozente der Waren in Gebäuden) std::vector data; public: === modified file 'src/const_addons.h' --- src/const_addons.h 2010-03-14 23:00:42 +0000 +++ src/const_addons.h 2010-03-24 20:43:54 +0000 @@ -27,6 +27,7 @@ // 001 OLiver // 002 Divan // 003 jh +// 004 GoGi // // Do not forget to add your Addon to AddonManager::reset! @@ -37,21 +38,23 @@ // AAA = Author // NNNNN = Number // AAANNNNN - ADDON_LIMIT_CATAPULTS = 0x00000000, - ADDON_INEXHAUSTIBLE_MINES = 0x00000001, - ADDON_REFUND_MATERIALS = 0x00000002, - ADDON_EXHAUSTIBLE_WELLS = 0x00000003, - ADDON_REFUND_ON_EMERGENCY = 0x00000004, - ADDON_MANUAL_ROAD_ENLARGEMENT = 0x00000005, - - ADDON_DEMOLITION_PROHIBITION = 0x00100000, - - ADDON_CHANGE_GOLD_DEPOSITS = 0x00200000, - ADDON_MAX_WATERWAY_LENGTH = 0x00200001, - ADDON_CUSTOM_BUILD_SEQUENCE = 0x00200002, - ADDON_STATISTICS_VISIBILITY = 0x00200003, - - ADDON_DEFENDER_BEHAVIOR = 0x00300000 + ADDON_LIMIT_CATAPULTS = 0x00000000, + ADDON_INEXHAUSTIBLE_MINES = 0x00000001, + ADDON_REFUND_MATERIALS = 0x00000002, + ADDON_EXHAUSTIBLE_WELLS = 0x00000003, + ADDON_REFUND_ON_EMERGENCY = 0x00000004, + ADDON_MANUAL_ROAD_ENLARGEMENT = 0x00000005, + + ADDON_DEMOLITION_PROHIBITION = 0x00100000, + + ADDON_CHANGE_GOLD_DEPOSITS = 0x00200000, + ADDON_MAX_WATERWAY_LENGTH = 0x00200001, + ADDON_CUSTOM_BUILD_SEQUENCE = 0x00200002, + ADDON_STATISTICS_VISIBILITY = 0x00200003, + + ADDON_DEFENDER_BEHAVIOR = 0x00300000, + + ADDON_ALLOW_COIN_SETTING = 0x00400000 }; enum AddonGroup === modified file 'src/iwAddons.cpp' --- src/iwAddons.cpp 2010-03-01 20:10:51 +0000 +++ src/iwAddons.cpp 2010-03-24 22:58:40 +0000 @@ -40,7 +40,7 @@ * @author FloSoft */ iwAddons::iwAddons(ChangePolicy policy) - : IngameWindow(CGI_ADDONS, 0xFFFF, 0xFFFF, 700, 500, _("Addon Settings"), LOADER.GetImageN("resource", 41), true), + : IngameWindow(CGI_ADDONS, 0xFFFF, 0xFFFF, 700, 520, _("Addon Settings"), LOADER.GetImageN("resource", 41), true), policy(policy) { AddText(0, 20, 30, _("Additional features:"), COLOR_YELLOW, 0, NormalFont); === modified file 'src/iwMilitary.cpp' --- src/iwMilitary.cpp 2010-03-14 23:00:42 +0000 +++ src/iwMilitary.cpp 2010-03-24 22:58:40 +0000 @@ -44,7 +44,7 @@ */ iwMilitary::iwMilitary(void) : IngameWindow(CGI_MILITARY, 0xFFFE, 0xFFFE, 168, 298, _("Military"), LOADER.GetImageN("io", 5)), - settings_changed(false) + settings_changed(false), current_gold_setting(true) { // Einzelne Balken AddProgress(0,17,25,132,26,TC_GREY,119,120,10,"",4,4,0,_("Fewer recruits"),_("More recruits")); /* pitch: 4, 4 */ @@ -55,9 +55,21 @@ AddProgress(5,17,185,132,26,TC_GREY,127,128,10,"",4,4,0,_("Center of country"),_("Center of country")); AddProgress(6,17,217,132,26,TC_GREY,125,126,10,"",4,4,0,_("Border areas"),_("Border areas")); + // optional settings + + unsigned short extra_height = 0; + + if(ADDONMANAGER.isEnabled(ADDON_ALLOW_COIN_SETTING)) + { + AddImageButton(7, 68, 249 + extra_height, 32, 32, TC_GREY, LOADER.GetImageN("io", 227)); + extra_height += 34; + } + + SetIwHeight(GetIwHeight() + extra_height); + // unteren 2 Buttons - AddImageButton(7,18,250,30,32,TC_GREY, LOADER.GetImageN("io",21), _("Help")); - AddImageButton(8,120,250,30,32,TC_GREY, LOADER.GetImageN("io",191),_("Default")); + AddImageButton(20,18,252+extra_height,30,32,TC_GREY, LOADER.GetImageN("io",21), _("Help")); + AddImageButton(21,120,252+extra_height,30,32,TC_GREY, LOADER.GetImageN("io",191),_("Default")); // Falls Verteidiger ändern verboten ist, einfach die Bar ausblenden if (ADDONMANAGER.getSelection(ADDON_DEFENDER_BEHAVIOR) == 1) @@ -66,7 +78,7 @@ } // Absendetimer, in 2s-Abschnitten wird jeweils das ganze als Netzwerknachricht ggf. abgeschickt - AddTimer(9,2000); + AddTimer(22,2000); UpdateSettings(); } @@ -85,6 +97,9 @@ for(unsigned char i = 0; i < 7; ++i) GAMECLIENT.visual_settings.military_settings[i] = (unsigned char)GetCtrl(i)->GetPosition(); + if(ADDONMANAGER.isEnabled(ADDON_ALLOW_COIN_SETTING)) + GAMECLIENT.visual_settings.military_settings[7] = current_gold_setting ? 1 : 0; + GAMECLIENT.AddGC(new gc::ChangeMilitary(GAMECLIENT.visual_settings.military_settings)); settings_changed = false; } @@ -108,10 +123,35 @@ settings_changed = true; } +void iwMilitary::Msg_ButtonClick(const unsigned int ctrl_id) +{ + switch(ctrl_id) + { + case 7: // default coin supply + { + settings_changed = true; + current_gold_setting = !current_gold_setting; + GetCtrl(7)->SetImage(LOADER.GetImageN("io", current_gold_setting ? 227 : 226)); + } break; + case 20: // Help + { + } break; + case 21: // Default + { + } break; + } +} + void iwMilitary::UpdateSettings() { // Einstellungen festlegen for(unsigned i = 0;i<7;++i) - GetCtrl(i)->SetPosition(GAMECLIENT.visual_settings.military_settings[i]); + GetCtrl(i)->SetPosition(GAMECLIENT.visual_settings.military_settings[i]); + + if(ADDONMANAGER.isEnabled(ADDON_ALLOW_COIN_SETTING)) + { + current_gold_setting = (GAMECLIENT.visual_settings.military_settings[7] == 1); + GetCtrl(7)->SetImage(LOADER.GetImageN("io", current_gold_setting ? 227 : 226)); + } } === modified file 'src/iwMilitary.h' --- src/iwMilitary.h 2010-03-01 20:10:51 +0000 +++ src/iwMilitary.h 2010-03-24 22:58:40 +0000 @@ -28,6 +28,8 @@ { /// Einstellungen nach dem letzten Netzwerk-Versenden nochmal verändert? bool settings_changed; + /// wie viele progressbars existieren? + bool current_gold_setting; public: @@ -44,6 +46,7 @@ void Msg_Timer(const unsigned int ctrl_id); void Msg_ProgressChange(const unsigned int ctrl_id, const unsigned short position); + void Msg_ButtonClick(const unsigned int ctrl_id); }; #endif // !iwMILITARY_H_INCLUDED === modified file 'src/nobMilitary.cpp' --- src/nobMilitary.cpp 2010-03-14 23:00:42 +0000 +++ src/nobMilitary.cpp 2010-03-24 22:58:40 +0000 @@ -44,6 +44,8 @@ #include "MapGeometry.h" #include "AIEventManager.h" +#include "AddonManager.h" + /////////////////////////////////////////////////////////////////////////////// // Makros / Defines #if defined _WIN32 && defined _DEBUG && defined _MSC_VER @@ -55,6 +57,13 @@ nobMilitary::nobMilitary(const BuildingType type,const unsigned short x, const unsigned short y,const unsigned char player,const Nation nation) : nobBaseMilitary(type,x,y,player,nation), new_built(true), coins(0), disable_coins(false), disable_coins_virtual(false), capturing(false), capturing_soldiers(0), goldorder_event(0), upgrade_event(0) { + // Default-Wert fuer Goldmuenzen + if(ADDONMANAGER.isEnabled(ADDON_ALLOW_COIN_SETTING) && gwg->GetPlayer(player)->military_settings[7] == 0) + { + disable_coins = true; + disable_coins_virtual = true; + } + // Gebäude entsprechend als Militärgebäude registrieren und in ein Militärquadrat eintragen gwg->GetPlayer(player)->AddMilitaryBuilding(this); gwg->GetMilitarySquare(x,y).push_back(this);