Merge branch 'master' into jgrpp-beta
# Conflicts: # src/company_cmd.cpp # src/economy.cpp # src/lang/swedish.txt # src/network/network_command.cpp # src/news_gui.cpp # src/saveload/saveload.h # src/script/api/script_list.cpp # src/video/cocoa/cocoa_v.mm # src/video/sdl2_v.cpp
This commit is contained in:
17
.github/ISSUE_TEMPLATE/bug.md
vendored
17
.github/ISSUE_TEMPLATE/bug.md
vendored
@@ -1,17 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bugs
|
|
||||||
about: Found a bug in OpenTTD?
|
|
||||||
title: "Bug Report"
|
|
||||||
---
|
|
||||||
|
|
||||||
## Version of OpenTTD
|
|
||||||
<!-- Fill in below what version of OpenTTD you are using, including your OS. -->
|
|
||||||
|
|
||||||
## Expected result
|
|
||||||
<!-- Describe in a few words what you expected to happen. -->
|
|
||||||
|
|
||||||
## Actual result
|
|
||||||
<!-- Describe in a few words what actually happens. -->
|
|
||||||
|
|
||||||
## Steps to reproduce
|
|
||||||
<!-- As detailed as possible, please tell us how we can reproduce this. Feel free to attach a savegame (zip it first) to make it more clear. -->
|
|
41
.github/ISSUE_TEMPLATE/bug.yaml
vendored
Normal file
41
.github/ISSUE_TEMPLATE/bug.yaml
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
name: Bug Report
|
||||||
|
description: Found a bug in OpenTTD?
|
||||||
|
title: "[Bug]: "
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to fill out this bug report!
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Version of OpenTTD
|
||||||
|
description: Fill in below what version of OpenTTD you are using, including your OS.
|
||||||
|
placeholder: ex. 1.11.2, Windows 10
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: expected
|
||||||
|
attributes:
|
||||||
|
label: Expected result
|
||||||
|
description: Describe in a few words what you expected to happen.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: actual
|
||||||
|
attributes:
|
||||||
|
label: Actual result
|
||||||
|
description: Describe in a few words what actually happens.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: reproduce
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
description: As detailed as possible, please tell us how we can reproduce this. Feel free to attach a savegame (zip it first) to make it more clear.
|
||||||
|
placeholder: |
|
||||||
|
1. Loaded the attached savegame.
|
||||||
|
2. Click on the button left of that other icon.
|
||||||
|
3. The window doesn't open.
|
||||||
|
validations:
|
||||||
|
required: true
|
12
.github/ISSUE_TEMPLATE/crash.md
vendored
12
.github/ISSUE_TEMPLATE/crash.md
vendored
@@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
name: Crash
|
|
||||||
about: Did OpenTTD crash?
|
|
||||||
title: "Crash Report"
|
|
||||||
---
|
|
||||||
<!-- Please zip the crash.log, crash.dmp and crash.sav and attach it to this crash report. -->
|
|
||||||
|
|
||||||
## Version of OpenTTD
|
|
||||||
<!-- Fill in below what version of OpenTTD you are using, including your OS. -->
|
|
||||||
|
|
||||||
## Steps to reproduce
|
|
||||||
<!-- Please spend a few words if you can reproduce this problem. -->
|
|
37
.github/ISSUE_TEMPLATE/crash.yaml
vendored
Normal file
37
.github/ISSUE_TEMPLATE/crash.yaml
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
name: Crash
|
||||||
|
description: Did OpenTTD crash?
|
||||||
|
title: "[Crash]: "
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to fill out this crash report!
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Version of OpenTTD
|
||||||
|
description: Fill in below what version of OpenTTD you are using, including your OS.
|
||||||
|
placeholder: ex. 1.11.2, Windows 10
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: reproduce
|
||||||
|
attributes:
|
||||||
|
label: Steps to reproduce
|
||||||
|
description: Please spend a few words if you can reproduce this problem.
|
||||||
|
placeholder: |
|
||||||
|
1. Bought a new train.
|
||||||
|
2. The game crashed.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: crashlogs
|
||||||
|
attributes:
|
||||||
|
label: Upload crash files
|
||||||
|
description: With the `crash.log`, `crash.dmp`, and `crash.sav` we can analyze the crash in detail; this way you allow us to easier triage and fix the problem.
|
||||||
|
placeholder: |
|
||||||
|
1. Zip the `crash.log`, `crash.dmp` and `crash.sav`.
|
||||||
|
2. Click on this field.
|
||||||
|
3. Drag and drop the zip file in here.
|
||||||
|
validations:
|
||||||
|
required: true
|
@@ -28,10 +28,10 @@ endmacro()
|
|||||||
macro(dump_class_templates NAME)
|
macro(dump_class_templates NAME)
|
||||||
string(REGEX REPLACE "^Script" "" REALNAME ${NAME})
|
string(REGEX REPLACE "^Script" "" REALNAME ${NAME})
|
||||||
|
|
||||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} *GetParam(ForceType<${NAME} *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (${NAME} *)instance; }")
|
string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} *GetParam(ForceType<${NAME} *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, nullptr); return (${NAME} *)instance; }")
|
||||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} &GetParam(ForceType<${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(${NAME} *)instance; }")
|
string(APPEND SQUIRREL_EXPORT "\n template <> inline ${NAME} &GetParam(ForceType<${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, nullptr); return *(${NAME} *)instance; }")
|
||||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} *GetParam(ForceType<const ${NAME} *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (${NAME} *)instance; }")
|
string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} *GetParam(ForceType<const ${NAME} *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, nullptr); return (${NAME} *)instance; }")
|
||||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} &GetParam(ForceType<const ${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(${NAME} *)instance; }")
|
string(APPEND SQUIRREL_EXPORT "\n template <> inline const ${NAME} &GetParam(ForceType<const ${NAME} &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, nullptr); return *(${NAME} *)instance; }")
|
||||||
if("${NAME}" STREQUAL "ScriptEvent")
|
if("${NAME}" STREQUAL "ScriptEvent")
|
||||||
string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${NAME} *>(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; }")
|
string(APPEND SQUIRREL_EXPORT "\n template <> inline int Return<${NAME} *>(HSQUIRRELVM vm, ${NAME} *res) { if (res == nullptr) { sq_pushnull(vm); return 1; } Squirrel::CreateClassInstanceVM(vm, \"${REALNAME}\", res, nullptr, DefSQDestructorCallback<${NAME}>, true); return 1; }")
|
||||||
elseif("${NAME}" STREQUAL "ScriptText")
|
elseif("${NAME}" STREQUAL "ScriptText")
|
||||||
|
@@ -85,6 +85,8 @@
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
z-index: 2;
|
z-index: 2;
|
||||||
|
/* OpenTTD draws the cursor itself */
|
||||||
|
cursor: none !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
|
4
src/3rdparty/squirrel/sqstdlib/sqstdaux.cpp
vendored
4
src/3rdparty/squirrel/sqstdlib/sqstdaux.cpp
vendored
@@ -17,7 +17,7 @@ void sqstd_printcallstack(HSQUIRRELVM v)
|
|||||||
SQFloat f;
|
SQFloat f;
|
||||||
const SQChar *s;
|
const SQChar *s;
|
||||||
SQInteger level=1; //1 is to skip this function that is level 0
|
SQInteger level=1; //1 is to skip this function that is level 0
|
||||||
const SQChar *name=0;
|
const SQChar *name=nullptr;
|
||||||
SQInteger seq=0;
|
SQInteger seq=0;
|
||||||
pf(v,"\nCALLSTACK\n");
|
pf(v,"\nCALLSTACK\n");
|
||||||
while(SQ_SUCCEEDED(sq_stackinfos(v,level,&si)))
|
while(SQ_SUCCEEDED(sq_stackinfos(v,level,&si)))
|
||||||
@@ -116,7 +116,7 @@ static SQInteger _sqstd_aux_printerror(HSQUIRRELVM v)
|
|||||||
{
|
{
|
||||||
SQPRINTFUNCTION pf = sq_getprintfunc(v);
|
SQPRINTFUNCTION pf = sq_getprintfunc(v);
|
||||||
if(pf) {
|
if(pf) {
|
||||||
const SQChar *sErr = 0;
|
const SQChar *sErr = nullptr;
|
||||||
if(sq_gettop(v)>=1) {
|
if(sq_gettop(v)>=1) {
|
||||||
if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr))) {
|
if(SQ_SUCCEEDED(sq_getstring(v,2,&sErr))) {
|
||||||
pf(v,"\nAN ERROR HAS OCCURRED [%s]\n",sErr);
|
pf(v,"\nAN ERROR HAS OCCURRED [%s]\n",sErr);
|
||||||
|
4
src/3rdparty/squirrel/sqstdlib/sqstdmath.cpp
vendored
4
src/3rdparty/squirrel/sqstdlib/sqstdmath.cpp
vendored
@@ -88,7 +88,7 @@ static SQRegFunction mathlib_funcs[] = {
|
|||||||
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
|
#endif /* EXPORT_DEFAULT_SQUIRREL_FUNCTIONS */
|
||||||
_DECL_FUNC(fabs,2,".n"),
|
_DECL_FUNC(fabs,2,".n"),
|
||||||
_DECL_FUNC(abs,2,".n"),
|
_DECL_FUNC(abs,2,".n"),
|
||||||
{0,0,0,0},
|
{nullptr,nullptr,0,nullptr},
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef M_PI
|
#ifndef M_PI
|
||||||
@@ -98,7 +98,7 @@ static SQRegFunction mathlib_funcs[] = {
|
|||||||
SQRESULT sqstd_register_mathlib(HSQUIRRELVM v)
|
SQRESULT sqstd_register_mathlib(HSQUIRRELVM v)
|
||||||
{
|
{
|
||||||
SQInteger i=0;
|
SQInteger i=0;
|
||||||
while(mathlib_funcs[i].name!=0) {
|
while(mathlib_funcs[i].name!=nullptr) {
|
||||||
sq_pushstring(v,mathlib_funcs[i].name,-1);
|
sq_pushstring(v,mathlib_funcs[i].name,-1);
|
||||||
sq_newclosure(v,mathlib_funcs[i].f,0);
|
sq_newclosure(v,mathlib_funcs[i].f,0);
|
||||||
sq_setparamscheck(v,mathlib_funcs[i].nparamscheck,mathlib_funcs[i].typemask);
|
sq_setparamscheck(v,mathlib_funcs[i].nparamscheck,mathlib_funcs[i].typemask);
|
||||||
|
58
src/3rdparty/squirrel/squirrel/sqapi.cpp
vendored
58
src/3rdparty/squirrel/squirrel/sqapi.cpp
vendored
@@ -60,11 +60,11 @@ HSQUIRRELVM sq_open(SQInteger initialstacksize)
|
|||||||
v = (SQVM *)SQ_MALLOC(sizeof(SQVM));
|
v = (SQVM *)SQ_MALLOC(sizeof(SQVM));
|
||||||
new (v) SQVM(ss);
|
new (v) SQVM(ss);
|
||||||
ss->_root_vm = v;
|
ss->_root_vm = v;
|
||||||
if(v->Init(NULL, initialstacksize)) {
|
if(v->Init(nullptr, initialstacksize)) {
|
||||||
return v;
|
return v;
|
||||||
} else {
|
} else {
|
||||||
sq_delete(v, SQVM);
|
sq_delete(v, SQVM);
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
@@ -83,7 +83,7 @@ HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize)
|
|||||||
return v;
|
return v;
|
||||||
} else {
|
} else {
|
||||||
sq_delete(v, SQVM);
|
sq_delete(v, SQVM);
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +135,7 @@ void sq_close(HSQUIRRELVM v)
|
|||||||
SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror)
|
SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQChar *sourcename,SQBool raiseerror)
|
||||||
{
|
{
|
||||||
SQObjectPtr o;
|
SQObjectPtr o;
|
||||||
if(Compile(v, read, p, sourcename, o, raiseerror?true:false, _ss(v)->_debuginfo)) {
|
if(Compile(v, read, p, sourcename, o, raiseerror != 0, _ss(v)->_debuginfo)) {
|
||||||
v->Push(SQClosure::Create(_ss(v), _funcproto(o)));
|
v->Push(SQClosure::Create(_ss(v), _funcproto(o)));
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
}
|
}
|
||||||
@@ -144,12 +144,12 @@ SQRESULT sq_compile(HSQUIRRELVM v,SQLEXREADFUNC read,SQUserPointer p,const SQCha
|
|||||||
|
|
||||||
void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable)
|
void sq_enabledebuginfo(HSQUIRRELVM v, SQBool enable)
|
||||||
{
|
{
|
||||||
_ss(v)->_debuginfo = enable?true:false;
|
_ss(v)->_debuginfo = enable != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable)
|
void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable)
|
||||||
{
|
{
|
||||||
_ss(v)->_notifyallexceptions = enable?true:false;
|
_ss(v)->_notifyallexceptions = enable != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sq_addref(HSQUIRRELVM v,HSQOBJECT *po)
|
void sq_addref(HSQUIRRELVM v,HSQOBJECT *po)
|
||||||
@@ -178,7 +178,7 @@ const SQChar *sq_objtostring(HSQOBJECT *o)
|
|||||||
if(sq_type(*o) == OT_STRING) {
|
if(sq_type(*o) == OT_STRING) {
|
||||||
return _stringval(*o);
|
return _stringval(*o);
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQInteger sq_objtointeger(HSQOBJECT *o)
|
SQInteger sq_objtointeger(HSQOBJECT *o)
|
||||||
@@ -224,7 +224,7 @@ void sq_pushinteger(HSQUIRRELVM v,SQInteger n)
|
|||||||
|
|
||||||
void sq_pushbool(HSQUIRRELVM v,SQBool b)
|
void sq_pushbool(HSQUIRRELVM v,SQBool b)
|
||||||
{
|
{
|
||||||
v->Push(b?true:false);
|
v->Push(b != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sq_pushfloat(HSQUIRRELVM v,SQFloat n)
|
void sq_pushfloat(HSQUIRRELVM v,SQFloat n)
|
||||||
@@ -256,7 +256,7 @@ void sq_newarray(HSQUIRRELVM v,SQInteger size)
|
|||||||
|
|
||||||
SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase)
|
SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase)
|
||||||
{
|
{
|
||||||
SQClass *baseclass = NULL;
|
SQClass *baseclass = nullptr;
|
||||||
if(hasbase) {
|
if(hasbase) {
|
||||||
SQObjectPtr &base = stack_get(v,-1);
|
SQObjectPtr &base = stack_get(v,-1);
|
||||||
if(type(base) != OT_CLASS)
|
if(type(base) != OT_CLASS)
|
||||||
@@ -555,7 +555,7 @@ SQRESULT sq_getbool(HSQUIRRELVM v,SQInteger idx,SQBool *b)
|
|||||||
|
|
||||||
SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c)
|
SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c)
|
||||||
{
|
{
|
||||||
SQObjectPtr *o = NULL;
|
SQObjectPtr *o = nullptr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_STRING,o);
|
_GETSAFE_OBJ(v, idx, OT_STRING,o);
|
||||||
*c = _stringval(*o);
|
*c = _stringval(*o);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@@ -563,7 +563,7 @@ SQRESULT sq_getstring(HSQUIRRELVM v,SQInteger idx,const SQChar **c)
|
|||||||
|
|
||||||
SQRESULT sq_getthread(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread)
|
SQRESULT sq_getthread(HSQUIRRELVM v,SQInteger idx,HSQUIRRELVM *thread)
|
||||||
{
|
{
|
||||||
SQObjectPtr *o = NULL;
|
SQObjectPtr *o = nullptr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_THREAD,o);
|
_GETSAFE_OBJ(v, idx, OT_THREAD,o);
|
||||||
*thread = _thread(*o);
|
*thread = _thread(*o);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@@ -598,7 +598,7 @@ SQInteger sq_getsize(HSQUIRRELVM v, SQInteger idx)
|
|||||||
|
|
||||||
SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag)
|
SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPointer *typetag)
|
||||||
{
|
{
|
||||||
SQObjectPtr *o = NULL;
|
SQObjectPtr *o = nullptr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_USERDATA,o);
|
_GETSAFE_OBJ(v, idx, OT_USERDATA,o);
|
||||||
(*p) = _userdataval(*o);
|
(*p) = _userdataval(*o);
|
||||||
if(typetag) *typetag = _userdata(*o)->_typetag;
|
if(typetag) *typetag = _userdata(*o)->_typetag;
|
||||||
@@ -637,7 +637,7 @@ SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag)
|
|||||||
|
|
||||||
SQRESULT sq_getuserpointer(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p)
|
SQRESULT sq_getuserpointer(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p)
|
||||||
{
|
{
|
||||||
SQObjectPtr *o = NULL;
|
SQObjectPtr *o = nullptr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_USERPOINTER,o);
|
_GETSAFE_OBJ(v, idx, OT_USERPOINTER,o);
|
||||||
(*p) = _userpointer(*o);
|
(*p) = _userpointer(*o);
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@@ -666,13 +666,13 @@ SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserP
|
|||||||
SQObjectPtr &o = stack_get(v,idx);
|
SQObjectPtr &o = stack_get(v,idx);
|
||||||
if(type(o) != OT_INSTANCE) return sq_throwerror(v,"the object is not a class instance");
|
if(type(o) != OT_INSTANCE) return sq_throwerror(v,"the object is not a class instance");
|
||||||
(*p) = _instance(o)->_userpointer;
|
(*p) = _instance(o)->_userpointer;
|
||||||
if(typetag != 0) {
|
if(typetag != nullptr) {
|
||||||
SQClass *cl = _instance(o)->_class;
|
SQClass *cl = _instance(o)->_class;
|
||||||
do{
|
do{
|
||||||
if(cl->_typetag == typetag)
|
if(cl->_typetag == typetag)
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
cl = cl->_base;
|
cl = cl->_base;
|
||||||
}while(cl != NULL);
|
}while(cl != nullptr);
|
||||||
return sq_throwerror(v,"invalid type tag");
|
return sq_throwerror(v,"invalid type tag");
|
||||||
}
|
}
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@@ -724,7 +724,7 @@ SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic)
|
|||||||
if(type(self) == OT_TABLE || type(self) == OT_CLASS) {
|
if(type(self) == OT_TABLE || type(self) == OT_CLASS) {
|
||||||
SQObjectPtr &key = v->GetUp(-2);
|
SQObjectPtr &key = v->GetUp(-2);
|
||||||
if(type(key) == OT_NULL) return sq_throwerror(v, "null is not a valid key");
|
if(type(key) == OT_NULL) return sq_throwerror(v, "null is not a valid key");
|
||||||
v->NewSlot(self, key, v->GetUp(-1),bstatic?true:false);
|
v->NewSlot(self, key, v->GetUp(-1),bstatic != 0);
|
||||||
v->Pop(2);
|
v->Pop(2);
|
||||||
}
|
}
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@@ -801,14 +801,14 @@ SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx)
|
|||||||
if(!_table(self)->SetDelegate(_table(mt))) return sq_throwerror(v, "delagate cycle");
|
if(!_table(self)->SetDelegate(_table(mt))) return sq_throwerror(v, "delagate cycle");
|
||||||
v->Pop();}
|
v->Pop();}
|
||||||
else if(type(mt)==OT_NULL) {
|
else if(type(mt)==OT_NULL) {
|
||||||
_table(self)->SetDelegate(NULL); v->Pop(); }
|
_table(self)->SetDelegate(nullptr); v->Pop(); }
|
||||||
else return sq_aux_invalidtype(v,type);
|
else return sq_aux_invalidtype(v,type);
|
||||||
break;
|
break;
|
||||||
case OT_USERDATA:
|
case OT_USERDATA:
|
||||||
if(type(mt)==OT_TABLE) {
|
if(type(mt)==OT_TABLE) {
|
||||||
_userdata(self)->SetDelegate(_table(mt)); v->Pop(); }
|
_userdata(self)->SetDelegate(_table(mt)); v->Pop(); }
|
||||||
else if(type(mt)==OT_NULL) {
|
else if(type(mt)==OT_NULL) {
|
||||||
_userdata(self)->SetDelegate(NULL); v->Pop(); }
|
_userdata(self)->SetDelegate(nullptr); v->Pop(); }
|
||||||
else return sq_aux_invalidtype(v, type);
|
else return sq_aux_invalidtype(v, type);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -909,7 +909,7 @@ const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedIntege
|
|||||||
}
|
}
|
||||||
SQVM::CallInfo &ci=v->_callsstack[lvl];
|
SQVM::CallInfo &ci=v->_callsstack[lvl];
|
||||||
if(type(ci._closure)!=OT_CLOSURE)
|
if(type(ci._closure)!=OT_CLOSURE)
|
||||||
return NULL;
|
return nullptr;
|
||||||
SQClosure *c=_closure(ci._closure);
|
SQClosure *c=_closure(ci._closure);
|
||||||
SQFunctionProto *func=_funcproto(c->_function);
|
SQFunctionProto *func=_funcproto(c->_function);
|
||||||
if(func->_noutervalues > (SQInteger)idx) {
|
if(func->_noutervalues > (SQInteger)idx) {
|
||||||
@@ -919,7 +919,7 @@ const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedIntege
|
|||||||
idx -= func->_noutervalues;
|
idx -= func->_noutervalues;
|
||||||
return func->GetLocal(v,stackbase,idx,(SQInteger)(ci._ip-func->_instructions)-1);
|
return func->GetLocal(v,stackbase,idx,(SQInteger)(ci._ip-func->_instructions)-1);
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj)
|
void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj)
|
||||||
@@ -929,7 +929,7 @@ void sq_pushobject(HSQUIRRELVM v,HSQOBJECT obj)
|
|||||||
|
|
||||||
void sq_resetobject(HSQOBJECT *po)
|
void sq_resetobject(HSQOBJECT *po)
|
||||||
{
|
{
|
||||||
po->_unVal.pUserPointer=NULL;po->_type=OT_NULL;
|
po->_unVal.pUserPointer=nullptr;po->_type=OT_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err)
|
SQRESULT sq_throwerror(HSQUIRRELVM v,const SQChar *err)
|
||||||
@@ -975,7 +975,7 @@ SQRESULT sq_call(HSQUIRRELVM v,SQInteger params,SQBool retval,SQBool raiseerror,
|
|||||||
v->_can_suspend = suspend >= 0;
|
v->_can_suspend = suspend >= 0;
|
||||||
if (v->_can_suspend) v->_ops_till_suspend = suspend;
|
if (v->_can_suspend) v->_ops_till_suspend = suspend;
|
||||||
|
|
||||||
if(v->Call(v->GetUp(-(params+1)),params,v->_top-params,res,raiseerror?true:false,v->_can_suspend)){
|
if(v->Call(v->GetUp(-(params+1)),params,v->_top-params,res,raiseerror != 0,v->_can_suspend)){
|
||||||
if(!v->_suspended) {
|
if(!v->_suspended) {
|
||||||
v->Pop(params);//pop closure and args
|
v->Pop(params);//pop closure and args
|
||||||
}
|
}
|
||||||
@@ -1051,7 +1051,7 @@ void sq_setcompilererrorhandler(HSQUIRRELVM v,SQCOMPILERERROR f)
|
|||||||
|
|
||||||
SQRESULT sq_writeclosure(HSQUIRRELVM v,SQWRITEFUNC w,SQUserPointer up)
|
SQRESULT sq_writeclosure(HSQUIRRELVM v,SQWRITEFUNC w,SQUserPointer up)
|
||||||
{
|
{
|
||||||
SQObjectPtr *o = NULL;
|
SQObjectPtr *o = nullptr;
|
||||||
_GETSAFE_OBJ(v, -1, OT_CLOSURE,o);
|
_GETSAFE_OBJ(v, -1, OT_CLOSURE,o);
|
||||||
unsigned short tag = SQ_BYTECODE_STREAM_TAG;
|
unsigned short tag = SQ_BYTECODE_STREAM_TAG;
|
||||||
if(w(up,&tag,2) != 2)
|
if(w(up,&tag,2) != 2)
|
||||||
@@ -1093,7 +1093,7 @@ SQInteger sq_collectgarbage(HSQUIRRELVM v)
|
|||||||
const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval)
|
const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval)
|
||||||
{
|
{
|
||||||
SQObjectPtr &self = stack_get(v,idx);
|
SQObjectPtr &self = stack_get(v,idx);
|
||||||
const SQChar *name = NULL;
|
const SQChar *name = nullptr;
|
||||||
if(type(self) == OT_CLOSURE) {
|
if(type(self) == OT_CLOSURE) {
|
||||||
if(_closure(self)->_outervalues.size()>nval) {
|
if(_closure(self)->_outervalues.size()>nval) {
|
||||||
v->Push(_closure(self)->_outervalues[nval]);
|
v->Push(_closure(self)->_outervalues[nval]);
|
||||||
@@ -1131,7 +1131,7 @@ SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval)
|
|||||||
|
|
||||||
SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx)
|
SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx)
|
||||||
{
|
{
|
||||||
SQObjectPtr *o = NULL;
|
SQObjectPtr *o = nullptr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
||||||
SQObjectPtr &key = stack_get(v,-2);
|
SQObjectPtr &key = stack_get(v,-2);
|
||||||
SQObjectPtr &val = stack_get(v,-1);
|
SQObjectPtr &val = stack_get(v,-1);
|
||||||
@@ -1153,7 +1153,7 @@ SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx)
|
|||||||
|
|
||||||
SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
|
SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
|
||||||
{
|
{
|
||||||
SQObjectPtr *o = NULL;
|
SQObjectPtr *o = nullptr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
||||||
SQObjectPtr &key = stack_get(v,-1);
|
SQObjectPtr &key = stack_get(v,-1);
|
||||||
SQObjectPtr attrs;
|
SQObjectPtr attrs;
|
||||||
@@ -1173,7 +1173,7 @@ SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
|
|||||||
|
|
||||||
SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx)
|
SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx)
|
||||||
{
|
{
|
||||||
SQObjectPtr *o = NULL;
|
SQObjectPtr *o = nullptr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
||||||
if(_class(*o)->_base)
|
if(_class(*o)->_base)
|
||||||
v->Push(SQObjectPtr(_class(*o)->_base));
|
v->Push(SQObjectPtr(_class(*o)->_base));
|
||||||
@@ -1184,7 +1184,7 @@ SQRESULT sq_getbase(HSQUIRRELVM v,SQInteger idx)
|
|||||||
|
|
||||||
SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx)
|
SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx)
|
||||||
{
|
{
|
||||||
SQObjectPtr *o = NULL;
|
SQObjectPtr *o = nullptr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_INSTANCE,o);
|
_GETSAFE_OBJ(v, idx, OT_INSTANCE,o);
|
||||||
v->Push(SQObjectPtr(_instance(*o)->_class));
|
v->Push(SQObjectPtr(_instance(*o)->_class));
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
@@ -1192,7 +1192,7 @@ SQRESULT sq_getclass(HSQUIRRELVM v,SQInteger idx)
|
|||||||
|
|
||||||
SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx)
|
SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx)
|
||||||
{
|
{
|
||||||
SQObjectPtr *o = NULL;
|
SQObjectPtr *o = nullptr;
|
||||||
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
||||||
v->Push(_class(*o)->CreateInstance());
|
v->Push(_class(*o)->CreateInstance());
|
||||||
return SQ_OK;
|
return SQ_OK;
|
||||||
|
50
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
50
src/3rdparty/squirrel/squirrel/sqbaselib.cpp
vendored
@@ -248,29 +248,29 @@ static SQRegFunction base_funcs[]={
|
|||||||
{"getconsttable",base_getconsttable,1, NULL},
|
{"getconsttable",base_getconsttable,1, NULL},
|
||||||
{"setconsttable",base_setconsttable,2, NULL},
|
{"setconsttable",base_setconsttable,2, NULL},
|
||||||
#endif
|
#endif
|
||||||
{"assert",base_assert,2, NULL},
|
{"assert",base_assert,2, nullptr},
|
||||||
{"print",base_print,2, NULL},
|
{"print",base_print,2, nullptr},
|
||||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||||
{"compilestring",base_compilestring,-2, ".ss"},
|
{"compilestring",base_compilestring,-2, ".ss"},
|
||||||
{"newthread",base_newthread,2, ".c"},
|
{"newthread",base_newthread,2, ".c"},
|
||||||
{"suspend",base_suspend,-1, NULL},
|
{"suspend",base_suspend,-1, NULL},
|
||||||
#endif
|
#endif
|
||||||
{"array",base_array,-2, ".n"},
|
{"array",base_array,-2, ".n"},
|
||||||
{"type",base_type,2, NULL},
|
{"type",base_type,2, nullptr},
|
||||||
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
#ifdef EXPORT_DEFAULT_SQUIRREL_FUNCTIONS
|
||||||
{"dummy",base_dummy,0,NULL},
|
{"dummy",base_dummy,0,NULL},
|
||||||
#ifndef NO_GARBAGE_COLLECTOR
|
#ifndef NO_GARBAGE_COLLECTOR
|
||||||
{"collectgarbage",base_collectgarbage,1, "t"},
|
{"collectgarbage",base_collectgarbage,1, "t"},
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
{0,0,0,0}
|
{nullptr,nullptr,0,nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
void sq_base_register(HSQUIRRELVM v)
|
void sq_base_register(HSQUIRRELVM v)
|
||||||
{
|
{
|
||||||
SQInteger i=0;
|
SQInteger i=0;
|
||||||
sq_pushroottable(v);
|
sq_pushroottable(v);
|
||||||
while(base_funcs[i].name!=0) {
|
while(base_funcs[i].name!=nullptr) {
|
||||||
sq_pushstring(v,base_funcs[i].name,-1);
|
sq_pushstring(v,base_funcs[i].name,-1);
|
||||||
sq_newclosure(v,base_funcs[i].f,0);
|
sq_newclosure(v,base_funcs[i].f,0);
|
||||||
sq_setnativeclosurename(v,-1,base_funcs[i].name);
|
sq_setnativeclosurename(v,-1,base_funcs[i].name);
|
||||||
@@ -415,10 +415,10 @@ SQRegFunction SQSharedState::_table_default_delegate_funcz[]={
|
|||||||
{"rawset",table_rawset,3, "t"},
|
{"rawset",table_rawset,3, "t"},
|
||||||
{"rawdelete",table_rawdelete,2, "t"},
|
{"rawdelete",table_rawdelete,2, "t"},
|
||||||
{"rawin",container_rawexists,2, "t"},
|
{"rawin",container_rawexists,2, "t"},
|
||||||
{"weakref",obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||||
{"tostring",default_delegate_tostring,1, "."},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{"clear",obj_clear,1, "."},
|
{"clear",obj_clear,1, "."},
|
||||||
{0,0,0,0}
|
{nullptr,nullptr,0,nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
//ARRAY DEFAULT DELEGATE///////////////////////////////////////
|
//ARRAY DEFAULT DELEGATE///////////////////////////////////////
|
||||||
@@ -624,10 +624,10 @@ SQRegFunction SQSharedState::_array_default_delegate_funcz[]={
|
|||||||
{"reverse",array_reverse,1, "a"},
|
{"reverse",array_reverse,1, "a"},
|
||||||
{"sort",array_sort,-1, "ac"},
|
{"sort",array_sort,-1, "ac"},
|
||||||
{"slice",array_slice,-1, "ann"},
|
{"slice",array_slice,-1, "ann"},
|
||||||
{"weakref",obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||||
{"tostring",default_delegate_tostring,1, "."},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{"clear",obj_clear,1, "."},
|
{"clear",obj_clear,1, "."},
|
||||||
{0,0,0,0}
|
{nullptr,nullptr,0,nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
//STRING DEFAULT DELEGATE//////////////////////////
|
//STRING DEFAULT DELEGATE//////////////////////////
|
||||||
@@ -687,8 +687,8 @@ SQRegFunction SQSharedState::_string_default_delegate_funcz[]={
|
|||||||
{"find",string_find,-2, "s s n "},
|
{"find",string_find,-2, "s s n "},
|
||||||
{"tolower",string_tolower,1, "s"},
|
{"tolower",string_tolower,1, "s"},
|
||||||
{"toupper",string_toupper,1, "s"},
|
{"toupper",string_toupper,1, "s"},
|
||||||
{"weakref",obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||||
{0,0,0,0}
|
{nullptr,nullptr,0,nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
//INTEGER DEFAULT DELEGATE//////////////////////////
|
//INTEGER DEFAULT DELEGATE//////////////////////////
|
||||||
@@ -697,8 +697,8 @@ SQRegFunction SQSharedState::_number_default_delegate_funcz[]={
|
|||||||
{"tofloat",default_delegate_tofloat,1, "n|b"},
|
{"tofloat",default_delegate_tofloat,1, "n|b"},
|
||||||
{"tostring",default_delegate_tostring,1, "."},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{"tochar",number_delegate_tochar,1, "n|b"},
|
{"tochar",number_delegate_tochar,1, "n|b"},
|
||||||
{"weakref",obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||||
{0,0,0,0}
|
{nullptr,nullptr,0,nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
//CLOSURE DEFAULT DELEGATE//////////////////////////
|
//CLOSURE DEFAULT DELEGATE//////////////////////////
|
||||||
@@ -782,11 +782,11 @@ SQRegFunction SQSharedState::_closure_default_delegate_funcz[]={
|
|||||||
{"pcall",closure_pcall,-1, "c"},
|
{"pcall",closure_pcall,-1, "c"},
|
||||||
{"acall",closure_acall,2, "ca"},
|
{"acall",closure_acall,2, "ca"},
|
||||||
{"pacall",closure_pacall,2, "ca"},
|
{"pacall",closure_pacall,2, "ca"},
|
||||||
{"weakref",obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||||
{"tostring",default_delegate_tostring,1, "."},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{"bindenv",closure_bindenv,2, "c x|y|t"},
|
{"bindenv",closure_bindenv,2, "c x|y|t"},
|
||||||
{"getinfos",closure_getinfos,1, "c"},
|
{"getinfos",closure_getinfos,1, "c"},
|
||||||
{0,0,0,0}
|
{nullptr,nullptr,0,nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
//GENERATOR DEFAULT DELEGATE
|
//GENERATOR DEFAULT DELEGATE
|
||||||
@@ -803,9 +803,9 @@ static SQInteger generator_getstatus(HSQUIRRELVM v)
|
|||||||
|
|
||||||
SQRegFunction SQSharedState::_generator_default_delegate_funcz[]={
|
SQRegFunction SQSharedState::_generator_default_delegate_funcz[]={
|
||||||
{"getstatus",generator_getstatus,1, "g"},
|
{"getstatus",generator_getstatus,1, "g"},
|
||||||
{"weakref",obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||||
{"tostring",default_delegate_tostring,1, "."},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{0,0,0,0}
|
{nullptr,nullptr,0,nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
//THREAD DEFAULT DELEGATE
|
//THREAD DEFAULT DELEGATE
|
||||||
@@ -889,9 +889,9 @@ SQRegFunction SQSharedState::_thread_default_delegate_funcz[] = {
|
|||||||
{"call", thread_call, -1, "v"},
|
{"call", thread_call, -1, "v"},
|
||||||
{"wakeup", thread_wakeup, -1, "v"},
|
{"wakeup", thread_wakeup, -1, "v"},
|
||||||
{"getstatus", thread_getstatus, 1, "v"},
|
{"getstatus", thread_getstatus, 1, "v"},
|
||||||
{"weakref",obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||||
{"tostring",default_delegate_tostring,1, "."},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{0,0,0,0},
|
{nullptr,nullptr,0,nullptr},
|
||||||
};
|
};
|
||||||
|
|
||||||
static SQInteger class_getattributes(HSQUIRRELVM v)
|
static SQInteger class_getattributes(HSQUIRRELVM v)
|
||||||
@@ -919,10 +919,10 @@ SQRegFunction SQSharedState::_class_default_delegate_funcz[] = {
|
|||||||
{"getattributes", class_getattributes, 2, "y."},
|
{"getattributes", class_getattributes, 2, "y."},
|
||||||
{"setattributes", class_setattributes, 3, "y.."},
|
{"setattributes", class_setattributes, 3, "y.."},
|
||||||
{"rawin",container_rawexists,2, "y"},
|
{"rawin",container_rawexists,2, "y"},
|
||||||
{"weakref",obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||||
{"tostring",default_delegate_tostring,1, "."},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{"instance",class_instance,1, "y"},
|
{"instance",class_instance,1, "y"},
|
||||||
{0,0,0,0}
|
{nullptr,nullptr,0,nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
static SQInteger instance_getclass(HSQUIRRELVM v)
|
static SQInteger instance_getclass(HSQUIRRELVM v)
|
||||||
@@ -935,9 +935,9 @@ static SQInteger instance_getclass(HSQUIRRELVM v)
|
|||||||
SQRegFunction SQSharedState::_instance_default_delegate_funcz[] = {
|
SQRegFunction SQSharedState::_instance_default_delegate_funcz[] = {
|
||||||
{"getclass", instance_getclass, 1, "x"},
|
{"getclass", instance_getclass, 1, "x"},
|
||||||
{"rawin",container_rawexists,2, "x"},
|
{"rawin",container_rawexists,2, "x"},
|
||||||
{"weakref",obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||||
{"tostring",default_delegate_tostring,1, "."},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{0,0,0,0}
|
{nullptr,nullptr,0,nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
static SQInteger weakref_ref(HSQUIRRELVM v)
|
static SQInteger weakref_ref(HSQUIRRELVM v)
|
||||||
@@ -949,9 +949,9 @@ static SQInteger weakref_ref(HSQUIRRELVM v)
|
|||||||
|
|
||||||
SQRegFunction SQSharedState::_weakref_default_delegate_funcz[] = {
|
SQRegFunction SQSharedState::_weakref_default_delegate_funcz[] = {
|
||||||
{"ref",weakref_ref,1, "r"},
|
{"ref",weakref_ref,1, "r"},
|
||||||
{"weakref",obj_delegate_weakref,1, NULL },
|
{"weakref",obj_delegate_weakref,1, nullptr },
|
||||||
{"tostring",default_delegate_tostring,1, "."},
|
{"tostring",default_delegate_tostring,1, "."},
|
||||||
{0,0,0,0}
|
{nullptr,nullptr,0,nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
10
src/3rdparty/squirrel/squirrel/sqclass.cpp
vendored
10
src/3rdparty/squirrel/squirrel/sqclass.cpp
vendored
@@ -15,8 +15,8 @@
|
|||||||
SQClass::SQClass(SQSharedState *ss,SQClass *base)
|
SQClass::SQClass(SQSharedState *ss,SQClass *base)
|
||||||
{
|
{
|
||||||
_base = base;
|
_base = base;
|
||||||
_typetag = 0;
|
_typetag = nullptr;
|
||||||
_hook = NULL;
|
_hook = nullptr;
|
||||||
_udsize = 0;
|
_udsize = 0;
|
||||||
_metamethods.resize(MT_LAST); //size it to max size
|
_metamethods.resize(MT_LAST); //size it to max size
|
||||||
if(_base) {
|
if(_base) {
|
||||||
@@ -139,8 +139,8 @@ bool SQClass::GetAttributes(const SQObjectPtr &key,SQObjectPtr &outval)
|
|||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
void SQInstance::Init(SQSharedState *ss)
|
void SQInstance::Init(SQSharedState *ss)
|
||||||
{
|
{
|
||||||
_userpointer = NULL;
|
_userpointer = nullptr;
|
||||||
_hook = NULL;
|
_hook = nullptr;
|
||||||
__ObjAddRef(_class);
|
__ObjAddRef(_class);
|
||||||
_delegate = _class->_members;
|
_delegate = _class->_members;
|
||||||
INIT_CHAIN();
|
INIT_CHAIN();
|
||||||
@@ -196,7 +196,7 @@ bool SQInstance::GetMetaMethod(SQVM *v,SQMetaMethod mm,SQObjectPtr &res)
|
|||||||
bool SQInstance::InstanceOf(SQClass *trg)
|
bool SQInstance::InstanceOf(SQClass *trg)
|
||||||
{
|
{
|
||||||
SQClass *parent = _class;
|
SQClass *parent = _class;
|
||||||
while(parent != NULL) {
|
while(parent != nullptr) {
|
||||||
if(parent == trg)
|
if(parent == trg)
|
||||||
return true;
|
return true;
|
||||||
parent = parent->_base;
|
parent = parent->_base;
|
||||||
|
2
src/3rdparty/squirrel/squirrel/sqclosure.h
vendored
2
src/3rdparty/squirrel/squirrel/sqclosure.h
vendored
@@ -45,7 +45,7 @@ struct SQGenerator : public CHAINABLE_OBJ
|
|||||||
{
|
{
|
||||||
enum SQGeneratorState{eRunning,eSuspended,eDead};
|
enum SQGeneratorState{eRunning,eSuspended,eDead};
|
||||||
private:
|
private:
|
||||||
SQGenerator(SQSharedState *ss,SQClosure *closure){_closure=closure;_state=eRunning;_ci._generator=NULL;INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this);}
|
SQGenerator(SQSharedState *ss,SQClosure *closure){_closure=closure;_state=eRunning;_ci._generator=nullptr;INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this);}
|
||||||
public:
|
public:
|
||||||
static SQGenerator *Create(SQSharedState *ss,SQClosure *closure){
|
static SQGenerator *Create(SQSharedState *ss,SQClosure *closure){
|
||||||
SQGenerator *nc=(SQGenerator*)SQ_MALLOC(sizeof(SQGenerator));
|
SQGenerator *nc=(SQGenerator*)SQ_MALLOC(sizeof(SQGenerator));
|
||||||
|
@@ -57,7 +57,7 @@ typedef sqvector<ExpState> ExpStateVec;
|
|||||||
class SQCompiler
|
class SQCompiler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SQCompiler(SQVM *v, SQLEXREADFUNC rg, SQUserPointer up, const SQChar* sourcename, bool raiseerror, bool lineinfo) : _token(0), _fs(NULL), _lex(_ss(v), rg, up, ThrowError, this), _debugline(0), _debugop(0)
|
SQCompiler(SQVM *v, SQLEXREADFUNC rg, SQUserPointer up, const SQChar* sourcename, bool raiseerror, bool lineinfo) : _token(0), _fs(nullptr), _lex(_ss(v), rg, up, ThrowError, this), _debugline(0), _debugop(0)
|
||||||
{
|
{
|
||||||
_vm=v;
|
_vm=v;
|
||||||
_sourcename = SQString::Create(_ss(v), sourcename);
|
_sourcename = SQString::Create(_ss(v), sourcename);
|
||||||
@@ -164,7 +164,7 @@ public:
|
|||||||
_debugline = 1;
|
_debugline = 1;
|
||||||
_debugop = 0;
|
_debugop = 0;
|
||||||
|
|
||||||
SQFuncState funcstate(_ss(_vm), NULL,ThrowError,this);
|
SQFuncState funcstate(_ss(_vm), nullptr,ThrowError,this);
|
||||||
funcstate._name = SQString::Create(_ss(_vm), "main");
|
funcstate._name = SQString::Create(_ss(_vm), "main");
|
||||||
_fs = &funcstate;
|
_fs = &funcstate;
|
||||||
_fs->AddParameter(_fs->CreateString("this"));
|
_fs->AddParameter(_fs->CreateString("this"));
|
||||||
|
4
src/3rdparty/squirrel/squirrel/sqlexer.cpp
vendored
4
src/3rdparty/squirrel/squirrel/sqlexer.cpp
vendored
@@ -87,7 +87,7 @@ SQLexer::SQLexer(SQSharedState *ss, SQLEXREADFUNC rg, SQUserPointer up,CompilerE
|
|||||||
_prevtoken = -1;
|
_prevtoken = -1;
|
||||||
_curtoken = -1;
|
_curtoken = -1;
|
||||||
|
|
||||||
_svalue = NULL;
|
_svalue = nullptr;
|
||||||
_nvalue = 0;
|
_nvalue = 0;
|
||||||
_fvalue = 0;
|
_fvalue = 0;
|
||||||
|
|
||||||
@@ -119,7 +119,7 @@ const SQChar *SQLexer::Tok2Str(SQInteger tok)
|
|||||||
if(((SQInteger)_integer(val)) == tok)
|
if(((SQInteger)_integer(val)) == tok)
|
||||||
return _stringval(key);
|
return _stringval(key);
|
||||||
}
|
}
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQLexer::LexBlockComment()
|
void SQLexer::LexBlockComment()
|
||||||
|
10
src/3rdparty/squirrel/squirrel/sqobject.cpp
vendored
10
src/3rdparty/squirrel/squirrel/sqobject.cpp
vendored
@@ -41,7 +41,7 @@ const SQChar *IdType2Name(SQObjectType type)
|
|||||||
case _RT_INSTANCE: return "instance";
|
case _RT_INSTANCE: return "instance";
|
||||||
case _RT_WEAKREF: return "weakref";
|
case _RT_WEAKREF: return "weakref";
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,13 +101,13 @@ SQRefCounted::~SQRefCounted()
|
|||||||
{
|
{
|
||||||
if(_weakref) {
|
if(_weakref) {
|
||||||
_weakref->_obj._type = OT_NULL;
|
_weakref->_obj._type = OT_NULL;
|
||||||
_weakref->_obj._unVal.pRefCounted = NULL;
|
_weakref->_obj._unVal.pRefCounted = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQWeakRef::Release() {
|
void SQWeakRef::Release() {
|
||||||
if(ISREFCOUNTED(_obj._type)) {
|
if(ISREFCOUNTED(_obj._type)) {
|
||||||
_obj._unVal.pRefCounted->_weakref = NULL;
|
_obj._unVal.pRefCounted->_weakref = nullptr;
|
||||||
}
|
}
|
||||||
sq_delete(this,SQWeakRef);
|
sq_delete(this,SQWeakRef);
|
||||||
}
|
}
|
||||||
@@ -149,7 +149,7 @@ bool SQGenerator::Yield(SQVM *v)
|
|||||||
for(SQInteger j = nvargs - 1; j >= 0; j--) {
|
for(SQInteger j = nvargs - 1; j >= 0; j--) {
|
||||||
_vargsstack.push_back(v->_vargsstack[vargsbase+j]);
|
_vargsstack.push_back(v->_vargsstack[vargsbase+j]);
|
||||||
}
|
}
|
||||||
_ci._generator=NULL;
|
_ci._generator=nullptr;
|
||||||
for(SQInteger i=0;i<_ci._etraps;i++) {
|
for(SQInteger i=0;i<_ci._etraps;i++) {
|
||||||
_etraps.push_back(v->_etraps.top());
|
_etraps.push_back(v->_etraps.top());
|
||||||
v->_etraps.pop_back();
|
v->_etraps.pop_back();
|
||||||
@@ -204,7 +204,7 @@ void SQArray::Extend(const SQArray *a){
|
|||||||
const SQChar* SQFunctionProto::GetLocal(SQVM *vm,SQUnsignedInteger stackbase,SQUnsignedInteger nseq,SQUnsignedInteger nop)
|
const SQChar* SQFunctionProto::GetLocal(SQVM *vm,SQUnsignedInteger stackbase,SQUnsignedInteger nseq,SQUnsignedInteger nop)
|
||||||
{
|
{
|
||||||
SQUnsignedInteger nvars=_nlocalvarinfos;
|
SQUnsignedInteger nvars=_nlocalvarinfos;
|
||||||
const SQChar *res=NULL;
|
const SQChar *res=nullptr;
|
||||||
if(nvars>=nseq){
|
if(nvars>=nseq){
|
||||||
for(SQUnsignedInteger i=0;i<nvars;i++){
|
for(SQUnsignedInteger i=0;i<nvars;i++){
|
||||||
if(_localvarinfos[i]._start_op<=nop && _localvarinfos[i]._end_op>=nop)
|
if(_localvarinfos[i]._start_op<=nop && _localvarinfos[i]._end_op>=nop)
|
||||||
|
6
src/3rdparty/squirrel/squirrel/sqobject.h
vendored
6
src/3rdparty/squirrel/squirrel/sqobject.h
vendored
@@ -56,7 +56,7 @@ enum SQMetaMethod{
|
|||||||
|
|
||||||
struct SQRefCounted
|
struct SQRefCounted
|
||||||
{
|
{
|
||||||
SQRefCounted() { _uiRef = 0; _weakref = NULL; }
|
SQRefCounted() { _uiRef = 0; _weakref = nullptr; }
|
||||||
virtual ~SQRefCounted();
|
virtual ~SQRefCounted();
|
||||||
SQWeakRef *GetWeakRef(SQObjectType type);
|
SQWeakRef *GetWeakRef(SQObjectType type);
|
||||||
SQUnsignedInteger _uiRef;
|
SQUnsignedInteger _uiRef;
|
||||||
@@ -152,7 +152,7 @@ struct SQObjectPtr : public SQObject
|
|||||||
{
|
{
|
||||||
SQ_OBJECT_RAWINIT()
|
SQ_OBJECT_RAWINIT()
|
||||||
_type=OT_NULL;
|
_type=OT_NULL;
|
||||||
_unVal.pUserPointer=NULL;
|
_unVal.pUserPointer=nullptr;
|
||||||
}
|
}
|
||||||
SQObjectPtr(const SQObjectPtr &o)
|
SQObjectPtr(const SQObjectPtr &o)
|
||||||
{
|
{
|
||||||
@@ -299,7 +299,7 @@ struct SQObjectPtr : public SQObject
|
|||||||
tOldType = _type;
|
tOldType = _type;
|
||||||
unOldVal = _unVal;
|
unOldVal = _unVal;
|
||||||
_type = OT_NULL;
|
_type = OT_NULL;
|
||||||
_unVal.pUserPointer = NULL;
|
_unVal.pUserPointer = nullptr;
|
||||||
__Release(tOldType,unOldVal);
|
__Release(tOldType,unOldVal);
|
||||||
}
|
}
|
||||||
inline SQObjectPtr& operator=(SQInteger i)
|
inline SQObjectPtr& operator=(SQInteger i)
|
||||||
|
44
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
44
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
@@ -79,12 +79,12 @@ SQTable *CreateDefaultDelegate(SQSharedState *ss,SQRegFunction *funcz)
|
|||||||
{
|
{
|
||||||
SQInteger i=0;
|
SQInteger i=0;
|
||||||
SQTable *t=SQTable::Create(ss,0);
|
SQTable *t=SQTable::Create(ss,0);
|
||||||
while(funcz[i].name!=0){
|
while(funcz[i].name!=nullptr){
|
||||||
SQNativeClosure *nc = SQNativeClosure::Create(ss,funcz[i].f);
|
SQNativeClosure *nc = SQNativeClosure::Create(ss,funcz[i].f);
|
||||||
nc->_nparamscheck = funcz[i].nparamscheck;
|
nc->_nparamscheck = funcz[i].nparamscheck;
|
||||||
nc->_name = SQString::Create(ss,funcz[i].name);
|
nc->_name = SQString::Create(ss,funcz[i].name);
|
||||||
if(funcz[i].typemask && !CompileTypemask(nc->_typecheck,funcz[i].typemask))
|
if(funcz[i].typemask && !CompileTypemask(nc->_typecheck,funcz[i].typemask))
|
||||||
return NULL;
|
return nullptr;
|
||||||
t->NewSlot(SQString::Create(ss,funcz[i].name),nc);
|
t->NewSlot(SQString::Create(ss,funcz[i].name),nc);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@@ -93,15 +93,15 @@ SQTable *CreateDefaultDelegate(SQSharedState *ss,SQRegFunction *funcz)
|
|||||||
|
|
||||||
SQSharedState::SQSharedState()
|
SQSharedState::SQSharedState()
|
||||||
{
|
{
|
||||||
_compilererrorhandler = NULL;
|
_compilererrorhandler = nullptr;
|
||||||
_printfunc = NULL;
|
_printfunc = nullptr;
|
||||||
_debuginfo = false;
|
_debuginfo = false;
|
||||||
_notifyallexceptions = false;
|
_notifyallexceptions = false;
|
||||||
_scratchpad=NULL;
|
_scratchpad=nullptr;
|
||||||
_scratchpadsize=0;
|
_scratchpadsize=0;
|
||||||
_collectable_free_processing = false;
|
_collectable_free_processing = false;
|
||||||
#ifndef NO_GARBAGE_COLLECTOR
|
#ifndef NO_GARBAGE_COLLECTOR
|
||||||
_gc_chain=NULL;
|
_gc_chain=nullptr;
|
||||||
#endif
|
#endif
|
||||||
sq_new(_stringtable,SQStringTable);
|
sq_new(_stringtable,SQStringTable);
|
||||||
sq_new(_metamethods,SQObjectPtrVec);
|
sq_new(_metamethods,SQObjectPtrVec);
|
||||||
@@ -189,7 +189,7 @@ SQSharedState::~SQSharedState()
|
|||||||
_refs_table.Finalize();
|
_refs_table.Finalize();
|
||||||
#ifndef NO_GARBAGE_COLLECTOR
|
#ifndef NO_GARBAGE_COLLECTOR
|
||||||
SQCollectable *t = _gc_chain;
|
SQCollectable *t = _gc_chain;
|
||||||
SQCollectable *nx = NULL;
|
SQCollectable *nx = nullptr;
|
||||||
if(t) {
|
if(t) {
|
||||||
t->_uiRef++;
|
t->_uiRef++;
|
||||||
while(t) {
|
while(t) {
|
||||||
@@ -299,7 +299,7 @@ SQInteger SQSharedState::CollectGarbage(SQVM *vm)
|
|||||||
EnqueueMarkObject(_instance_default_delegate,queue);
|
EnqueueMarkObject(_instance_default_delegate,queue);
|
||||||
EnqueueMarkObject(_weakref_default_delegate,queue);
|
EnqueueMarkObject(_weakref_default_delegate,queue);
|
||||||
|
|
||||||
SQCollectable *tchain=NULL;
|
SQCollectable *tchain=nullptr;
|
||||||
|
|
||||||
while (!queue.IsEmpty()) {
|
while (!queue.IsEmpty()) {
|
||||||
SQCollectable *q = queue.Pop();
|
SQCollectable *q = queue.Pop();
|
||||||
@@ -309,7 +309,7 @@ SQInteger SQSharedState::CollectGarbage(SQVM *vm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SQCollectable *t = _gc_chain;
|
SQCollectable *t = _gc_chain;
|
||||||
SQCollectable *nx = NULL;
|
SQCollectable *nx = nullptr;
|
||||||
if(t) {
|
if(t) {
|
||||||
t->_uiRef++;
|
t->_uiRef++;
|
||||||
while(t) {
|
while(t) {
|
||||||
@@ -340,7 +340,7 @@ SQInteger SQSharedState::CollectGarbage(SQVM *vm)
|
|||||||
#ifndef NO_GARBAGE_COLLECTOR
|
#ifndef NO_GARBAGE_COLLECTOR
|
||||||
void SQCollectable::AddToChain(SQCollectable **chain,SQCollectable *c)
|
void SQCollectable::AddToChain(SQCollectable **chain,SQCollectable *c)
|
||||||
{
|
{
|
||||||
c->_prev = NULL;
|
c->_prev = nullptr;
|
||||||
c->_next = *chain;
|
c->_next = *chain;
|
||||||
if(*chain) (*chain)->_prev = c;
|
if(*chain) (*chain)->_prev = c;
|
||||||
*chain = c;
|
*chain = c;
|
||||||
@@ -352,8 +352,8 @@ void SQCollectable::RemoveFromChain(SQCollectable **chain,SQCollectable *c)
|
|||||||
else *chain = c->_next;
|
else *chain = c->_next;
|
||||||
if(c->_next)
|
if(c->_next)
|
||||||
c->_next->_prev = c->_prev;
|
c->_next->_prev = c->_prev;
|
||||||
c->_next = NULL;
|
c->_next = nullptr;
|
||||||
c->_prev = NULL;
|
c->_prev = nullptr;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -483,16 +483,16 @@ RefTable::RefNode *RefTable::Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bo
|
|||||||
{
|
{
|
||||||
RefNode *ref;
|
RefNode *ref;
|
||||||
mainpos = ::HashObj(obj)&(_numofslots-1);
|
mainpos = ::HashObj(obj)&(_numofslots-1);
|
||||||
*prev = NULL;
|
*prev = nullptr;
|
||||||
for (ref = _buckets[mainpos]; ref; ) {
|
for (ref = _buckets[mainpos]; ref; ) {
|
||||||
if(_rawval(ref->obj) == _rawval(obj) && type(ref->obj) == type(obj))
|
if(_rawval(ref->obj) == _rawval(obj) && type(ref->obj) == type(obj))
|
||||||
break;
|
break;
|
||||||
*prev = ref;
|
*prev = ref;
|
||||||
ref = ref->next;
|
ref = ref->next;
|
||||||
}
|
}
|
||||||
if(ref == NULL && add) {
|
if(ref == nullptr && add) {
|
||||||
if(_numofslots == _slotused) {
|
if(_numofslots == _slotused) {
|
||||||
assert(_freelist == 0);
|
assert(_freelist == nullptr);
|
||||||
Resize(_numofslots*2);
|
Resize(_numofslots*2);
|
||||||
mainpos = ::HashObj(obj)&(_numofslots-1);
|
mainpos = ::HashObj(obj)&(_numofslots-1);
|
||||||
}
|
}
|
||||||
@@ -510,16 +510,16 @@ void RefTable::AllocNodes(SQUnsignedInteger size)
|
|||||||
RefNode *temp = nodes;
|
RefNode *temp = nodes;
|
||||||
SQUnsignedInteger n;
|
SQUnsignedInteger n;
|
||||||
for(n = 0; n < size - 1; n++) {
|
for(n = 0; n < size - 1; n++) {
|
||||||
bucks[n] = NULL;
|
bucks[n] = nullptr;
|
||||||
temp->refs = 0;
|
temp->refs = 0;
|
||||||
new (&temp->obj) SQObjectPtr;
|
new (&temp->obj) SQObjectPtr;
|
||||||
temp->next = temp+1;
|
temp->next = temp+1;
|
||||||
temp++;
|
temp++;
|
||||||
}
|
}
|
||||||
bucks[n] = NULL;
|
bucks[n] = nullptr;
|
||||||
temp->refs = 0;
|
temp->refs = 0;
|
||||||
new (&temp->obj) SQObjectPtr;
|
new (&temp->obj) SQObjectPtr;
|
||||||
temp->next = NULL;
|
temp->next = nullptr;
|
||||||
_freelist = nodes;
|
_freelist = nodes;
|
||||||
_nodes = nodes;
|
_nodes = nodes;
|
||||||
_buckets = bucks;
|
_buckets = bucks;
|
||||||
@@ -543,7 +543,7 @@ SQStringTable::SQStringTable()
|
|||||||
SQStringTable::~SQStringTable()
|
SQStringTable::~SQStringTable()
|
||||||
{
|
{
|
||||||
SQ_FREE(_strings,sizeof(SQString*)*_numofslots);
|
SQ_FREE(_strings,sizeof(SQString*)*_numofslots);
|
||||||
_strings = NULL;
|
_strings = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQStringTable::AllocNodes(SQInteger size)
|
void SQStringTable::AllocNodes(SQInteger size)
|
||||||
@@ -580,8 +580,8 @@ SQString::SQString(const SQChar *news, SQInteger len)
|
|||||||
_val[len] = '\0';
|
_val[len] = '\0';
|
||||||
_len = len;
|
_len = len;
|
||||||
_hash = ::_hashstr(news,(size_t)len);
|
_hash = ::_hashstr(news,(size_t)len);
|
||||||
_next = NULL;
|
_next = nullptr;
|
||||||
_sharedstate = NULL;
|
_sharedstate = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQStringTable::Resize(SQInteger size)
|
void SQStringTable::Resize(SQInteger size)
|
||||||
@@ -605,7 +605,7 @@ void SQStringTable::Resize(SQInteger size)
|
|||||||
void SQStringTable::Remove(SQString *bs)
|
void SQStringTable::Remove(SQString *bs)
|
||||||
{
|
{
|
||||||
SQString *s;
|
SQString *s;
|
||||||
SQString *prev=NULL;
|
SQString *prev=nullptr;
|
||||||
SQHash h = bs->_hash&(_numofslots - 1);
|
SQHash h = bs->_hash&(_numofslots - 1);
|
||||||
|
|
||||||
for (s = _strings[h]; s; ){
|
for (s = _strings[h]; s; ){
|
||||||
|
12
src/3rdparty/squirrel/squirrel/sqtable.cpp
vendored
12
src/3rdparty/squirrel/squirrel/sqtable.cpp
vendored
@@ -18,7 +18,7 @@ SQTable::SQTable(SQSharedState *ss,SQInteger nInitialSize)
|
|||||||
while(nInitialSize>pow2size)pow2size=pow2size<<1;
|
while(nInitialSize>pow2size)pow2size=pow2size<<1;
|
||||||
AllocNodes(pow2size);
|
AllocNodes(pow2size);
|
||||||
_usednodes = 0;
|
_usednodes = 0;
|
||||||
_delegate = NULL;
|
_delegate = nullptr;
|
||||||
INIT_CHAIN();
|
INIT_CHAIN();
|
||||||
ADD_TO_CHAIN(&_sharedstate->_gc_chain,this);
|
ADD_TO_CHAIN(&_sharedstate->_gc_chain,this);
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@ void SQTable::AllocNodes(SQInteger nSize)
|
|||||||
_HashNode *nodes=(_HashNode *)SQ_MALLOC(sizeof(_HashNode)*nSize);
|
_HashNode *nodes=(_HashNode *)SQ_MALLOC(sizeof(_HashNode)*nSize);
|
||||||
for(SQInteger i=0;i<nSize;i++){
|
for(SQInteger i=0;i<nSize;i++){
|
||||||
new (&nodes[i]) _HashNode;
|
new (&nodes[i]) _HashNode;
|
||||||
nodes[i].next=NULL;
|
nodes[i].next=nullptr;
|
||||||
}
|
}
|
||||||
_numofnodes=nSize;
|
_numofnodes=nSize;
|
||||||
_nodes=nodes;
|
_nodes=nodes;
|
||||||
@@ -120,7 +120,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
|||||||
if (mp > n && (othern = &_nodes[mph]) != mp){
|
if (mp > n && (othern = &_nodes[mph]) != mp){
|
||||||
/* yes; move colliding node into free position */
|
/* yes; move colliding node into free position */
|
||||||
while (othern->next != mp){
|
while (othern->next != mp){
|
||||||
assert(othern->next != NULL);
|
assert(othern->next != nullptr);
|
||||||
othern = othern->next; /* find previous */
|
othern = othern->next; /* find previous */
|
||||||
}
|
}
|
||||||
othern->next = n; /* redo the chain with `n' in place of `mp' */
|
othern->next = n; /* redo the chain with `n' in place of `mp' */
|
||||||
@@ -129,7 +129,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
|||||||
n->next = mp->next;
|
n->next = mp->next;
|
||||||
mp->key = _null_;
|
mp->key = _null_;
|
||||||
mp->val = _null_;
|
mp->val = _null_;
|
||||||
mp->next = NULL; /* now `mp' is free */
|
mp->next = nullptr; /* now `mp' is free */
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
/* new node will go into free position */
|
/* new node will go into free position */
|
||||||
@@ -141,7 +141,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
|||||||
mp->key = key;
|
mp->key = key;
|
||||||
|
|
||||||
for (;;) { /* correct `firstfree' */
|
for (;;) { /* correct `firstfree' */
|
||||||
if (type(_firstfree->key) == OT_NULL && _firstfree->next == NULL) {
|
if (type(_firstfree->key) == OT_NULL && _firstfree->next == nullptr) {
|
||||||
mp->val = val;
|
mp->val = val;
|
||||||
_usednodes++;
|
_usednodes++;
|
||||||
return true; /* OK; table still has a free place */
|
return true; /* OK; table still has a free place */
|
||||||
@@ -190,7 +190,7 @@ void SQTable::_ClearNodes()
|
|||||||
void SQTable::Finalize()
|
void SQTable::Finalize()
|
||||||
{
|
{
|
||||||
_ClearNodes();
|
_ClearNodes();
|
||||||
SetDelegate(NULL);
|
SetDelegate(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SQTable::Clear()
|
void SQTable::Clear()
|
||||||
|
8
src/3rdparty/squirrel/squirrel/sqtable.h
vendored
8
src/3rdparty/squirrel/squirrel/sqtable.h
vendored
@@ -27,7 +27,7 @@ struct SQTable : public SQDelegable
|
|||||||
private:
|
private:
|
||||||
struct _HashNode
|
struct _HashNode
|
||||||
{
|
{
|
||||||
_HashNode() { next = NULL; }
|
_HashNode() { next = nullptr; }
|
||||||
SQObjectPtr val;
|
SQObjectPtr val;
|
||||||
SQObjectPtr key;
|
SQObjectPtr key;
|
||||||
_HashNode *next;
|
_HashNode *next;
|
||||||
@@ -47,14 +47,14 @@ public:
|
|||||||
{
|
{
|
||||||
SQTable *newtable = (SQTable*)SQ_MALLOC(sizeof(SQTable));
|
SQTable *newtable = (SQTable*)SQ_MALLOC(sizeof(SQTable));
|
||||||
new (newtable) SQTable(ss, nInitialSize);
|
new (newtable) SQTable(ss, nInitialSize);
|
||||||
newtable->_delegate = NULL;
|
newtable->_delegate = nullptr;
|
||||||
return newtable;
|
return newtable;
|
||||||
}
|
}
|
||||||
void Finalize() override;
|
void Finalize() override;
|
||||||
SQTable *Clone();
|
SQTable *Clone();
|
||||||
~SQTable()
|
~SQTable()
|
||||||
{
|
{
|
||||||
SetDelegate(NULL);
|
SetDelegate(nullptr);
|
||||||
REMOVE_FROM_CHAIN(&_sharedstate->_gc_chain, this);
|
REMOVE_FROM_CHAIN(&_sharedstate->_gc_chain, this);
|
||||||
for (SQInteger i = 0; i < _numofnodes; i++) _nodes[i].~_HashNode();
|
for (SQInteger i = 0; i < _numofnodes; i++) _nodes[i].~_HashNode();
|
||||||
SQ_FREE(_nodes, _numofnodes * sizeof(_HashNode));
|
SQ_FREE(_nodes, _numofnodes * sizeof(_HashNode));
|
||||||
@@ -70,7 +70,7 @@ public:
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
}while((n = n->next));
|
}while((n = n->next));
|
||||||
return NULL;
|
return nullptr;
|
||||||
}
|
}
|
||||||
bool Get(const SQObjectPtr &key,SQObjectPtr &val);
|
bool Get(const SQObjectPtr &key,SQObjectPtr &val);
|
||||||
void Remove(const SQObjectPtr &key);
|
void Remove(const SQObjectPtr &key);
|
||||||
|
6
src/3rdparty/squirrel/squirrel/squserdata.h
vendored
6
src/3rdparty/squirrel/squirrel/squserdata.h
vendored
@@ -4,12 +4,12 @@
|
|||||||
|
|
||||||
struct SQUserData : SQDelegable
|
struct SQUserData : SQDelegable
|
||||||
{
|
{
|
||||||
SQUserData(SQSharedState *ss, SQInteger size){ _delegate = 0; _hook = NULL; INIT_CHAIN(); ADD_TO_CHAIN(&_ss(this)->_gc_chain, this); _size = size; _typetag = 0;
|
SQUserData(SQSharedState *ss, SQInteger size){ _delegate = nullptr; _hook = nullptr; INIT_CHAIN(); ADD_TO_CHAIN(&_ss(this)->_gc_chain, this); _size = size; _typetag = nullptr;
|
||||||
}
|
}
|
||||||
~SQUserData()
|
~SQUserData()
|
||||||
{
|
{
|
||||||
REMOVE_FROM_CHAIN(&_ss(this)->_gc_chain, this);
|
REMOVE_FROM_CHAIN(&_ss(this)->_gc_chain, this);
|
||||||
SetDelegate(NULL);
|
SetDelegate(nullptr);
|
||||||
}
|
}
|
||||||
static SQUserData* Create(SQSharedState *ss, SQInteger size)
|
static SQUserData* Create(SQSharedState *ss, SQInteger size)
|
||||||
{
|
{
|
||||||
@@ -19,7 +19,7 @@ struct SQUserData : SQDelegable
|
|||||||
}
|
}
|
||||||
#ifndef NO_GARBAGE_COLLECTOR
|
#ifndef NO_GARBAGE_COLLECTOR
|
||||||
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
|
void EnqueueMarkObjectForChildren(SQGCMarkerQueue &queue);
|
||||||
void Finalize(){SetDelegate(NULL);}
|
void Finalize(){SetDelegate(nullptr);}
|
||||||
#endif
|
#endif
|
||||||
void Release() {
|
void Release() {
|
||||||
if (_hook) _hook(_val,_size);
|
if (_hook) _hook(_val,_size);
|
||||||
|
2
src/3rdparty/squirrel/squirrel/squtils.h
vendored
2
src/3rdparty/squirrel/squirrel/squtils.h
vendored
@@ -18,7 +18,7 @@ template<typename T> class sqvector
|
|||||||
public:
|
public:
|
||||||
sqvector()
|
sqvector()
|
||||||
{
|
{
|
||||||
_vals = NULL;
|
_vals = nullptr;
|
||||||
_size = 0;
|
_size = 0;
|
||||||
_allocated = 0;
|
_allocated = 0;
|
||||||
}
|
}
|
||||||
|
24
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
24
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
@@ -33,7 +33,7 @@ void SQVM::ClearStack(SQInteger last_top)
|
|||||||
tOldType = o._type;
|
tOldType = o._type;
|
||||||
unOldVal = o._unVal;
|
unOldVal = o._unVal;
|
||||||
o._type = OT_NULL;
|
o._type = OT_NULL;
|
||||||
o._unVal.pUserPointer = NULL;
|
o._unVal.pUserPointer = nullptr;
|
||||||
__Release(tOldType,unOldVal);
|
__Release(tOldType,unOldVal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -107,7 +107,7 @@ SQVM::SQVM(SQSharedState *ss)
|
|||||||
_suspended_target=-1;
|
_suspended_target=-1;
|
||||||
_suspended_root = SQFalse;
|
_suspended_root = SQFalse;
|
||||||
_suspended_traps=0;
|
_suspended_traps=0;
|
||||||
_foreignptr=NULL;
|
_foreignptr=nullptr;
|
||||||
_nnativecalls=0;
|
_nnativecalls=0;
|
||||||
_lasterror = _null_;
|
_lasterror = _null_;
|
||||||
_errorhandler = _null_;
|
_errorhandler = _null_;
|
||||||
@@ -115,12 +115,12 @@ SQVM::SQVM(SQSharedState *ss)
|
|||||||
_can_suspend = false;
|
_can_suspend = false;
|
||||||
_in_stackoverflow = false;
|
_in_stackoverflow = false;
|
||||||
_ops_till_suspend = 0;
|
_ops_till_suspend = 0;
|
||||||
_callsstack = NULL;
|
_callsstack = nullptr;
|
||||||
_callsstacksize = 0;
|
_callsstacksize = 0;
|
||||||
_alloccallsstacksize = 0;
|
_alloccallsstacksize = 0;
|
||||||
_top = 0;
|
_top = 0;
|
||||||
_stackbase = 0;
|
_stackbase = 0;
|
||||||
ci = NULL;
|
ci = nullptr;
|
||||||
INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this);
|
INIT_CHAIN();ADD_TO_CHAIN(&_ss(this)->_gc_chain,this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -379,7 +379,7 @@ bool SQVM::StartCall(SQClosure *closure,SQInteger target,SQInteger args,SQIntege
|
|||||||
|
|
||||||
if (!tailcall) {
|
if (!tailcall) {
|
||||||
CallInfo lc = {};
|
CallInfo lc = {};
|
||||||
lc._generator = NULL;
|
lc._generator = nullptr;
|
||||||
lc._etraps = 0;
|
lc._etraps = 0;
|
||||||
lc._prevstkbase = (SQInt32) ( stackbase - _stackbase );
|
lc._prevstkbase = (SQInt32) ( stackbase - _stackbase );
|
||||||
lc._target = (SQInt32) target;
|
lc._target = (SQInt32) target;
|
||||||
@@ -437,7 +437,7 @@ bool SQVM::Return(SQInteger _arg0, SQInteger _arg1, SQObjectPtr &retval)
|
|||||||
|
|
||||||
while (last_top > oldstackbase) _stack._vals[last_top--].Null();
|
while (last_top > oldstackbase) _stack._vals[last_top--].Null();
|
||||||
assert(oldstackbase >= _stackbase);
|
assert(oldstackbase >= _stackbase);
|
||||||
return broot?true:false;
|
return broot != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _RET_ON_FAIL(exp) { if(!exp) return false; }
|
#define _RET_ON_FAIL(exp) { if(!exp) return false; }
|
||||||
@@ -557,7 +557,7 @@ bool SQVM::DELEGATE_OP(SQObjectPtr &trg,SQObjectPtr &o1,SQObjectPtr &o2)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OT_NULL:
|
case OT_NULL:
|
||||||
_table(o1)->SetDelegate(NULL);
|
_table(o1)->SetDelegate(nullptr);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Raise_Error("using '%s' as delegate", GetTypeName(o2));
|
Raise_Error("using '%s' as delegate", GetTypeName(o2));
|
||||||
@@ -627,7 +627,7 @@ bool SQVM::GETVARGV_OP(SQObjectPtr &target,SQObjectPtr &index,CallInfo *ci)
|
|||||||
|
|
||||||
bool SQVM::CLASS_OP(SQObjectPtr &target,SQInteger baseclass,SQInteger attributes)
|
bool SQVM::CLASS_OP(SQObjectPtr &target,SQInteger baseclass,SQInteger attributes)
|
||||||
{
|
{
|
||||||
SQClass *base = NULL;
|
SQClass *base = nullptr;
|
||||||
SQObjectPtr attrs;
|
SQObjectPtr attrs;
|
||||||
if(baseclass != -1) {
|
if(baseclass != -1) {
|
||||||
if(type(_stack._vals[_stackbase+baseclass]) != OT_CLASS) { Raise_Error("trying to inherit from a %s",GetTypeName(_stack._vals[_stackbase+baseclass])); return false; }
|
if(type(_stack._vals[_stackbase+baseclass]) != OT_CLASS) { Raise_Error("trying to inherit from a %s",GetTypeName(_stack._vals[_stackbase+baseclass])); return false; }
|
||||||
@@ -653,7 +653,7 @@ bool SQVM::CLASS_OP(SQObjectPtr &target,SQInteger baseclass,SQInteger attributes
|
|||||||
bool SQVM::IsEqual(SQObjectPtr &o1,SQObjectPtr &o2,bool &res)
|
bool SQVM::IsEqual(SQObjectPtr &o1,SQObjectPtr &o2,bool &res)
|
||||||
{
|
{
|
||||||
if(type(o1) == type(o2)) {
|
if(type(o1) == type(o2)) {
|
||||||
res = ((_rawval(o1) == _rawval(o2)?true:false));
|
res = ((_rawval(o1) == _rawval(o2)));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(sq_isnumeric(o1) && sq_isnumeric(o2)) {
|
if(sq_isnumeric(o1) && sq_isnumeric(o2)) {
|
||||||
@@ -708,7 +708,7 @@ bool SQVM::Execute(SQObjectPtr &closure, SQInteger target, SQInteger nargs, SQIn
|
|||||||
temp_reg = closure;
|
temp_reg = closure;
|
||||||
if(!StartCall(_closure(temp_reg), _top - nargs, nargs, stackbase, false)) {
|
if(!StartCall(_closure(temp_reg), _top - nargs, nargs, stackbase, false)) {
|
||||||
//call the handler if there are no calls in the stack, if not relies on the previous node
|
//call the handler if there are no calls in the stack, if not relies on the previous node
|
||||||
if(ci == NULL) CallErrorHandler(_lasterror);
|
if(ci == nullptr) CallErrorHandler(_lasterror);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (_funcproto(_closure(temp_reg)->_function)->_bgenerator) {
|
if (_funcproto(_closure(temp_reg)->_function)->_bgenerator) {
|
||||||
@@ -1028,7 +1028,7 @@ common_call:
|
|||||||
case _OP_THROW: Raise_Error(TARGET); SQ_THROW();
|
case _OP_THROW: Raise_Error(TARGET); SQ_THROW();
|
||||||
case _OP_CLASS: _GUARD(CLASS_OP(TARGET,arg1,arg2)); continue;
|
case _OP_CLASS: _GUARD(CLASS_OP(TARGET,arg1,arg2)); continue;
|
||||||
case _OP_NEWSLOTA:
|
case _OP_NEWSLOTA:
|
||||||
bool bstatic = (arg0&NEW_SLOT_STATIC_FLAG)?true:false;
|
bool bstatic = (arg0&NEW_SLOT_STATIC_FLAG) != 0;
|
||||||
if(type(STK(arg1)) == OT_CLASS) {
|
if(type(STK(arg1)) == OT_CLASS) {
|
||||||
if(type(_class(STK(arg1))->_metamethods[MT_NEWMEMBER]) != OT_NULL ) {
|
if(type(_class(STK(arg1))->_metamethods[MT_NEWMEMBER]) != OT_NULL ) {
|
||||||
Push(STK(arg1)); Push(STK(arg2)); Push(STK(arg3));
|
Push(STK(arg1)); Push(STK(arg2)); Push(STK(arg3));
|
||||||
@@ -1160,7 +1160,7 @@ bool SQVM::CallNative(SQNativeClosure *nclosure,SQInteger nargs,SQInteger stackb
|
|||||||
_top = stackbase + nargs;
|
_top = stackbase + nargs;
|
||||||
CallInfo lci = {};
|
CallInfo lci = {};
|
||||||
lci._closure = nclosure;
|
lci._closure = nclosure;
|
||||||
lci._generator = NULL;
|
lci._generator = nullptr;
|
||||||
lci._etraps = 0;
|
lci._etraps = 0;
|
||||||
lci._prevstkbase = (SQInt32) (stackbase - _stackbase);
|
lci._prevstkbase = (SQInt32) (stackbase - _stackbase);
|
||||||
lci._ncalls = 1;
|
lci._ncalls = 1;
|
||||||
|
@@ -63,7 +63,7 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
|||||||
{
|
{
|
||||||
/* Get the AIInfo */
|
/* Get the AIInfo */
|
||||||
SQUserPointer instance = nullptr;
|
SQUserPointer instance = nullptr;
|
||||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, 0)) || instance == nullptr) return sq_throwerror(vm, "Pass an instance of a child class of AIInfo to RegisterAI");
|
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, nullptr)) || instance == nullptr) return sq_throwerror(vm, "Pass an instance of a child class of AIInfo to RegisterAI");
|
||||||
AIInfo *info = (AIInfo *)instance;
|
AIInfo *info = (AIInfo *)instance;
|
||||||
|
|
||||||
SQInteger res = ScriptInfo::Constructor(vm, info);
|
SQInteger res = ScriptInfo::Constructor(vm, info);
|
||||||
@@ -107,7 +107,7 @@ template <> const char *GetClassName<AIInfo, ST_AI>() { return "AIInfo"; }
|
|||||||
{
|
{
|
||||||
/* Get the AIInfo */
|
/* Get the AIInfo */
|
||||||
SQUserPointer instance;
|
SQUserPointer instance;
|
||||||
sq_getinstanceup(vm, 2, &instance, 0);
|
sq_getinstanceup(vm, 2, &instance, nullptr);
|
||||||
AIInfo *info = (AIInfo *)instance;
|
AIInfo *info = (AIInfo *)instance;
|
||||||
info->api_version = nullptr;
|
info->api_version = nullptr;
|
||||||
|
|
||||||
|
@@ -393,8 +393,7 @@ set_name:;
|
|||||||
MarkWholeScreenDirty();
|
MarkWholeScreenDirty();
|
||||||
|
|
||||||
if (c->is_ai) {
|
if (c->is_ai) {
|
||||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
CompanyNewsInformation *cni = new CompanyNewsInformation(c);
|
||||||
cni->FillData(c);
|
|
||||||
SetDParam(0, STR_NEWS_COMPANY_LAUNCH_TITLE);
|
SetDParam(0, STR_NEWS_COMPANY_LAUNCH_TITLE);
|
||||||
SetDParam(1, STR_NEWS_COMPANY_LAUNCH_DESCRIPTION);
|
SetDParam(1, STR_NEWS_COMPANY_LAUNCH_DESCRIPTION);
|
||||||
SetDParamStr(2, cni->company_name);
|
SetDParamStr(2, cni->company_name);
|
||||||
@@ -782,21 +781,19 @@ void CompaniesYearlyLoop()
|
|||||||
* @param c the current company.
|
* @param c the current company.
|
||||||
* @param other the other company (use \c nullptr if not relevant).
|
* @param other the other company (use \c nullptr if not relevant).
|
||||||
*/
|
*/
|
||||||
void CompanyNewsInformation::FillData(const Company *c, const Company *other)
|
CompanyNewsInformation::CompanyNewsInformation(const Company *c, const Company *other)
|
||||||
{
|
{
|
||||||
SetDParam(0, c->index);
|
SetDParam(0, c->index);
|
||||||
GetString(this->company_name, STR_COMPANY_NAME, lastof(this->company_name));
|
this->company_name = GetString(STR_COMPANY_NAME);
|
||||||
|
|
||||||
if (other == nullptr) {
|
if (other != nullptr) {
|
||||||
*this->other_company_name = '\0';
|
|
||||||
} else {
|
|
||||||
SetDParam(0, other->index);
|
SetDParam(0, other->index);
|
||||||
GetString(this->other_company_name, STR_COMPANY_NAME, lastof(this->other_company_name));
|
this->other_company_name = GetString(STR_COMPANY_NAME);
|
||||||
c = other;
|
c = other;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetDParam(0, c->index);
|
SetDParam(0, c->index);
|
||||||
GetString(this->president_name, STR_PRESIDENT_NAME_MANAGER, lastof(this->president_name));
|
this->president_name = GetString(STR_PRESIDENT_NAME_MANAGER);
|
||||||
|
|
||||||
this->colour = c->colour;
|
this->colour = c->colour;
|
||||||
this->face = c->face;
|
this->face = c->face;
|
||||||
@@ -921,8 +918,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
|||||||
|
|
||||||
/* Delete any open window of the company */
|
/* Delete any open window of the company */
|
||||||
DeleteCompanyWindows(c->index);
|
DeleteCompanyWindows(c->index);
|
||||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
CompanyNewsInformation *cni = new CompanyNewsInformation(c);
|
||||||
cni->FillData(c);
|
|
||||||
|
|
||||||
/* Show the bankrupt news */
|
/* Show the bankrupt news */
|
||||||
SetDParam(0, STR_NEWS_COMPANY_BANKRUPT_TITLE);
|
SetDParam(0, STR_NEWS_COMPANY_BANKRUPT_TITLE);
|
||||||
|
@@ -634,8 +634,7 @@ static void CompanyCheckBankrupt(Company *c)
|
|||||||
|
|
||||||
/* Warn about bankruptcy after 3 months */
|
/* Warn about bankruptcy after 3 months */
|
||||||
case 4: {
|
case 4: {
|
||||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
CompanyNewsInformation *cni = new CompanyNewsInformation(c);
|
||||||
cni->FillData(c);
|
|
||||||
SetDParam(0, STR_NEWS_COMPANY_IN_TROUBLE_TITLE);
|
SetDParam(0, STR_NEWS_COMPANY_IN_TROUBLE_TITLE);
|
||||||
SetDParam(1, STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION);
|
SetDParam(1, STR_NEWS_COMPANY_IN_TROUBLE_DESCRIPTION);
|
||||||
SetDParamStr(2, cni->company_name);
|
SetDParamStr(2, cni->company_name);
|
||||||
@@ -2261,8 +2260,7 @@ static void DoAcquireCompany(Company *c)
|
|||||||
|
|
||||||
DEBUG(desync, 1, "buy_company: date{%08x; %02x; %02x}, buyer: %u, bought: %u", _date, _date_fract, _tick_skip_counter, (uint) _current_company, (uint) ci);
|
DEBUG(desync, 1, "buy_company: date{%08x; %02x; %02x}, buyer: %u, bought: %u", _date, _date_fract, _tick_skip_counter, (uint) _current_company, (uint) ci);
|
||||||
|
|
||||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
CompanyNewsInformation *cni = new CompanyNewsInformation(c, Company::Get(_current_company));
|
||||||
cni->FillData(c, Company::Get(_current_company));
|
|
||||||
|
|
||||||
SetDParam(0, STR_NEWS_COMPANY_MERGER_TITLE);
|
SetDParam(0, STR_NEWS_COMPANY_MERGER_TITLE);
|
||||||
SetDParam(1, c->bankrupt_value == 0 ? STR_NEWS_MERGER_TAKEOVER_TITLE : STR_NEWS_COMPANY_MERGER_DESCRIPTION);
|
SetDParam(1, c->bankrupt_value == 0 ? STR_NEWS_MERGER_TAKEOVER_TITLE : STR_NEWS_COMPANY_MERGER_DESCRIPTION);
|
||||||
|
@@ -889,7 +889,7 @@ public:
|
|||||||
this->fios_items_shown[i] = this->string_filter.GetState();
|
this->fios_items_shown[i] = this->string_filter.GetState();
|
||||||
if (this->fios_items_shown[i]) items_shown_count++;
|
if (this->fios_items_shown[i]) items_shown_count++;
|
||||||
|
|
||||||
if (&(this->fios_items[i]) == this->selected && this->fios_items_shown[i] == false) {
|
if (&(this->fios_items[i]) == this->selected && !this->fios_items_shown[i]) {
|
||||||
/* The selected element has been filtered out */
|
/* The selected element has been filtered out */
|
||||||
this->selected = nullptr;
|
this->selected = nullptr;
|
||||||
this->OnInvalidateData(SLIWD_SELECTION_CHANGES);
|
this->OnInvalidateData(SLIWD_SELECTION_CHANGES);
|
||||||
|
@@ -54,7 +54,7 @@ template <> const char *GetClassName<GameInfo, ST_GS>() { return "GSInfo"; }
|
|||||||
{
|
{
|
||||||
/* Get the GameInfo */
|
/* Get the GameInfo */
|
||||||
SQUserPointer instance = nullptr;
|
SQUserPointer instance = nullptr;
|
||||||
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, 0)) || instance == nullptr) return sq_throwerror(vm, "Pass an instance of a child class of GameInfo to RegisterGame");
|
if (SQ_FAILED(sq_getinstanceup(vm, 2, &instance, nullptr)) || instance == nullptr) return sq_throwerror(vm, "Pass an instance of a child class of GameInfo to RegisterGame");
|
||||||
GameInfo *info = (GameInfo *)instance;
|
GameInfo *info = (GameInfo *)instance;
|
||||||
|
|
||||||
SQInteger res = ScriptInfo::Constructor(vm, info);
|
SQInteger res = ScriptInfo::Constructor(vm, info);
|
||||||
|
@@ -890,6 +890,11 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
|
|||||||
|
|
||||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subvenció caducada:{}{}El transport de {STRING} des de {STRING} fins a {STRING} no tindrà subvenció
|
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subvenció caducada:{}{}El transport de {STRING} des de {STRING} fins a {STRING} no tindrà subvenció
|
||||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvenció retirada:{}{}El transport de {STRING} des de {STRING} fins a {STRING} ja no està subvencionat
|
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvenció retirada:{}{}El transport de {STRING} des de {STRING} fins a {STRING} ja no està subvencionat
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Oferta de subvenció per a un servei:{}{}La primera companyia en transportar {STRING} des de {STRING} fins a {STRING} tindrà una subvenció de {NUM} any{P "" s} per part de l'autoritat local
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} des de {STRING} fins a {STRING} rebrà uns ingressos addicionals del 50% durant {NUM} any{P "" s}
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} des de {STRING} fins a {STRING} ingressarà el doble de la tarifa habitual durant {NUM} any{P "" s}!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} des de {STRING} fins a {STRING} ingressarà el triple de la tarifa habitual durant {NUM} any{P "" s}
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvenció concedida a {STRING}{}{}El transport de {STRING} des de {STRING} fins a {STRING} ingressarà el quàdruple de la tarifa habitual durant {NUM} any{P "" s}
|
||||||
|
|
||||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Trànsit caòtic a {TOWN}{}{}El programa de reconstrucció dels carrers patrocinat per {STRING} porta 6 mesos de misèria als automobilistes
|
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Trànsit caòtic a {TOWN}{}{}El programa de reconstrucció dels carrers patrocinat per {STRING} porta 6 mesos de misèria als automobilistes
|
||||||
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopoli de transports
|
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Monopoli de transports
|
||||||
@@ -1205,6 +1210,10 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Nombre d'avarie
|
|||||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controla cada quan els vehicles revisats inadequadament s'espatllen
|
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Controla cada quan els vehicles revisats inadequadament s'espatllen
|
||||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplicador del subsidi: {STRING}
|
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Multiplicador del subsidi: {STRING}
|
||||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Fixa quant es paga pels transports subsidiats
|
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Fixa quant es paga pels transports subsidiats
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION :Durada dels subsidis: {STRING}
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Establiu el nombre d'anys que duren els subsidis.
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} any{P "" s}
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Sense subsidis
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Costos de construcció: {STRING}
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Costos de construcció: {STRING}
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Fixa el nivell de construcció i els preus de compra
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Fixa el nivell de construcció i els preus de compra
|
||||||
STR_CONFIG_SETTING_RECESSIONS :Recessions: {STRING}
|
STR_CONFIG_SETTING_RECESSIONS :Recessions: {STRING}
|
||||||
|
@@ -889,6 +889,11 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
|
|||||||
|
|
||||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsidieaanbod is verlopen:{}{}{STRING} van {STRING} naar {STRING} wordt nu niet meer gesubsidieerd
|
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subsidieaanbod is verlopen:{}{}{STRING} van {STRING} naar {STRING} wordt nu niet meer gesubsidieerd
|
||||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidie ingetrokken:{}{}{STRING}route van {STRING} naar {STRING} wordt nu niet meer gesubsidieerd
|
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidie ingetrokken:{}{}{STRING}route van {STRING} naar {STRING} wordt nu niet meer gesubsidieerd
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Subsidie aangeboden:{}{}Eerste {STRING}route van {STRING} naar {STRING} krijgt {NUM} jaar lang subsidie van de gemeente!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt de volgende {NUM} jaar 50% extra betaald!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt de volgende {NUM} jaar dubbel betaald!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt devolgende {NUM} jaar driedubbel betaald!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subsidie toegekend aan {STRING}!{}{}{STRING}route van {STRING} naar {STRING} krijgt de volgende {NUM} jaar vierdubbel betaald!
|
||||||
|
|
||||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Verkeerschaos in {TOWN}!{}{}Wegreconstructie betaald door {STRING} zorgt voor 6 maanden van misère bij weggebruikers!
|
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Verkeerschaos in {TOWN}!{}{}Wegreconstructie betaald door {STRING} zorgt voor 6 maanden van misère bij weggebruikers!
|
||||||
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopolie!
|
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopolie!
|
||||||
@@ -1204,6 +1209,10 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Voertuigstoring
|
|||||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Bepaal hoe vaak onvoldoende onderhouden voertuigen kapot kunnen gaan
|
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Bepaal hoe vaak onvoldoende onderhouden voertuigen kapot kunnen gaan
|
||||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidiefactor: {STRING}
|
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidiefactor: {STRING}
|
||||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Instellen hoeveel wordt betaald voor gesubsidieerde verbindingen
|
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Instellen hoeveel wordt betaald voor gesubsidieerde verbindingen
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION :Duur van subsidie: {STRING}
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Bepaal het aantal jaar dat de subsidie wordt verleend
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} jaar{P "" ""}
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Geen subsidie
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Bouwkosten: {STRING}
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Bouwkosten: {STRING}
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Het niveau van bouw- en aankoopkosten instellen
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Het niveau van bouw- en aankoopkosten instellen
|
||||||
STR_CONFIG_SETTING_RECESSIONS :Recessies: {STRING}
|
STR_CONFIG_SETTING_RECESSIONS :Recessies: {STRING}
|
||||||
|
@@ -2592,6 +2592,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(New company)
|
|||||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company and join it
|
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company and join it
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}This is you
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}This is you
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}This is the host of the game
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}This is the host of the game
|
||||||
|
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} client{P "" s} / {NUM} compan{P y ies}
|
||||||
|
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kick
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Ban
|
||||||
|
@@ -889,6 +889,11 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
|
|||||||
|
|
||||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Offer of subsidy expired:{}{}{STRING} from {STRING} to {STRING} will now not attract a subsidy
|
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Offer of subsidy expired:{}{}{STRING} from {STRING} to {STRING} will now not attract a subsidy
|
||||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidy withdrawn:{}{}{STRING} service from {STRING} to {STRING} is no longer subsidized
|
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subsidy withdrawn:{}{}{STRING} service from {STRING} to {STRING} is no longer subsidized
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Service subsidy offered:{}{}First {STRING} service from {STRING} to {STRING} will attract a {NUM} year subsidy from the local authority!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Service subsidy awarded to {STRING}!{}{}{STRING} service from {STRING} to {STRING} will pay 50% extra for the next {NUM} year{P "" s}!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Service subsidy awarded to {STRING}!{}{}{STRING} service from {STRING} to {STRING} will pay double rates for the next {NUM} year{P "" s}!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Service subsidy awarded to {STRING}!{}{}{STRING} service from {STRING} to {STRING} will pay triple rates for the next {NUM} year{P "" s}!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Service subsidy awarded to {STRING}!{}{}{STRING} service from {STRING} to {STRING} will pay quadruple rates for the next {NUM} year{P "" s}!
|
||||||
|
|
||||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Traffic chaos in {TOWN}!{}{}Road rebuilding program funded by {STRING} brings 6 months of misery to motorists!
|
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Traffic chaos in {TOWN}!{}{}Road rebuilding program funded by {STRING} brings 6 months of misery to motorists!
|
||||||
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transport monopoly!
|
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transport monopoly!
|
||||||
@@ -1204,6 +1209,10 @@ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Vehicle breakdo
|
|||||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Control how often inadequately maintained vehicles may break down
|
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Control how often inadequately maintained vehicles may break down
|
||||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidy multiplier: {STRING}
|
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subsidy multiplier: {STRING}
|
||||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Set how much is paid for subsidized connections
|
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Set how much is paid for subsidized connections
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION :Subsidy duration: {STRING}
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Set the number of years for which a subsidy is awarded
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} year{P "" s}
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :No subsidies
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Construction costs: {STRING}
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Construction costs: {STRING}
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Set level of construction and purchase costs
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Set level of construction and purchase costs
|
||||||
STR_CONFIG_SETTING_RECESSIONS :Recessions: {STRING}
|
STR_CONFIG_SETTING_RECESSIONS :Recessions: {STRING}
|
||||||
|
@@ -2159,6 +2159,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Uusi yhtiö)
|
|||||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Perusta uusi yhtiö ja liity siihen
|
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Perusta uusi yhtiö ja liity siihen
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tämä olet sinä
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Tämä olet sinä
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Tämä on pelin ylläpitäjä
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Tämä on pelin ylläpitäjä
|
||||||
|
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} pelaaja{P "" a} / {NUM} yhtiö{P "" tä}
|
||||||
|
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Potki
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Potki
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Estä
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Estä
|
||||||
@@ -2316,7 +2317,7 @@ STR_CONTENT_DETAIL_SUBTITLE_SELECTED :{SILVER}Olet va
|
|||||||
STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Tämä vaatimus on valittu ladattavaksi
|
STR_CONTENT_DETAIL_SUBTITLE_AUTOSELECTED :{SILVER}Tämä vaatimus on valittu ladattavaksi
|
||||||
STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Sinulla on jo tämä
|
STR_CONTENT_DETAIL_SUBTITLE_ALREADY_HERE :{SILVER}Sinulla on jo tämä
|
||||||
STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Tämä sisältö on tuntematon, ja sitä ei voida ladata OpenTTD:ssä
|
STR_CONTENT_DETAIL_SUBTITLE_DOES_NOT_EXIST :{SILVER}Tämä sisältö on tuntematon, ja sitä ei voida ladata OpenTTD:ssä
|
||||||
STR_CONTENT_DETAIL_UPDATE :{SILVER}Tämä korvaa sisällön {STRING}
|
STR_CONTENT_DETAIL_UPDATE :{SILVER}Tällä korvataan olemassa oleva {STRING}
|
||||||
STR_CONTENT_DETAIL_NAME :{SILVER}Nimi: {WHITE}{STRING}
|
STR_CONTENT_DETAIL_NAME :{SILVER}Nimi: {WHITE}{STRING}
|
||||||
STR_CONTENT_DETAIL_VERSION :{SILVER}Versio: {WHITE}{STRING}
|
STR_CONTENT_DETAIL_VERSION :{SILVER}Versio: {WHITE}{STRING}
|
||||||
STR_CONTENT_DETAIL_DESCRIPTION :{SILVER}Kuvaus: {WHITE}{STRING}
|
STR_CONTENT_DETAIL_DESCRIPTION :{SILVER}Kuvaus: {WHITE}{STRING}
|
||||||
|
@@ -19,11 +19,26 @@
|
|||||||
##id 0x0000
|
##id 0x0000
|
||||||
STR_NULL :
|
STR_NULL :
|
||||||
STR_EMPTY :
|
STR_EMPTY :
|
||||||
|
STR_UNDEFINED :(अपरिभाषित सूत्र)
|
||||||
|
STR_JUST_NOTHING :कुछ नहीं
|
||||||
|
|
||||||
# Cargo related strings
|
# Cargo related strings
|
||||||
# Plural cargo name
|
# Plural cargo name
|
||||||
STR_CARGO_PLURAL_NOTHING :
|
STR_CARGO_PLURAL_NOTHING :
|
||||||
|
STR_CARGO_PLURAL_PASSENGERS :यात्रीगण
|
||||||
STR_CARGO_PLURAL_COAL :कोयला
|
STR_CARGO_PLURAL_COAL :कोयला
|
||||||
|
STR_CARGO_PLURAL_MAIL :डाक
|
||||||
|
STR_CARGO_PLURAL_OIL :तेल
|
||||||
|
STR_CARGO_PLURAL_LIVESTOCK :पशुधन
|
||||||
|
STR_CARGO_PLURAL_GOODS :वस्तुएं
|
||||||
|
STR_CARGO_PLURAL_GRAIN :अन्न
|
||||||
|
STR_CARGO_PLURAL_WOOD :काष्ठ
|
||||||
|
STR_CARGO_PLURAL_IRON_ORE :लौह अयस्क
|
||||||
|
STR_CARGO_PLURAL_STEEL :इस्पात
|
||||||
|
STR_CARGO_PLURAL_VALUABLES :मूल्यवान वस्तुएं
|
||||||
|
STR_CARGO_PLURAL_COPPER_ORE :ताम्र अयस्क
|
||||||
|
STR_CARGO_PLURAL_MAIZE :मक्के
|
||||||
|
STR_CARGO_PLURAL_FRUIT :फल
|
||||||
|
|
||||||
# Singular cargo name
|
# Singular cargo name
|
||||||
STR_CARGO_SINGULAR_NOTHING :
|
STR_CARGO_SINGULAR_NOTHING :
|
||||||
@@ -222,7 +237,7 @@ STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLAC
|
|||||||
# Game options window
|
# Game options window
|
||||||
|
|
||||||
############ start of currency region
|
############ start of currency region
|
||||||
STR_GAME_OPTIONS_CURRENCY_FIM :मार्का, फिनलैंड (FIM)
|
STR_GAME_OPTIONS_CURRENCY_FIM :फिनलैंड मार्का (FIM)
|
||||||
STR_GAME_OPTIONS_CURRENCY_HKD :हाँग काँग डॉलर (एचकेडी)
|
STR_GAME_OPTIONS_CURRENCY_HKD :हाँग काँग डॉलर (एचकेडी)
|
||||||
############ end of currency region
|
############ end of currency region
|
||||||
|
|
||||||
@@ -358,6 +373,9 @@ STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}अप
|
|||||||
STR_QUIT_YES :{BLACK}हाँ
|
STR_QUIT_YES :{BLACK}हाँ
|
||||||
|
|
||||||
# Abandon game
|
# Abandon game
|
||||||
|
STR_ABANDON_GAME_CAPTION :{WHITE}खेल छोड़ें
|
||||||
|
STR_ABANDON_GAME_QUERY :{YELLOW}क्या आप वास्तव में खेल छोड़ना चाहते हैं?
|
||||||
|
STR_ABANDON_SCENARIO_QUERY :{YELLOW}क्या आप वास्तव में यह परिदृश्य छोड़ना चाहते हैं?
|
||||||
|
|
||||||
# Cheat window
|
# Cheat window
|
||||||
|
|
||||||
@@ -418,6 +436,7 @@ STR_NETWORK_GAME_LOBBY_INAUGURATION_YEAR :{SILVER}उद
|
|||||||
############ Leave those lines in this order!!
|
############ Leave those lines in this order!!
|
||||||
############ End of leave-in-this-order
|
############ End of leave-in-this-order
|
||||||
|
|
||||||
|
STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}संपर्क विच्छेद संभावित
|
||||||
|
|
||||||
# Network related errors
|
# Network related errors
|
||||||
############ Leave those lines in this order!!
|
############ Leave those lines in this order!!
|
||||||
@@ -463,8 +482,10 @@ STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}डा
|
|||||||
|
|
||||||
|
|
||||||
STR_STATION_CLASS_DFLT :मानक स्टेशन
|
STR_STATION_CLASS_DFLT :मानक स्टेशन
|
||||||
|
STR_STATION_CLASS_WAYP :पथ-संकेत
|
||||||
|
|
||||||
# Signal window
|
# Signal window
|
||||||
|
STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}खींचते समय संकेतों के बीच की दूरी
|
||||||
|
|
||||||
# Bridge selection window
|
# Bridge selection window
|
||||||
|
|
||||||
@@ -495,6 +516,7 @@ STR_AIRPORT_CLASS_SMALL :लघु व
|
|||||||
|
|
||||||
# Object construction window
|
# Object construction window
|
||||||
|
|
||||||
|
STR_OBJECT_CLASS_LTHS :प्रकाश स्तम्भ
|
||||||
|
|
||||||
# Tree planting window (last eight for SE only)
|
# Tree planting window (last eight for SE only)
|
||||||
|
|
||||||
@@ -511,10 +533,12 @@ STR_FOUND_TOWN_CITY :{BLACK}शह
|
|||||||
# Fund new industry window
|
# Fund new industry window
|
||||||
|
|
||||||
# Industry cargoes window
|
# Industry cargoes window
|
||||||
|
STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}उद्योग चुनें
|
||||||
|
|
||||||
# Land area window
|
# Land area window
|
||||||
|
|
||||||
# Description of land area of different tiles
|
# Description of land area of different tiles
|
||||||
|
STR_LAI_CLEAR_DESCRIPTION_BARE_LAND :रिक्त भूमि
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -542,6 +566,7 @@ STR_FRAMERATE_BYTES_BAD :{RED}{BYTES}
|
|||||||
############ Leave those lines in this order!!
|
############ Leave those lines in this order!!
|
||||||
############ End of leave-in-this-order
|
############ End of leave-in-this-order
|
||||||
############ Leave those lines in this order!!
|
############ Leave those lines in this order!!
|
||||||
|
STR_FRAMETIME_CAPTION_GL_ECONOMY :माल प्रबंधन
|
||||||
############ End of leave-in-this-order
|
############ End of leave-in-this-order
|
||||||
|
|
||||||
|
|
||||||
@@ -925,6 +950,7 @@ STR_ERROR_TOO_HIGH :{WHITE}... ब
|
|||||||
|
|
||||||
# Town related errors
|
# Town related errors
|
||||||
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}नगर का नाम नहीं बदला जा सकता है...
|
STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}नगर का नाम नहीं बदला जा सकता है...
|
||||||
|
STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... मानचित्र के किनारों के बहुत समीप
|
||||||
|
|
||||||
# Industry related errors
|
# Industry related errors
|
||||||
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... वन केवल बर्फ की सीमा के ऊपर ही लगाये जा सकते हैं।
|
STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... वन केवल बर्फ की सीमा के ऊपर ही लगाये जा सकते हैं।
|
||||||
@@ -951,6 +977,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... व
|
|||||||
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}स्वतः नवीनीकरण/बदलाव का कोई भी नियम लागू नहीं किया गया
|
STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}स्वतः नवीनीकरण/बदलाव का कोई भी नियम लागू नहीं किया गया
|
||||||
|
|
||||||
# Rail construction errors
|
# Rail construction errors
|
||||||
|
STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}पटरियों को यहाँ से नहीं हटा सकते...
|
||||||
|
|
||||||
|
|
||||||
# Road construction errors
|
# Road construction errors
|
||||||
|
@@ -1928,7 +1928,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING :게임 도중
|
|||||||
STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :플레이어가 게임 중에 새로운 도시를 설립하는 것을 허용합니다.
|
STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :플레이어가 게임 중에 새로운 도시를 설립하는 것을 허용합니다.
|
||||||
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :금지
|
STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :금지
|
||||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :허용
|
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :허용
|
||||||
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :허용, 도시 구조 선택 가능
|
STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :허용, 도로 모양 선택 가능
|
||||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :도시 화물 생성: {STRING}
|
STR_CONFIG_SETTING_TOWN_CARGOGENMODE :도시 화물 생성: {STRING}
|
||||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :도시의 전반적인 인구에 따라, 도시가 얼마나 많은 화물을 생산하는 지를 설정합니다.{}제곱 성장: 도시의 규모가 2배 커지면 승객을 4배 더 생산합니다.{}선형 성장: 도시의 규모가 2배 커지면 승객을 2배 더 생산합니다.
|
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :도시의 전반적인 인구에 따라, 도시가 얼마나 많은 화물을 생산하는 지를 설정합니다.{}제곱 성장: 도시의 규모가 2배 커지면 승객을 4배 더 생산합니다.{}선형 성장: 도시의 규모가 2배 커지면 승객을 2배 더 생산합니다.
|
||||||
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :제곱 (기본)
|
STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :제곱 (기본)
|
||||||
@@ -2592,6 +2592,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(새 회사)
|
|||||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}새 회사를 만듭니다
|
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}새 회사를 만듭니다
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}당신입니다
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}당신입니다
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}이 게임을 연 사람입니다
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}이 게임을 연 사람입니다
|
||||||
|
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}접속자 {NUM}명 / 회사 {NUM}개
|
||||||
|
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :추방
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :추방
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :차단
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :차단
|
||||||
|
@@ -2160,6 +2160,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nova empresa)
|
|||||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Criar uma nova empresa e juntar-se a ela
|
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Criar uma nova empresa e juntar-se a ela
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Este é você
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Este é você
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Este é o anfitrião do jogo
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Este é o anfitrião do jogo
|
||||||
|
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} cliente{P "" s} / {NUM} companhi{P a as}
|
||||||
|
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Expulsar
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Banir
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Banir
|
||||||
|
@@ -2313,6 +2313,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Новая к
|
|||||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Основать новую транспортную компанию и присоединиться к ней
|
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Основать новую транспортную компанию и присоединиться к ней
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Это вы!
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Это вы!
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Это организатор игры
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Это организатор игры
|
||||||
|
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} клиент{P "" а ов} / {NUM} компани{P я и й}
|
||||||
|
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Отключить
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Отключить
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Заблокировать
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Заблокировать
|
||||||
|
@@ -891,7 +891,10 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
|
|||||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subvención terminada:{}{}{STRING} de {STRING} a {STRING} ya no conlleva una subvención
|
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Oferta de subvención terminada:{}{}{STRING} de {STRING} a {STRING} ya no conlleva una subvención
|
||||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvención retirada:{}{}El servicio de {STRING} desde {STRING} a {STRING} ya no está subvencionado
|
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subvención retirada:{}{}El servicio de {STRING} desde {STRING} a {STRING} ya no está subvencionado
|
||||||
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Se ofrece subvención:{}{}¡Al primer servicio de {STRING} que cubra la línea desde {STRING} a {STRING} se le otorgará una subvención durante {NUM} año{P "" s} por parte de las autoridades locales!
|
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Se ofrece subvención:{}{}¡Al primer servicio de {STRING} que cubra la línea desde {STRING} a {STRING} se le otorgará una subvención durante {NUM} año{P "" s} por parte de las autoridades locales!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}¡Subvención otorgada a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} se pagará un 50% más caro durante {NUM} año{P "" s}!
|
||||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}¡Subvención otorgada a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} se pagará a tarifa doble durante los próximos {NUM} año{P "" s}!
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}¡Subvención otorgada a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} se pagará a tarifa doble durante los próximos {NUM} año{P "" s}!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}¡Subvención otorgada a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} se pagará a tarifa triple durante {NUM} año{P "" s}!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}¡Subvención otorgada a {STRING}!{}{}¡El servicio de {STRING} desde {STRING} a {STRING} se pagará a tarifa cuádruple durante {NUM} año{P "" s}!
|
||||||
|
|
||||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}¡Colapso circulatorio en {TOWN}!{}{}¡El programa de reconstrucción de carreteras patrocinado por {STRING} causa 6 meses de problemas a los conductores!
|
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}¡Colapso circulatorio en {TOWN}!{}{}¡El programa de reconstrucción de carreteras patrocinado por {STRING} causa 6 meses de problemas a los conductores!
|
||||||
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}¡Monopolio de transportes!
|
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}¡Monopolio de transportes!
|
||||||
|
@@ -392,7 +392,7 @@ STR_SCENEDIT_FILE_MENU_QUIT :Avsluta
|
|||||||
############ range for settings menu starts
|
############ range for settings menu starts
|
||||||
STR_SETTINGS_MENU_GAME_OPTIONS :Spelinställningar
|
STR_SETTINGS_MENU_GAME_OPTIONS :Spelinställningar
|
||||||
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Inställningar
|
STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Inställningar
|
||||||
STR_SETTINGS_MENU_SCRIPT_SETTINGS :Inställningar för AI / spelskript
|
STR_SETTINGS_MENU_SCRIPT_SETTINGS :Inställningar för datorspelare / spelskript
|
||||||
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Inställningar för NewGRF
|
STR_SETTINGS_MENU_NEWGRF_SETTINGS :Inställningar för NewGRF
|
||||||
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Inställningar för genomskinlighet
|
STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Inställningar för genomskinlighet
|
||||||
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Stadsnamn visas
|
STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Stadsnamn visas
|
||||||
@@ -490,7 +490,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Ta bort alla me
|
|||||||
STR_ABOUT_MENU_LAND_BLOCK_INFO :Information om mark
|
STR_ABOUT_MENU_LAND_BLOCK_INFO :Information om mark
|
||||||
STR_ABOUT_MENU_SEPARATOR :
|
STR_ABOUT_MENU_SEPARATOR :
|
||||||
STR_ABOUT_MENU_TOGGLE_CONSOLE :Visa/dölj konsolen
|
STR_ABOUT_MENU_TOGGLE_CONSOLE :Visa/dölj konsolen
|
||||||
STR_ABOUT_MENU_AI_DEBUG :Felsökning av AI / spelskript
|
STR_ABOUT_MENU_AI_DEBUG :Felsökning av datorspelare / spelskript
|
||||||
STR_ABOUT_MENU_SCREENSHOT :Skärmdump
|
STR_ABOUT_MENU_SCREENSHOT :Skärmdump
|
||||||
STR_ABOUT_MENU_SHOW_FRAMERATE :Visa bildfrekvens
|
STR_ABOUT_MENU_SHOW_FRAMERATE :Visa bildfrekvens
|
||||||
STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD'
|
STR_ABOUT_MENU_ABOUT_OPENTTD :Om 'OpenTTD'
|
||||||
@@ -785,7 +785,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Visa all
|
|||||||
STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Visa senaste meddelande eller nyhet
|
STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Visa senaste meddelande eller nyhet
|
||||||
STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - -
|
STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - -
|
||||||
STR_STATUSBAR_PAUSED :{YELLOW}* * PAUSAD * *
|
STR_STATUSBAR_PAUSED :{YELLOW}* * PAUSAD * *
|
||||||
STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUSAD (väntar på updatering av länkdiagram) * *
|
STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * PAUSAD (väntar på uppdatering av länkgraf) * *
|
||||||
STR_STATUSBAR_AUTOSAVE :{RED}AUTOSPARA
|
STR_STATUSBAR_AUTOSAVE :{RED}AUTOSPARA
|
||||||
STR_STATUSBAR_SAVING_GAME :{RED}* * SPARAR SPEL * *
|
STR_STATUSBAR_SAVING_GAME :{RED}* * SPARAR SPEL * *
|
||||||
|
|
||||||
@@ -830,7 +830,7 @@ STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLAC
|
|||||||
STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} har tagits över av {STRING}!
|
STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} har tagits över av {STRING}!
|
||||||
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(VD)
|
STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(VD)
|
||||||
|
|
||||||
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} har sponsrat byggnationen av nya staden {TOWN}!
|
STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} har sponsrat byggnationen av den nya staden {TOWN}!
|
||||||
STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}En ny stad, kallad {TOWN}, har grundats!
|
STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}En ny stad, kallad {TOWN}, har grundats!
|
||||||
|
|
||||||
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Ny {STRING} under konstruktion nära {TOWN}!
|
STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}Ny {STRING} under konstruktion nära {TOWN}!
|
||||||
@@ -889,6 +889,11 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_AND_CARGO :{WHITE}{STATION
|
|||||||
|
|
||||||
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subventionen har gått ut:{}{}{STRING} från {STRING} till {STRING} är inte längre subventionerad
|
STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Subventionen har gått ut:{}{}{STRING} från {STRING} till {STRING} är inte längre subventionerad
|
||||||
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subventionen gäller inte längre:{}{}{STRING} från {STRING} till {STRING} är inte längre subventionerad
|
STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Subventionen gäller inte längre:{}{}{STRING} från {STRING} till {STRING} är inte längre subventionerad
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Ny subvention:{}{}Första transporten av {STRING} från {STRING} till {STRING} får {NUM} års subvention från kommunen!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Subvention tilldelad {STRING}!{}{}{STRING} från {STRING} till {STRING} ger 50% extra de{P 4 t ""} {NUM} kommande år{P et en}!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Subvention tilldelad {STRING}!{}{}{STRING} från {STRING} till {STRING} ger dubbelt så mycket nästa {NUM} år{P "" s}!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Subvention tilldelad {STRING}!{}{}{STRING} från {STRING} till {STRING} ger tre gånger så mycket de{P 4 t ""} kommande {NUM} år{P et en}!
|
||||||
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Subvention tilldelad {STRING}!{}{}{STRING} från {STRING} till {STRING} ger fyra gånger så mycket de{P 4 t ""} kommande {NUM} år{P et en}!
|
||||||
|
|
||||||
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Trafikkaos i {TOWN}!{}{}Vägombyggnadsprogram bekostat av {STRING} medför 6 månader av elände för bilister!
|
STR_NEWS_ROAD_REBUILDING :{BIG_FONT}{BLACK}Trafikkaos i {TOWN}!{}{}Vägombyggnadsprogram bekostat av {STRING} medför 6 månader av elände för bilister!
|
||||||
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopol!
|
STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Transportmonopol!
|
||||||
@@ -1038,7 +1043,7 @@ STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}uppdater
|
|||||||
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafikpaket som standard
|
STR_GAME_OPTIONS_BASE_GRF :{BLACK}Grafikpaket som standard
|
||||||
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Välj vilket grafikpaket som ska användas som standard
|
STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Välj vilket grafikpaket som ska användas som standard
|
||||||
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} saknad{P "" e}/trasig{P "" a} fil{P "" er}
|
STR_GAME_OPTIONS_BASE_GRF_STATUS :{RED}{NUM} saknad{P "" e}/trasig{P "" a} fil{P "" er}
|
||||||
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Ytterligare information om basgrafik-set
|
STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Ytterligare information om basgrafik-settet
|
||||||
|
|
||||||
STR_GAME_OPTIONS_BASE_SFX :{BLACK}Grundljudspaket
|
STR_GAME_OPTIONS_BASE_SFX :{BLACK}Grundljudspaket
|
||||||
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Välj vilket grundljudspaket som ska användas
|
STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Välj vilket grundljudspaket som ska användas
|
||||||
@@ -1199,11 +1204,15 @@ STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Räntenivå fö
|
|||||||
STR_CONFIG_SETTING_RUNNING_COSTS :Driftkostnader: {STRING}
|
STR_CONFIG_SETTING_RUNNING_COSTS :Driftkostnader: {STRING}
|
||||||
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Sätt nivån för underhålls- och driftskostnader för fordon och infrastruktur
|
STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Sätt nivån för underhålls- och driftskostnader för fordon och infrastruktur
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Konstruktionshastighet: {STRING}
|
STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Konstruktionshastighet: {STRING}
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Begränsar antalet konstruktionshandlingar för AI-spelare
|
STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Begränsar antalet konstruktionshandlingar för datorspelare
|
||||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Fordonshaverier: {STRING}
|
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Fordonshaverier: {STRING}
|
||||||
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Styr hur ofta otillräckligt servade fordon kan få motorstopp
|
STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :Styr hur ofta otillräckligt servade fordon kan få motorstopp
|
||||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subvention (multiplikativ): {STRING}
|
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :Subvention (multiplikativ): {STRING}
|
||||||
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Ange hur mycket betalt som subventionerade anslutningar ger
|
STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :Ange hur mycket betalt som subventionerade anslutningar ger
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION :Subventioners varaktighet: {STRING}
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_HELPTEXT :Ställ in hur många år en subvention ska gälla
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{NUM} år
|
||||||
|
STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Inga subventioner
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Konstruktionskostnader: {STRING}
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Konstruktionskostnader: {STRING}
|
||||||
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Sätt nivån för konstruktions- och inköpskostnader
|
STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Sätt nivån för konstruktions- och inköpskostnader
|
||||||
STR_CONFIG_SETTING_RECESSIONS :Lågkonjunkturer: {STRING}
|
STR_CONFIG_SETTING_RECESSIONS :Lågkonjunkturer: {STRING}
|
||||||
@@ -1270,9 +1279,9 @@ STR_CONFIG_SETTING_SIGNALSIDE_DRIVING_SIDE :På förarsidan
|
|||||||
STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :På höger sida
|
STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :På höger sida
|
||||||
STR_CONFIG_SETTING_SHOWFINANCES :Visa finansfönstret vid slutet av året: {STRING}
|
STR_CONFIG_SETTING_SHOWFINANCES :Visa finansfönstret vid slutet av året: {STRING}
|
||||||
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Om aktiverad kommer finans-fönstret att visas vid slutet av varje år för att möjliggöra enkel granskning av den finansiella statusen för företaget.
|
STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Om aktiverad kommer finans-fönstret att visas vid slutet av varje år för att möjliggöra enkel granskning av den finansiella statusen för företaget.
|
||||||
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nya orders är 'non-stop' om inte annat anges.{STRING}
|
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :Nya order är 'non-stop' om inte annat anges.{STRING}
|
||||||
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :I normala fall stannar ett fordon vid varje station det passerar. Aktiveras den här inställningen kommer det istället att köra igenom alla stationer på väg till dess slutdestination utan att stanna. Tänk på att den här inställningen bara definierar ett förinställt värde för nya order. Individuella order kan uttryckligen definiera båda typerna av beteende oavsett inställning
|
STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :I normala fall stannar ett fordon vid varje station det passerar. Aktiveras den här inställningen kommer det istället att köra igenom alla stationer på väg till dess slutdestination utan att stanna. Tänk på att den här inställningen bara definierar ett förinställt värde för nya order. Individuella order kan uttryckligen definiera båda typerna av beteende oavsett inställning
|
||||||
STR_CONFIG_SETTING_STOP_LOCATION :Nya tåg-orders stannar som standard vid {STRING} av platformen
|
STR_CONFIG_SETTING_STOP_LOCATION :Nya tåg-order stannar som standard vid {STRING} av platformen
|
||||||
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Grundinställning för var tåg stannar utmed plattformar. 'början' betyder i början av plattformen sett från var tåget kommer ifrån. 'mitten' betyder i mitten av plattformen och 'slutet' betyder så långt bort som möjligt. Notera att denna inställning endast anger grundvärdet för nya ordrar. Individuella instruktioner kan ges per orderrad explicit till valfritt värde oberoende av denna inställning.
|
STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Grundinställning för var tåg stannar utmed plattformar. 'början' betyder i början av plattformen sett från var tåget kommer ifrån. 'mitten' betyder i mitten av plattformen och 'slutet' betyder så långt bort som möjligt. Notera att denna inställning endast anger grundvärdet för nya ordrar. Individuella instruktioner kan ges per orderrad explicit till valfritt värde oberoende av denna inställning.
|
||||||
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :början
|
STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :början
|
||||||
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :mitten
|
STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :mitten
|
||||||
@@ -1291,7 +1300,7 @@ STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Tillåt att byg
|
|||||||
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Tillåt företag att ge pengar till städer för att bekosta nybyggnation av hus
|
STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Tillåt företag att ge pengar till städer för att bekosta nybyggnation av hus
|
||||||
STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Tillåt finansiering av lokal vägrekonstruktion: {STRING}
|
STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Tillåt finansiering av lokal vägrekonstruktion: {STRING}
|
||||||
STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Tillåt att företag ger pengar till städer för vägbyggen och därmed saboterar för vägtransporter i staden.
|
STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Tillåt att företag ger pengar till städer för vägbyggen och därmed saboterar för vägtransporter i staden.
|
||||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Tillåt skicka pengar till andra företag: {STRING}
|
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Tillåt att skicka pengar till andra företag: {STRING}
|
||||||
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Tillåt överföring av pengar mellan företag i flerspelarläge
|
STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Tillåt överföring av pengar mellan företag i flerspelarläge
|
||||||
STR_CONFIG_SETTING_FREIGHT_TRAINS :Godsfaktor för att simulera tunga tåg: {STRING}
|
STR_CONFIG_SETTING_FREIGHT_TRAINS :Godsfaktor för att simulera tunga tåg: {STRING}
|
||||||
STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Ställ in påverkan av att frakta gods i tåg. Ett högre värde gör att fraktgods är mer krävande för tågen, speciellt vid lutningar
|
STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Ställ in påverkan av att frakta gods i tåg. Ett högre värde gör att fraktgods är mer krävande för tågen, speciellt vid lutningar
|
||||||
@@ -1365,10 +1374,10 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Begränsar hur
|
|||||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snögränsens höjd: {STRING}
|
STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Snögränsens höjd: {STRING}
|
||||||
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontrollerar på vilken höjd snön börjar i det subarktiska landskapet. Snö påverkar även industrigeneration och städers tillväxtkrav. Kan endast modifieras via Scenarioredigeraren eller beräknas via "snötäckning"
|
STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Kontrollerar på vilken höjd snön börjar i det subarktiska landskapet. Snö påverkar även industrigeneration och städers tillväxtkrav. Kan endast modifieras via Scenarioredigeraren eller beräknas via "snötäckning"
|
||||||
STR_CONFIG_SETTING_SNOW_COVERAGE :Snötäckning: {STRING}
|
STR_CONFIG_SETTING_SNOW_COVERAGE :Snötäckning: {STRING}
|
||||||
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Kontrollerar ungefärlig mängd snö på den subarktiska landskapet. Snö påverkar även industri generation och städernas tillväxtkrav. Används endast under kartgeneration. Land precis över havsnivån är alltid utan snö
|
STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Kontrollerar ungefärlig mängd snö i det subarktiska landskapet. Snö påverkar även industrigeneration och städernas tillväxtkrav. Används endast under kartgeneration. Land precis över havsnivån är alltid utan snö
|
||||||
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
|
STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}%
|
||||||
STR_CONFIG_SETTING_DESERT_COVERAGE :Ökentäckning: {STRING}
|
STR_CONFIG_SETTING_DESERT_COVERAGE :Ökentäckning: {STRING}
|
||||||
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Kontrollera ungefärligt mängd öken i tropiskt landskap. Öken påverkar även industri generation. Används bara under kartgeneration
|
STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Kontrollera ungefärlig mängd öken i tropiskt landskap. Öken påverkar även industrigeneration. Används bara under kartgeneration
|
||||||
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
|
STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}%
|
||||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Terrängens svårhetsgrad: {STRING}
|
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Terrängens svårhetsgrad: {STRING}
|
||||||
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis endast) Välj frekvensen av kullar: Smooth landskap har färre, mer utbredda kullar. Rough landskap har många kullar, som kan se repetitiva
|
STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :(TerraGenesis endast) Välj frekvensen av kullar: Smooth landskap har färre, mer utbredda kullar. Rough landskap har många kullar, som kan se repetitiva
|
||||||
@@ -1380,14 +1389,14 @@ STR_CONFIG_SETTING_VARIETY :Varierad distri
|
|||||||
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis endast) Styr om kartan innehåller både bergs och flacka områden. Eftersom detta gör bara kartan flackare bör andra inställningar ställas in på bergiga
|
STR_CONFIG_SETTING_VARIETY_HELPTEXT :(TerraGenesis endast) Styr om kartan innehåller både bergs och flacka områden. Eftersom detta gör bara kartan flackare bör andra inställningar ställas in på bergiga
|
||||||
STR_CONFIG_SETTING_RIVER_AMOUNT :Antal floder: {STRING}
|
STR_CONFIG_SETTING_RIVER_AMOUNT :Antal floder: {STRING}
|
||||||
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Välj hur många floder att generera
|
STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Välj hur många floder att generera
|
||||||
STR_CONFIG_SETTING_TREE_PLACER :Trädplacerings-algoritm: {STRING}
|
STR_CONFIG_SETTING_TREE_PLACER :Trädplaceringsalgoritm: {STRING}
|
||||||
STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Välj fördelningen av träden på kartan: "Original" växter träd jämnt utspridda, "Förbättrad" växter dem i grupper
|
STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Välj hur träd fördelas över kartan: "Original" planterar träden jämnt utspridda, "Förbättrad" planterar dem i grupper
|
||||||
STR_CONFIG_SETTING_TREE_PLACER_NONE :Inget
|
STR_CONFIG_SETTING_TREE_PLACER_NONE :Inget
|
||||||
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Original
|
||||||
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Förbättrad
|
STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Förbättrad
|
||||||
STR_CONFIG_SETTING_ROAD_SIDE :Vägfordon: {STRING}
|
STR_CONFIG_SETTING_ROAD_SIDE :Vägfordon: {STRING}
|
||||||
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Välj körsida
|
STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Välj körsida
|
||||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Höjkartans rotation: {STRING}
|
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Höjdkartans rotation: {STRING}
|
||||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Motsols
|
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Motsols
|
||||||
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Medsols
|
STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :Medsols
|
||||||
STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Vilken nivåhöjd en platt scenario-karta får: {STRING}
|
STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Vilken nivåhöjd en platt scenario-karta får: {STRING}
|
||||||
@@ -1534,7 +1543,7 @@ STR_CONFIG_SETTING_AI_PROFILE_MEDIUM :Mellan
|
|||||||
STR_CONFIG_SETTING_AI_PROFILE_HARD :Svår
|
STR_CONFIG_SETTING_AI_PROFILE_HARD :Svår
|
||||||
|
|
||||||
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tillåt datorspelare i flerspelarläge: {STRING}
|
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Tillåt datorspelare i flerspelarläge: {STRING}
|
||||||
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillåt datorstyrda AI-spelare att delta i spel för flera spelare
|
STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Tillåt datorstyrda spelare att delta i spel för flera spelare
|
||||||
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes innan skript sätts i viloläge: {STRING}
|
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes innan skript sätts i viloläge: {STRING}
|
||||||
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximalt antal beräkningssteg ett skript kan utföra i en omgång
|
STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Maximalt antal beräkningssteg ett skript kan utföra i en omgång
|
||||||
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximalt minnesanvändning per skript: {STRING}
|
STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximalt minnesanvändning per skript: {STRING}
|
||||||
@@ -1583,7 +1592,7 @@ STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Visa nyhetstidn
|
|||||||
STR_CONFIG_SETTING_NEWS_ADVICE :Råd / information om företagets fordon: {STRING}
|
STR_CONFIG_SETTING_NEWS_ADVICE :Råd / information om företagets fordon: {STRING}
|
||||||
STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Visa meddelande ifall att ett fordon behöver uppmärksamhet
|
STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Visa meddelande ifall att ett fordon behöver uppmärksamhet
|
||||||
STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nya fordon: {STRING}
|
STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Nya fordon: {STRING}
|
||||||
STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Visa nyhetstidning när en ny typ av fordon blir tillgängligt
|
STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Visa nyhetstidning när en ny typ av fordon blir tillgänglig
|
||||||
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Ändringar i godsacceptans: {STRING}
|
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Ändringar i godsacceptans: {STRING}
|
||||||
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Visa meddelande vid förändring av stationers varuacceptans
|
STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Visa meddelande vid förändring av stationers varuacceptans
|
||||||
STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subventioner: {STRING}
|
STR_CONFIG_SETTING_NEWS_SUBSIDIES :Subventioner: {STRING}
|
||||||
@@ -1704,8 +1713,8 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Inga
|
|||||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial stadsstorleks-multiplikator: {STRING}
|
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Initial stadsstorleks-multiplikator: {STRING}
|
||||||
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Storstäders genomsnittliga storlek i relation till vanliga städers vid spelets början
|
STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Storstäders genomsnittliga storlek i relation till vanliga städers vid spelets början
|
||||||
|
|
||||||
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Uppdatera distributionsgrafen var {STRING}:e{NBSP}dag{P 0:2 "" s}
|
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Uppdatera distributionsgrafen var {STRING}:e{NBSP}dag
|
||||||
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Tid mellan efterföljande omräkningar av länkgrafen. Varje omräkning beräknar planer för en komponent i grafen. Det medför att ett värde X för den här inställningen inte innebär att hela grafen uppdateras var X:e dag, bara vissa komponenter. Ju lägre värde du ställer in desto mer processorkraft kommer att behövas för beräkningarna. Ju högre värde du ställer in desto längre tid kommer det att ta innan distributionen av last börjar använda nya rutter.
|
STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Tid mellan efterföljande omräkningar av länkgrafen. Varje omräkning beräknar planerna för en komponent i grafen. Det medför att ett värde X för den här inställningen inte innebär att hela grafen uppdateras var X:e dag, utan bara vissa komponenter. Ju kortare intervall du ställer in desto mer processorkraft kommer att behövas för beräkningarna. Ju längre intervall du ställer in desto längre tid kommer det att ta innan distributionen av last börjar använda nya rutter.
|
||||||
STR_CONFIG_SETTING_LINKGRAPH_TIME :Avsätt {STRING}{NBSP}dag{P 0:2 "" ar} för omberäkning av distributionsgraf
|
STR_CONFIG_SETTING_LINKGRAPH_TIME :Avsätt {STRING}{NBSP}dag{P 0:2 "" ar} för omberäkning av distributionsgraf
|
||||||
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Den tid varje omberäkning av en länkgrafkomponent tillåts ta. När en omberäkning startas skapas en tråd som tillåts löpa detta antal dagar. Ju kortare du sätter denna, desto mer troligt är det att tråden inte är hinner bli färdig i tid. Då kommer spelet att stanna tills den är klar (vilket gör att det laggar). Ju längre du sätter denna, desto längre tid tar det för distributionen att uppdateras när rutter ändras.
|
STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Den tid varje omberäkning av en länkgrafkomponent tillåts ta. När en omberäkning startas skapas en tråd som tillåts löpa detta antal dagar. Ju kortare du sätter denna, desto mer troligt är det att tråden inte är hinner bli färdig i tid. Då kommer spelet att stanna tills den är klar (vilket gör att det laggar). Ju längre du sätter denna, desto längre tid tar det för distributionen att uppdateras när rutter ändras.
|
||||||
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuellt
|
STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuellt
|
||||||
@@ -1769,7 +1778,7 @@ STR_CONFIG_SETTING_LOCALISATION :{ORANGE}Lokalis
|
|||||||
STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafik
|
STR_CONFIG_SETTING_GRAPHICS :{ORANGE}Grafik
|
||||||
STR_CONFIG_SETTING_SOUND :{ORANGE}Ljud
|
STR_CONFIG_SETTING_SOUND :{ORANGE}Ljud
|
||||||
STR_CONFIG_SETTING_INTERFACE :{ORANGE}Gränssnitt
|
STR_CONFIG_SETTING_INTERFACE :{ORANGE}Gränssnitt
|
||||||
STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Generelt
|
STR_CONFIG_SETTING_INTERFACE_GENERAL :{ORANGE}Generellt
|
||||||
STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Vyfönster
|
STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :{ORANGE}Vyfönster
|
||||||
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Konstruktion
|
STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :{ORANGE}Konstruktion
|
||||||
STR_CONFIG_SETTING_ADVISORS :{ORANGE} Nyheter / Rådgivare
|
STR_CONFIG_SETTING_ADVISORS :{ORANGE} Nyheter / Rådgivare
|
||||||
@@ -2004,7 +2013,7 @@ STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Namn
|
|||||||
STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Namn på nätverksspelet
|
STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Namn på nätverksspelet
|
||||||
STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
|
STR_NETWORK_SERVER_LIST_GENERAL_ONLINE :{BLACK}{COMMA}/{COMMA} - {COMMA}/{COMMA}
|
||||||
STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Klienter
|
STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION :{BLACK}Klienter
|
||||||
STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Klienter online / klienter max{}Företag online / företag max
|
STR_NETWORK_SERVER_LIST_CLIENTS_CAPTION_TOOLTIP :{BLACK}Klienter online / max antal klienter{}Företag online / max antal företag
|
||||||
STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA}
|
STR_NETWORK_SERVER_LIST_MAP_SIZE_SHORT :{BLACK}{COMMA}x{COMMA}
|
||||||
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Kartstorlek
|
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION :{BLACK}Kartstorlek
|
||||||
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Kartstorlek av spelet{}Klicka för att sortera efter område
|
STR_NETWORK_SERVER_LIST_MAP_SIZE_CAPTION_TOOLTIP :{BLACK}Kartstorlek av spelet{}Klicka för att sortera efter område
|
||||||
@@ -2150,6 +2159,7 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Nytt företag)
|
|||||||
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Skapa ett nytt företag och gå med i det
|
STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Skapa ett nytt företag och gå med i det
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Det här är du
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Det här är du
|
||||||
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Det här är spelets värd
|
STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Det här är spelets värd
|
||||||
|
STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} klient{P "" er} / {NUM} företag
|
||||||
|
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kasta ut
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Kasta ut
|
||||||
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Bannlys
|
STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Bannlys
|
||||||
@@ -2252,10 +2262,10 @@ STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}De senas
|
|||||||
# Network related errors
|
# Network related errors
|
||||||
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
|
STR_NETWORK_SERVER_MESSAGE :*** {1:STRING}
|
||||||
############ Leave those lines in this order!!
|
############ Leave those lines in this order!!
|
||||||
STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED :Spel pausad ({STRING})
|
STR_NETWORK_SERVER_MESSAGE_GAME_PAUSED :Spelet är pausat ({STRING})
|
||||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Spelet är fortfarande pausat ({STRING})
|
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Spelet är fortfarande pausat ({STRING})
|
||||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spel fortfarande pausad ({STRING}, {STRING})
|
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Spelet är fortfarande pausat ({STRING}, {STRING})
|
||||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spel fortfarande pausad ({STRING}, {STRING}, {STRING})
|
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Spelet är fortfarande pausat ({STRING}, {STRING}, {STRING})
|
||||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spelet är fortfarande pausat ({STRING}, {STRING}, {STRING}, {STRING})
|
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Spelet är fortfarande pausat ({STRING}, {STRING}, {STRING}, {STRING})
|
||||||
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Spelet är fortfarande pausat ({STRING}, {STRING}, {STRING}, {STRING}, {STRING})
|
STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Spelet är fortfarande pausat ({STRING}, {STRING}, {STRING}, {STRING}, {STRING})
|
||||||
STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spelet är opausat ({STRING})
|
STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Spelet är opausat ({STRING})
|
||||||
@@ -2263,11 +2273,11 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :antal spelare
|
|||||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :ansluter klienter
|
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :ansluter klienter
|
||||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuell
|
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :manuell
|
||||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spelskript
|
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :spelskript
|
||||||
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :Väntar på updatering av länkdiagram
|
STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :väntar på uppdatering av länkgraf
|
||||||
############ End of leave-in-this-order
|
############ End of leave-in-this-order
|
||||||
STR_NETWORK_MESSAGE_CLIENT_LEAVING :lämnar
|
STR_NETWORK_MESSAGE_CLIENT_LEAVING :lämnar
|
||||||
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} har gått med i spelet
|
STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} har gått med i spelet
|
||||||
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} har gått med i spelet (Client #{2:NUM})
|
STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} har gått med i spelet (Klient #{2:NUM})
|
||||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} har gått med i företag #{2:NUM}
|
STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} har gått med i företag #{2:NUM}
|
||||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} har gått med som åskådare
|
STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} har gått med som åskådare
|
||||||
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} har startat ett nytt företag (#{2:NUM})
|
STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} har startat ett nytt företag (#{2:NUM})
|
||||||
@@ -2663,7 +2673,7 @@ STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Ta bort
|
|||||||
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Är du säker på att du vill ta bort alla industrier?
|
STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Är du säker på att du vill ta bort alla industrier?
|
||||||
|
|
||||||
# Industry cargoes window
|
# Industry cargoes window
|
||||||
STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrikedja för {STRING} industrin
|
STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Industrikedja för industrin {STRING}
|
||||||
STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Industrikedja för godset {STRING}
|
STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Industrikedja för godset {STRING}
|
||||||
STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Producerande industrier
|
STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Producerande industrier
|
||||||
STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Mottagande industrier
|
STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Mottagande industrier
|
||||||
@@ -2936,9 +2946,9 @@ STR_MAPGEN_BORDER_FREEFORM :{BLACK}Fri form
|
|||||||
STR_MAPGEN_BORDER_WATER :{BLACK}Vatten
|
STR_MAPGEN_BORDER_WATER :{BLACK}Vatten
|
||||||
STR_MAPGEN_BORDER_RANDOM :{BLACK}På måfå
|
STR_MAPGEN_BORDER_RANDOM :{BLACK}På måfå
|
||||||
STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}På måfå
|
STR_MAPGEN_BORDER_RANDOMIZE :{BLACK}På måfå
|
||||||
STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuell
|
STR_MAPGEN_BORDER_MANUAL :{BLACK}Manuella
|
||||||
|
|
||||||
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Rotation på höjdkarta:
|
STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Höjdkartans rotation:
|
||||||
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Namn på höjdkarta:
|
STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Namn på höjdkarta:
|
||||||
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Storlek:
|
STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Storlek:
|
||||||
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
|
STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM}
|
||||||
@@ -3231,7 +3241,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW}Starta
|
|||||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Starta en stor lokal reklamkampanj, för att attrahera fler passagerare och gods till dina transporttjänster.{}Tillhandahåller en temporär boost till stationens betyg i en stor radie runt stadens centrum.{}Kostnad: {CURRENCY_LONG}
|
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW}Starta en stor lokal reklamkampanj, för att attrahera fler passagerare och gods till dina transporttjänster.{}Tillhandahåller en temporär boost till stationens betyg i en stor radie runt stadens centrum.{}Kostnad: {CURRENCY_LONG}
|
||||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Bekosta ombyggnad av stadens vägnätverk.{}Orsakar ansenliga störningar för vägtrafik i upp till 6 månader.{}Kostnad: {CURRENCY_LONG}
|
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION :{YELLOW}Bekosta ombyggnad av stadens vägnätverk.{}Orsakar ansenliga störningar för vägtrafik i upp till 6 månader.{}Kostnad: {CURRENCY_LONG}
|
||||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Bygg en staty i ditt företags ära.{}Tillhandahåller en permanent boost till stations betyg i staden.{}Cost: {CURRENCY_LONG}
|
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW}Bygg en staty i ditt företags ära.{}Tillhandahåller en permanent boost till stations betyg i staden.{}Cost: {CURRENCY_LONG}
|
||||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Bekosta uppbyggnad av nya byggnader i staden.{}Tillhandahåller en temporär boost till stadens tillväxt.{}Kostnad: {CURRENCY_LONG}
|
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW}Bekosta uppbyggnad av nya byggnader i staden.{}Ger en temporär boost till stadens tillväxt.{}Kostnad: {CURRENCY_LONG}
|
||||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Köp 1 års exklusiva transport rättigheter i staden.{}Lokala myndigheterna kommer inte tillåta passagerare och gods att använda dina motståndares stationer.{}Cost: {CURRENCY_LONG}
|
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT :{YELLOW}Köp 1 års exklusiva transport rättigheter i staden.{}Lokala myndigheterna kommer inte tillåta passagerare och gods att använda dina motståndares stationer.{}Cost: {CURRENCY_LONG}
|
||||||
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW} Muta de lokala myndigheterna för att öka din värdering, med risk för att få höga böter om du blir upptäckt.{} Kostnad: {CURRENCY_LONG}
|
STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW} Muta de lokala myndigheterna för att öka din värdering, med risk för att få höga böter om du blir upptäckt.{} Kostnad: {CURRENCY_LONG}
|
||||||
|
|
||||||
@@ -3586,7 +3596,7 @@ STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Nya elektriska
|
|||||||
STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nytt monorailfordon
|
STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Nytt monorailfordon
|
||||||
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nytt maglevfordon
|
STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Nytt maglevfordon
|
||||||
|
|
||||||
STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nytt Vägfordon
|
STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Nytt vägfordon
|
||||||
STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nya spårvägsfordon
|
STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Nya spårvägsfordon
|
||||||
|
|
||||||
############ range for vehicle availability starts
|
############ range for vehicle availability starts
|
||||||
@@ -4217,12 +4227,12 @@ STR_AI_DEBUG_SETTINGS :{BLACK}Inställ
|
|||||||
STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Ändra inställningarna för spelskriptet
|
STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Ändra inställningarna för spelskriptet
|
||||||
STR_AI_DEBUG_RELOAD :{BLACK}Ladda om datorspelaren
|
STR_AI_DEBUG_RELOAD :{BLACK}Ladda om datorspelaren
|
||||||
STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Stoppa datorspelaren, ladda om skriptet och starta sedan om datorspelaren
|
STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Stoppa datorspelaren, ladda om skriptet och starta sedan om datorspelaren
|
||||||
STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Slå på/av brytning då AI-loggmeddelande matchar brytsträngen
|
STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Slå på/av brytning då datorspelares loggmeddelande matchar brytsträngen
|
||||||
STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Bryt på:
|
STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Bryt på:
|
||||||
STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Bryt på
|
STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Bryt på
|
||||||
STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}När ett AI-loggmeddelande matchar angiven sträng så kommer spelet att pausas
|
STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}När ett loggmeddelande om datorspelare matchar angiven sträng så kommer spelet att pausas
|
||||||
STR_AI_DEBUG_MATCH_CASE :{BLACK}Matcha VERSALER/gemener
|
STR_AI_DEBUG_MATCH_CASE :{BLACK}Matcha VERSALER/gemener
|
||||||
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Slå på/av matchning av VERSALER/gemener när AI-loggmeddelanden jämförs mot brytsträngen
|
STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Slå på/av matchning av VERSALER/gemener när datorspelares loggmeddelanden jämförs mot brytsträngen
|
||||||
STR_AI_DEBUG_CONTINUE :{BLACK}Fortsätt
|
STR_AI_DEBUG_CONTINUE :{BLACK}Fortsätt
|
||||||
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Opausa och fortsätt datorspelaren
|
STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Opausa och fortsätt datorspelaren
|
||||||
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Visa debug-utskrifter för denna datorspelare
|
STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Visa debug-utskrifter för denna datorspelare
|
||||||
|
@@ -339,7 +339,7 @@ struct MainWindow : Window
|
|||||||
case GHK_REFRESH_SCREEN: MarkWholeScreenDirty(); break;
|
case GHK_REFRESH_SCREEN: MarkWholeScreenDirty(); break;
|
||||||
|
|
||||||
case GHK_CRASH: // Crash the game
|
case GHK_CRASH: // Crash the game
|
||||||
*(volatile byte *)0 = 0;
|
*(volatile byte *)nullptr = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GHK_MONEY: // Gimme money
|
case GHK_MONEY: // Gimme money
|
||||||
|
@@ -45,7 +45,7 @@ TCPConnecter::~TCPConnecter()
|
|||||||
this->sockets.clear();
|
this->sockets.clear();
|
||||||
this->sock_to_address.clear();
|
this->sock_to_address.clear();
|
||||||
|
|
||||||
freeaddrinfo(this->ai);
|
if (this->ai != nullptr) freeaddrinfo(this->ai);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -268,7 +268,7 @@ bool TCPConnecter::CheckActivity()
|
|||||||
timeval tv;
|
timeval tv;
|
||||||
tv.tv_usec = 0;
|
tv.tv_usec = 0;
|
||||||
tv.tv_sec = 0;
|
tv.tv_sec = 0;
|
||||||
int n = select(FD_SETSIZE, NULL, &write_fd, NULL, &tv);
|
int n = select(FD_SETSIZE, nullptr, &write_fd, nullptr, &tv);
|
||||||
/* select() failed; hopefully next try it doesn't. */
|
/* select() failed; hopefully next try it doesn't. */
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
/* select() normally never fails; so hopefully it works next try! */
|
/* select() normally never fails; so hopefully it works next try! */
|
||||||
|
@@ -825,7 +825,7 @@ bool NetworkClientConnectGame(const std::string &connection_string, CompanyID de
|
|||||||
std::string resolved_connection_string = ParseGameConnectionString(connection_string, NETWORK_DEFAULT_PORT, &join_as).GetAddressAsString(false);
|
std::string resolved_connection_string = ParseGameConnectionString(connection_string, NETWORK_DEFAULT_PORT, &join_as).GetAddressAsString(false);
|
||||||
|
|
||||||
if (!_network_available) return false;
|
if (!_network_available) return false;
|
||||||
if (!NetworkValidateClientName()) return false;
|
if (!NetworkValidateOurClientName()) return false;
|
||||||
|
|
||||||
_network_join.connection_string = resolved_connection_string;
|
_network_join.connection_string = resolved_connection_string;
|
||||||
_network_join.company = join_as;
|
_network_join.company = join_as;
|
||||||
|
@@ -1561,7 +1561,7 @@ bool NetworkValidateClientName(std::string &client_name)
|
|||||||
* See \c NetworkValidateClientName(char*) for details about the functionality.
|
* See \c NetworkValidateClientName(char*) for details about the functionality.
|
||||||
* @return True iff the client name is valid.
|
* @return True iff the client name is valid.
|
||||||
*/
|
*/
|
||||||
bool NetworkValidateClientName()
|
bool NetworkValidateOurClientName()
|
||||||
{
|
{
|
||||||
return NetworkValidateClientName(_settings_client.network.client_name);
|
return NetworkValidateClientName(_settings_client.network.client_name);
|
||||||
}
|
}
|
||||||
|
@@ -201,7 +201,7 @@ void NetworkSyncCommandQueue(NetworkClientSocket *cs)
|
|||||||
{
|
{
|
||||||
for (CommandPacket *p = _local_execution_queue.Peek(); p != nullptr; p = p->next) {
|
for (CommandPacket *p = _local_execution_queue.Peek(); p != nullptr; p = p->next) {
|
||||||
CommandPacket c = *p;
|
CommandPacket c = *p;
|
||||||
c.callback = 0;
|
c.callback = nullptr;
|
||||||
cs->outgoing_queue.Append(std::move(c));
|
cs->outgoing_queue.Append(std::move(c));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -36,7 +36,7 @@ extern StringList _network_ban_list;
|
|||||||
|
|
||||||
byte NetworkSpectatorCount();
|
byte NetworkSpectatorCount();
|
||||||
bool NetworkIsValidClientName(const std::string_view client_name);
|
bool NetworkIsValidClientName(const std::string_view client_name);
|
||||||
bool NetworkValidateClientName();
|
bool NetworkValidateOurClientName();
|
||||||
bool NetworkValidateClientName(std::string &client_name);
|
bool NetworkValidateClientName(std::string &client_name);
|
||||||
bool NetworkValidateServerName(std::string &server_name);
|
bool NetworkValidateServerName(std::string &server_name);
|
||||||
void NetworkUpdateClientName(const std::string &client_name);
|
void NetworkUpdateClientName(const std::string &client_name);
|
||||||
|
@@ -1278,7 +1278,7 @@ static WindowDesc _network_start_server_window_desc(
|
|||||||
|
|
||||||
static void ShowNetworkStartServerWindow()
|
static void ShowNetworkStartServerWindow()
|
||||||
{
|
{
|
||||||
if (!NetworkValidateClientName()) return;
|
if (!NetworkValidateOurClientName()) return;
|
||||||
|
|
||||||
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME);
|
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME);
|
||||||
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY);
|
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_LOBBY);
|
||||||
@@ -1572,7 +1572,7 @@ static WindowDesc _network_lobby_window_desc(
|
|||||||
*/
|
*/
|
||||||
static void ShowNetworkLobbyWindow(NetworkGameList *ngl)
|
static void ShowNetworkLobbyWindow(NetworkGameList *ngl)
|
||||||
{
|
{
|
||||||
if (!NetworkValidateClientName()) return;
|
if (!NetworkValidateOurClientName()) return;
|
||||||
|
|
||||||
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_START);
|
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_START);
|
||||||
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME);
|
DeleteWindowById(WC_NETWORK_WINDOW, WN_NETWORK_WINDOW_GAME);
|
||||||
@@ -1642,7 +1642,10 @@ static const NWidgetPart _nested_client_list_widgets[] = {
|
|||||||
EndContainer(),
|
EndContainer(),
|
||||||
EndContainer(),
|
EndContainer(),
|
||||||
NWidget(NWID_HORIZONTAL),
|
NWidget(NWID_HORIZONTAL),
|
||||||
|
NWidget(NWID_VERTICAL),
|
||||||
NWidget(WWT_MATRIX, COLOUR_GREY, WID_CL_MATRIX), SetMinimalSize(180, 0), SetResize(1, 1), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_CL_SCROLLBAR),
|
NWidget(WWT_MATRIX, COLOUR_GREY, WID_CL_MATRIX), SetMinimalSize(180, 0), SetResize(1, 1), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_CL_SCROLLBAR),
|
||||||
|
NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_COMPANY_COUNT), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetPadding(2, 1, 2, 1), SetAlignment(SA_CENTER), SetDataTip(STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT, STR_NULL),
|
||||||
|
EndContainer(),
|
||||||
NWidget(NWID_VERTICAL),
|
NWidget(NWID_VERTICAL),
|
||||||
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_CL_SCROLLBAR),
|
NWidget(NWID_VSCROLLBAR, COLOUR_GREY, WID_CL_SCROLLBAR),
|
||||||
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
|
NWidget(WWT_RESIZEBOX, COLOUR_GREY),
|
||||||
@@ -2065,6 +2068,11 @@ public:
|
|||||||
case WID_CL_CLIENT_NAME:
|
case WID_CL_CLIENT_NAME:
|
||||||
SetDParamStr(0, _settings_client.network.client_name);
|
SetDParamStr(0, _settings_client.network.client_name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WID_CL_CLIENT_COMPANY_COUNT:
|
||||||
|
SetDParam(0, NetworkClientInfo::GetNumItems());
|
||||||
|
SetDParam(1, Company::GetNumItems());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -309,7 +309,7 @@ bool Convert8bitBooleanCallback(const struct GRFFile *grffile, uint16 cbid, uint
|
|||||||
*/
|
*/
|
||||||
template <size_t Tcnt>
|
template <size_t Tcnt>
|
||||||
struct GRFFilePropsBase {
|
struct GRFFilePropsBase {
|
||||||
GRFFilePropsBase() : local_id(0), grffile(0)
|
GRFFilePropsBase() : local_id(0), grffile(nullptr)
|
||||||
{
|
{
|
||||||
/* The lack of some compilers to provide default constructors complying to the specs
|
/* The lack of some compilers to provide default constructors complying to the specs
|
||||||
* requires us to zero the stuff ourself. */
|
* requires us to zero the stuff ourself. */
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
#include "station_type.h"
|
#include "station_type.h"
|
||||||
#include "industry_type.h"
|
#include "industry_type.h"
|
||||||
|
|
||||||
void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1 = NR_NONE, uint32 ref1 = UINT32_MAX, NewsReferenceType reftype2 = NR_NONE, uint32 ref2 = UINT32_MAX, void *free_data = nullptr);
|
void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1 = NR_NONE, uint32 ref1 = UINT32_MAX, NewsReferenceType reftype2 = NR_NONE, uint32 ref2 = UINT32_MAX, const NewsAllocatedData *data = nullptr);
|
||||||
|
|
||||||
static inline void AddCompanyNewsItem(StringID string, CompanyNewsInformation *cni)
|
static inline void AddCompanyNewsItem(StringID string, CompanyNewsInformation *cni)
|
||||||
{
|
{
|
||||||
@@ -42,9 +42,9 @@ static inline void AddVehicleAdviceNewsItem(StringID string, VehicleID vehicle)
|
|||||||
AddNewsItem(string, NT_ADVICE, NF_INCOLOUR | NF_SMALL | NF_VEHICLE_PARAM0, NR_VEHICLE, vehicle);
|
AddNewsItem(string, NT_ADVICE, NF_INCOLOUR | NF_SMALL | NF_VEHICLE_PARAM0, NR_VEHICLE, vehicle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void AddTileNewsItem(StringID string, NewsType type, TileIndex tile, void *free_data = nullptr, StationID station = INVALID_STATION)
|
static inline void AddTileNewsItem(StringID string, NewsType type, TileIndex tile, const NewsAllocatedData *data = nullptr, StationID station = INVALID_STATION)
|
||||||
{
|
{
|
||||||
AddNewsItem(string, type, NF_NO_TRANSPARENT | NF_SHADE | NF_THIN, NR_TILE, tile, station == INVALID_STATION ? NR_NONE : NR_STATION, station, free_data);
|
AddNewsItem(string, type, NF_NO_TRANSPARENT | NF_SHADE | NF_THIN, NR_TILE, tile, station == INVALID_STATION ? NR_NONE : NR_STATION, station, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void AddIndustryNewsItem(StringID string, NewsType type, IndustryID industry)
|
static inline void AddIndustryNewsItem(StringID string, NewsType type, IndustryID industry)
|
||||||
|
@@ -355,7 +355,7 @@ struct NewsWindow : Window {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case WID_N_MGR_NAME:
|
case WID_N_MGR_NAME:
|
||||||
SetDParamStr(0, static_cast<const CompanyNewsInformation *>(this->ni->free_data)->president_name);
|
SetDParamStr(0, static_cast<const CompanyNewsInformation *>(this->ni->data.get())->president_name);
|
||||||
str = STR_JUST_RAW_STRING;
|
str = STR_JUST_RAW_STRING;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -433,13 +433,13 @@ struct NewsWindow : Window {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case WID_N_MGR_FACE: {
|
case WID_N_MGR_FACE: {
|
||||||
const CompanyNewsInformation *cni = (const CompanyNewsInformation*)this->ni->free_data;
|
const CompanyNewsInformation *cni = static_cast<const CompanyNewsInformation*>(this->ni->data.get());
|
||||||
DrawCompanyManagerFace(cni->face, cni->colour, r.left, r.top);
|
DrawCompanyManagerFace(cni->face, cni->colour, r.left, r.top);
|
||||||
GfxFillRect(r.left, r.top, r.right, r.bottom, PALETTE_NEWSPAPER, FILLRECT_RECOLOUR);
|
GfxFillRect(r.left, r.top, r.right, r.bottom, PALETTE_NEWSPAPER, FILLRECT_RECOLOUR);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case WID_N_MGR_NAME: {
|
case WID_N_MGR_NAME: {
|
||||||
const CompanyNewsInformation *cni = (const CompanyNewsInformation*)this->ni->free_data;
|
const CompanyNewsInformation *cni = static_cast<const CompanyNewsInformation*>(this->ni->data.get());
|
||||||
SetDParamStr(0, cni->president_name);
|
SetDParamStr(0, cni->president_name);
|
||||||
DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_JUST_RAW_STRING, TC_FROMSTRING, SA_CENTER);
|
DrawStringMultiLine(r.left, r.right, r.top, r.bottom, STR_JUST_RAW_STRING, TC_FROMSTRING, SA_CENTER);
|
||||||
break;
|
break;
|
||||||
@@ -642,8 +642,7 @@ static bool ReadyForNextTickerItem()
|
|||||||
|
|
||||||
/* Ticker message
|
/* Ticker message
|
||||||
* Check if the status bar message is still being displayed? */
|
* Check if the status bar message is still being displayed? */
|
||||||
if (IsNewsTickerShown()) return false;
|
return !IsNewsTickerShown();
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -774,6 +773,27 @@ static void DeleteNewsItem(NewsItem *ni)
|
|||||||
SetWindowDirty(WC_MESSAGE_HISTORY, 0);
|
SetWindowDirty(WC_MESSAGE_HISTORY, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new newsitem to be shown.
|
||||||
|
* @param string_id String to display.
|
||||||
|
* @param type The type of news.
|
||||||
|
* @param flags Flags related to how to display the news.
|
||||||
|
* @param reftype1 Type of ref1.
|
||||||
|
* @param ref1 Reference 1 to some object: Used for a possible viewport, scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||||
|
* @param reftype2 Type of ref2.
|
||||||
|
* @param ref2 Reference 2 to some object: Used for scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||||
|
* @param data Pointer to data that must be released once the news message is cleared.
|
||||||
|
*
|
||||||
|
* @see NewsSubtype
|
||||||
|
*/
|
||||||
|
NewsItem::NewsItem(StringID string_id, NewsType type, NewsFlag flags, NewsReferenceType reftype1, uint32 ref1, NewsReferenceType reftype2, uint32 ref2, const NewsAllocatedData *data) :
|
||||||
|
string_id(string_id), date(_date), type(type), flags(flags), reftype1(reftype1), reftype2(reftype2), ref1(ref1), ref2(ref2), data(data)
|
||||||
|
{
|
||||||
|
/* show this news message in colour? */
|
||||||
|
if (_cur_year >= _settings_client.gui.coloured_news_year) this->flags |= NF_INCOLOUR;
|
||||||
|
CopyOutDParam(this->params, 0, lengthof(this->params));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a new newsitem to be shown.
|
* Add a new newsitem to be shown.
|
||||||
* @param string String to display
|
* @param string String to display
|
||||||
@@ -783,31 +803,16 @@ static void DeleteNewsItem(NewsItem *ni)
|
|||||||
* @param ref1 Reference 1 to some object: Used for a possible viewport, scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
* @param ref1 Reference 1 to some object: Used for a possible viewport, scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||||
* @param reftype2 Type of ref2
|
* @param reftype2 Type of ref2
|
||||||
* @param ref2 Reference 2 to some object: Used for scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
* @param ref2 Reference 2 to some object: Used for scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||||
* @param free_data Pointer to data that must be freed once the news message is cleared
|
* @param data Pointer to data that must be released once the news message is cleared.
|
||||||
*
|
*
|
||||||
* @see NewsSubtype
|
* @see NewsSubtype
|
||||||
*/
|
*/
|
||||||
void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1, uint32 ref1, NewsReferenceType reftype2, uint32 ref2, void *free_data)
|
void AddNewsItem(StringID string, NewsType type, NewsFlag flags, NewsReferenceType reftype1, uint32 ref1, NewsReferenceType reftype2, uint32 ref2, const NewsAllocatedData *data)
|
||||||
{
|
{
|
||||||
if (_game_mode == GM_MENU) return;
|
if (_game_mode == GM_MENU) return;
|
||||||
|
|
||||||
/* Create new news item node */
|
/* Create new news item node */
|
||||||
NewsItem *ni = new NewsItem;
|
NewsItem *ni = new NewsItem(string, type, flags, reftype1, ref1, reftype2, ref2, data);
|
||||||
|
|
||||||
ni->string_id = string;
|
|
||||||
ni->type = type;
|
|
||||||
ni->flags = flags;
|
|
||||||
|
|
||||||
/* show this news message in colour? */
|
|
||||||
if (_cur_year >= _settings_client.gui.coloured_news_year) ni->flags |= NF_INCOLOUR;
|
|
||||||
|
|
||||||
ni->reftype1 = reftype1;
|
|
||||||
ni->reftype2 = reftype2;
|
|
||||||
ni->ref1 = ref1;
|
|
||||||
ni->ref2 = ref2;
|
|
||||||
ni->free_data = free_data;
|
|
||||||
ni->date = _date;
|
|
||||||
CopyOutDParam(ni->params, 0, lengthof(ni->params));
|
|
||||||
|
|
||||||
if (_total_news++ == 0) {
|
if (_total_news++ == 0) {
|
||||||
assert(_oldest_news == nullptr);
|
assert(_oldest_news == nullptr);
|
||||||
@@ -886,8 +891,8 @@ CommandCost CmdCustomNewsItem(TileIndex tile, DoCommandFlag flags, uint32 p1, ui
|
|||||||
if (company != INVALID_OWNER && company != _local_company) return CommandCost();
|
if (company != INVALID_OWNER && company != _local_company) return CommandCost();
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
char *news = stredup(text);
|
NewsStringData *news = new NewsStringData(text);
|
||||||
SetDParamStr(0, news);
|
SetDParamStr(0, news->string);
|
||||||
AddNewsItem(STR_NEWS_CUSTOM_ITEM, type, NF_NORMAL, reftype1, p2, NR_NONE, UINT32_MAX, news);
|
AddNewsItem(STR_NEWS_CUSTOM_ITEM, type, NF_NORMAL, reftype1, p2, NR_NONE, UINT32_MAX, news);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -115,6 +115,12 @@ struct NewsTypeData {
|
|||||||
NewsDisplay GetDisplay() const;
|
NewsDisplay GetDisplay() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Container for any custom data that must be deleted after the news item has reached end-of-life. */
|
||||||
|
struct NewsAllocatedData {
|
||||||
|
virtual ~NewsAllocatedData() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/** Information about a single item of news. */
|
/** Information about a single item of news. */
|
||||||
struct NewsItem {
|
struct NewsItem {
|
||||||
NewsItem *prev; ///< Previous news item
|
NewsItem *prev; ///< Previous news item
|
||||||
@@ -129,14 +135,17 @@ struct NewsItem {
|
|||||||
uint32 ref1; ///< Reference 1 to some object: Used for a possible viewport, scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
uint32 ref1; ///< Reference 1 to some object: Used for a possible viewport, scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||||
uint32 ref2; ///< Reference 2 to some object: Used for scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
uint32 ref2; ///< Reference 2 to some object: Used for scrolling after clicking on the news, and for deleting the news when the object is deleted.
|
||||||
|
|
||||||
void *free_data; ///< Data to be freed when the news item has reached its end.
|
std::unique_ptr<const NewsAllocatedData> data; ///< Custom data for the news item that will be deallocated (deleted) when the news item has reached its end.
|
||||||
|
|
||||||
~NewsItem()
|
|
||||||
{
|
|
||||||
free(this->free_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64 params[10]; ///< Parameters for string resolving.
|
uint64 params[10]; ///< Parameters for string resolving.
|
||||||
|
|
||||||
|
NewsItem(StringID string_id, NewsType type, NewsFlag flags, NewsReferenceType reftype1, uint32 ref1, NewsReferenceType reftype2, uint32 ref2, const NewsAllocatedData *data);
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Container for a single string to be passed as NewsAllocatedData. */
|
||||||
|
struct NewsStringData : NewsAllocatedData {
|
||||||
|
std::string string; ///< The string to retain.
|
||||||
|
NewsStringData(const std::string &str) : string(str) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -145,15 +154,15 @@ struct NewsItem {
|
|||||||
* of the companies and the fact that the company data is reset,
|
* of the companies and the fact that the company data is reset,
|
||||||
* resulting in wrong names and such.
|
* resulting in wrong names and such.
|
||||||
*/
|
*/
|
||||||
struct CompanyNewsInformation {
|
struct CompanyNewsInformation : NewsAllocatedData {
|
||||||
char company_name[64]; ///< The name of the company
|
std::string company_name; ///< The name of the company
|
||||||
char president_name[64]; ///< The name of the president
|
std::string president_name; ///< The name of the president
|
||||||
char other_company_name[64]; ///< The name of the company taking over this one
|
std::string other_company_name; ///< The name of the company taking over this one
|
||||||
|
|
||||||
uint32 face; ///< The face of the president
|
uint32 face; ///< The face of the president
|
||||||
byte colour; ///< The colour related to the company
|
byte colour; ///< The colour related to the company
|
||||||
|
|
||||||
void FillData(const struct Company *c, const struct Company *other = nullptr);
|
CompanyNewsInformation(const struct Company *c, const struct Company *other = nullptr);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* NEWS_TYPE_H */
|
#endif /* NEWS_TYPE_H */
|
||||||
|
@@ -191,13 +191,13 @@ const char *GetCurrentLocale(const char *)
|
|||||||
bool GetClipboardContents(char *buffer, const char *last)
|
bool GetClipboardContents(char *buffer, const char *last)
|
||||||
{
|
{
|
||||||
NSPasteboard *pb = [ NSPasteboard generalPasteboard ];
|
NSPasteboard *pb = [ NSPasteboard generalPasteboard ];
|
||||||
NSArray *types = [ NSArray arrayWithObject:NSStringPboardType ];
|
NSArray *types = [ NSArray arrayWithObject:NSPasteboardTypeString ];
|
||||||
NSString *bestType = [ pb availableTypeFromArray:types ];
|
NSString *bestType = [ pb availableTypeFromArray:types ];
|
||||||
|
|
||||||
/* Clipboard has no text data available. */
|
/* Clipboard has no text data available. */
|
||||||
if (bestType == nil) return false;
|
if (bestType == nil) return false;
|
||||||
|
|
||||||
NSString *string = [ pb stringForType:NSStringPboardType ];
|
NSString *string = [ pb stringForType:NSPasteboardTypeString ];
|
||||||
if (string == nil || [ string length ] == 0) return false;
|
if (string == nil || [ string length ] == 0) return false;
|
||||||
|
|
||||||
strecpy(buffer, [ string UTF8String ], last);
|
strecpy(buffer, [ string UTF8String ], last);
|
||||||
|
@@ -27,6 +27,10 @@
|
|||||||
#define HAVE_OSX_1011_SDK
|
#define HAVE_OSX_1011_SDK
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MAC_OS_X_VERSION_10_12
|
||||||
|
#define HAVE_OSX_1012_SDK
|
||||||
|
#endif
|
||||||
|
|
||||||
/* It would seem that to ensure backward compatibility we have to ensure that we have defined MAC_OS_X_VERSION_10_x everywhere */
|
/* It would seem that to ensure backward compatibility we have to ensure that we have defined MAC_OS_X_VERSION_10_x everywhere */
|
||||||
#ifndef MAC_OS_X_VERSION_10_3
|
#ifndef MAC_OS_X_VERSION_10_3
|
||||||
#define MAC_OS_X_VERSION_10_3 1030
|
#define MAC_OS_X_VERSION_10_3 1030
|
||||||
|
@@ -51,10 +51,10 @@ FT_Error GetFontByFaceName(const char *font_name, FT_Face *face)
|
|||||||
/* Resolve the name and populate the information structure */
|
/* Resolve the name and populate the information structure */
|
||||||
pat = FcNameParse((FcChar8 *)font_family);
|
pat = FcNameParse((FcChar8 *)font_family);
|
||||||
if (font_style != nullptr) FcPatternAddString(pat, FC_STYLE, (FcChar8 *)font_style);
|
if (font_style != nullptr) FcPatternAddString(pat, FC_STYLE, (FcChar8 *)font_style);
|
||||||
FcConfigSubstitute(0, pat, FcMatchPattern);
|
FcConfigSubstitute(nullptr, pat, FcMatchPattern);
|
||||||
FcDefaultSubstitute(pat);
|
FcDefaultSubstitute(pat);
|
||||||
fs = FcFontSetCreate();
|
fs = FcFontSetCreate();
|
||||||
match = FcFontMatch(0, pat, &result);
|
match = FcFontMatch(nullptr, pat, &result);
|
||||||
|
|
||||||
if (fs != nullptr && match != nullptr) {
|
if (fs != nullptr && match != nullptr) {
|
||||||
int i;
|
int i;
|
||||||
|
@@ -278,7 +278,7 @@ bool GetClipboardContents(char *buffer, const char *last)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char *clip = SDL_GetClipboardText();
|
char *clip = SDL_GetClipboardText();
|
||||||
if (clip != NULL) {
|
if (clip != nullptr) {
|
||||||
strecpy(buffer, clip, last);
|
strecpy(buffer, clip, last);
|
||||||
SDL_free(clip);
|
SDL_free(clip);
|
||||||
return true;
|
return true;
|
||||||
|
@@ -817,9 +817,7 @@ static bool CanEnterTile(TileIndex tile, DiagDirection dir, AyStarUserData *user
|
|||||||
|
|
||||||
/* Depots, standard roadstops and single tram bits can only be entered from one direction */
|
/* Depots, standard roadstops and single tram bits can only be entered from one direction */
|
||||||
DiagDirection single_entry = GetTileSingleEntry(tile, user->type, user->subtype);
|
DiagDirection single_entry = GetTileSingleEntry(tile, user->type, user->subtype);
|
||||||
if (single_entry != INVALID_DIAGDIR && single_entry != ReverseDiagDir(dir)) return false;
|
return single_entry == INVALID_DIAGDIR || single_entry == ReverseDiagDir(dir);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -825,7 +825,7 @@ bool AfterLoadGame()
|
|||||||
if (IsSavegameVersionBefore(SLV_6, 1)) _settings_game.pf.forbid_90_deg = false;
|
if (IsSavegameVersionBefore(SLV_6, 1)) _settings_game.pf.forbid_90_deg = false;
|
||||||
if (IsSavegameVersionBefore(SLV_21)) _settings_game.vehicle.train_acceleration_model = 0;
|
if (IsSavegameVersionBefore(SLV_21)) _settings_game.vehicle.train_acceleration_model = 0;
|
||||||
if (IsSavegameVersionBefore(SLV_90)) _settings_game.vehicle.plane_speed = 4;
|
if (IsSavegameVersionBefore(SLV_90)) _settings_game.vehicle.plane_speed = 4;
|
||||||
if (IsSavegameVersionBefore(SLV_95)) _settings_game.vehicle.dynamic_engines = 0;
|
if (IsSavegameVersionBefore(SLV_95)) _settings_game.vehicle.dynamic_engines = false;
|
||||||
if (IsSavegameVersionBefore(SLV_96)) _settings_game.economy.station_noise_level = false;
|
if (IsSavegameVersionBefore(SLV_96)) _settings_game.economy.station_noise_level = false;
|
||||||
if (IsSavegameVersionBefore(SLV_133)) {
|
if (IsSavegameVersionBefore(SLV_133)) {
|
||||||
_settings_game.vehicle.train_slope_steepness = 3;
|
_settings_game.vehicle.train_slope_steepness = 3;
|
||||||
|
@@ -65,7 +65,7 @@ static void Load_AIPL()
|
|||||||
while ((index = (CompanyID)SlIterateArray()) != (CompanyID)-1) {
|
while ((index = (CompanyID)SlIterateArray()) != (CompanyID)-1) {
|
||||||
if (index >= MAX_COMPANIES) SlErrorCorrupt("Too many AI configs");
|
if (index >= MAX_COMPANIES) SlErrorCorrupt("Too many AI configs");
|
||||||
|
|
||||||
_ai_saveload_is_random = 0;
|
_ai_saveload_is_random = false;
|
||||||
_ai_saveload_version = -1;
|
_ai_saveload_version = -1;
|
||||||
SlObject(nullptr, _ai_company);
|
SlObject(nullptr, _ai_company);
|
||||||
|
|
||||||
|
@@ -468,7 +468,7 @@ int64 ScriptList::Begin()
|
|||||||
|
|
||||||
int64 ScriptList::Next()
|
int64 ScriptList::Next()
|
||||||
{
|
{
|
||||||
if (this->initialized == false) {
|
if (!this->initialized) {
|
||||||
DEBUG(script, 0, "Next() is invalid as Begin() is never called");
|
DEBUG(script, 0, "Next() is invalid as Begin() is never called");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -482,7 +482,7 @@ bool ScriptList::IsEmpty()
|
|||||||
|
|
||||||
bool ScriptList::IsEnd()
|
bool ScriptList::IsEnd()
|
||||||
{
|
{
|
||||||
if (this->initialized == false) {
|
if (!this->initialized) {
|
||||||
DEBUG(script, 0, "IsEnd() is invalid as Begin() is never called");
|
DEBUG(script, 0, "IsEnd() is invalid as Begin() is never called");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -109,7 +109,7 @@ SQInteger ScriptText::_SetParam(int parameter, HSQUIRRELVM vm)
|
|||||||
sq_pop(vm, 3);
|
sq_pop(vm, 3);
|
||||||
|
|
||||||
/* Get the 'real' instance of this class */
|
/* Get the 'real' instance of this class */
|
||||||
sq_getinstanceup(vm, -1, &real_instance, 0);
|
sq_getinstanceup(vm, -1, &real_instance, nullptr);
|
||||||
if (real_instance == nullptr) return SQ_ERROR;
|
if (real_instance == nullptr) return SQ_ERROR;
|
||||||
|
|
||||||
ScriptText *value = static_cast<ScriptText *>(real_instance);
|
ScriptText *value = static_cast<ScriptText *>(real_instance);
|
||||||
|
@@ -273,7 +273,7 @@ void Squirrel::RunError(HSQUIRRELVM vm, const SQChar *error)
|
|||||||
|
|
||||||
SQInteger Squirrel::_RunError(HSQUIRRELVM vm)
|
SQInteger Squirrel::_RunError(HSQUIRRELVM vm)
|
||||||
{
|
{
|
||||||
const SQChar *sErr = 0;
|
const SQChar *sErr = nullptr;
|
||||||
|
|
||||||
if (sq_gettop(vm) >= 1) {
|
if (sq_gettop(vm) >= 1) {
|
||||||
if (SQ_SUCCEEDED(sq_getstring(vm, -1, &sErr))) {
|
if (SQ_SUCCEEDED(sq_getstring(vm, -1, &sErr))) {
|
||||||
|
@@ -190,7 +190,7 @@ public:
|
|||||||
* @note This will only work just after a function-call from within Squirrel
|
* @note This will only work just after a function-call from within Squirrel
|
||||||
* to your C++ function.
|
* to your C++ function.
|
||||||
*/
|
*/
|
||||||
static bool GetRealInstance(HSQUIRRELVM vm, SQUserPointer *ptr) { return SQ_SUCCEEDED(sq_getinstanceup(vm, 1, ptr, 0)); }
|
static bool GetRealInstance(HSQUIRRELVM vm, SQUserPointer *ptr) { return SQ_SUCCEEDED(sq_getinstanceup(vm, 1, ptr, nullptr)); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Squirrel-instance pointer.
|
* Get the Squirrel-instance pointer.
|
||||||
|
@@ -754,9 +754,9 @@ namespace SQConvert {
|
|||||||
sq_pop(vm, 3);
|
sq_pop(vm, 3);
|
||||||
|
|
||||||
/* Get the 'real' instance of this class */
|
/* Get the 'real' instance of this class */
|
||||||
sq_getinstanceup(vm, 1, &real_instance, 0);
|
sq_getinstanceup(vm, 1, &real_instance, nullptr);
|
||||||
/* Get the real function pointer */
|
/* Get the real function pointer */
|
||||||
sq_getuserdata(vm, nparam, &ptr, 0);
|
sq_getuserdata(vm, nparam, &ptr, nullptr);
|
||||||
if (real_instance == nullptr) return sq_throwerror(vm, "couldn't detect real instance of class for non-static call");
|
if (real_instance == nullptr) return sq_throwerror(vm, "couldn't detect real instance of class for non-static call");
|
||||||
/* Remove the userdata from the stack */
|
/* Remove the userdata from the stack */
|
||||||
sq_pop(vm, 1);
|
sq_pop(vm, 1);
|
||||||
@@ -796,9 +796,9 @@ namespace SQConvert {
|
|||||||
sq_pop(vm, 3);
|
sq_pop(vm, 3);
|
||||||
|
|
||||||
/* Get the 'real' instance of this class */
|
/* Get the 'real' instance of this class */
|
||||||
sq_getinstanceup(vm, 1, &real_instance, 0);
|
sq_getinstanceup(vm, 1, &real_instance, nullptr);
|
||||||
/* Get the real function pointer */
|
/* Get the real function pointer */
|
||||||
sq_getuserdata(vm, nparam, &ptr, 0);
|
sq_getuserdata(vm, nparam, &ptr, nullptr);
|
||||||
if (real_instance == nullptr) return sq_throwerror(vm, "couldn't detect real instance of class for non-static call");
|
if (real_instance == nullptr) return sq_throwerror(vm, "couldn't detect real instance of class for non-static call");
|
||||||
/* Remove the userdata from the stack */
|
/* Remove the userdata from the stack */
|
||||||
sq_pop(vm, 1);
|
sq_pop(vm, 1);
|
||||||
@@ -820,7 +820,7 @@ namespace SQConvert {
|
|||||||
SQUserPointer ptr = nullptr;
|
SQUserPointer ptr = nullptr;
|
||||||
|
|
||||||
/* Get the real function pointer */
|
/* Get the real function pointer */
|
||||||
sq_getuserdata(vm, nparam, &ptr, 0);
|
sq_getuserdata(vm, nparam, &ptr, nullptr);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
/* Delegate it to a template that can handle this specific function */
|
/* Delegate it to a template that can handle this specific function */
|
||||||
@@ -844,7 +844,7 @@ namespace SQConvert {
|
|||||||
SQUserPointer ptr = nullptr;
|
SQUserPointer ptr = nullptr;
|
||||||
|
|
||||||
/* Get the real function pointer */
|
/* Get the real function pointer */
|
||||||
sq_getuserdata(vm, nparam, &ptr, 0);
|
sq_getuserdata(vm, nparam, &ptr, nullptr);
|
||||||
/* Remove the userdata from the stack */
|
/* Remove the userdata from the stack */
|
||||||
sq_pop(vm, 1);
|
sq_pop(vm, 1);
|
||||||
|
|
||||||
|
@@ -471,7 +471,7 @@ void IntSettingDesc::MakeValueValid(int32 &val) const
|
|||||||
uval = (uint32)this->def;
|
uval = (uint32)this->def;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val = (int32)val;
|
val = (int32)uval;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
case SLE_VAR_I64:
|
case SLE_VAR_I64:
|
||||||
@@ -893,7 +893,7 @@ static void UpdateConsists(int32 new_value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check service intervals of vehicles, newvalue is value of % or day based servicing */
|
/* Check service intervals of vehicles, newvalue is value of % or day based servicing */
|
||||||
static void UpdateServiceInterval(int32 new_value)
|
static void UpdateAllServiceInterval(int32 new_value)
|
||||||
{
|
{
|
||||||
bool update_vehicles;
|
bool update_vehicles;
|
||||||
VehicleDefaultSettings *vds;
|
VehicleDefaultSettings *vds;
|
||||||
|
@@ -977,8 +977,7 @@ void BaseSettingEntry::Init(byte level)
|
|||||||
bool BaseSettingEntry::IsVisible(const BaseSettingEntry *item) const
|
bool BaseSettingEntry::IsVisible(const BaseSettingEntry *item) const
|
||||||
{
|
{
|
||||||
if (this->IsFiltered()) return false;
|
if (this->IsFiltered()) return false;
|
||||||
if (this == item) return true;
|
return this == item;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -248,9 +248,7 @@ static inline bool CheckAddToTodoSet(TileIndex t1, DiagDirection d1, TileIndex t
|
|||||||
|
|
||||||
assert(!_tbdset.IsIn(t1, d1)); // it really shouldn't be there already
|
assert(!_tbdset.IsIn(t1, d1)); // it really shouldn't be there already
|
||||||
|
|
||||||
if (_tbdset.Remove(t2, d2)) return false;
|
return !_tbdset.Remove(t2, d2);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -29,9 +29,6 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
typedef Pool<BaseStation, StationID, 32, 64000> StationPool;
|
|
||||||
extern StationPool _station_pool;
|
|
||||||
|
|
||||||
static const byte INITIAL_STATION_RATING = 175;
|
static const byte INITIAL_STATION_RATING = 175;
|
||||||
|
|
||||||
static const uint MAX_EXTRA_STATION_NAMES = 1024;
|
static const uint MAX_EXTRA_STATION_NAMES = 1024;
|
||||||
|
@@ -46,7 +46,11 @@ void CDECL strgen_warning(const char *s, ...)
|
|||||||
va_start(va, s);
|
va_start(va, s);
|
||||||
vseprintf(buf, lastof(buf), s, va);
|
vseprintf(buf, lastof(buf), s, va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
|
if (_show_todo > 0) {
|
||||||
fprintf(stderr, LINE_NUM_FMT("warning"), _file, _cur_line, buf);
|
fprintf(stderr, LINE_NUM_FMT("warning"), _file, _cur_line, buf);
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, LINE_NUM_FMT("info"), _file, _cur_line, buf);
|
||||||
|
}
|
||||||
_warnings++;
|
_warnings++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -818,9 +818,13 @@ void StringReader::ParseFile()
|
|||||||
char buf[2048];
|
char buf[2048];
|
||||||
_warnings = _errors = 0;
|
_warnings = _errors = 0;
|
||||||
|
|
||||||
_translation = this->master || this->translation;
|
_translation = this->translation;
|
||||||
_file = this->file;
|
_file = this->file;
|
||||||
|
|
||||||
|
/* Abusing _show_todo to replace "warning" with "info" for translations. */
|
||||||
|
_show_todo &= 3;
|
||||||
|
if (!this->translation) _show_todo |= 4;
|
||||||
|
|
||||||
/* For each new file we parse, reset the genders, and language codes. */
|
/* For each new file we parse, reset the genders, and language codes. */
|
||||||
MemSetT(&_lang, 0);
|
MemSetT(&_lang, 0);
|
||||||
strecpy(_lang.digit_group_separator, ",", lastof(_lang.digit_group_separator));
|
strecpy(_lang.digit_group_separator, ",", lastof(_lang.digit_group_separator));
|
||||||
|
@@ -43,22 +43,19 @@ void Subsidy::AwardTo(CompanyID company)
|
|||||||
this->awarded = company;
|
this->awarded = company;
|
||||||
this->remaining = _settings_game.difficulty.subsidy_duration * MONTHS_IN_YEAR;
|
this->remaining = _settings_game.difficulty.subsidy_duration * MONTHS_IN_YEAR;
|
||||||
|
|
||||||
char company_name[MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH];
|
|
||||||
SetDParam(0, company);
|
SetDParam(0, company);
|
||||||
GetString(company_name, STR_COMPANY_NAME, lastof(company_name));
|
NewsStringData *company_name = new NewsStringData(GetString(STR_COMPANY_NAME));
|
||||||
|
|
||||||
char *cn = stredup(company_name);
|
|
||||||
|
|
||||||
/* Add a news item */
|
/* Add a news item */
|
||||||
std::pair<NewsReferenceType, NewsReferenceType> reftype = SetupSubsidyDecodeParam(this, SubsidyDecodeParamType::NewsAwarded);
|
std::pair<NewsReferenceType, NewsReferenceType> reftype = SetupSubsidyDecodeParam(this, SubsidyDecodeParamType::NewsAwarded);
|
||||||
InjectDParam(1);
|
InjectDParam(1);
|
||||||
|
|
||||||
SetDParamStr(0, cn);
|
SetDParamStr(0, company_name->string);
|
||||||
AddNewsItem(
|
AddNewsItem(
|
||||||
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF + _settings_game.difficulty.subsidy_multiplier,
|
STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF + _settings_game.difficulty.subsidy_multiplier,
|
||||||
NT_SUBSIDIES, NF_NORMAL,
|
NT_SUBSIDIES, NF_NORMAL,
|
||||||
reftype.first, this->src, reftype.second, this->dst,
|
reftype.first, this->src, reftype.second, this->dst,
|
||||||
cn
|
company_name
|
||||||
);
|
);
|
||||||
AI::BroadcastNewEvent(new ScriptEventSubsidyAwarded(this->index));
|
AI::BroadcastNewEvent(new ScriptEventSubsidyAwarded(this->index));
|
||||||
Game::NewEvent(new ScriptEventSubsidyAwarded(this->index));
|
Game::NewEvent(new ScriptEventSubsidyAwarded(this->index));
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
; company changes them, it changes for all players.
|
; company changes them, it changes for all players.
|
||||||
|
|
||||||
[pre-amble]
|
[pre-amble]
|
||||||
static void UpdateServiceInterval(int32 new_value);
|
static void UpdateAllServiceInterval(int32 new_value);
|
||||||
static bool CanUpdateServiceInterval(VehicleType type, int32 &new_value);
|
static bool CanUpdateServiceInterval(VehicleType type, int32 &new_value);
|
||||||
static void UpdateServiceInterval(VehicleType type, int32 new_value);
|
static void UpdateServiceInterval(VehicleType type, int32 new_value);
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ var = vehicle.servint_ispercent
|
|||||||
def = false
|
def = false
|
||||||
str = STR_CONFIG_SETTING_SERVINT_ISPERCENT
|
str = STR_CONFIG_SETTING_SERVINT_ISPERCENT
|
||||||
strhelp = STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT
|
||||||
post_cb = UpdateServiceInterval
|
post_cb = UpdateAllServiceInterval
|
||||||
|
|
||||||
[SDT_VAR]
|
[SDT_VAR]
|
||||||
var = vehicle.servint_trains
|
var = vehicle.servint_trains
|
||||||
|
@@ -4091,6 +4091,20 @@ strval = STR_CONFIG_SETTING_AUTOSCROLL_DISABLED
|
|||||||
cat = SC_BASIC
|
cat = SC_BASIC
|
||||||
|
|
||||||
[SDTC_VAR]
|
[SDTC_VAR]
|
||||||
|
ifdef = __EMSCRIPTEN__
|
||||||
|
var = gui.scroll_mode
|
||||||
|
type = SLE_UINT8
|
||||||
|
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
|
||||||
|
def = 2
|
||||||
|
min = 0
|
||||||
|
max = 3
|
||||||
|
str = STR_CONFIG_SETTING_SCROLLMODE
|
||||||
|
strhelp = STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT
|
||||||
|
strval = STR_CONFIG_SETTING_SCROLLMODE_DEFAULT
|
||||||
|
cat = SC_BASIC
|
||||||
|
|
||||||
|
[SDTC_VAR]
|
||||||
|
ifndef = __EMSCRIPTEN__
|
||||||
var = gui.scroll_mode
|
var = gui.scroll_mode
|
||||||
type = SLE_UINT8
|
type = SLE_UINT8
|
||||||
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
|
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
|
||||||
|
@@ -2274,15 +2274,13 @@ CommandCost CmdFoundTown(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
|||||||
SetDParam(0, t->index);
|
SetDParam(0, t->index);
|
||||||
AddTileNewsItem(STR_NEWS_NEW_TOWN_UNSPONSORED, NT_INDUSTRY_OPEN, tile);
|
AddTileNewsItem(STR_NEWS_NEW_TOWN_UNSPONSORED, NT_INDUSTRY_OPEN, tile);
|
||||||
} else {
|
} else {
|
||||||
char company_name[MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH];
|
|
||||||
SetDParam(0, _current_company);
|
SetDParam(0, _current_company);
|
||||||
GetString(company_name, STR_COMPANY_NAME, lastof(company_name));
|
NewsStringData *company_name = new NewsStringData(GetString(STR_COMPANY_NAME));
|
||||||
|
|
||||||
char *cn = stredup(company_name);
|
SetDParamStr(0, company_name->string);
|
||||||
SetDParamStr(0, cn);
|
|
||||||
SetDParam(1, t->index);
|
SetDParam(1, t->index);
|
||||||
|
|
||||||
AddTileNewsItem(STR_NEWS_NEW_TOWN, NT_INDUSTRY_OPEN, tile, cn);
|
AddTileNewsItem(STR_NEWS_NEW_TOWN, NT_INDUSTRY_OPEN, tile, company_name);
|
||||||
}
|
}
|
||||||
AI::BroadcastNewEvent(new ScriptEventTownFounded(t->index));
|
AI::BroadcastNewEvent(new ScriptEventTownFounded(t->index));
|
||||||
Game::NewEvent(new ScriptEventTownFounded(t->index));
|
Game::NewEvent(new ScriptEventTownFounded(t->index));
|
||||||
@@ -3452,15 +3450,13 @@ static CommandCost TownActionRoadRebuild(Town *t, DoCommandFlag flags)
|
|||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
t->road_build_months = 6;
|
t->road_build_months = 6;
|
||||||
|
|
||||||
char company_name[MAX_LENGTH_COMPANY_NAME_CHARS * MAX_CHAR_LENGTH];
|
|
||||||
SetDParam(0, _current_company);
|
SetDParam(0, _current_company);
|
||||||
GetString(company_name, STR_COMPANY_NAME, lastof(company_name));
|
NewsStringData *company_name = new NewsStringData(GetString(STR_COMPANY_NAME));
|
||||||
|
|
||||||
char *cn = stredup(company_name);
|
|
||||||
SetDParam(0, t->index);
|
SetDParam(0, t->index);
|
||||||
SetDParamStr(1, cn);
|
SetDParamStr(1, company_name->string);
|
||||||
|
|
||||||
AddNewsItem(STR_NEWS_ROAD_REBUILDING, NT_GENERAL, NF_NORMAL, NR_TOWN, t->index, NR_NONE, UINT32_MAX, cn);
|
AddNewsItem(STR_NEWS_ROAD_REBUILDING, NT_GENERAL, NF_NORMAL, NR_TOWN, t->index, NR_NONE, UINT32_MAX, company_name);
|
||||||
AI::BroadcastNewEvent(new ScriptEventRoadReconstruction((ScriptCompany::CompanyID)(Owner)_current_company, t->index));
|
AI::BroadcastNewEvent(new ScriptEventRoadReconstruction((ScriptCompany::CompanyID)(Owner)_current_company, t->index));
|
||||||
Game::NewEvent(new ScriptEventRoadReconstruction((ScriptCompany::CompanyID)(Owner)_current_company, t->index));
|
Game::NewEvent(new ScriptEventRoadReconstruction((ScriptCompany::CompanyID)(Owner)_current_company, t->index));
|
||||||
}
|
}
|
||||||
@@ -3597,8 +3593,7 @@ static CommandCost TownActionBuyRights(Town *t, DoCommandFlag flags)
|
|||||||
SetWindowClassesDirty(WC_STATION_VIEW);
|
SetWindowClassesDirty(WC_STATION_VIEW);
|
||||||
|
|
||||||
/* Spawn news message */
|
/* Spawn news message */
|
||||||
CompanyNewsInformation *cni = MallocT<CompanyNewsInformation>(1);
|
CompanyNewsInformation *cni = new CompanyNewsInformation(Company::Get(_current_company));
|
||||||
cni->FillData(Company::Get(_current_company));
|
|
||||||
SetDParam(0, STR_NEWS_EXCLUSIVE_RIGHTS_TITLE);
|
SetDParam(0, STR_NEWS_EXCLUSIVE_RIGHTS_TITLE);
|
||||||
SetDParam(1, STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION);
|
SetDParam(1, STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION);
|
||||||
SetDParam(2, t->index);
|
SetDParam(2, t->index);
|
||||||
|
@@ -12,6 +12,8 @@
|
|||||||
#include "../../stdafx.h"
|
#include "../../stdafx.h"
|
||||||
#include "../../os/macosx/macos.h"
|
#include "../../os/macosx/macos.h"
|
||||||
|
|
||||||
|
#define GL_SILENCE_DEPRECATION
|
||||||
|
|
||||||
#define Rect OTTDRect
|
#define Rect OTTDRect
|
||||||
#define Point OTTDPoint
|
#define Point OTTDPoint
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
@@ -150,7 +152,6 @@ static bool _allowSoftware;
|
|||||||
{
|
{
|
||||||
if (self = [ super initWithFrame:frameRect ]) {
|
if (self = [ super initWithFrame:frameRect ]) {
|
||||||
/* We manage our content updates ourselves. */
|
/* We manage our content updates ourselves. */
|
||||||
self.wantsBestResolutionOpenGLSurface = _allow_hidpi_window ? YES : NO;
|
|
||||||
self.layerContentsRedrawPolicy = NSViewLayerContentsRedrawOnSetNeedsDisplay;
|
self.layerContentsRedrawPolicy = NSViewLayerContentsRedrawOnSetNeedsDisplay;
|
||||||
|
|
||||||
/* Create backing layer. */
|
/* Create backing layer. */
|
||||||
|
@@ -45,6 +45,17 @@
|
|||||||
#import <sys/time.h> /* gettimeofday */
|
#import <sys/time.h> /* gettimeofday */
|
||||||
#include <array>
|
#include <array>
|
||||||
|
|
||||||
|
/* The 10.12 SDK added new names for some enum constants and
|
||||||
|
* deprecated the old ones. As there's no functional change in any
|
||||||
|
* way, just use a define for older SDKs to the old names. */
|
||||||
|
#ifndef HAVE_OSX_1012_SDK
|
||||||
|
# define NSEventModifierFlagCommand NSCommandKeyMask
|
||||||
|
# define NSEventModifierFlagControl NSControlKeyMask
|
||||||
|
# define NSEventModifierFlagOption NSAlternateKeyMask
|
||||||
|
# define NSEventModifierFlagShift NSShiftKeyMask
|
||||||
|
# define NSEventModifierFlagCapsLock NSAlphaShiftKeyMask
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Important notice regarding all modifications!!!!!!!
|
* Important notice regarding all modifications!!!!!!!
|
||||||
* There are certain limitations because the file is objective C++.
|
* There are certain limitations because the file is objective C++.
|
||||||
@@ -360,7 +371,11 @@ bool VideoDriver_Cocoa::MakeWindow(int width, int height)
|
|||||||
NSRect contentRect = NSMakeRect(0, 0, width, height);
|
NSRect contentRect = NSMakeRect(0, 0, width, height);
|
||||||
|
|
||||||
/* Create main window. */
|
/* Create main window. */
|
||||||
|
#ifdef HAVE_OSX_1012_SDK
|
||||||
|
unsigned int style = NSWindowStyleMaskTitled | NSWindowStyleMaskResizable | NSWindowStyleMaskMiniaturizable | NSWindowStyleMaskClosable;
|
||||||
|
#else
|
||||||
unsigned int style = NSTitledWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask | NSClosableWindowMask;
|
unsigned int style = NSTitledWindowMask | NSResizableWindowMask | NSMiniaturizableWindowMask | NSClosableWindowMask;
|
||||||
|
#endif
|
||||||
this->window = [ [ OTTD_CocoaWindow alloc ] initWithContentRect:contentRect styleMask:style backing:NSBackingStoreBuffered defer:NO driver:this ];
|
this->window = [ [ OTTD_CocoaWindow alloc ] initWithContentRect:contentRect styleMask:style backing:NSBackingStoreBuffered defer:NO driver:this ];
|
||||||
if (this->window == nil) {
|
if (this->window == nil) {
|
||||||
DEBUG(driver, 0, "Could not create the Cocoa window.");
|
DEBUG(driver, 0, "Could not create the Cocoa window.");
|
||||||
@@ -376,7 +391,7 @@ bool VideoDriver_Cocoa::MakeWindow(int width, int height)
|
|||||||
behavior |= NSWindowCollectionBehaviorFullScreenPrimary;
|
behavior |= NSWindowCollectionBehaviorFullScreenPrimary;
|
||||||
[ this->window setCollectionBehavior:behavior ];
|
[ this->window setCollectionBehavior:behavior ];
|
||||||
|
|
||||||
NSButton* fullscreenButton = [ this->window standardWindowButton:NSWindowFullScreenButton ];
|
NSButton* fullscreenButton = [ this->window standardWindowButton:NSWindowZoomButton ];
|
||||||
[ fullscreenButton setAction:@selector(toggleFullScreen:) ];
|
[ fullscreenButton setAction:@selector(toggleFullScreen:) ];
|
||||||
[ fullscreenButton setTarget:this->window ];
|
[ fullscreenButton setTarget:this->window ];
|
||||||
}
|
}
|
||||||
@@ -430,7 +445,12 @@ bool VideoDriver_Cocoa::MakeWindow(int width, int height)
|
|||||||
*/
|
*/
|
||||||
bool VideoDriver_Cocoa::PollEvent()
|
bool VideoDriver_Cocoa::PollEvent()
|
||||||
{
|
{
|
||||||
NSEvent *event = [ NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[ NSDate distantPast ] inMode:NSDefaultRunLoopMode dequeue:YES ];
|
#ifdef HAVE_OSX_1012_SDK
|
||||||
|
NSEventMask mask = NSEventMaskAny;
|
||||||
|
#else
|
||||||
|
NSEventMask mask = NSAnyEventMask;
|
||||||
|
#endif
|
||||||
|
NSEvent *event = [ NSApp nextEventMatchingMask:mask untilDate:[ NSDate distantPast ] inMode:NSDefaultRunLoopMode dequeue:YES ];
|
||||||
|
|
||||||
if (event == nil) return false;
|
if (event == nil) return false;
|
||||||
|
|
||||||
@@ -446,8 +466,8 @@ void VideoDriver_Cocoa::InputLoop()
|
|||||||
bool old_ctrl_pressed = _ctrl_pressed;
|
bool old_ctrl_pressed = _ctrl_pressed;
|
||||||
bool old_shift_pressed = _shift_pressed;
|
bool old_shift_pressed = _shift_pressed;
|
||||||
|
|
||||||
_ctrl_pressed = ((cur_mods & ( _settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? NSControlKeyMask : NSCommandKeyMask)) != 0) != _invert_ctrl;
|
_ctrl_pressed = ((cur_mods & ( _settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? NSEventModifierFlagControl : NSEventModifierFlagCommand)) != 0) != _invert_ctrl;
|
||||||
_shift_pressed = ((cur_mods & NSShiftKeyMask) != 0) != _invert_shift;
|
_shift_pressed = ((cur_mods & NSEventModifierFlagShift) != 0) != _invert_shift;
|
||||||
|
|
||||||
#if defined(_DEBUG)
|
#if defined(_DEBUG)
|
||||||
this->fast_forward_key_pressed = _shift_pressed;
|
this->fast_forward_key_pressed = _shift_pressed;
|
||||||
|
@@ -32,7 +32,6 @@ extern NSString *OTTDMainLaunchGameEngine;
|
|||||||
@interface OTTD_CocoaWindow : NSWindow
|
@interface OTTD_CocoaWindow : NSWindow
|
||||||
- (instancetype)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag driver:(VideoDriver_Cocoa *)drv;
|
- (instancetype)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag driver:(VideoDriver_Cocoa *)drv;
|
||||||
|
|
||||||
- (void)display;
|
|
||||||
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag;
|
- (void)setFrame:(NSRect)frameRect display:(BOOL)flag;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@@ -37,6 +37,16 @@
|
|||||||
/* Table data for key mapping. */
|
/* Table data for key mapping. */
|
||||||
#include "cocoa_keys.h"
|
#include "cocoa_keys.h"
|
||||||
|
|
||||||
|
/* The 10.12 SDK added new names for some enum constants and
|
||||||
|
* deprecated the old ones. As there's no functional change in any
|
||||||
|
* way, just use a define for older SDKs to the old names. */
|
||||||
|
#ifndef HAVE_OSX_1012_SDK
|
||||||
|
# define NSEventModifierFlagCommand NSCommandKeyMask
|
||||||
|
# define NSEventModifierFlagControl NSControlKeyMask
|
||||||
|
# define NSEventModifierFlagOption NSAlternateKeyMask
|
||||||
|
# define NSEventModifierFlagShift NSShiftKeyMask
|
||||||
|
# define NSEventModifierFlagCapsLock NSAlphaShiftKeyMask
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Important notice regarding all modifications!!!!!!!
|
* Important notice regarding all modifications!!!!!!!
|
||||||
@@ -135,7 +145,12 @@ static std::vector<WChar> NSStringToUTF32(NSString *s)
|
|||||||
[ NSApp stop:self ];
|
[ NSApp stop:self ];
|
||||||
|
|
||||||
/* Send an empty event to return from the run loop. Without that, application is stuck waiting for an event. */
|
/* Send an empty event to return from the run loop. Without that, application is stuck waiting for an event. */
|
||||||
NSEvent *event = [ NSEvent otherEventWithType:NSApplicationDefined location:NSMakePoint(0, 0) modifierFlags:0 timestamp:0.0 windowNumber:0 context:nil subtype:0 data1:0 data2:0 ];
|
#ifdef HAVE_OSX_1012_SDK
|
||||||
|
NSEventType type = NSEventTypeApplicationDefined;
|
||||||
|
#else
|
||||||
|
NSEventType type = NSApplicationDefined;
|
||||||
|
#endif
|
||||||
|
NSEvent *event = [ NSEvent otherEventWithType:type location:NSMakePoint(0, 0) modifierFlags:0 timestamp:0.0 windowNumber:0 context:nil subtype:0 data1:0 data2:0 ];
|
||||||
[ NSApp postEvent:event atStart:YES ];
|
[ NSApp postEvent:event atStart:YES ];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -207,7 +222,7 @@ static void setApplicationMenu()
|
|||||||
[ appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h" ];
|
[ appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h" ];
|
||||||
|
|
||||||
NSMenuItem *menuItem = [ appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h" ];
|
NSMenuItem *menuItem = [ appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h" ];
|
||||||
[ menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask | NSCommandKeyMask) ];
|
[ menuItem setKeyEquivalentModifierMask:(NSEventModifierFlagOption | NSEventModifierFlagCommand) ];
|
||||||
|
|
||||||
[ appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@"" ];
|
[ appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@"" ];
|
||||||
|
|
||||||
@@ -329,7 +344,11 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
|||||||
|
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
NSAlert *alert = [ [ NSAlert alloc ] init ];
|
NSAlert *alert = [ [ NSAlert alloc ] init ];
|
||||||
|
#ifdef HAVE_OSX_1012_SDK
|
||||||
|
[ alert setAlertStyle: NSAlertStyleCritical ];
|
||||||
|
#else
|
||||||
[ alert setAlertStyle: NSCriticalAlertStyle ];
|
[ alert setAlertStyle: NSCriticalAlertStyle ];
|
||||||
|
#endif
|
||||||
[ alert setMessageText:[ NSString stringWithUTF8String:title ] ];
|
[ alert setMessageText:[ NSString stringWithUTF8String:title ] ];
|
||||||
[ alert setInformativeText:[ NSString stringWithUTF8String:message ] ];
|
[ alert setInformativeText:[ NSString stringWithUTF8String:message ] ];
|
||||||
[ alert addButtonWithTitle: [ NSString stringWithUTF8String:buttonLabel ] ];
|
[ alert addButtonWithTitle: [ NSString stringWithUTF8String:buttonLabel ] ];
|
||||||
@@ -386,23 +405,6 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* This method fires just before the window deminaturizes from the Dock.
|
|
||||||
* We'll save the current visible surface, let the window manager redraw any
|
|
||||||
* UI elements, and restore the surface. This way, no expose event
|
|
||||||
* is required, and the deminiaturize works perfectly.
|
|
||||||
*/
|
|
||||||
- (void)display
|
|
||||||
{
|
|
||||||
/* save current visible surface */
|
|
||||||
[ self cacheImageInRect:[ driver->cocoaview frame ] ];
|
|
||||||
|
|
||||||
/* let the window manager redraw controls, border, etc */
|
|
||||||
[ super display ];
|
|
||||||
|
|
||||||
/* restore visible surface */
|
|
||||||
[ self restoreCachedImage ];
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Define the rectangle we draw our window in
|
* Define the rectangle we draw our window in
|
||||||
*/
|
*/
|
||||||
@@ -536,8 +538,8 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
|||||||
- (BOOL)emulateRightButton:(NSEvent *)event
|
- (BOOL)emulateRightButton:(NSEvent *)event
|
||||||
{
|
{
|
||||||
uint32 keymask = 0;
|
uint32 keymask = 0;
|
||||||
if (_settings_client.gui.right_mouse_btn_emulation == RMBE_COMMAND) keymask |= NSCommandKeyMask;
|
if (_settings_client.gui.right_mouse_btn_emulation == RMBE_COMMAND) keymask |= NSEventModifierFlagCommand;
|
||||||
if (_settings_client.gui.right_mouse_btn_emulation == RMBE_CONTROL) keymask |= NSControlKeyMask;
|
if (_settings_client.gui.right_mouse_btn_emulation == RMBE_CONTROL) keymask |= NSEventModifierFlagControl;
|
||||||
|
|
||||||
return (event.modifierFlags & keymask) != 0;
|
return (event.modifierFlags & keymask) != 0;
|
||||||
}
|
}
|
||||||
@@ -653,18 +655,18 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
|||||||
|
|
||||||
case QZ_RETURN:
|
case QZ_RETURN:
|
||||||
case QZ_f:
|
case QZ_f:
|
||||||
if (down && (modifiers & NSCommandKeyMask)) {
|
if (down && (modifiers & NSEventModifierFlagCommand)) {
|
||||||
VideoDriver::GetInstance()->ToggleFullscreen(!_fullscreen);
|
VideoDriver::GetInstance()->ToggleFullscreen(!_fullscreen);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case QZ_v:
|
case QZ_v:
|
||||||
if (down && EditBoxInGlobalFocus() && (modifiers & (NSCommandKeyMask | NSControlKeyMask))) {
|
if (down && EditBoxInGlobalFocus() && (modifiers & (NSEventModifierFlagCommand | NSEventModifierFlagControl))) {
|
||||||
HandleKeypress(WKC_CTRL | 'V', unicode);
|
HandleKeypress(WKC_CTRL | 'V', unicode);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case QZ_u:
|
case QZ_u:
|
||||||
if (down && EditBoxInGlobalFocus() && (modifiers & (NSCommandKeyMask | NSControlKeyMask))) {
|
if (down && EditBoxInGlobalFocus() && (modifiers & (NSEventModifierFlagCommand | NSEventModifierFlagControl))) {
|
||||||
HandleKeypress(WKC_CTRL | 'U', unicode);
|
HandleKeypress(WKC_CTRL | 'U', unicode);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -676,10 +678,10 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
|||||||
auto vk = std::find_if(std::begin(_vk_mapping), std::end(_vk_mapping), [=](const CocoaVkMapping &m) { return m.vk_from == keycode; });
|
auto vk = std::find_if(std::begin(_vk_mapping), std::end(_vk_mapping), [=](const CocoaVkMapping &m) { return m.vk_from == keycode; });
|
||||||
uint32 pressed_key = vk != std::end(_vk_mapping) ? vk->map_to : 0;
|
uint32 pressed_key = vk != std::end(_vk_mapping) ? vk->map_to : 0;
|
||||||
|
|
||||||
if (modifiers & NSShiftKeyMask) pressed_key |= WKC_SHIFT;
|
if (modifiers & NSEventModifierFlagShift) pressed_key |= WKC_SHIFT;
|
||||||
if (modifiers & NSControlKeyMask) pressed_key |= (_settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_CTRL : WKC_META);
|
if (modifiers & NSEventModifierFlagControl) pressed_key |= (_settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_CTRL : WKC_META);
|
||||||
if (modifiers & NSAlternateKeyMask) pressed_key |= WKC_ALT;
|
if (modifiers & NSEventModifierFlagOption) pressed_key |= WKC_ALT;
|
||||||
if (modifiers & NSCommandKeyMask) pressed_key |= (_settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_META : WKC_CTRL);
|
if (modifiers & NSEventModifierFlagCommand) pressed_key |= (_settings_client.gui.right_mouse_btn_emulation != RMBE_CONTROL ? WKC_META : WKC_CTRL);
|
||||||
|
|
||||||
static bool console = false;
|
static bool console = false;
|
||||||
|
|
||||||
@@ -715,7 +717,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
|||||||
case QZ_q:
|
case QZ_q:
|
||||||
case QZ_h:
|
case QZ_h:
|
||||||
case QZ_m:
|
case QZ_m:
|
||||||
if (event.modifierFlags & NSCommandKeyMask) {
|
if (event.modifierFlags & NSEventModifierFlagCommand) {
|
||||||
[ self interpretKeyEvents:[ NSArray arrayWithObject:event ] ];
|
[ self interpretKeyEvents:[ NSArray arrayWithObject:event ] ];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -744,7 +746,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
|||||||
case QZ_q:
|
case QZ_q:
|
||||||
case QZ_h:
|
case QZ_h:
|
||||||
case QZ_m:
|
case QZ_m:
|
||||||
if (event.modifierFlags & NSCommandKeyMask) {
|
if (event.modifierFlags & NSEventModifierFlagCommand) {
|
||||||
[ self interpretKeyEvents:[ NSArray arrayWithObject:event ] ];
|
[ self interpretKeyEvents:[ NSArray arrayWithObject:event ] ];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -765,7 +767,7 @@ void CocoaDialog(const char *title, const char *message, const char *buttonLabel
|
|||||||
if (self->_current_mods == newMods) return;
|
if (self->_current_mods == newMods) return;
|
||||||
|
|
||||||
/* Iterate through the bits, testing each against the current modifiers */
|
/* Iterate through the bits, testing each against the current modifiers */
|
||||||
for (unsigned int i = 0, bit = NSAlphaShiftKeyMask; bit <= NSCommandKeyMask; bit <<= 1, ++i) {
|
for (unsigned int i = 0, bit = NSEventModifierFlagCapsLock; bit <= NSEventModifierFlagCommand; bit <<= 1, ++i) {
|
||||||
unsigned int currentMask, newMask;
|
unsigned int currentMask, newMask;
|
||||||
|
|
||||||
currentMask = self->_current_mods & bit;
|
currentMask = self->_current_mods & bit;
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
#define GL_GLEXT_PROTOTYPES
|
#define GL_GLEXT_PROTOTYPES
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
|
# define GL_SILENCE_DEPRECATION
|
||||||
# include <OpenGL/gl3.h>
|
# include <OpenGL/gl3.h>
|
||||||
#else
|
#else
|
||||||
# include <GL/gl.h>
|
# include <GL/gl.h>
|
||||||
@@ -146,7 +147,7 @@ GetOGLProcAddressProc GetOGLProcAddress;
|
|||||||
*/
|
*/
|
||||||
const char *FindStringInExtensionList(const char *string, const char *substring)
|
const char *FindStringInExtensionList(const char *string, const char *substring)
|
||||||
{
|
{
|
||||||
while (1) {
|
while (true) {
|
||||||
/* Is the extension string present at all? */
|
/* Is the extension string present at all? */
|
||||||
const char *pos = strstr(string, substring);
|
const char *pos = strstr(string, substring);
|
||||||
if (pos == nullptr) break;
|
if (pos == nullptr) break;
|
||||||
@@ -1309,7 +1310,7 @@ void OpenGLBackend::RenderOglSprite(OpenGLSprite *gl_sprite, PaletteID pal, int
|
|||||||
_glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
|
_glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
|
||||||
|
|
||||||
_glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, 256, GetNonSprite(GB(pal, 0, PALETTE_WIDTH), ST_RECOLOUR) + 1);
|
_glBufferSubData(GL_PIXEL_UNPACK_BUFFER, 0, 256, GetNonSprite(GB(pal, 0, PALETTE_WIDTH), ST_RECOLOUR) + 1);
|
||||||
_glTexSubImage1D(GL_TEXTURE_1D, 0, 0, 256, GL_RED, GL_UNSIGNED_BYTE, 0);
|
_glTexSubImage1D(GL_TEXTURE_1D, 0, 0, 256, GL_RED, GL_UNSIGNED_BYTE, nullptr);
|
||||||
|
|
||||||
_glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
_glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||||
|
|
||||||
|
@@ -41,11 +41,6 @@
|
|||||||
|
|
||||||
#include "../safeguards.h"
|
#include "../safeguards.h"
|
||||||
|
|
||||||
#ifdef __EMSCRIPTEN__
|
|
||||||
/** Whether we just had a window-enter event. */
|
|
||||||
static bool _cursor_new_in_window = false;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static std::string _editing_text;
|
static std::string _editing_text;
|
||||||
|
|
||||||
static void SetTextInputRect();
|
static void SetTextInputRect();
|
||||||
@@ -424,9 +419,9 @@ bool VideoDriver_SDL_Base::CreateMainSurface(uint w, uint h, bool resize)
|
|||||||
|
|
||||||
bool VideoDriver_SDL_Base::ClaimMousePointer()
|
bool VideoDriver_SDL_Base::ClaimMousePointer()
|
||||||
{
|
{
|
||||||
|
/* Emscripten never claims the pointer, so we do not need to change the cursor visibility. */
|
||||||
|
#ifndef __EMSCRIPTEN__
|
||||||
SDL_ShowCursor(0);
|
SDL_ShowCursor(0);
|
||||||
#ifdef __EMSCRIPTEN__
|
|
||||||
SDL_SetRelativeMouseMode(SDL_TRUE);
|
|
||||||
#endif
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -659,27 +654,9 @@ bool VideoDriver_SDL_Base::PollEvent()
|
|||||||
|
|
||||||
switch (ev.type) {
|
switch (ev.type) {
|
||||||
case SDL_MOUSEMOTION:
|
case SDL_MOUSEMOTION:
|
||||||
#ifdef __EMSCRIPTEN__
|
|
||||||
if (_cursor_new_in_window) {
|
|
||||||
/* The cursor just moved into the window; this means we don't
|
|
||||||
* know the absolutely position yet to move relative from.
|
|
||||||
* Before this time, SDL didn't know it either, and this is
|
|
||||||
* why we postpone it till now. Update the absolute position
|
|
||||||
* for this once, and work relative after. */
|
|
||||||
_cursor.pos.x = ev.motion.x;
|
|
||||||
_cursor.pos.y = ev.motion.y;
|
|
||||||
_cursor.dirty = true;
|
|
||||||
|
|
||||||
_cursor_new_in_window = false;
|
|
||||||
SDL_SetRelativeMouseMode(SDL_TRUE);
|
|
||||||
} else {
|
|
||||||
_cursor.UpdateCursorPositionRelative(ev.motion.xrel, ev.motion.yrel);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (_cursor.UpdateCursorPosition(ev.motion.x, ev.motion.y, true)) {
|
if (_cursor.UpdateCursorPosition(ev.motion.x, ev.motion.y, true)) {
|
||||||
SDL_WarpMouseInWindow(this->sdl_window, _cursor.pos.x, _cursor.pos.y);
|
SDL_WarpMouseInWindow(this->sdl_window, _cursor.pos.x, _cursor.pos.y);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
HandleMouseEvents();
|
HandleMouseEvents();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -814,9 +791,7 @@ bool VideoDriver_SDL_Base::PollEvent()
|
|||||||
// mouse entered the window, enable cursor
|
// mouse entered the window, enable cursor
|
||||||
_cursor.in_window = true;
|
_cursor.in_window = true;
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
/* Disable relative mouse mode for the first mouse motion,
|
/* Ensure pointer lock will not occur. */
|
||||||
* so we can pick up the absolutely position again. */
|
|
||||||
_cursor_new_in_window = true;
|
|
||||||
SDL_SetRelativeMouseMode(SDL_FALSE);
|
SDL_SetRelativeMouseMode(SDL_FALSE);
|
||||||
#endif
|
#endif
|
||||||
} else if (ev.window.event == SDL_WINDOWEVENT_LEAVE) {
|
} else if (ev.window.event == SDL_WINDOWEVENT_LEAVE) {
|
||||||
@@ -857,7 +832,9 @@ static const char *InitializeSDL()
|
|||||||
* UpdateWindowSurface() to update the window's texture instead of
|
* UpdateWindowSurface() to update the window's texture instead of
|
||||||
* its surface. */
|
* its surface. */
|
||||||
SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION, "0");
|
SDL_SetHint(SDL_HINT_FRAMEBUFFER_ACCELERATION, "0");
|
||||||
|
#ifndef __EMSCRIPTEN__
|
||||||
SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, "1");
|
SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_MODE_WARP, "1");
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Check if the video-driver is already initialized. */
|
/* Check if the video-driver is already initialized. */
|
||||||
if (SDL_WasInit(SDL_INIT_VIDEO) != 0) return nullptr;
|
if (SDL_WasInit(SDL_INIT_VIDEO) != 0) return nullptr;
|
||||||
@@ -926,7 +903,7 @@ void VideoDriver_SDL_Base::Stop()
|
|||||||
void VideoDriver_SDL_Base::InputLoop()
|
void VideoDriver_SDL_Base::InputLoop()
|
||||||
{
|
{
|
||||||
uint32 mod = SDL_GetModState();
|
uint32 mod = SDL_GetModState();
|
||||||
const Uint8 *keys = SDL_GetKeyboardState(NULL);
|
const Uint8 *keys = SDL_GetKeyboardState(nullptr);
|
||||||
|
|
||||||
bool old_ctrl_pressed = _ctrl_pressed;
|
bool old_ctrl_pressed = _ctrl_pressed;
|
||||||
bool old_shift_pressed = _shift_pressed;
|
bool old_shift_pressed = _shift_pressed;
|
||||||
|
@@ -106,6 +106,7 @@ enum ClientListWidgets {
|
|||||||
WID_CL_MATRIX, ///< Company/client list.
|
WID_CL_MATRIX, ///< Company/client list.
|
||||||
WID_CL_SCROLLBAR, ///< Scrollbar for company/client list.
|
WID_CL_SCROLLBAR, ///< Scrollbar for company/client list.
|
||||||
WID_CL_COMPANY_JOIN, ///< Used for QueryWindow when a company has a password.
|
WID_CL_COMPANY_JOIN, ///< Used for QueryWindow when a company has a password.
|
||||||
|
WID_CL_CLIENT_COMPANY_COUNT, ///< Count of clients and companies.
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Widgets of the #NetworkJoinStatusWindow class. */
|
/** Widgets of the #NetworkJoinStatusWindow class. */
|
||||||
|
Reference in New Issue
Block a user