Files
@ r23043:1d97d12bf3bc
Branch filter:
Location: cpp/openttd-patchpack/source/src/script/api/script_goal.cpp - annotation
r23043:1d97d12bf3bc
6.3 KiB
text/x-c
Update: Translations from eints
italian: 2 changes by lorenzodv
italian: 2 changes by lorenzodv
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r22831:2d7a323f310a r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r20947:e99af07846a3 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r22831:2d7a323f310a r18772:80ffc4ed8122 r21383:942c32fb8b0e r21383:942c32fb8b0e r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18778:4848b0595531 r18772:80ffc4ed8122 r18778:4848b0595531 r18778:4848b0595531 r18872:35e831d058c7 r18778:4848b0595531 r20025:983c2ed8d329 r20025:983c2ed8d329 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r20947:e99af07846a3 r20947:e99af07846a3 r20947:e99af07846a3 r20947:e99af07846a3 r20947:e99af07846a3 r20947:e99af07846a3 r20947:e99af07846a3 r20947:e99af07846a3 r20947:e99af07846a3 r18772:80ffc4ed8122 r20025:983c2ed8d329 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18872:35e831d058c7 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18772:80ffc4ed8122 r18872:35e831d058c7 r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r20289:1f623493c20d r22831:2d7a323f310a r18872:35e831d058c7 r18872:35e831d058c7 r18872:35e831d058c7 r18872:35e831d058c7 r18872:35e831d058c7 r20025:983c2ed8d329 r20025:983c2ed8d329 r18872:35e831d058c7 r18962:69567f39810d r20912:595943d1a598 r18872:35e831d058c7 r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r18872:35e831d058c7 r18872:35e831d058c7 r18872:35e831d058c7 r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r22831:2d7a323f310a r18872:35e831d058c7 r18872:35e831d058c7 r18872:35e831d058c7 r18872:35e831d058c7 r18872:35e831d058c7 r18872:35e831d058c7 r18872:35e831d058c7 r18872:35e831d058c7 | /* $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_goal.cpp Implementation of ScriptGoal. */
#include "../../stdafx.h"
#include "script_game.hpp"
#include "script_goal.hpp"
#include "script_error.hpp"
#include "script_industry.hpp"
#include "script_map.hpp"
#include "script_town.hpp"
#include "script_story_page.hpp"
#include "../script_instance.hpp"
#include "../../goal_base.h"
#include "../../string_func.h"
#include "../../network/network_base.h"
#include "../../safeguards.h"
/* static */ bool ScriptGoal::IsValidGoal(GoalID goal_id)
{
return ::Goal::IsValidID(goal_id);
}
/* static */ ScriptGoal::GoalID ScriptGoal::New(ScriptCompany::CompanyID company, Text *goal, GoalType type, uint32 destination)
{
CCountedPtr<Text> counter(goal);
EnforcePrecondition(GOAL_INVALID, ScriptObject::GetCompany() == OWNER_DEITY);
EnforcePrecondition(GOAL_INVALID, goal != NULL);
const char *text = goal->GetEncodedText();
EnforcePreconditionEncodedText(GOAL_INVALID, text);
EnforcePrecondition(GOAL_INVALID, company == ScriptCompany::COMPANY_INVALID || ScriptCompany::ResolveCompanyID(company) != ScriptCompany::COMPANY_INVALID);
uint8 c = company;
if (company == ScriptCompany::COMPANY_INVALID) c = INVALID_COMPANY;
StoryPage *story_page = NULL;
if (type == GT_STORY_PAGE && ScriptStoryPage::IsValidStoryPage((ScriptStoryPage::StoryPageID)destination)) story_page = ::StoryPage::Get((ScriptStoryPage::StoryPageID)destination);
EnforcePrecondition(GOAL_INVALID, (type == GT_NONE && destination == 0) ||
(type == GT_TILE && ScriptMap::IsValidTile(destination)) ||
(type == GT_INDUSTRY && ScriptIndustry::IsValidIndustry(destination)) ||
(type == GT_TOWN && ScriptTown::IsValidTown(destination)) ||
(type == GT_COMPANY && ScriptCompany::ResolveCompanyID((ScriptCompany::CompanyID)destination) != ScriptCompany::COMPANY_INVALID) ||
(type == GT_STORY_PAGE && story_page != NULL && (c == INVALID_COMPANY ? story_page->company == INVALID_COMPANY : story_page->company == INVALID_COMPANY || story_page->company == c)));
if (!ScriptObject::DoCommand(0, type | (c << 8), destination, CMD_CREATE_GOAL, text, &ScriptInstance::DoCommandReturnGoalID)) return GOAL_INVALID;
/* In case of test-mode, we return GoalID 0 */
return (ScriptGoal::GoalID)0;
}
/* static */ bool ScriptGoal::Remove(GoalID goal_id)
{
EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY);
EnforcePrecondition(false, IsValidGoal(goal_id));
return ScriptObject::DoCommand(0, goal_id, 0, CMD_REMOVE_GOAL);
}
/* static */ bool ScriptGoal::SetText(GoalID goal_id, Text *goal)
{
CCountedPtr<Text> counter(goal);
EnforcePrecondition(false, IsValidGoal(goal_id));
EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY);
EnforcePrecondition(false, goal != NULL);
EnforcePrecondition(false, !StrEmpty(goal->GetEncodedText()));
return ScriptObject::DoCommand(0, goal_id, 0, CMD_SET_GOAL_TEXT, goal->GetEncodedText());
}
/* static */ bool ScriptGoal::SetProgress(GoalID goal_id, Text *progress)
{
CCountedPtr<Text> counter(progress);
EnforcePrecondition(false, IsValidGoal(goal_id));
EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY);
/* Ensure null as used for emtpy string. */
if (progress != NULL && StrEmpty(progress->GetEncodedText())) {
progress = NULL;
}
return ScriptObject::DoCommand(0, goal_id, 0, CMD_SET_GOAL_PROGRESS, progress != NULL ? progress->GetEncodedText() : NULL);
}
/* static */ bool ScriptGoal::SetCompleted(GoalID goal_id, bool completed)
{
EnforcePrecondition(false, IsValidGoal(goal_id));
EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY);
return ScriptObject::DoCommand(0, goal_id, completed ? 1 : 0, CMD_SET_GOAL_COMPLETED);
}
/* static */ bool ScriptGoal::IsCompleted(GoalID goal_id)
{
EnforcePrecondition(false, IsValidGoal(goal_id));
EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY);
Goal *g = Goal::Get(goal_id);
return g != NULL && g->completed;
}
/* static */ bool ScriptGoal::DoQuestion(uint16 uniqueid, uint8 target, bool is_client, Text *question, QuestionType type, int buttons)
{
CCountedPtr<Text> counter(question);
EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY);
EnforcePrecondition(false, question != NULL);
const char *text = question->GetEncodedText();
EnforcePreconditionEncodedText(false, text);
EnforcePrecondition(false, CountBits(buttons) >= 1 && CountBits(buttons) <= 3);
EnforcePrecondition(false, buttons < (1 << ::GOAL_QUESTION_BUTTON_COUNT));
EnforcePrecondition(false, (int)type < ::GOAL_QUESTION_TYPE_COUNT);
return ScriptObject::DoCommand(0, uniqueid | (target << 16) | (type << 24) | (is_client ? (1 << 31) : 0), buttons, CMD_GOAL_QUESTION, text);
}
/* static */ bool ScriptGoal::Question(uint16 uniqueid, ScriptCompany::CompanyID company, Text *question, QuestionType type, int buttons)
{
EnforcePrecondition(false, company == ScriptCompany::COMPANY_INVALID || ScriptCompany::ResolveCompanyID(company) != ScriptCompany::COMPANY_INVALID);
uint8 c = company;
if (company == ScriptCompany::COMPANY_INVALID) c = INVALID_COMPANY;
return DoQuestion(uniqueid, c, false, question, type, buttons);
}
/* static */ bool ScriptGoal::QuestionClient(uint16 uniqueid, ScriptClient::ClientID client, Text *question, QuestionType type, int buttons)
{
EnforcePrecondition(false, ScriptGame::IsMultiplayer());
EnforcePrecondition(false, ScriptClient::ResolveClientID(client) != ScriptClient::CLIENT_INVALID);
#ifdef ENABLE_NETWORK
ClientIndex c = NetworkClientInfo::GetByClientID((::ClientID)client)->index;
return DoQuestion(uniqueid, c, true, question, type, buttons);
#else
return false;
#endif
}
/* static */ bool ScriptGoal::CloseQuestion(uint16 uniqueid)
{
EnforcePrecondition(false, ScriptObject::GetCompany() == OWNER_DEITY);
return ScriptObject::DoCommand(0, uniqueid, 0, CMD_GOAL_QUESTION_ANSWER);
}
|