diff options
-rw-r--r-- | src/group_cmd.cpp | 20 | ||||
-rw-r--r-- | src/group_gui.cpp | 2 |
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; } |