In my current project, a structure (Cerebrate Daggoth) has been modified to be able to produce units. Thanks to EXE edits, I've gotten everything working, except issuing a right-click order doesn't do anything. Ideally, it would function like any other production structure, and update the rally point on right-click instead of the player having to press 'r' or click on the ability in order to accomplish this. I have messed with EXE edits regarding rally points but to no avail.
Hopefully solving this answers a second question: is there anything that would stop rally point functionality from being given to zerg eggs and cocoons? I would like them to overwrite hatchery/lair/hive rally points (which should be no different than 'updating' the rally point), so players are able to rally onto resources for their drones and manually rally their military units to a different area of the map.

ALL PRAISE YOUR SUPREME LORD CORBO
It is my understanding that the rally order is pretty hardcoded. Have you done this before for another building/unit?
Couple of things in my mind. Check "is building" flag, give it a rally order button, check "can create units/is factory" dat requirements... unsure.
fuck you all
Yes, all of that is done. Rally point functions properly, but right-clicking doesn't issue it.
Thanks to EXE edits, I've gotten everything working, except issuing a right-click order doesn't do anything
I think this can be done with the Rally Point Exe Edit enabled. ('Allow All Buildings to Rally' and 'Use units.dat group flags for factories'). Also set the 'Factory' flag for that building in units.dat Group Flags.
If that doesn't work, disable all plugins to check if that requires other mofications than the Exe Edits (If that's the case, I could take a look in GPTP to help you with that if you want).
is there anything that would stop rally point functionality from being given to zerg eggs and cocoons?
The only fix I can think to that is to modify the orderNewUnitToRally() call in the GPTP's unit_morph hook (unit_morph.cpp) if the unit is an egg/cocoon (line 94).
if(
unit->previousUnitType != UnitId::ZergCocoon &&
unit->previousUnitType != UnitId::ZergLurkerEgg
)
{
CUnit *rallyTarget; //Unit wich selects the rally destination
// Check if the unit has rally point different than itself
bool hasRally = (unit->rally.pt.x != unit->getX());
// If the unit has a valid rally point, use it
if((unit->rally.unit && unit->rally.unit != unit)
|| hasRally)
{
rallyTarget = unit;
}
else
{
rallyTarget = unit->connectedUnit;
}
// Normal behaviour-ish
orderNewUnitToRally(unit, rallyTarget);
if(unit2 != NULL)
{
orderNewUnitToRally(unit2, rallyTarget);
}
}
Maybe that could do the job. The only problem with this approach is that sometimes the zerg egg sets the connectedUnit (Lair, Hive, Hatchery) as the rally target when created. That's a weird behaviour from the original engine.