Compare commits
17 Commits
experiment
...
apm_crash/
| Author | SHA1 | Date | |
|---|---|---|---|
| c76e897e06 | |||
|
|
349322cad0 | ||
|
|
a52c2f1413 | ||
|
|
15475d644d | ||
|
|
472cac5e15 | ||
|
|
a4c524dd06 | ||
|
|
ab587a163a | ||
|
|
b11f5a76a9 | ||
|
|
f9a2f4e8a2 | ||
| e776135d7d | |||
|
|
93871cc260 | ||
|
|
c7daaa1f0d | ||
|
|
5782b849a6 | ||
|
|
6603de47ff | ||
|
|
6afde1cb7d | ||
| d165533e9a | |||
|
|
269a557c6f |
@@ -6,6 +6,7 @@
|
||||
#include "cm_main.hpp"
|
||||
|
||||
#include "../network/core/http.h" //HttpCallback
|
||||
#include "../network/network_client.h" //for servername
|
||||
#include "core/geometry_func.hpp" //maxdim
|
||||
#include "settings_type.h"
|
||||
#include "settings_func.h" //saveconfig
|
||||
@@ -29,20 +30,33 @@ namespace citymania {
|
||||
bool _novahost = true;
|
||||
IniFile *_inilogin = NULL;
|
||||
|
||||
/* admin company buttons */
|
||||
bool _admin = false;
|
||||
int ACB_left = 0;
|
||||
int ACB_top = 0;
|
||||
int ACB_width = 0;
|
||||
int ACB_Location[3][15];
|
||||
|
||||
static const int HTTPBUFLEN = 1024;
|
||||
static const int MAX_COMMUNITY_STRING_LEN = 128;
|
||||
|
||||
static constexpr std::string_view NICE_HTTP_LOGIN = "http://n-ice.org/openttd/gettoken_md5salt.php?user={}&password={}";
|
||||
static constexpr std::string_view BTPRO_HTTP_LOGIN = "http://openttd.btpro.nl/gettoken-enc.php?user={}&password={}";
|
||||
|
||||
static const std::string CFG_LOGIN_FILE = "citymania.cfg";
|
||||
static const std::string CFG_FILE = "citymania.cfg";
|
||||
static const std::string CFG_LOGIN_KEY = "login";
|
||||
static const std::string CFG_SERVER_KEY = "server";
|
||||
static const char * const NOVAPOLIS_LOGIN = "citymania_login";
|
||||
static const char * const NOVAPOLIS_PW = "citymania_pw";
|
||||
static const char * const NICE_LOGIN = "nice_login";
|
||||
static const char * const NICE_PW = "nice_pw";
|
||||
static const char * const BTPRO_LOGIN = "btpro_login";
|
||||
static const char * const BTPRO_PW = "btpro_pw";
|
||||
static const char * const NICE_ADMIN_PW = "nice_admin_pw";
|
||||
static const char * const BTPRO_ADMIN_PW = "btpro_admin_pw";
|
||||
static const char * const ADMIN = "admin";
|
||||
|
||||
static const char * const COMMUNITY = "community";
|
||||
|
||||
static const char * const INI_LOGIN_KEYS[] = {
|
||||
NOVAPOLIS_LOGIN,
|
||||
@@ -51,8 +65,17 @@ static const char * const INI_LOGIN_KEYS[] = {
|
||||
NICE_PW,
|
||||
BTPRO_LOGIN,
|
||||
BTPRO_PW,
|
||||
NICE_ADMIN_PW,
|
||||
BTPRO_ADMIN_PW,
|
||||
ADMIN,
|
||||
};
|
||||
|
||||
|
||||
static const char *const INI_SERVER_KEYS[] = {
|
||||
COMMUNITY,
|
||||
};
|
||||
|
||||
|
||||
/** Widget number of the commands window. */
|
||||
enum CommandsToolbarWidgets {
|
||||
CTW_BACKGROUND,
|
||||
@@ -122,29 +145,58 @@ enum CommandsToolbarCargoOption {
|
||||
};
|
||||
|
||||
enum LoginWindowWidgets {
|
||||
LWW_NOVAPOLIS,
|
||||
LWW_NICE,
|
||||
LWW_BTPRO,
|
||||
LWW_NOVAPOLIS_LOGIN,
|
||||
LWW_NOVAPOLIS_PW,
|
||||
LWW_NICE_LOGIN,
|
||||
LWW_NICE_PW,
|
||||
LWW_BTPRO_LOGIN,
|
||||
LWW_BTPRO_PW,
|
||||
LWW_USER_NAME,
|
||||
LWW_USER_PW,
|
||||
LWW_ADMIN_PW,
|
||||
LWW_USER_LOGIN,
|
||||
LWW_USER_LOGOUT,
|
||||
LWW_ADMIN_LOGIN,
|
||||
LWW_ADMIN_LOGOUT,
|
||||
LWW_COMMUNITY,
|
||||
LWW_USERNAME,
|
||||
LWW_PASSWORD,
|
||||
};
|
||||
|
||||
enum LoginWindowQueryWidgets {
|
||||
LQW_NOVAPOLIS,
|
||||
LQW_NICE,
|
||||
LQW_BTPRO,
|
||||
LQW_NOVAPOLIS_LOGIN,
|
||||
LQW_NOVAPOLIS_PW,
|
||||
LQW_NICE_LOGIN,
|
||||
LQW_NICE_PW,
|
||||
LQW_BTPRO_LOGIN,
|
||||
LQW_BTPRO_PW,
|
||||
LQW_USER_NAME,
|
||||
LQW_USER_PW,
|
||||
LQW_ADMIN_PW
|
||||
};
|
||||
|
||||
enum AdminCompanyButtonsWidgets {
|
||||
ACB_COMPANY_EMPTY,
|
||||
ACB_COMPANY_LOCK,
|
||||
ACB_COMPANY_UNLOCK,
|
||||
ACB_COMPANY_NEWSTICKET,
|
||||
ACB_COMPANY_NEWSTICKET_COMP,
|
||||
ACB_COMPANY_RESET,
|
||||
ACB_COMPANY_RESET_SPEC,
|
||||
ACB_COMPANY_RESET_KICK,
|
||||
ACB_COMPANY_KNOWN,
|
||||
ACB_COMPANY_RESET_KNOWN,
|
||||
ACB_COMPANY_MOVE_PLAYER,
|
||||
ACB_RESET_COMPANY_TIMER_120,
|
||||
ACB_RESET_COMPANY_TIMER,
|
||||
ACB_RESET_COMPANY_TIMER_CANCEL,
|
||||
ACB_COMPANY_SUSPEND,
|
||||
ACB_COMPANY_UNSUSPEND,
|
||||
ACB_COMPANY_AWARNING,
|
||||
ACB_COMPANY_JOIN2,
|
||||
ACB_COMPANY_LEAVE,
|
||||
ACB_COMPANY_CANCEL,
|
||||
ACB_COMPANY_CAPTION,
|
||||
};
|
||||
|
||||
enum AdminCompanyButtonsQueryWidgets {
|
||||
ACBQ_RESET_COMPANY_TIMER,
|
||||
ACBQ_COMPANY_NEWSTICKET,
|
||||
ACBQ_COMPANY_NEWSTICKET_COMP,
|
||||
ACBQ_COMPANY_MOVE_PLAYER,
|
||||
};
|
||||
|
||||
enum LastServerWidgets {
|
||||
LSW_CAPTION,
|
||||
LSW_BUTTON,
|
||||
};
|
||||
|
||||
enum CommunityName {
|
||||
@@ -160,17 +212,24 @@ enum IniLoginKeys {
|
||||
NICEPW,
|
||||
BTPROUSER,
|
||||
BTPROPW,
|
||||
NICEADMINPW,
|
||||
BTPROADMINPW,
|
||||
IS_ADMIN,
|
||||
};
|
||||
|
||||
char _inilogindata[6][MAX_COMMUNITY_STRING_LEN];
|
||||
char _inilogindata[9][MAX_COMMUNITY_STRING_LEN];
|
||||
|
||||
void AccountLogin(CommunityName community);
|
||||
void IniReloadLogin();
|
||||
void ShowAdminCompanyButtons(int companyid = INVALID_COMPANY);
|
||||
|
||||
bool novahost() {
|
||||
return _novahost;
|
||||
}
|
||||
|
||||
/* for company_gui */
|
||||
bool GetAdmin() { return _admin; }
|
||||
|
||||
// void strtomd5(char * buf, char * bufend, int length){
|
||||
// MD5Hash digest;
|
||||
// Md5 checksum;
|
||||
@@ -196,12 +255,17 @@ bool novahost() {
|
||||
|
||||
|
||||
//ini login hadling
|
||||
void IniLoginInitiate(){
|
||||
void IniInitiate(){
|
||||
if(_inilogin != NULL) return; //it was already set
|
||||
_inilogin = new IniFile({CFG_LOGIN_KEY});
|
||||
_inilogin->LoadFromDisk(CFG_LOGIN_FILE, BASE_DIR);
|
||||
_inilogin->LoadFromDisk(CFG_FILE, BASE_DIR);
|
||||
try {
|
||||
IniReloadLogin();
|
||||
}
|
||||
catch (...){
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
std::string GetLoginItem(const std::string& itemname){
|
||||
IniGroup &group = _inilogin->GetOrCreateGroup(CFG_LOGIN_KEY);
|
||||
@@ -209,6 +273,12 @@ std::string GetLoginItem(const std::string& itemname){
|
||||
return item.value.value_or("");
|
||||
}
|
||||
|
||||
std::string GetServerItem(const std::string &itemname) {
|
||||
IniGroup &group = _inilogin->GetOrCreateGroup(CFG_SERVER_KEY);
|
||||
IniItem &item = group.GetOrCreateItem(itemname);
|
||||
return item.value.value_or("");
|
||||
}
|
||||
|
||||
void IniReloadLogin(){
|
||||
for(int i = 0, len = lengthof(INI_LOGIN_KEYS); i < len; i++){
|
||||
auto str = GetLoginItem(INI_LOGIN_KEYS[i]);
|
||||
@@ -223,10 +293,22 @@ void SetLoginItem(const std::string& itemname, const std::string& value){
|
||||
IniGroup &group = _inilogin->GetOrCreateGroup(CFG_LOGIN_KEY);
|
||||
IniItem &item = group.GetOrCreateItem(itemname);
|
||||
item.SetValue(value);
|
||||
_inilogin->SaveToDisk(fmt::format("{}{}", _personal_dir, CFG_LOGIN_FILE));
|
||||
_inilogin->SaveToDisk(fmt::format("{}{}", _personal_dir, CFG_FILE));
|
||||
IniReloadLogin();
|
||||
}
|
||||
|
||||
void SetServerItem(const std::string &itemname, const std::string &value) {
|
||||
IniGroup &group = _inilogin->GetOrCreateGroup(CFG_SERVER_KEY);
|
||||
IniItem &item = group.GetOrCreateItem(itemname);
|
||||
item.SetValue(value);
|
||||
_inilogin->SaveToDisk(fmt::format("{}{}", _personal_dir, CFG_FILE));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Commands toolbar window handler. */
|
||||
/*
|
||||
struct CommandsToolbarWindow : Window {
|
||||
@@ -566,17 +648,17 @@ void ShowCommandsToolbar()
|
||||
// login window
|
||||
class GetHTTPContent: public HTTPCallback {
|
||||
public:
|
||||
GetHTTPContent(const std::string &uri): uri{uri} {
|
||||
GetHTTPContent() {
|
||||
this->proccessing = false;
|
||||
this->buf_last = lastof(buf);
|
||||
}
|
||||
bool proccessing;
|
||||
bool proccessing = false;
|
||||
|
||||
void InitiateLoginSequence() {
|
||||
void InitiateLoginSequence(const std::string& uri) {
|
||||
if(this->proccessing) return;
|
||||
this->proccessing = true;
|
||||
this->cursor = this->buf;
|
||||
NetworkHTTPSocketHandler::Connect(this->uri, this);
|
||||
NetworkHTTPSocketHandler::Connect(uri, this);
|
||||
}
|
||||
|
||||
void OnReceiveData(std::unique_ptr<char[]> data, size_t length) override {
|
||||
@@ -614,7 +696,6 @@ private:
|
||||
char buf[HTTPBUFLEN];
|
||||
char *buf_last;
|
||||
char *cursor;
|
||||
std::string uri;
|
||||
};
|
||||
|
||||
std::string urlencode(const std::string &s) {
|
||||
@@ -656,80 +737,118 @@ void AccountLogin(CommunityName community){
|
||||
uri = fmt::format(NICE_HTTP_LOGIN, GetLoginItem(NICE_LOGIN), GetLoginItem(NICE_PW));
|
||||
break;
|
||||
case BTPRO: {
|
||||
uri = fmt::format(BTPRO_HTTP_LOGIN,
|
||||
btpro_encode(GetLoginItem(BTPRO_LOGIN).c_str()),
|
||||
btpro_encode(GetLoginItem(BTPRO_PW).c_str()));
|
||||
uri = fmt::format(BTPRO_HTTP_LOGIN, btpro_encode(GetLoginItem(BTPRO_LOGIN).c_str()),btpro_encode(GetLoginItem(BTPRO_PW).c_str()));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return;
|
||||
}
|
||||
static GetHTTPContent login(uri);
|
||||
login.InitiateLoginSequence();
|
||||
|
||||
static GetHTTPContent login{};
|
||||
login.InitiateLoginSequence(uri);
|
||||
}
|
||||
|
||||
//login window
|
||||
struct LoginWindow : Window {
|
||||
LoginWindowQueryWidgets query_widget;
|
||||
|
||||
std::int8_t _community = stoi(GetServerItem(COMMUNITY));
|
||||
|
||||
LoginWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc)
|
||||
{
|
||||
this->InitNested(window_number);
|
||||
// if(_novahost || !_networking){
|
||||
// this->DisableWidget(LWW_NICE);
|
||||
// this->DisableWidget(LWW_BTPRO);
|
||||
// }
|
||||
// if(!_novahost || !_networking) this->DisableWidget(LWW_NOVAPOLIS);
|
||||
if ((_community == 1) || (_community == 2) || (_community == 3)) this->InitNested(window_number);
|
||||
|
||||
//no need for citymania
|
||||
if (_community == 3) {
|
||||
this->DisableWidget(LWW_ADMIN_LOGIN);
|
||||
this->DisableWidget(LWW_ADMIN_LOGOUT);
|
||||
this->DisableWidget(LWW_ADMIN_PW);
|
||||
}
|
||||
}
|
||||
|
||||
void SetStringParameters(int widget) const override
|
||||
{
|
||||
switch(widget){
|
||||
case LWW_NOVAPOLIS_LOGIN:
|
||||
SetDParamStr(0, _inilogindata[NOVAPOLISUSER]);
|
||||
//username
|
||||
case LWW_USER_NAME: {
|
||||
switch (_community) {
|
||||
case 1: SetDParamStr(0, _inilogindata[NICEUSER]); break;
|
||||
case 2: SetDParamStr(0, _inilogindata[BTPROUSER]); break;
|
||||
case 3: SetDParamStr(0, _inilogindata[NOVAPOLISUSER]); break;
|
||||
}
|
||||
break;
|
||||
case LWW_NOVAPOLIS_PW:
|
||||
SetDParam(0, (GetLoginItem(NOVAPOLIS_PW).empty() ? CM_STR_LOGIN_WINDOW_NOT_SET : CM_STR_LOGIN_WINDOW_SET));
|
||||
}
|
||||
//password
|
||||
case LWW_USER_PW: {
|
||||
switch (_community) {
|
||||
case 1: SetDParam(0, (GetLoginItem(NICE_PW).empty() ? CM_STR_LOGIN_WINDOW_NOT_SET : CM_STR_LOGIN_WINDOW_SET)); break;
|
||||
case 2: SetDParam(0, (GetLoginItem(BTPRO_PW).empty() ? CM_STR_LOGIN_WINDOW_NOT_SET : CM_STR_LOGIN_WINDOW_SET)); break;
|
||||
case 3: SetDParam(0, (GetLoginItem(NOVAPOLIS_PW).empty() ? CM_STR_LOGIN_WINDOW_NOT_SET : CM_STR_LOGIN_WINDOW_SET)); break;
|
||||
}
|
||||
break;
|
||||
case LWW_NICE_LOGIN:
|
||||
SetDParamStr(0, _inilogindata[NICEUSER]);
|
||||
}
|
||||
//admin password
|
||||
case LWW_ADMIN_PW: {
|
||||
switch (_community) {
|
||||
case 1: SetDParam(0, (GetLoginItem(NICE_ADMIN_PW).empty() ? CM_STR_LOGIN_WINDOW_NOT_SET : CM_STR_LOGIN_WINDOW_SET)); break;
|
||||
case 2: SetDParam(0, (GetLoginItem(BTPRO_ADMIN_PW).empty() ? CM_STR_LOGIN_WINDOW_NOT_SET : CM_STR_LOGIN_WINDOW_SET)); break;
|
||||
//case 3: SetDParam(0, (GetLoginItem(NOVAPOLIS_PW).empty() ? CM_STR_LOGIN_WINDOW_NOT_SET : CM_STR_LOGIN_WINDOW_SET)); break;
|
||||
}
|
||||
break;
|
||||
case LWW_NICE_PW:
|
||||
SetDParam(0, (GetLoginItem(NICE_PW).empty() ? CM_STR_LOGIN_WINDOW_NOT_SET : CM_STR_LOGIN_WINDOW_SET));
|
||||
break;
|
||||
case LWW_BTPRO_LOGIN:
|
||||
SetDParamStr(0, _inilogindata[BTPROUSER]);
|
||||
break;
|
||||
case LWW_BTPRO_PW:
|
||||
SetDParam(0, (GetLoginItem(BTPRO_PW).empty() ? CM_STR_LOGIN_WINDOW_NOT_SET : CM_STR_LOGIN_WINDOW_SET));
|
||||
}
|
||||
//community name
|
||||
case LWW_COMMUNITY: {
|
||||
switch (_community) {
|
||||
case 1: SetDParam(0, CM_STR_LOGIN_WINDOW_NICE); break;
|
||||
case 2: SetDParam(0, CM_STR_LOGIN_WINDOW_BTPRO); break;
|
||||
case 3: SetDParam(0, CM_STR_LOGIN_WINDOW_CITYMANIA); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OnClick([[maybe_unused]] Point pt, int widget, [[maybe_unused]] int click_count) override
|
||||
{
|
||||
switch (widget) {
|
||||
case LWW_NOVAPOLIS:
|
||||
if(/*_novahost && */_networking) AccountLogin(CITYMANIA);
|
||||
break;
|
||||
case LWW_NICE:
|
||||
if(_networking) AccountLogin(NICE);
|
||||
break;
|
||||
case LWW_BTPRO:
|
||||
if(_networking) AccountLogin(BTPRO);
|
||||
break;
|
||||
case LWW_NOVAPOLIS_LOGIN:
|
||||
case LWW_NICE_LOGIN:
|
||||
case LWW_BTPRO_LOGIN:
|
||||
case LWW_USER_NAME:
|
||||
this->query_widget = (LoginWindowQueryWidgets)widget;
|
||||
ShowQueryString(STR_EMPTY, CM_STR_LOGIN_WINDOW_CHANGE_USERNAME, MAX_COMMUNITY_STRING_LEN, this, CS_ALPHANUMERAL, QSF_NONE);
|
||||
break;
|
||||
case LWW_NOVAPOLIS_PW:
|
||||
case LWW_NICE_PW:
|
||||
case LWW_BTPRO_PW:
|
||||
case LWW_USER_PW:
|
||||
this->query_widget = (LoginWindowQueryWidgets)widget;
|
||||
ShowQueryString(STR_EMPTY, CM_STR_LOGIN_WINDOW_CHANGE_PASSWORD, MAX_COMMUNITY_STRING_LEN, this, CS_ALPHANUMERAL, QSF_NONE);
|
||||
break;
|
||||
case LWW_ADMIN_PW:
|
||||
this->query_widget = (LoginWindowQueryWidgets)widget;
|
||||
ShowQueryString(STR_EMPTY, CM_STR_LOGIN_WINDOW_CHANGE_PASSWORD, MAX_COMMUNITY_STRING_LEN, this, CS_ALPHANUMERAL, QSF_NONE);
|
||||
break;
|
||||
case LWW_USER_LOGIN: {
|
||||
switch (_community) {
|
||||
case 1: if(_networking) AccountLogin(NICE); break;
|
||||
case 2: if(_networking) AccountLogin(BTPRO); break;
|
||||
case 3: if(/*_novahost && */_networking) AccountLogin(CITYMANIA); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LWW_USER_LOGOUT:
|
||||
NetworkClientSendChatToServer("!logout"); break;
|
||||
case LWW_ADMIN_LOGIN: {
|
||||
switch (_community) {
|
||||
case 1: {
|
||||
if(_networking) NetworkClientSendChatToServer(fmt::format("!alogin {} {}", _inilogindata[NICEUSER], base64_decode(_inilogindata[NICEADMINPW])));
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
if(_networking) NetworkClientSendChatToServer(fmt::format("!alogin {} {}", _inilogindata[BTPROUSER], base64_decode(_inilogindata[BTPROADMINPW])));
|
||||
break;
|
||||
}
|
||||
//case 3: if(/*_novahost && */_networking) AccountLogin(CITYMANIA); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LWW_ADMIN_LOGOUT:
|
||||
NetworkClientSendChatToServer("!alogout"); break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -737,22 +856,17 @@ struct LoginWindow : Window {
|
||||
{
|
||||
if (str == NULL) return;
|
||||
switch(this->query_widget){
|
||||
case LQW_NOVAPOLIS_LOGIN: {
|
||||
SetLoginItem(NOVAPOLIS_LOGIN, str);
|
||||
case LQW_USER_NAME: {
|
||||
switch (_community) {
|
||||
case 1: SetLoginItem(NICE_LOGIN, str); break;
|
||||
case 2: SetLoginItem(BTPRO_LOGIN, str); break;
|
||||
case 3: SetLoginItem(NOVAPOLIS_LOGIN, str); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LQW_NOVAPOLIS_PW: {
|
||||
SetLoginItem(NOVAPOLIS_PW, str);
|
||||
break;
|
||||
}
|
||||
case LQW_NICE_LOGIN:
|
||||
case LQW_BTPRO_LOGIN:
|
||||
case LQW_BTPRO_PW: {
|
||||
auto item = urlencode(str);
|
||||
SetLoginItem(INI_LOGIN_KEYS[this->query_widget - 3], item); // - LWW_NICE_LOGIN + NICE_LOGIN
|
||||
break;
|
||||
}
|
||||
case LQW_NICE_PW: {
|
||||
case LQW_USER_PW: {
|
||||
switch (_community) {
|
||||
case 1: {
|
||||
Md5 password, salted_password;
|
||||
MD5Hash digest;
|
||||
|
||||
@@ -769,12 +883,230 @@ struct LoginWindow : Window {
|
||||
SetLoginItem(NICE_PW, second_pass);
|
||||
break;
|
||||
}
|
||||
case 2: SetLoginItem(BTPRO_PW, str); break;
|
||||
case 3: SetLoginItem(NOVAPOLIS_PW, str); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case LQW_ADMIN_PW: {
|
||||
switch (_community) {
|
||||
case 1: SetLoginItem(NICE_ADMIN_PW, base64_encode((const unsigned char *)str, strlen(str))); break;
|
||||
case 2: SetLoginItem(BTPRO_ADMIN_PW, base64_encode((const unsigned char *)str, strlen(str))); break;
|
||||
//case 3: SetLoginItem(NOVAPOLIS_PW, str); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: return;
|
||||
}
|
||||
this->SetDirty();
|
||||
}
|
||||
};
|
||||
|
||||
struct AdminCompanyButtonsWindow : Window {
|
||||
AdminCompanyButtonsQueryWidgets query_widget;
|
||||
//CompanyID company;
|
||||
|
||||
AdminCompanyButtonsWindow(WindowDesc *desc, WindowNumber window_number) : Window(desc) {
|
||||
|
||||
this->InitNested(window_number);
|
||||
|
||||
/* disable not supported buttons for n-ice */
|
||||
if (GetServerItem(COMMUNITY) == "1") {
|
||||
this->DisableWidget(ACB_COMPANY_SUSPEND);
|
||||
this->DisableWidget(ACB_COMPANY_UNSUSPEND);
|
||||
this->DisableWidget(ACB_COMPANY_AWARNING);
|
||||
}
|
||||
}
|
||||
|
||||
static void CWCompanyResetCallback(Window* w, bool confirmed)
|
||||
{
|
||||
if (confirmed) NetworkClientSendChatToServer(fmt::format("!resetcompany {}",w->window_number));
|
||||
}
|
||||
|
||||
static void CWCompanyResetSpecCallback(Window* w, bool confirmed)
|
||||
{
|
||||
if (confirmed) NetworkClientSendChatToServer(fmt::format("!resetcompanyspec {}",w->window_number));
|
||||
}
|
||||
|
||||
static void CWCompanyResetKickCallback(Window* w, bool confirmed)
|
||||
{
|
||||
if (confirmed) NetworkClientSendChatToServer(fmt::format("!resetcompanykick {}",w->window_number));
|
||||
}
|
||||
|
||||
|
||||
virtual void OnClick([[maybe_unused]] Point pt, int widget,[[maybe_unused]] int click_count)
|
||||
{
|
||||
if(!_networking) return;
|
||||
int _company = this->window_number;
|
||||
switch (widget) {
|
||||
case ACB_COMPANY_EMPTY:
|
||||
NetworkClientSendChatToServer(fmt::format("!emptycompany {}",_company));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_RESET_KICK:
|
||||
ShowQuery(CM_STR_ACB_RESET_COMP, CM_STR_ACB_RESET_KICK_SURE, this, CWCompanyResetKickCallback);
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_RESET_SPEC:
|
||||
ShowQuery(CM_STR_ACB_RESET_COMP, CM_STR_ACB_RESET_SPEC_SURE, this, CWCompanyResetSpecCallback);
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_RESET:
|
||||
ShowQuery(CM_STR_ACB_RESET_COMP, CM_STR_ACB_RESET_COMP_SURE, this, CWCompanyResetCallback);
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_RESET_COMPANY_TIMER:
|
||||
this->query_widget = ACBQ_RESET_COMPANY_TIMER;
|
||||
SetDParam(0, _company);
|
||||
ShowQueryString(STR_EMPTY, CM_STR_ACB_RESET_TIMER_VALUE, 25, this, CS_NUMERAL, QSF_NONE);
|
||||
break;
|
||||
case ACB_RESET_COMPANY_TIMER_120:
|
||||
NetworkClientSendChatToServer(fmt::format("!resetcompanytimer {} 120",_company));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_RESET_COMPANY_TIMER_CANCEL:
|
||||
NetworkClientSendChatToServer(fmt::format("!cancelresetcompany {}",_company));
|
||||
break;
|
||||
case ACB_COMPANY_LOCK:
|
||||
NetworkClientSendChatToServer(fmt::format("!lockcompany {}",_company));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_UNLOCK:
|
||||
NetworkClientSendChatToServer(fmt::format("!unlockcompany {}",_company));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_KNOWN:
|
||||
NetworkClientSendChatToServer(fmt::format("!known {}",_company));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_RESET_KNOWN:
|
||||
NetworkClientSendChatToServer(fmt::format("!resetknown {}",_company));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_MOVE_PLAYER:
|
||||
this->query_widget = ACBQ_COMPANY_MOVE_PLAYER;
|
||||
SetDParam(0, _company);
|
||||
ShowQueryString(STR_EMPTY, STR_NETWORK_SERVER_LIST_PLAYER_NAME, 250, this, CS_ALPHANUMERAL, QSF_NONE);
|
||||
break;
|
||||
case ACB_COMPANY_NEWSTICKET:
|
||||
this->query_widget = ACBQ_COMPANY_NEWSTICKET;
|
||||
SetDParam(0, _company);
|
||||
ShowQueryString(STR_EMPTY, CM_STR_ACB_PLAYER_NEWSTICKET, 250, this, CS_ALPHANUMERAL, QSF_NONE);
|
||||
break;
|
||||
case ACB_COMPANY_NEWSTICKET_COMP:
|
||||
this->query_widget = ACBQ_COMPANY_NEWSTICKET_COMP;
|
||||
SetDParam(0, _company);
|
||||
ShowQueryString(STR_EMPTY, CM_STR_ACB_PLAYER_NEWSTICKET, 250, this, CS_ALPHANUMERAL, QSF_NONE);
|
||||
break;
|
||||
case ACB_COMPANY_SUSPEND:
|
||||
NetworkClientSendChatToServer(fmt::format("!suspend {}",_company));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_UNSUSPEND:
|
||||
NetworkClientSendChatToServer(fmt::format("!unsuspend {}",_company));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_AWARNING:
|
||||
NetworkClientSendChatToServer(fmt::format("!awarning {}",_company));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_JOIN2:
|
||||
NetworkClientSendChatToServer(fmt::format("!move #{} {}",_network_own_client_id ,_company));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACB_COMPANY_LEAVE:
|
||||
NetworkClientRequestMove(COMPANY_SPECTATOR);
|
||||
break;
|
||||
case ACB_COMPANY_CANCEL:
|
||||
this->Close();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetStringParameters(WidgetID widget) const override
|
||||
{
|
||||
switch (widget) {
|
||||
case ACB_COMPANY_CAPTION:
|
||||
SetDParam(0, this->window_number);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OnQueryTextFinished(char *str)
|
||||
{
|
||||
if (str == NULL) return;
|
||||
switch (this->query_widget) {
|
||||
default: NOT_REACHED();
|
||||
|
||||
case ACBQ_RESET_COMPANY_TIMER:
|
||||
NetworkClientSendChatToServer(fmt::format("!resetcompanytimer {} {}",this->window_number,str));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
case ACBQ_COMPANY_NEWSTICKET: {
|
||||
std::string buffer = GetString(STR_COMPANY_NAME);
|
||||
NetworkClientSendChatToServer(fmt::format("!news {}: {}", buffer, str));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
}
|
||||
case ACBQ_COMPANY_NEWSTICKET_COMP: {
|
||||
std::string buffer = GetString(STR_COMPANY_NAME);
|
||||
NetworkClientSendChatToServer(fmt::format("!news {} {}", this->window_number, str));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
}
|
||||
case ACBQ_COMPANY_MOVE_PLAYER: {
|
||||
NetworkClientSendChatToServer(fmt::format("!move #{} {}",str, this->window_number));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
struct JoinLastServerWindow : Window {
|
||||
// CompanyID company;
|
||||
|
||||
JoinLastServerWindow(WindowDesc *desc, WindowNumber window_number)
|
||||
: Window(desc) {
|
||||
|
||||
this->InitNested(window_number);
|
||||
|
||||
if (_settings_client.network.last_joined == "")
|
||||
this->DisableWidget(LSW_BUTTON);
|
||||
}
|
||||
|
||||
virtual void OnClick([[maybe_unused]] Point pt, int widget,[[maybe_unused]] int click_count)
|
||||
{
|
||||
switch (widget) {
|
||||
case LSW_BUTTON: {
|
||||
std::string _server = _settings_client.network.last_joined;
|
||||
if (_ctrl_pressed)
|
||||
NetworkClientConnectGame(_server, COMPANY_NEW_COMPANY);
|
||||
else
|
||||
NetworkClientConnectGame(_server, COMPANY_SPECTATOR);
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
void SetStringParameters(WidgetID widget) const override {
|
||||
switch (widget) {
|
||||
case LSW_BUTTON:
|
||||
if (_server != "")
|
||||
SetDParam(0, STR_JUST_NOTHING);
|
||||
else {
|
||||
SetDParam(0, STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST);
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
|
||||
static const NWidgetPart _nested_login_window_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
|
||||
@@ -783,54 +1115,178 @@ static const NWidgetPart _nested_login_window_widgets[] = {
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0),
|
||||
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPadding(10),
|
||||
//novapolis
|
||||
//welcome
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_COMMUNITY), SetMinimalSize(100, 20), SetAlignment(SA_CENTER), SetDataTip(CM_STR_LOGIN_WINDOW_WELCOME, 0), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
//username and pw
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_USERNAME), SetDataTip(CM_STR_LOGIN_WINDOW_USERNAME, 0),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_USER_NAME), SetMinimalSize(100, 15), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_LOGIN_WINDOW_USERNAME_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_USERNAME_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(20, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_PASSWORD), SetDataTip(CM_STR_LOGIN_WINDOW_PASSWORD, 0),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_USER_PW), SetMinimalSize(50, 15), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_LOGIN_WINDOW_PASSWORD_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 5),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 20),
|
||||
//login and logout
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NOVAPOLIS_LOGIN), SetMinimalSize(60, 20), SetFill(1, 0), SetDataTip(CM_STR_LOGIN_WINDOW_USERNAME_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_USERNAME_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(20, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NOVAPOLIS_PW), SetMinimalSize(30, 20), SetFill(1, 0), SetDataTip(CM_STR_LOGIN_WINDOW_PASSWORD_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, LWW_USER_LOGIN), SetMinimalSize(40, 30), SetAlignment(SA_CENTER), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_TOOLBAR_COMMANDS_LOGIN_CAPTION, CM_STR_TOOLBAR_COMMANDS_LOGIN_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(10, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, LWW_USER_LOGOUT), SetMinimalSize(40, 30), SetAlignment(SA_CENTER), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_TOOLBAR_COMMANDS_LOGOUT_CAPTION, CM_STR_TOOLBAR_COMMANDS_LOGOUT_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_PURPLE, LWW_NOVAPOLIS), SetMinimalSize(100, 30), SetFill(1, 0), SetDataTip(CM_STR_LOGIN_WINDOW_CITYMANIA, CM_STR_LOGIN_WINDOW_SIGN_IN_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
//n-ice
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_USERNAME), SetDataTip(CM_STR_LOGIN_WINDOW_USERNAME, 0),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(20, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_PASSWORD), SetDataTip(CM_STR_LOGIN_WINDOW_PASSWORD, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 5),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NICE_LOGIN), SetMinimalSize(60, 20), SetFill(1, 0), SetDataTip(CM_STR_LOGIN_WINDOW_USERNAME_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_USERNAME_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(20, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_NICE_PW), SetMinimalSize(30, 20), SetFill(1, 0), SetDataTip(CM_STR_LOGIN_WINDOW_PASSWORD_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_LIGHT_BLUE, LWW_NICE), SetMinimalSize(100, 30), SetFill(1, 0), SetDataTip(CM_STR_LOGIN_WINDOW_NICE, CM_STR_LOGIN_WINDOW_SIGN_IN_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
//btpro
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_USERNAME), SetDataTip(CM_STR_LOGIN_WINDOW_USERNAME, 0),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(20, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_PASSWORD), SetDataTip(CM_STR_LOGIN_WINDOW_PASSWORD, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 5),
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_BTPRO_LOGIN), SetMinimalSize(60, 20), SetFill(1, 0), SetDataTip(CM_STR_LOGIN_WINDOW_USERNAME_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_USERNAME_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(20, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_BTPRO_PW), SetMinimalSize(30, 20), SetFill(1, 0), SetDataTip(CM_STR_LOGIN_WINDOW_PASSWORD_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, LWW_BTPRO), SetMinimalSize(100, 30), SetFill(1, 0), SetDataTip(CM_STR_LOGIN_WINDOW_BTPRO, CM_STR_LOGIN_WINDOW_SIGN_IN_HELPTEXT),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
static const NWidgetPart _nested_admin_window_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_CLOSEBOX, COLOUR_GREY),
|
||||
NWidget(WWT_CAPTION, COLOUR_GREY), SetDataTip(CM_STR_LOGIN_WINDOW_CAPTION, 0),
|
||||
NWidget(WWT_STICKYBOX, COLOUR_GREY),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetResize(1, 0),
|
||||
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPadding(10),
|
||||
//welcome
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_COMMUNITY), SetMinimalSize(100, 20), SetAlignment(SA_CENTER), SetDataTip(CM_STR_LOGIN_WINDOW_WELCOME, 0), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
//username and pw
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_USERNAME), SetDataTip(CM_STR_LOGIN_WINDOW_USERNAME, 0),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_USER_NAME), SetMinimalSize(100, 15), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_LOGIN_WINDOW_USERNAME_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_USERNAME_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(20, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_PASSWORD), SetDataTip(CM_STR_LOGIN_WINDOW_PASSWORD, 0),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_USER_PW), SetMinimalSize(50, 15), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_LOGIN_WINDOW_PASSWORD_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(20, 0),
|
||||
NWidget(WWT_TEXT, COLOUR_BROWN, LWW_ADMIN_PW), SetDataTip(CM_STR_LOGIN_WINDOW_ADMIN_PASSWORD, 0),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_BROWN, LWW_ADMIN_PW), SetMinimalSize(50, 15), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_LOGIN_WINDOW_PASSWORD_DISPLAY, CM_STR_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 20),
|
||||
//login and logout
|
||||
NWidget(NWID_HORIZONTAL, NC_EQUALSIZE),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, LWW_USER_LOGIN), SetMinimalSize(40, 30), SetAlignment(SA_CENTER), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_TOOLBAR_COMMANDS_LOGIN_CAPTION, CM_STR_TOOLBAR_COMMANDS_LOGIN_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(10, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, LWW_USER_LOGOUT), SetMinimalSize(40, 30), SetAlignment(SA_CENTER), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_TOOLBAR_COMMANDS_LOGOUT_CAPTION, CM_STR_TOOLBAR_COMMANDS_LOGOUT_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(10, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, LWW_ADMIN_LOGIN), SetMinimalSize(40, 30), SetAlignment(SA_CENTER), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_LOGIN_WINDOW_ADMIN_LOGIN, CM_STR_TOOLBAR_COMMANDS_LOGIN_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(10, 0),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, LWW_ADMIN_LOGOUT), SetMinimalSize(40, 30), SetAlignment(SA_CENTER), SetFill(1, 1),
|
||||
SetDataTip(CM_STR_LOGIN_WINDOW_ADMIN_LOGOUT, CM_STR_TOOLBAR_COMMANDS_LOGOUT_TOOLTIP),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 10),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
static const NWidgetPart _nested_admin_company_window_widgets[] = {
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(WWT_CAPTION,COLOUR_END, ACB_COMPANY_CAPTION),
|
||||
SetDataTip(CM_STR_ACB_COMPANY_ADMIN_CAPTION, 0),
|
||||
SetMinimalSize(10,17),
|
||||
EndContainer(),
|
||||
NWidget(WWT_PANEL, COLOUR_GREY), SetFill(0, 1),
|
||||
NWidget(NWID_HORIZONTAL),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(1, 0),
|
||||
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(5, 3, 5),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_LOCK), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_LOCK, CM_STR_ACB_LOCK_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_UNLOCK), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_UNLOCK, CM_STR_ACB_UNLOCK_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_KNOWN), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_KNOWN, CM_STR_ACB_KNOWN_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_RESET_KNOWN), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_RESET_KNOWN, CM_STR_ACB_RESET_KNOWN_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_MOVE_PLAYER), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_MOVE_PLAYER_TO, CM_STR_ACB_MOVE_PLAYER_TO_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_NEWSTICKET_COMP), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_COMPANY_NEWSTICKET_BUTTON_COMP, CM_STR_ACB_COMPANY_NEWSTICKET_BUTTON_COMP_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_SUSPEND), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_SUSPEND, CM_STR_ACB_SUSPEND_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_UNSUSPEND), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_UNSUSPEND, CM_STR_ACB_UNSUSPEND_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_JOIN2),SetMinimalSize(10, 13), SetFill(1, 0),SetDataTip(CM_STR_ACB_COMPANY_JOIN2, CM_STR_ACB_COMPANY_JOIN2_TOOLTIP),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(1, 0),
|
||||
NWidget(NWID_VERTICAL, NC_EQUALSIZE), SetPIP(5, 3, 5),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_EMPTY), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_EMPTY, CM_STR_ACB_EMPTY_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_RESET), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_RESET, CM_STR_ACB_RESET_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_RESET_SPEC), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_RESET_SPEC, CM_STR_ACB_RESET_SPEC_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_RESET_KICK), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_RESET_KICK, CM_STR_ACB_RESET_KICK_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_RESET_COMPANY_TIMER_120), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_RESET_TIMER_120, CM_STR_ACB_RESET_TIMER_120_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_RESET_COMPANY_TIMER), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_RESET_TIMER, CM_STR_ACB_RESET_TIMER_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_RESET_COMPANY_TIMER_CANCEL), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_RESET_TIMER_CANCEL, CM_STR_ACB_RESET_TIMER_CANCEL_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_AWARNING), SetMinimalSize(10, 13), SetFill(1, 0), SetDataTip(CM_STR_ACB_AWARNING, CM_STR_ACB_AWARNING_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, ACB_COMPANY_LEAVE),SetMinimalSize(10, 13), SetFill(1, 0),SetDataTip(STR_NETWORK_COMPANY_LIST_SPECTATE, STR_NETWORK_COMPANY_LIST_SPECTATE),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(5, 0), SetFill(1, 0),
|
||||
EndContainer(),
|
||||
NWidget(NWID_SPACER), SetMinimalSize(0, 5), SetFill(0, 1),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
static const NWidgetPart _nested_last_server_widgets[] = {
|
||||
NWidget(WWT_PANEL, COLOUR_BROWN), SetFill(0, 1),
|
||||
//NWidget(NWID_HORIZONTAL),
|
||||
// NWidget(WWT_CAPTION, COLOUR_BROWN, LSW_CAPTION), SetMinimalSize(322, 20), SetAlignment(SA_CENTER), SetDataTip(STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER, 0), SetFill(1, 1),
|
||||
//EndContainer(),
|
||||
NWidget(NWID_HORIZONTAL), SetPadding(4),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_ORANGE, LSW_BUTTON), SetMinimalSize(322, 20), SetAlignment(SA_CENTER), SetDataTip(STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST, CM_STR_SCS_COMPANY_NEW_JOIN_TOOLTIP), SetFill(1, 1),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
};
|
||||
|
||||
/* Identify the current community */
|
||||
void CheckCommunity() {
|
||||
if (_network_server_name.find("n-ice.org") != std::string::npos) {
|
||||
if (GetServerItem(COMMUNITY) != "1") {
|
||||
SetServerItem(COMMUNITY, "1");
|
||||
// GetCommunityServerListText();
|
||||
}
|
||||
} else if (_network_server_name.find("BTPro.nl") != std::string::npos) {
|
||||
if (GetServerItem(COMMUNITY) != "2") {
|
||||
SetServerItem(COMMUNITY, "2");
|
||||
// GetCommunityServerListText();
|
||||
}
|
||||
} else if (_network_server_name.find("CityMania.org") != std::string::npos) {
|
||||
if (GetServerItem(COMMUNITY) != "3") {
|
||||
SetServerItem(COMMUNITY, "3");
|
||||
// GetCommunityServerListText();
|
||||
}
|
||||
} else if (_network_server_name.find("reddit.com") != std::string::npos) {
|
||||
if (GetServerItem(COMMUNITY) != "4") {
|
||||
SetServerItem(COMMUNITY, "4");
|
||||
// GetCommunityServerListText();
|
||||
}
|
||||
} else { // Unknown Server
|
||||
SetServerItem(COMMUNITY, "0");
|
||||
}
|
||||
};
|
||||
|
||||
void CheckAdmin(){
|
||||
IniInitiate();
|
||||
if (GetLoginItem(ADMIN) == "1")
|
||||
_admin = true;
|
||||
};
|
||||
|
||||
|
||||
static WindowDesc _login_window_desc(__FILE__, __LINE__,
|
||||
WDP_CENTER, "cm_login", 0, 0,
|
||||
CM_WC_LOGIN_WINDOW, WC_NONE,
|
||||
@@ -838,11 +1294,75 @@ static WindowDesc _login_window_desc(__FILE__, __LINE__,
|
||||
std::begin(_nested_login_window_widgets), std::end(_nested_login_window_widgets)
|
||||
);
|
||||
|
||||
void ShowLoginWindow()
|
||||
{
|
||||
IniLoginInitiate();
|
||||
static WindowDesc _admin_window_desc(__FILE__, __LINE__,
|
||||
WDP_CENTER, "cm_login", 0, 0,
|
||||
CM_WC_LOGIN_WINDOW, WC_NONE,
|
||||
WDF_CONSTRUCTION,
|
||||
std::begin(_nested_admin_window_widgets), std::end(_nested_admin_window_widgets)
|
||||
);
|
||||
|
||||
static WindowDesc _admin_company_buttons_desc(__FILE__, __LINE__,
|
||||
WDP_AUTO, NULL, 0, 0,
|
||||
CM_WC_ADMIN_COMPANY_BUTTONS, WC_NONE,
|
||||
WDF_CONSTRUCTION,
|
||||
std::begin(_nested_admin_company_window_widgets), std::end(_nested_admin_company_window_widgets)
|
||||
);
|
||||
|
||||
static WindowDesc _last_server_desc(__FILE__, __LINE__,
|
||||
WDP_AUTO, NULL, 0, 0,
|
||||
CM_LAST_SERVER,
|
||||
WC_NONE, WDF_CONSTRUCTION, std::begin(_nested_last_server_widgets),
|
||||
std::end(_nested_last_server_widgets));
|
||||
|
||||
void ShowLoginWindow() {
|
||||
IniInitiate();
|
||||
CheckCommunity();
|
||||
CheckAdmin();
|
||||
CloseWindowByClass(CM_WC_LOGIN_WINDOW);
|
||||
AllocateWindowDescFront<LoginWindow>(&_login_window_desc, 0);
|
||||
if (!_admin) AllocateWindowDescFront<LoginWindow>(&_login_window_desc, 0);
|
||||
else AllocateWindowDescFront<LoginWindow>(&_admin_window_desc, 0);
|
||||
};
|
||||
|
||||
|
||||
void ShowAdminCompanyButtons(int left, int top, int width, int company2, bool draw, bool redraw) {
|
||||
//IniInitiate();
|
||||
//CheckCommunity();
|
||||
if (!draw) {
|
||||
CloseWindowById(CM_WC_ADMIN_COMPANY_BUTTONS, company2);
|
||||
/* clear for company */
|
||||
ACB_Location[company2 - 1][0]=0;
|
||||
ACB_Location[company2 - 1][1]=0;
|
||||
ACB_Location[company2 - 1][2]=0;
|
||||
return;
|
||||
}
|
||||
if (!Company::IsValidID((CompanyID)(company2-1))) return;
|
||||
if ((left == ACB_Location[company2 - 1][0]) &&
|
||||
(top == ACB_Location[company2 - 1][1]) &&
|
||||
(width == ACB_Location[company2 - 1][2]) &&
|
||||
(!redraw))
|
||||
return;
|
||||
|
||||
/* set for company */
|
||||
ACB_Location[company2 - 1][0] = left;
|
||||
ACB_Location[company2 - 1][1] = top;
|
||||
ACB_Location[company2 - 1][2] = width;
|
||||
|
||||
CloseWindowById(CM_WC_ADMIN_COMPANY_BUTTONS, company2);
|
||||
Window *w;
|
||||
w = new AdminCompanyButtonsWindow(&_admin_company_buttons_desc, company2);
|
||||
w->top = top;
|
||||
w->left = left + width;
|
||||
w->SetDirty();
|
||||
};
|
||||
|
||||
/* last server widget */
|
||||
void JoinLastServer(int left, int top, int height) {
|
||||
CloseWindowByClass(CM_LAST_SERVER);
|
||||
Window *d;
|
||||
d = new JoinLastServerWindow(&_last_server_desc, 0);
|
||||
d->top = top + height;
|
||||
d->left = left;
|
||||
}
|
||||
|
||||
|
||||
} // namespace citymania
|
||||
|
||||
@@ -5,6 +5,11 @@ namespace citymania {
|
||||
|
||||
void ShowCommandsToolbar();
|
||||
void ShowLoginWindow();
|
||||
void CheckAdmin();
|
||||
void ShowAdminCompanyButtons(int left, int top, int width, int company2, bool draw, bool redraw);
|
||||
void JoinLastServer(int left, int top, int height);
|
||||
|
||||
bool GetAdmin();
|
||||
|
||||
} // namespace citymania
|
||||
|
||||
|
||||
@@ -49,9 +49,12 @@
|
||||
|
||||
#include "citymania/cm_hotkeys.hpp"
|
||||
#include "citymania/cm_main.hpp"
|
||||
#include "citymania/cm_commands_gui.hpp"
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
/* Admin company buttons */
|
||||
bool Show_ACB[15];
|
||||
|
||||
/** Company GUI constants. */
|
||||
static void DoSelectCompanyManagerFace(Window *parent);
|
||||
@@ -2196,6 +2199,10 @@ static constexpr NWidgetPart _nested_company_widgets[] = {
|
||||
NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_RELOCATE_HQ), SetDataTip(STR_COMPANY_VIEW_RELOCATE_HQ, STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS),
|
||||
NWidget(NWID_SPACER),
|
||||
EndContainer(),
|
||||
/* Admin company buttons */
|
||||
NWidget(NWID_SELECTION, INVALID_COLOUR, CM_WID_C_SELECT_ADMINBUTTONS),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, CM_WID_C_ADMINBUTTONS), SetDataTip(CM_STR_ACB_COMPANY_ADMIN_BUTTON, CM_STR_ACB_COMPANY_ADMIN_BUTTON_TOOLTIP),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
|
||||
@@ -2225,14 +2232,6 @@ static constexpr NWidgetPart _nested_company_widgets[] = {
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_PASSWORD), SetDataTip(STR_COMPANY_VIEW_PASSWORD, STR_COMPANY_VIEW_PASSWORD_TOOLTIP),
|
||||
NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_COMPANY_JOIN), SetDataTip(STR_COMPANY_VIEW_JOIN, STR_COMPANY_VIEW_JOIN_TOOLTIP),
|
||||
EndContainer(),
|
||||
// NWidget(NWID_SELECTION, INVALID_COLOUR, WID_C_SELECT_MOD),
|
||||
// NWidget(NWID_SPACER), SetMinimalSize(0, 0), SetFill(0, 1),
|
||||
// NWidget(NWID_VERTICAL), SetPIP(4, 2, 4),
|
||||
// NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_JOIN), SetFill(1, 0), SetDataTip(STR_MOD_COMPANY_JOIN_BUTTON, STR_NULL),
|
||||
// NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_TOGGLE_LOCK), SetFill(1, 0), SetDataTip(STR_MOD_TOGGLE_LOCK_BUTTON, STR_NULL),
|
||||
// NWidget(WWT_TEXTBTN, COLOUR_GREY, WID_C_MOD_COMPANY_RESET), SetFill(1, 0), SetDataTip(STR_MOD_COMPANY_RESET_BUTTON, STR_NULL),
|
||||
// EndContainer(),
|
||||
// EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
EndContainer(),
|
||||
@@ -2257,14 +2256,6 @@ static const StringID _company_view_vehicle_count_strings[] = {
|
||||
/**
|
||||
* Window with general information about a company
|
||||
*/
|
||||
static void ResetCallback(Window *w, bool confirmed)
|
||||
{
|
||||
if (confirmed) {
|
||||
CompanyID company2 = (CompanyID)w->window_number;
|
||||
citymania::NetworkClientSendChatToServer(fmt::format("!reset {}", company2 + 1));
|
||||
}
|
||||
}
|
||||
|
||||
struct CompanyWindow : Window
|
||||
{
|
||||
CompanyWidgets query_widget;
|
||||
@@ -2302,6 +2293,10 @@ struct CompanyWindow : Window
|
||||
/* Button bar selection. */
|
||||
reinit |= this->GetWidget<NWidgetStacked>(WID_C_SELECT_BUTTONS)->SetDisplayedPlane(local ? 0 : SZSP_NONE);
|
||||
|
||||
/* Admin company buttons: show/hide admin menue button from param of citymania.cfg */
|
||||
citymania::CheckAdmin();
|
||||
reinit |= this->GetWidget<NWidgetStacked>(CM_WID_C_SELECT_ADMINBUTTONS)->SetDisplayedPlane(citymania::GetAdmin() ? 0 : SZSP_NONE);
|
||||
|
||||
/* Build HQ button handling. */
|
||||
reinit |= this->GetWidget<NWidgetStacked>(WID_C_SELECT_VIEW_BUILD_HQ)->SetDisplayedPlane((local && c->location_of_HQ == INVALID_TILE) ? CWP_VB_BUILD : CWP_VB_VIEW);
|
||||
|
||||
@@ -2321,17 +2316,13 @@ struct CompanyWindow : Window
|
||||
|
||||
if (reinit) {
|
||||
this->ReInit();
|
||||
/* Admin company buttons: recall buttons while join/leave company */
|
||||
if (Show_ACB[this->window_number]) citymania::ShowAdminCompanyButtons(this->left, this->top, this->width, this->window_number + 1, Show_ACB[this->window_number], true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// if(!_networking) {
|
||||
// this->SetWidgetDisabledState(CW_WIDGET_COMPANY_RESUME, true);
|
||||
// this->SetWidgetDisabledState(CW_WIDGET_COMPANY_SUSPEND, true);
|
||||
// this->SetWidgetDisabledState(CW_WIDGET_COMPANY_RESET, true);
|
||||
// this->SetWidgetDisabledState(CW_WIDGET_COMPANY_JOIN2, true);
|
||||
// }
|
||||
|
||||
/* Admin company buttons: recall buttons while moving company window */
|
||||
if (Show_ACB[this->window_number]) citymania::ShowAdminCompanyButtons(this->left, this->top, this->width, this->window_number + 1, Show_ACB[this->window_number], false);
|
||||
this->DrawWidgets();
|
||||
}
|
||||
|
||||
@@ -2389,19 +2380,14 @@ struct CompanyWindow : Window
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_GIVE_MONEY_BUTTON).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_PASSWORD).width);
|
||||
size->width = std::max(size->width, GetStringBoundingBox(STR_COMPANY_VIEW_JOIN).width);
|
||||
|
||||
size->width += padding.width;
|
||||
break;
|
||||
|
||||
// case CW_WIDGET_COMPANY_RESUME:
|
||||
// case CW_WIDGET_COMPANY_SUSPEND:
|
||||
// case CW_WIDGET_COMPANY_RESET:
|
||||
// case CW_WIDGET_COMPANY_JOIN2:
|
||||
// if(!_novarole){
|
||||
// size->width = 0;
|
||||
// size->height = 0;
|
||||
// }
|
||||
// break;
|
||||
/* Admin company buttons */
|
||||
case CM_WID_C_ADMINBUTTONS:
|
||||
size->width = std::max(size->width, GetStringBoundingBox(CM_STR_ACB_COMPANY_ADMIN_BUTTON).width);
|
||||
|
||||
case WID_C_HAS_PASSWORD:
|
||||
if (_networking) *size = maxdim(*size, GetSpriteSize(SPR_LOCK));
|
||||
break;
|
||||
@@ -2624,27 +2610,12 @@ struct CompanyWindow : Window
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
}
|
||||
|
||||
case WID_C_MOD_COMPANY_JOIN: {
|
||||
if (!_novarole) return;
|
||||
/* Admin company buttons: show/hide buttons */
|
||||
case CM_WID_C_ADMINBUTTONS: {
|
||||
CompanyID company2 = (CompanyID)this->window_number;
|
||||
// this->query_widget = WID_C_MOD_COMPANY_JOIN;
|
||||
citymania::NetworkClientSendChatToServer(fmt::format("!move {}", company2 + 1));
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
}
|
||||
case WID_C_MOD_COMPANY_RESET: {
|
||||
if (!_networking) return;
|
||||
this->query_widget = WID_C_MOD_COMPANY_RESET;
|
||||
ShowQuery(CM_STR_XI_RESET_CAPTION, CM_STR_XI_REALY_RESET, this, ResetCallback);
|
||||
MarkWholeScreenDirty();
|
||||
break;
|
||||
}
|
||||
case WID_C_MOD_COMPANY_TOGGLE_LOCK: {
|
||||
if (!_novarole) return;
|
||||
CompanyID company2 = (CompanyID)this->window_number;
|
||||
citymania::NetworkClientSendChatToServer(fmt::format("!lockp {}", company2 + 1));
|
||||
MarkWholeScreenDirty();
|
||||
if (!Show_ACB[company2]) Show_ACB[company2] = true;
|
||||
else Show_ACB[company2] = false;
|
||||
citymania::ShowAdminCompanyButtons(this->left, this->top, this->width,company2 + 1, Show_ACB[company2], false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include "table/sprites.h"
|
||||
|
||||
#include "citymania/cm_hotkeys.hpp"
|
||||
#include "citymania/cm_commands_gui.hpp"
|
||||
|
||||
#include "safeguards.h"
|
||||
|
||||
@@ -297,6 +298,8 @@ struct SelectGameWindow : public Window {
|
||||
DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_INTRO_TRANSLATION, TC_FROMSTRING, SA_CENTER);
|
||||
break;
|
||||
}
|
||||
/* last server widget */
|
||||
citymania::JoinLastServer(this->left, this->top, this->height);
|
||||
}
|
||||
|
||||
void UpdateWidgetSize(WidgetID widget, Dimension *size, [[maybe_unused]] const Dimension &padding, [[maybe_unused]] Dimension *fill, [[maybe_unused]] Dimension *resize) override
|
||||
|
||||
@@ -5951,6 +5951,8 @@ CM_STR_TOOLBAR_COMMANDS_HINT_CAPTION :{BLACK}CB Hint
|
||||
CM_STR_TOOLBAR_COMMANDS_HINT_TOOLTIP :{BLACK}Send !hint command to server(Shows town demand in CB mode).
|
||||
CM_STR_TOOLBAR_COMMANDS_LOGIN_CAPTION :{BLACK}Login
|
||||
CM_STR_TOOLBAR_COMMANDS_LOGIN_TOOLTIP :{BLACK}Send !login command to server.
|
||||
CM_STR_TOOLBAR_COMMANDS_LOGOUT_CAPTION :{BLACK}Logout
|
||||
CM_STR_TOOLBAR_COMMANDS_LOGOUT_TOOLTIP :{BLACK}Send !logout command to server.
|
||||
CM_STR_TOOLBAR_COMMANDS_TIMELEFT_CAPTION :{BLACK}Timeleft
|
||||
CM_STR_TOOLBAR_COMMANDS_TIMELEFT_TOOLTIP :{BLACK}Send !timeleft command to server.
|
||||
CM_STR_TOOLBAR_COMMANDS_NS_CAPTION :{BLACK}CM{NUM}
|
||||
@@ -6204,8 +6206,11 @@ CM_STR_LOGIN_WINDOW_NICE :{BLACK}N-ice
|
||||
CM_STR_LOGIN_WINDOW_BTPRO :{BLACK}BTPro
|
||||
CM_STR_LOGIN_ERROR_SIGN_IN_FAILED :{WHITE}Failed to connect
|
||||
CM_STR_LOGIN_ERROR_BAD_INPUT :{WHITE}Bad username or password
|
||||
CM_STR_LOGIN_WINDOW_USERNAME :{WHITE}Username
|
||||
CM_STR_LOGIN_WINDOW_PASSWORD :{WHITE}Password
|
||||
CM_STR_LOGIN_WINDOW_USERNAME :{WHITE}Username:
|
||||
CM_STR_LOGIN_WINDOW_PASSWORD :{WHITE}Password:
|
||||
CM_STR_LOGIN_WINDOW_ADMIN_LOGIN :{BLACK}A-Login
|
||||
CM_STR_LOGIN_WINDOW_ADMIN_LOGOUT :{BLACK}A-Logout
|
||||
CM_STR_LOGIN_WINDOW_ADMIN_PASSWORD :{WHITE}Admin:
|
||||
CM_STR_LOGIN_WINDOW_SET :{WHITE}Set
|
||||
CM_STR_LOGIN_WINDOW_NOT_SET :{WHITE}Not Set
|
||||
CM_STR_LOGIN_WINDOW_CHANGE_USERNAME :{WHITE}Change username
|
||||
@@ -6215,6 +6220,7 @@ CM_STR_LOGIN_WINDOW_CHANGE_PASSWORD_HELPTEXT :{BLACK}Change p
|
||||
CM_STR_LOGIN_WINDOW_SIGN_IN_HELPTEXT :{BLACK}Sign in (you must be on the correct community server)
|
||||
CM_STR_LOGIN_WINDOW_USERNAME_DISPLAY :{WHITE}{RAW_STRING}
|
||||
CM_STR_LOGIN_WINDOW_PASSWORD_DISPLAY :{WHITE}{STRING}
|
||||
CM_STR_LOGIN_WINDOW_WELCOME :{BLACK}Welcome to {STRING} community !
|
||||
|
||||
CM_STR_NETWORK_COMPANY_LIST_NEW_COMPANY :New company
|
||||
CM_STR_NETWORK_COMPANY_LIST_SPECTATE :Spectate
|
||||
@@ -6297,7 +6303,7 @@ CM_STR_CONFIG_SETTING_TYPE_DROPDOWN_CITYMANIA :CityMania patch
|
||||
CM_BUILDING_PREVIEW_COST_ENOUGH :Cost
|
||||
|
||||
CM_STR_NO_BLUEPRINT_IN_SLOT :{WHITE}No blueprint in slot {NUM}
|
||||
CM_STR_ABOUT_MENU_LOGIN_WINDOW :CityMania server login
|
||||
CM_STR_ABOUT_MENU_LOGIN_WINDOW :Community tools
|
||||
CM_STR_BUILD_INFO_OVERLAY_COST_OK :{WHITE}Cost: {CURRENCY_LONG}
|
||||
CM_STR_BUILD_INFO_OVERLAY_COST_NO_MONEY :{RED}Cost: {CURRENCY_LONG}
|
||||
CM_STR_BUILD_INFO_OVERLAY_STATION_ACCEPTS :{WHITE}Accepts:
|
||||
@@ -6316,3 +6322,54 @@ CM_STR_SHOW_HIDDEN_ENGINES_VEHICLE_TRAIN :{BLACK}Show
|
||||
CM_STR_SHOW_HIDDEN_ENGINES_VEHICLE_ROAD_VEHICLE :{BLACK}Show hidden ({NUM})
|
||||
CM_STR_SHOW_HIDDEN_ENGINES_VEHICLE_SHIP :{BLACK}Show hidden ({NUM})
|
||||
CM_STR_SHOW_HIDDEN_ENGINES_VEHICLE_AIRCRAFT :{BLACK}Show hidden ({NUM})
|
||||
|
||||
### Admin Company Buttons ###
|
||||
CM_STR_ACB_COMPANY_ADMIN_CAPTION :{WHITE}Admin buttons #{NUM}
|
||||
CM_STR_ACB_COMPANY_ADMIN_BUTTON :{WHITE}Admin buttons
|
||||
CM_STR_ACB_COMPANY_ADMIN_BUTTON_TOOLTIP :{BLACK}Show / hide the admin buttons.
|
||||
CM_STR_ACB_LOCK :{BLACK}Lock
|
||||
CM_STR_ACB_LOCK_TOOLTIP :{BLACK}Lock Company. All players on it will be sent to spectators.
|
||||
CM_STR_ACB_UNLOCK :{BLACK}Unlock
|
||||
CM_STR_ACB_UNLOCK_TOOLTIP :{BLACK}Unlock Company making possible player(s) joining it again.
|
||||
CM_STR_ACB_KNOWN :{BLACK}Known
|
||||
CM_STR_ACB_KNOWN_TOOLTIP :{BLACK}Show the known player(s) of company.
|
||||
CM_STR_ACB_RESET_KNOWN :{BLACK}Reset Known
|
||||
CM_STR_ACB_RESET_KNOWN_TOOLTIP :{BLACK}Reset list of known players of company.
|
||||
CM_STR_ACB_MOVE_PLAYER_TO :{BLACK}Move to ...
|
||||
CM_STR_ACB_MOVE_PLAYER_TO_TOOLTIP :{BLACK}Move a player (number #.. or name) to company
|
||||
CM_STR_ACB_COMPANY_NEWSTICKET_BUTTON :{BLACK}News
|
||||
CM_STR_ACB_COMPANY_NEWSTICKET_BUTTON_TOOLTIP :{BLACK}Open a Newspapper message directed to Company
|
||||
CM_STR_ACB_COMPANY_NEWSTICKET_BUTTON_COMP :{BLACK}News (P. C.)
|
||||
CM_STR_ACB_COMPANY_NEWSTICKET_BUTTON_COMP_TOOLTIP :{BLACK}Open a Newspapper message only showed to Company
|
||||
CM_STR_ACB_SUSPEND :{BLACK}Suspend
|
||||
CM_STR_ACB_SUSPEND_TOOLTIP :{BLACK}Suspend Company actions keeping player in the company.
|
||||
CM_STR_ACB_UNSUSPEND :{BLACK}Unsuspend
|
||||
CM_STR_ACB_UNSUSPEND_TOOLTIP :{BLACK}Unsuspend Company actions.
|
||||
CM_STR_ACB_EMPTY :{BLACK}Empty
|
||||
CM_STR_ACB_EMPTY_TOOLTIP :{BLACK}Send players in company to Spectators.
|
||||
CM_STR_ACB_RESET :{BLACK}Reset
|
||||
CM_STR_ACB_RESET_TOOLTIP :{BLACK}Reset the company. The company must be empty.
|
||||
CM_STR_ACB_RESET_SPEC :{BLACK}Reset Spec
|
||||
CM_STR_ACB_RESET_SPEC_TOOLTIP :{BLACK}Reset company and send player(s) to spectators.
|
||||
CM_STR_ACB_RESET_KICK :{BLACK}Reset Kick
|
||||
CM_STR_ACB_RESET_KICK_TOOLTIP :{BLACK}Reset company and Kick out of the game player(s) on it.
|
||||
CM_STR_ACB_RESET_TIMER_120 :{BLACK}Reset T. 2m
|
||||
CM_STR_ACB_RESET_TIMER_120_TOOLTIP :{BLACK}Starts a timer to reset company when after 2 minutes countdown.
|
||||
CM_STR_ACB_RESET_TIMER :{BLACK}Reset T....
|
||||
CM_STR_ACB_RESET_TIMER_TOOLTIP :{BLACK}Starts a timer to reset company when time expire (time is Admin input).
|
||||
CM_STR_ACB_RESET_TIMER_VALUE :{BLACK}Time to Reset (seconds):
|
||||
CM_STR_ACB_RESET_TIMER_CANCEL :{BLACK}Cancel Reset
|
||||
CM_STR_ACB_RESET_TIMER_CANCEL_TOOLTIP :{BLACK}Cancel the Reset timer.
|
||||
CM_STR_ACB_AWARNING :{BLACK}Warning
|
||||
CM_STR_ACB_AWARNING_TOOLTIP :{BLACK}Sends a Warning to company that an admin is trying to contact.
|
||||
CM_STR_ACB_RESET_COMP :{BLACK}RESET Company
|
||||
CM_STR_ACB_RESET_COMP_SURE :{WHITE}Sure to RESET this company?
|
||||
CM_STR_ACB_RESET_SPEC_SURE :{WHITE}Sure to RESET this company, send players to SPECTATORS?
|
||||
CM_STR_ACB_RESET_KICK_SURE :{WHITE}Sure to RESET this company, and KICK players on it?
|
||||
CM_STR_ACB_PLAYER_NEWSTICKET :{BLACK}Type message as newspapper ticket to this Player
|
||||
CM_STR_ACB_COMPANY_NEWSTICKET :{BLACK}Type message as newspapper ticket to this Company
|
||||
CM_STR_ACB_COMPANY_JOIN2 :{BLACK}A. Join
|
||||
CM_STR_ACB_COMPANY_JOIN2_TOOLTIP :{BLACK}Join as an admin
|
||||
|
||||
### Several command strings ###
|
||||
CM_STR_SCS_COMPANY_NEW_JOIN_TOOLTIP :Hold CTRL and click for joining with new company.
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "../citymania/cm_client_list_gui.hpp"
|
||||
#include "../citymania/cm_commands.hpp"
|
||||
#include "../citymania/cm_newgrf_revisions.hpp"
|
||||
#include "../citymania/cm_commands_gui.hpp" /* Admin company buttons */
|
||||
|
||||
#include "../safeguards.h"
|
||||
|
||||
@@ -1325,7 +1326,8 @@ void NetworkClientsToSpectators(CompanyID cid)
|
||||
NetworkTextMessage(NETWORK_ACTION_COMPANY_SPECTATOR, CC_DEFAULT, false, ci->client_name);
|
||||
ci->client_playas = COMPANY_SPECTATOR;
|
||||
}
|
||||
|
||||
/* Admin company buttons: delete window */
|
||||
citymania::ShowAdminCompanyButtons(0, 0, 0, cid+1, false, false);
|
||||
cur_company.Restore();
|
||||
}
|
||||
|
||||
|
||||
@@ -902,9 +902,8 @@ static CommandCost CmdRailTrackHelper(DoCommandFlag flags, TileIndex tile, TileI
|
||||
bool had_success = false;
|
||||
CommandCost last_error = CMD_ERROR;
|
||||
for (;;) {
|
||||
ret = remove ? Command<CMD_REMOVE_SINGLE_RAIL>::Do(flags, tile, TrackdirToTrack(trackdir)) : Command<CMD_BUILD_SINGLE_RAIL>::Do(flags, tile, railtype, TrackdirToTrack(trackdir), auto_remove_signals);
|
||||
|
||||
TileIndex last_endtile = _rail_track_endtile; // CM
|
||||
ret = remove ? Command<CMD_REMOVE_SINGLE_RAIL>::Do(flags, tile, TrackdirToTrack(trackdir)) : Command<CMD_BUILD_SINGLE_RAIL>::Do(flags, tile, railtype, TrackdirToTrack(trackdir), auto_remove_signals);
|
||||
if (ret.Failed()) {
|
||||
last_error = ret;
|
||||
if (_rail_track_endtile == INVALID_TILE) _rail_track_endtile = last_endtile; // CM
|
||||
|
||||
@@ -282,6 +282,11 @@ void ShowStatusBar()
|
||||
}
|
||||
|
||||
void CM_RedrawStatusBar() {
|
||||
StatusBarWindow *w = dynamic_cast<StatusBarWindow*>(FindWindowById(WC_STATUS_BAR, 0));
|
||||
w->ReInit();
|
||||
Window *w = FindWindowById(WC_STATUS_BAR, 0);
|
||||
|
||||
if (w == nullptr) return;
|
||||
|
||||
StatusBarWindow *st = static_cast<StatusBarWindow*>(w);
|
||||
|
||||
st->ReInit();
|
||||
}
|
||||
|
||||
@@ -52,11 +52,8 @@ enum CompanyWidgets : WidgetID {
|
||||
WID_C_COMPANY_PASSWORD, ///< Button to set company password.
|
||||
WID_C_COMPANY_JOIN, ///< Button to join company.
|
||||
|
||||
WID_C_SELECT_MOD,
|
||||
WID_C_SELECT_MOD_JOIN,
|
||||
WID_C_MOD_COMPANY_JOIN,
|
||||
WID_C_MOD_COMPANY_RESET,
|
||||
WID_C_MOD_COMPANY_TOGGLE_LOCK,
|
||||
CM_WID_C_SELECT_ADMINBUTTONS,
|
||||
CM_WID_C_ADMINBUTTONS,
|
||||
};
|
||||
|
||||
/** Widgets of the #CompanyFinancesWindow class. */
|
||||
|
||||
@@ -732,6 +732,8 @@ enum WindowClass {
|
||||
CM_WC_COMMAND_TOOLBAR,
|
||||
CM_WC_LOGIN_WINDOW,
|
||||
CM_WC_CB_TOWN,
|
||||
CM_WC_ADMIN_COMPANY_BUTTONS,
|
||||
CM_LAST_SERVER,
|
||||
|
||||
WC_INVALID = 0xFFFF, ///< Invalid window.
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user