00001
00002
00003
00004
00005
00006
00007
00008
00009
00012 #include "../../stdafx.h"
00013 #include "script_group.hpp"
00014 #include "script_engine.hpp"
00015 #include "../script_instance.hpp"
00016 #include "../../company_func.h"
00017 #include "../../group.h"
00018 #include "../../string_func.h"
00019 #include "../../strings_func.h"
00020 #include "../../autoreplace_func.h"
00021 #include "../../settings_func.h"
00022 #include "table/strings.h"
00023
00024 bool ScriptGroup::IsValidGroup(GroupID group_id)
00025 {
00026 const Group *g = ::Group::GetIfValid(group_id);
00027 return g != NULL && g->owner == _current_company;
00028 }
00029
00030 ScriptGroup::GroupID ScriptGroup::CreateGroup(ScriptVehicle::VehicleType vehicle_type)
00031 {
00032 if (!ScriptObject::DoCommand(0, (::VehicleType)vehicle_type, 0, CMD_CREATE_GROUP, NULL, &ScriptInstance::DoCommandReturnGroupID)) return GROUP_INVALID;
00033
00034
00035 return (ScriptGroup::GroupID)0;
00036 }
00037
00038 bool ScriptGroup::DeleteGroup(GroupID group_id)
00039 {
00040 EnforcePrecondition(false, IsValidGroup(group_id));
00041
00042 return ScriptObject::DoCommand(0, group_id, 0, CMD_DELETE_GROUP);
00043 }
00044
00045 ScriptVehicle::VehicleType ScriptGroup::GetVehicleType(GroupID group_id)
00046 {
00047 if (!IsValidGroup(group_id)) return ScriptVehicle::VT_INVALID;
00048
00049 return (ScriptVehicle::VehicleType)((::VehicleType)::Group::Get(group_id)->vehicle_type);
00050 }
00051
00052 bool ScriptGroup::SetName(GroupID group_id, const char *name)
00053 {
00054 EnforcePrecondition(false, IsValidGroup(group_id));
00055 EnforcePrecondition(false, !::StrEmpty(name));
00056 EnforcePreconditionCustomError(false, ::Utf8StringLength(name) < MAX_LENGTH_GROUP_NAME_CHARS, ScriptError::ERR_PRECONDITION_STRING_TOO_LONG);
00057
00058 return ScriptObject::DoCommand(0, group_id, 0, CMD_RENAME_GROUP, name);
00059 }
00060
00061 char *ScriptGroup::GetName(GroupID group_id)
00062 {
00063 if (!IsValidGroup(group_id)) return NULL;
00064
00065 static const int len = 64;
00066 char *group_name = MallocT<char>(len);
00067
00068 ::SetDParam(0, group_id);
00069 ::GetString(group_name, STR_GROUP_NAME, &group_name[len - 1]);
00070 return group_name;
00071 }
00072
00073 bool ScriptGroup::EnableAutoReplaceProtection(GroupID group_id, bool enable)
00074 {
00075 EnforcePrecondition(false, IsValidGroup(group_id));
00076
00077 return ScriptObject::DoCommand(0, group_id, enable ? 1 : 0, CMD_SET_GROUP_REPLACE_PROTECTION);
00078 }
00079
00080 bool ScriptGroup::GetAutoReplaceProtection(GroupID group_id)
00081 {
00082 if (!IsValidGroup(group_id)) return false;
00083
00084 return ::Group::Get(group_id)->replace_protection;
00085 }
00086
00087 int32 ScriptGroup::GetNumEngines(GroupID group_id, EngineID engine_id)
00088 {
00089 if (!IsValidGroup(group_id) && group_id != GROUP_DEFAULT && group_id != GROUP_ALL) return -1;
00090
00091 return GetGroupNumEngines(_current_company, group_id, engine_id);
00092 }
00093
00094 bool ScriptGroup::MoveVehicle(GroupID group_id, VehicleID vehicle_id)
00095 {
00096 EnforcePrecondition(false, IsValidGroup(group_id) || group_id == GROUP_DEFAULT);
00097 EnforcePrecondition(false, ScriptVehicle::IsValidVehicle(vehicle_id));
00098
00099 return ScriptObject::DoCommand(0, group_id, vehicle_id, CMD_ADD_VEHICLE_GROUP);
00100 }
00101
00102 bool ScriptGroup::EnableWagonRemoval(bool enable_removal)
00103 {
00104 if (HasWagonRemoval() == enable_removal) return true;
00105
00106 return ScriptObject::DoCommand(0, ::GetCompanySettingIndex("company.renew_keep_length"), enable_removal ? 1 : 0, CMD_CHANGE_COMPANY_SETTING);
00107 }
00108
00109 bool ScriptGroup::HasWagonRemoval()
00110 {
00111 return ::Company::Get(_current_company)->settings.renew_keep_length;
00112 }
00113
00114 bool ScriptGroup::SetAutoReplace(GroupID group_id, EngineID engine_id_old, EngineID engine_id_new)
00115 {
00116 EnforcePrecondition(false, IsValidGroup(group_id) || group_id == GROUP_DEFAULT || group_id == GROUP_ALL);
00117 EnforcePrecondition(false, ScriptEngine::IsBuildable(engine_id_new));
00118
00119 return ScriptObject::DoCommand(0, group_id << 16, (engine_id_new << 16) | engine_id_old, CMD_SET_AUTOREPLACE);
00120 }
00121
00122 EngineID ScriptGroup::GetEngineReplacement(GroupID group_id, EngineID engine_id)
00123 {
00124 if (!IsValidGroup(group_id) && group_id != GROUP_DEFAULT && group_id != GROUP_ALL) return ::INVALID_ENGINE;
00125
00126 return ::EngineReplacementForCompany(Company::Get(_current_company), engine_id, group_id);
00127 }
00128
00129 bool ScriptGroup::StopAutoReplace(GroupID group_id, EngineID engine_id)
00130 {
00131 EnforcePrecondition(false, IsValidGroup(group_id) || group_id == GROUP_DEFAULT || group_id == GROUP_ALL);
00132
00133 return ScriptObject::DoCommand(0, group_id << 16, (::INVALID_ENGINE << 16) | engine_id, CMD_SET_AUTOREPLACE);
00134 }