Staredit Network > Forums > Modding Assistance > Topic: Set player selection (in multiplayer)
Set player selection (in multiplayer)
May 7 2018, 6:39 pm
By: Biophysicist  

May 7 2018, 6:39 pm Biophysicist Post #1



("What the heck, why did this asshole come back," I hear you saying. Shhhhhhhh.)

In GPTP, I'd like to create a
Code
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.

May 7 2018, 7:36 pm Neiv Post #2



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.

May 8 2018, 9:28 pm UndeadStar Post #3



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.




May 9 2018, 12:01 am Biophysicist Post #4



Quote from Neiv
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.

I'll give it a shot!



None.

May 10 2018, 1:19 pm UndeadStar Post #5



I just added select_larva hooks in Version 4.026 of GPTP.
I hope it can help.




May 10 2018, 4:11 pm KYSXD Post #6



Quote from UndeadStar
I just added select_larva hooks in Version 4.026 of GPTP.
I hope it can help.

Cool!




May 12 2018, 1:53 pm Biophysicist Post #7



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.

May 13 2018, 9:54 pm UndeadStar Post #8



Quote from Biophysicist
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.




Options
  Back to forum
Please log in to reply to this topic or to report it.
Members in this topic: None.
[05:19 pm]
NudeRaider -- when in doubt, Amazon
[05:11 pm]
Vrael -- hey does anyone know where I might be able to get a de-humidifer somewhere in the united kingdom?
[03:27 am]
m.0.n.3.y -- Maybe because it's an EUD map?
[03:27 am]
m.0.n.3.y -- Can't upload maps to the DB. Error says "The action you have performed caused an Error". Any word?
[2024-4-25. : 7:46 am]
RIVE -- :wob:
[2024-4-22. : 6:48 pm]
Ultraviolet -- :wob:
[2024-4-21. : 1:32 pm]
Oh_Man -- I will
[2024-4-20. : 11:29 pm]
Zoan -- Oh_Man
Oh_Man shouted: yeah i'm tryin to go through all the greatest hits and get the runs up on youtube so my senile ass can appreciate them more readily
You should do my Delirus map too; it's a little cocky to say but I still think it's actually just a good game lol
[2024-4-20. : 8:20 pm]
Ultraviolet -- Goons were functioning like stalkers, I think a valk was made into a banshee, all sorts of cool shit
[2024-4-20. : 8:20 pm]
Ultraviolet -- Oh wait, no I saw something else. It was more melee style, and guys were doing warpgate shit and morphing lings into banelings (Infested terran graphics)
Please log in to shout.


Members Online: jun3hong, NudeRaider, Vrael