Changeset - r18769:52b4e8d83a42
[Not reviewed]
master
0 10 4
truebrain - 12 years ago 2011-12-19 21:01:03
truebrain@openttd.org
(svn r23627) -Add: ScriptNews::Create, to create custom news messages (GameScript only)
14 files changed with 262 insertions and 0 deletions:
0 comments (0 inline, 0 general)
projects/openttd_vs100.vcxproj
Show inline comments
 
@@ -958,6 +958,7 @@
 
    <ClInclude Include="..\src\script\api\script_log.hpp" />
 
    <ClInclude Include="..\src\script\api\script_map.hpp" />
 
    <ClInclude Include="..\src\script\api\script_marine.hpp" />
 
    <ClInclude Include="..\src\script\api\script_news.hpp" />
 
    <ClInclude Include="..\src\script\api\script_object.hpp" />
 
    <ClInclude Include="..\src\script\api\script_order.hpp" />
 
    <ClInclude Include="..\src\script\api\script_rail.hpp" />
 
@@ -1013,6 +1014,7 @@
 
    <ClCompile Include="..\src\script\api\script_log.cpp" />
 
    <ClCompile Include="..\src\script\api\script_map.cpp" />
 
    <ClCompile Include="..\src\script\api\script_marine.cpp" />
 
    <ClCompile Include="..\src\script\api\script_news.cpp" />
 
    <ClCompile Include="..\src\script\api\script_object.cpp" />
 
    <ClCompile Include="..\src\script\api\script_order.cpp" />
 
    <ClCompile Include="..\src\script\api\script_rail.cpp" />
projects/openttd_vs100.vcxproj.filters
Show inline comments
 
@@ -2103,6 +2103,9 @@
 
    <ClInclude Include="..\src\script\api\script_marine.hpp">
 
      <Filter>Script API</Filter>
 
    </ClInclude>
 
    <ClInclude Include="..\src\script\api\script_news.hpp">
 
      <Filter>Script API</Filter>
 
    </ClInclude>
 
    <ClInclude Include="..\src\script\api\script_object.hpp">
 
      <Filter>Script API</Filter>
 
    </ClInclude>
 
@@ -2268,6 +2271,9 @@
 
    <ClCompile Include="..\src\script\api\script_marine.cpp">
 
      <Filter>Script API Implementation</Filter>
 
    </ClCompile>
 
    <ClCompile Include="..\src\script\api\script_news.cpp">
 
      <Filter>Script API Implementation</Filter>
 
    </ClCompile>
 
    <ClCompile Include="..\src\script\api\script_object.cpp">
 
      <Filter>Script API Implementation</Filter>
 
    </ClCompile>
projects/openttd_vs80.vcproj
Show inline comments
 
@@ -3167,6 +3167,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\script\api\script_news.hpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\script\api\script_object.hpp"
 
				>
 
			</File>
 
@@ -3391,6 +3395,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\script\api\script_news.cpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\script\api\script_object.cpp"
 
				>
 
			</File>
projects/openttd_vs90.vcproj
Show inline comments
 
@@ -3164,6 +3164,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\script\api\script_news.hpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\script\api\script_object.hpp"
 
				>
 
			</File>
 
@@ -3388,6 +3392,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\script\api\script_news.cpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\script\api\script_object.cpp"
 
				>
 
			</File>
source.list
Show inline comments
 
@@ -736,6 +736,7 @@ script/api/script_list.hpp
 
script/api/script_log.hpp
 
script/api/script_map.hpp
 
script/api/script_marine.hpp
 
script/api/script_news.hpp
 
script/api/script_object.hpp
 
script/api/script_order.hpp
 
script/api/script_rail.hpp
 
@@ -793,6 +794,7 @@ script/api/script_list.cpp
 
script/api/script_log.cpp
 
script/api/script_map.cpp
 
script/api/script_marine.cpp
 
script/api/script_news.cpp
 
script/api/script_object.cpp
 
script/api/script_order.cpp
 
script/api/script_rail.cpp
src/command.cpp
Show inline comments
 
@@ -148,6 +148,7 @@ CommandProc CmdBuildCanal;
 
CommandProc CmdBuildLock;
 

	
 
CommandProc CmdCompanyCtrl;
 
CommandProc CmdCustomNewsItem;
 

	
 
CommandProc CmdLevelLand;
 

	
 
