summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/group_cmd.cpp20
-rw-r--r--src/group_gui.cpp2
2 files changed, 17 insertions, 5 deletions
diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp
index 29dc17edd..b6590bc8f 100644
--- a/src/group_cmd.cpp
+++ b/src/group_cmd.cpp
@@ -311,7 +311,7 @@ Group::~Group()
* @param tile unused
* @param flags type of operation
* @param p1 vehicle type
- * @param p2 unused
+ * @param p2 parent groupid
* @param text unused
* @return the cost of this operation or an error
*/
@@ -322,15 +322,27 @@ CommandCost CmdCreateGroup(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
if (!Group::CanAllocateItem()) return CMD_ERROR;
+ const Group *pg = Group::GetIfValid(GB(p2, 0, 16));
+ if (pg != NULL) {
+ if (pg->owner != _current_company) return CMD_ERROR;
+ if (pg->vehicle_type != vt) return CMD_ERROR;
+ }
+
if (flags & DC_EXEC) {
Group *g = new Group(_current_company);
g->replace_protection = false;
g->vehicle_type = vt;
g->parent = INVALID_GROUP;
- const Company *c = Company::Get(_current_company);
- g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
- g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
+ if (pg == NULL) {
+ const Company *c = Company::Get(_current_company);
+ g->livery.colour1 = c->livery[LS_DEFAULT].colour1;
+ g->livery.colour2 = c->livery[LS_DEFAULT].colour2;
+ } else {
+ g->parent = pg->index;
+ g->livery.colour1 = pg->livery.colour1;
+ g->livery.colour2 = pg->livery.colour2;
+ }
_new_group_id = g->index;
diff --git a/src/group_gui.cpp b/src/group_gui.cpp
index ce607c326..b5f33ff52 100644
--- a/src/group_gui.cpp
+++ b/src/group_gui.cpp
@@ -687,7 +687,7 @@ public:
}
case WID_GL_CREATE_GROUP: { // Create a new group
- DoCommandP(0, this->vli.vtype, 0, CMD_CREATE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_CREATE), CcCreateGroup);
+ DoCommandP(0, this->vli.vtype, this->vli.index, CMD_CREATE_GROUP | CMD_MSG(STR_ERROR_GROUP_CAN_T_CREATE), CcCreateGroup);
break;
}