Files
@ r23033:8a2aa5b06604
Branch filter:
Location: cpp/openttd-patchpack/source/src/script/api/script_event.hpp
r23033:8a2aa5b06604
3.0 KiB
text/x-c++hdr
Fix: Only possible to build station next to competitors by using CTRL+click
Fix by checking only for stations owned by the current company when
inspecting if there are multiple adjoining stations to the one being built.
When building next to 2 or more owned stations we don't know which
station should be extended. For other companies' stations that's not a
problem since our station won't merge with theirs anyway.
Calling to BuildStationPart should never have another company's station
as a parameter to attach to unless the client is malicious, so just returning
a generic error in that case.
Fix by checking only for stations owned by the current company when
inspecting if there are multiple adjoining stations to the one being built.
When building next to 2 or more owned stations we don't know which
station should be extended. For other companies' stations that's not a
problem since our station won't merge with theirs anyway.
Calling to BuildStationPart should never have another company's station
as a parameter to attach to unless the client is malicious, so just returning
a generic error in that case.
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 | /* $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_event.hpp Everything to handle events from the game. */
#ifndef SCRIPT_EVENT_HPP
#define SCRIPT_EVENT_HPP
#include "script_object.hpp"
/**
* Class that handles all event related functions.
* You can lookup the type, and than convert it to the real event-class.
* That way you can request more detailed information about the event.
* @api ai game
*/
class ScriptEvent : public ScriptObject {
public:
/**
* The type of event. Needed to lookup the detailed class.
*/
enum ScriptEventType {
ET_INVALID = 0,
ET_TEST,
ET_SUBSIDY_OFFER,
ET_SUBSIDY_OFFER_EXPIRED,
ET_SUBSIDY_AWARDED,
ET_SUBSIDY_EXPIRED,
ET_ENGINE_PREVIEW,
ET_COMPANY_NEW,
ET_COMPANY_IN_TROUBLE,
ET_COMPANY_ASK_MERGER,
ET_COMPANY_MERGER,
ET_COMPANY_BANKRUPT,
ET_VEHICLE_CRASHED,
ET_VEHICLE_LOST,
ET_VEHICLE_WAITING_IN_DEPOT,
ET_VEHICLE_UNPROFITABLE,
ET_INDUSTRY_OPEN,
ET_INDUSTRY_CLOSE,
ET_ENGINE_AVAILABLE,
ET_STATION_FIRST_VEHICLE,
ET_DISASTER_ZEPPELINER_CRASHED,
ET_DISASTER_ZEPPELINER_CLEARED,
ET_TOWN_FOUNDED,
ET_AIRCRAFT_DEST_TOO_FAR,
ET_ADMIN_PORT,
ET_WINDOW_WIDGET_CLICK,
ET_GOAL_QUESTION_ANSWER,
ET_EXCLUSIVE_TRANSPORT_RIGHTS,
ET_ROAD_RECONSTRUCTION,
};
/**
* Constructor of ScriptEvent, to get the type of event.
*/
ScriptEvent(ScriptEvent::ScriptEventType type) :
type(type)
{}
/**
* Get the event-type.
* @return The @c ScriptEventType.
*/
ScriptEventType GetEventType() { return this->type; }
protected:
/**
* The type of this event.
*/
ScriptEventType type;
};
/**
* Class that handles all event related functions.
* @api ai game
* @note it is not needed to create an instance of ScriptEvent to access it, as
* all members are static, and all data is stored script instance-wide.
*/
class ScriptEventController : public ScriptObject {
public:
/**
* Check if there is an event waiting.
* @return true if there is an event on the stack.
*/
static bool IsEventWaiting();
/**
* Get the next event.
* @return a class of the event-child issues.
*/
static ScriptEvent *GetNextEvent();
/**
* Insert an event to the queue for the company.
* @param event The event to insert.
* @api -all
*/
static void InsertEvent(ScriptEvent *event);
/**
* Free the event pointer.
* @api -all
*/
static void FreeEventPointer();
private:
/**
* Create the event pointer.
*/
static void CreateEventPointer();
};
#endif /* SCRIPT_EVENT_HPP */
|