@@ -282,6 +283,7 @@ static const Command _command_proc_table
 
	DEF_CMD(CmdMoneyCheat,                           CMD_OFFLINE, CMDT_CHEAT                 ), // CMD_MONEY_CHEAT
 
	DEF_CMD(CmdBuildCanal,                              CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_BUILD_CANAL
 
	DEF_CMD(CmdCompanyCtrl,        CMD_SPECTATOR | CMD_CLIENT_ID, CMDT_SERVER_SETTING        ), // CMD_COMPANY_CTRL
 
	DEF_CMD(CmdCustomNewsItem,                         CMD_DEITY, CMDT_OTHER_MANAGEMENT      ), // CMD_CUSTOM_NEWS_ITEM
 

	
 
	DEF_CMD(CmdLevelLand, CMD_ALL_TILES | CMD_NO_TEST | CMD_AUTO, CMDT_LANDSCAPE_CONSTRUCTION), // CMD_LEVEL_LAND; test run might clear tiles multiple times, in execution that only happens once
 

	
src/command_type.h
Show inline comments
 
@@ -262,6 +262,7 @@ enum Commands {
 
	CMD_BUILD_CANAL,                  ///< build a canal
 

	
 
	CMD_COMPANY_CTRL,                 ///< used in multiplayer to create a new companies etc.
 
	CMD_CUSTOM_NEWS_ITEM,             ///< create a custom news message
 
	CMD_LEVEL_LAND,                   ///< level land
 

	
 
	CMD_BUILD_LOCK,                   ///< build a lock
src/game/game_instance.cpp
Show inline comments
 
@@ -53,6 +53,7 @@
 
#include "../script/api/game/game_log.hpp.sq"
 
#include "../script/api/game/game_map.hpp.sq"
 
#include "../script/api/game/game_marine.hpp.sq"
 
#include "../script/api/game/game_news.hpp.sq"
 
#include "../script/api/game/game_rail.hpp.sq"
 
#include "../script/api/game/game_railtypelist.hpp.sq"
 
#include "../script/api/game/game_road.hpp.sq"
 
@@ -141,6 +142,7 @@ void GameInstance::RegisterAPI()
 
	SQGSLog_Register(this->engine);
 
	SQGSMap_Register(this->engine);
 
	SQGSMarine_Register(this->engine);
 
	SQGSNews_Register(this->engine);
 
	SQGSRail_Register(this->engine);
 
	SQGSRailTypeList_Register(this->engine);
 
	SQGSRoad_Register(this->engine);
src/lang/english.txt
Show inline comments
 
@@ -749,6 +749,8 @@ STR_NEWS_MESSAGE_TYPE_CHANGES_OF_CARGO_A
 
STR_NEWS_MESSAGE_TYPE_SUBSIDIES                                 :{YELLOW}Subsidies
 
STR_NEWS_MESSAGE_TYPE_GENERAL_INFORMATION                       :{YELLOW}General information
 

	
 
STR_NEWS_CUSTOM_ITEM                                            :{BIG_FONT}{BLACK}{RAW_STRING}
 

	
 
STR_NEWS_FIRST_TRAIN_ARRIVAL                                    :{BIG_FONT}{BLACK}Citizens celebrate . . .{}First train arrives at {STATION}!
 
STR_NEWS_FIRST_BUS_ARRIVAL                                      :{BIG_FONT}{BLACK}Citizens celebrate . . .{}First bus arrives at {STATION}!
 
STR_NEWS_FIRST_TRUCK_ARRIVAL                                    :{BIG_FONT}{BLACK}Citizens celebrate . . .{}First truck arrives at {STATION}!
src/news_gui.cpp
Show inline comments
 
@@ -31,6 +31,8 @@
 
#include "engine_base.h"
 
#include "engine_gui.h"
 
#include "core/geometry_func.hpp"
 
#include "command_func.h"
 
#include "company_base.h"
 

	
 
#include "widgets/news_widget.h"
 

	
 
@@ -707,6 +709,70 @@ void AddNewsItem(StringID string, NewsSu
 
	SetWindowDirty(WC_MESSAGE_HISTORY, 0);
 
}
 

	
 
/**
 
 * Create a new custom news item.
 
 * @param tile unused
 
 * @param flags type of operation
 
 * @param p1 various bitstuffed elements
 
 * - p1 = (bit  0 -  7) - NewsSubtype of the message.
 
 * - p1 = (bit  8 - 15) - NewsReferenceType of first reference.
 
 * - p1 = (bit 16 - 23) - Company this news message is for.
 
 * @param p2 First reference of the news message.
 
 * @param text The text of the news message.
 
 * @return the cost of this operation or an error
 
 */
 
CommandCost CmdCustomNewsItem(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
 
{
 
	if (_current_company != OWNER_DEITY) return CMD_ERROR;
 

	
 
	NewsSubtype subtype = (NewsSubtype)GB(p1, 0, 8);
 
	NewsReferenceType reftype1 = (NewsReferenceType)GB(p1, 8, 8);
 
	CompanyID company = (CompanyID)GB(p1, 16, 8);
 

	
 
	if (company != INVALID_OWNER && !Company::IsValidID(company)) return CMD_ERROR;
 
	if (subtype >= NS_END) return CMD_ERROR;
 
	if (StrEmpty(text)) return CMD_ERROR;
 

	
 
	switch (reftype1) {
 
		case NR_NONE: break;
 
		case NR_TILE:
 
			if (!IsValidTile(p2)) return CMD_ERROR;
 
			break;
 

	
 
		case NR_VEHICLE:
 
			if (!Vehicle::IsValidID(p2)) return CMD_ERROR;
 
			break;
 

	
 
		case NR_STATION:
 
			if (!Station::IsValidID(p2)) return CMD_ERROR;
 
			break;
 

	
 
		case NR_INDUSTRY:
 
			if (!Industry::IsValidID(p2)) return CMD_ERROR;
 
			break;
 

	
 
		case NR_TOWN:
 
			if (!Town::IsValidID(p2)) return CMD_ERROR;
 
			break;
 

	
 
		case NR_ENGINE:
 
			if (!Engine::IsValidID(p2)) return CMD_ERROR;
 
			break;
 

	
 
		default: return CMD_ERROR;
 
	}
 

	
 
	if (company != INVALID_OWNER && company != _local_company) return CommandCost();
 

	
 
	if (flags & DC_EXEC) {
 
		char *news = strdup(text);
 
		SetDParamStr(0, news);
 
		AddNewsItem(STR_NEWS_CUSTOM_ITEM, subtype, reftype1, p2, NR_NONE, UINT32_MAX, news);
 
	}
 

	
 
	return CommandCost();
 
}
 

	
 
/** Delete a news item from the queue */
 
static void DeleteNewsItem(NewsItem *ni)
 
{
src/script/api/game/game_news.hpp.sq
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */
 

	
 
#include "../script_news.hpp"
 
#include "../template/template_news.hpp.sq"
 

	
 

	
 
template <> const char *GetClassName<ScriptNews, ST_GS>() { return "GSNews"; }
 

	
 
void SQGSNews_Register(Squirrel *engine)
 
{
 
	DefSQClass<ScriptNews, ST_GS> SQGSNews("GSNews");
 
	SQGSNews.PreRegister(engine);
 
	SQGSNews.AddConstructor<void (ScriptNews::*)(), 1>(engine, "x");
 

	
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_ARRIVAL_COMPANY,  "NT_ARRIVAL_COMPANY");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_ARRIVAL_OTHER,    "NT_ARRIVAL_OTHER");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_ACCIDENT,         "NT_ACCIDENT");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_COMPANY_TROUBLE,  "NT_COMPANY_TROUBLE");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_COMPANY_MERGER,   "NT_COMPANY_MERGER");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_COMPANY_BANKRUPT, "NT_COMPANY_BANKRUPT");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_COMPANY_NEW,      "NT_COMPANY_NEW");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_INDUSTRY_OPEN,    "NT_INDUSTRY_OPEN");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_INDUSTRY_CLOSE,   "NT_INDUSTRY_CLOSE");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_ECONOMY,          "NT_ECONOMY");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_INDUSTRY_COMPANY, "NT_INDUSTRY_COMPANY");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_INDUSTRY_OTHER,   "NT_INDUSTRY_OTHER");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_INDUSTRY_NOBODY,  "NT_INDUSTRY_NOBODY");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_ADVICE,           "NT_ADVICE");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_NEW_VEHICLES,     "NT_NEW_VEHICLES");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_ACCEPTANCE,       "NT_ACCEPTANCE");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_SUBSIDIES,        "NT_SUBSIDIES");
 
	SQGSNews.DefSQConst(engine, ScriptNews::NT_GENERAL,          "NT_GENERAL");
 

	
 
	SQGSNews.DefSQStaticMethod(engine, &ScriptNews::Create, "Create", 4, ".i.i");
 

	
 
	SQGSNews.PostRegister(engine);
 
}
src/script/api/script_news.cpp
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file script_news.cpp Implementation of ScriptNews. */
 

	
 
