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.
[2024-4-14. : 9:21 pm]
O)FaRTy1billion[MM] -- there are some real members mixed in those latter pages, but the *vast* majority are spam accounts
[2024-4-14. : 9:21 pm]
O)FaRTy1billion[MM] -- there are almost 3k pages
[2024-4-14. : 9:21 pm]
O)FaRTy1billion[MM] -- the real members stop around page 250
[2024-4-14. : 9:20 pm]
O)FaRTy1billion[MM] -- look at the members list
[2024-4-12. : 12:52 pm]
Oh_Man -- da real donwano
da real donwano shouted: This is the first time I've seen spam bots like this on SEN. But then again, for the last 15 years I haven't been very active.
it's pretty common
[2024-4-11. : 9:53 pm]
da real donwano -- This is the first time I've seen spam bots like this on SEN. But then again, for the last 15 years I haven't been very active.
[2024-4-11. : 4:18 pm]
IlyaSnopchenko -- still better than "Pakistani hookers in Sharjah" that I've seen advertised in another forum
[2024-4-11. : 4:07 pm]
Ultraviolet -- These guys are hella persistent
[2024-4-11. : 3:29 pm]
Vrael -- You know, the outdoors is overrated. Got any indoor gym and fitness equipment?
[2024-4-10. : 8:11 am]
Sylph-Of-Space -- Hello!
Please log in to shout.


Members Online: IlyaSnopchenko