("What the heck, why did this asshole come back," I hear you saying.
Shhhhhhhh.)
In GPTP, I'd like to create a
void select(CPlayer*, CPlayer**)
which causes the indicated player to select the indicated units (and deselect all other units). This would need to function properly in multiplayer; it would be great if it would also work in singleplayer, but that's less of a priority. Maybe I'm just blind, but I don't see anything that obviously causes units to be selected. Some of the functions in selection.cpp look promising, but I can't figure out how they determine which player selects the new units...
If that isn't possible (yet), workarounds are also welcome. The intended use case is specifically for a button, if that helps.
None.
I think that calling the function applyNewSelect_Sub_6FA00 which is in hooks/interface/selection.cpp should do all that you are asking for: Select units, play sounds and send network commands to keep things in sync.
In general none those functions take a player id since they operate on the local player's selection - network commands that change other players' selections don't even exist.
None.
For a button, I guess you would "borrow" one of the RECV functions in hooks/recv_commands/, so that you can use the corresponding button behavior as a base, making a "if" condition to check if the unit calling the function is the one you want, then use the code in hooks/interface/selection.cpp as a reference to see how to create a new selection.edit: sorry, wrong idea, I just realized that this could lead to modifying selection for all players :><:
Post has been edited 1 time(s), last time on May 8 2018, 9:35 pm by UndeadStar.
I just added select_larva hooks in Version 4.026 of GPTP.
I hope it can help.
If I'm reading this correctly, more or less any "click this to select foo" could be implemented by looking at activePortraitUnit to determine the proper behavior. That's really cool!!
One last question, if that's alright? It looks like that hook only gets run on the client where the button was actually pushed, so clientSelectionGroup and friends should be safe to use there. Is that correct, or am I mistaken and it'd desync?
Sorry for the dumb questions, haha ;^; It's just, desyncs are obviously hard to test with only one computer...
None.
If I'm reading this correctly, more or less any "click this to select foo" could be implemented by looking at activePortraitUnit to determine the proper behavior. That's really cool!!
One last question, if that's alright? It looks like that hook only gets run on the client where the button was actually pushed, so clientSelectionGroup and friends should be safe to use there. Is that correct, or am I mistaken and it'd desync?
Sorry for the dumb questions, haha ;^; It's just, desyncs are obviously hard to test with only one computer...
It may desync.
As mentioned in the comments of the hook, while it's not appearing directly on the hook, there's a command that is queued and sent to all players.
I think there's an array somewhere that is something like allSelections[8 (nb of players)][SELECTION_ARRAY_LENGTH] storing the selections for all players, and would be the target of that broadcast.
I don't know how the game set in sync the selections at that point.
edit:
Select Larva hooks had issues that got fixed in Version 4.027
Post has been edited 2 time(s), last time on Jun 8 2018, 12:37 pm by UndeadStar.