#include "../../stdafx.h"
 
#include "script_news.hpp"
 
#include "script_error.hpp"
 
#include "../../news_func.h"
 
#include "../../strings_func.h"
 
#include "../../command_type.h"
 
#include "../../string_func.h"
 
#include "table/strings.h"
 

	
 
/* static */ bool ScriptNews::Create(NewsType type, const char *text, ScriptCompany::CompanyID company)
 
{
 
	EnforcePrecondition(false, !StrEmpty(text));
 
	EnforcePrecondition(false, type >= NT_ARRIVAL_COMPANY && type <= NT_GENERAL);
 
	EnforcePrecondition(false, company == ScriptCompany::COMPANY_INVALID || ScriptCompany::ResolveCompanyID(company) != ScriptCompany::COMPANY_INVALID);
 

	
 
	uint8 c = company;
 
	if (company == ScriptCompany::COMPANY_INVALID) c = INVALID_COMPANY;
 

	
 
	return ScriptObject::DoCommand(0, type | (NR_NONE << 8) | (c << 16), 0, CMD_CUSTOM_NEWS_ITEM, text);
 
}
src/script/api/script_news.hpp
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file script_news.hpp Everything to handle news messages. */
 

	
 
#ifndef SCRIPT_NEWS_HPP
 
#define SCRIPT_NEWS_HPP
 

	
 
#include "script_company.hpp"
 
#include "../../news_type.h"
 

	
 
/**
 
 * Class that handles news messages.
 
 * @api game
 
 */
 
class ScriptNews : public ScriptObject {
 
public:
 
	/**
 
	 * Enumeration for corners of tiles.
 
	 */
 
	enum NewsType {
 
		/* Note: these values represent part of the in-game NewsSubtype enum */
 
		NT_ARRIVAL_COMPANY   = ::NS_ARRIVAL_COMPANY,  ///< Category arrival for own company.
 
		NT_ARRIVAL_OTHER     = ::NS_ARRIVAL_OTHER,    ///< Category arrival for other companies.
 
		NT_ACCIDENT          = ::NS_ACCIDENT,         ///< Category accident.
 
		NT_COMPANY_TROUBLE   = ::NS_COMPANY_TROUBLE,  ///< Category company in trouble.
 
		NT_COMPANY_MERGER    = ::NS_COMPANY_MERGER,   ///< Category company merger.
 
		NT_COMPANY_BANKRUPT  = ::NS_COMPANY_BANKRUPT, ///< Category company bankrupt.
 
		NT_COMPANY_NEW       = ::NS_COMPANY_NEW,      ///< Category company new.
 
		NT_INDUSTRY_OPEN     = ::NS_INDUSTRY_OPEN,    ///< Category industry open.
 
		NT_INDUSTRY_CLOSE    = ::NS_INDUSTRY_CLOSE,   ///< Category industry close.
 
		NT_ECONOMY           = ::NS_ECONOMY,          ///< Category economy.
 
		NT_INDUSTRY_COMPANY  = ::NS_INDUSTRY_COMPANY, ///< Category industry changes for own company.
 
		NT_INDUSTRY_OTHER    = ::NS_INDUSTRY_OTHER,   ///< Category industry changes for other companies.
 
		NT_INDUSTRY_NOBODY   = ::NS_INDUSTRY_NOBODY,  ///< Category industry changes for nobody.
 
		NT_ADVICE            = ::NS_ADVICE,           ///< Category advice.
 
		NT_NEW_VEHICLES      = ::NS_NEW_VEHICLES,     ///< Category new vehicle.
 
		NT_ACCEPTANCE        = ::NS_ACCEPTANCE,       ///< Category acceptance changes.
 
		NT_SUBSIDIES         = ::NS_SUBSIDIES,        ///< Category subsidies.
 
		NT_GENERAL           = ::NS_GENERAL,          ///< Category general.
 
	};
 

	
 
	/**
 
	 * Create a news messages for a company.
 
	 * @param type The type of the news.
 
	 * @param text The text message to show.
 
	 * @param company The company, or COMPANY_INVALID for all companies.
 
	 * @return True if the action succeeded.
 
	 * @pre text != NULL.
 
	 * @pre company == COMPANY_INVALID || ResolveCompanyID(company) != COMPANY_INVALID.
 
	 */
 
	static bool Create(NewsType type, const char *text, ScriptCompany::CompanyID company);
 
};
 

	
 
#endif /* SCRIPT_NEWS_HPP */
src/script/api/template/template_news.hpp.sq
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */
 

	
 
#include "../script_news.hpp"
 

	
 
namespace SQConvert {
 
	/* Allow enums to be used as Squirrel parameters */
 
	template <> inline ScriptNews::NewsType GetParam(ForceType<ScriptNews::NewsType>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (ScriptNews::NewsType)tmp; }
 
	template <> inline int Return<ScriptNews::NewsType>(HSQUIRRELVM vm, ScriptNews::NewsType res) { sq_pushinteger(vm, (int32)res); return 1; }
 

	
 
	/* Allow ScriptNews to be used as Squirrel parameter */
 
	template <> inline ScriptNews *GetParam(ForceType<ScriptNews *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (ScriptNews *)instance; }
 
	template <> inline ScriptNews &GetParam(ForceType<ScriptNews &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptNews *)instance; }
 
	template <> inline const ScriptNews *GetParam(ForceType<const ScriptNews *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return  (ScriptNews *)instance; }
 
	template <> inline const ScriptNews &GetParam(ForceType<const ScriptNews &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(ScriptNews *)instance; }
 
	template <> inline int Return<ScriptNews *>(HSQUIRRELVM vm, ScriptNews *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "News", res, NULL, DefSQDestructorCallback<ScriptNews>, true); return 1; }
 
} // namespace SQConvert
0 comments (0 inline, 0 general)