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.
[11:50 pm]
O)FaRTy1billion[MM] -- nice, now i have more than enough
[11:49 pm]
O)FaRTy1billion[MM] -- if i don't gamble them away first
[11:49 pm]
O)FaRTy1billion[MM] -- o, due to a donation i now have enough minerals to send you minerals
[03:26 am]
O)FaRTy1billion[MM] -- i have to ask for minerals first tho cuz i don't have enough to send
[2024-4-17. : 1:53 am]
Vrael -- bet u'll ask for my minerals first and then just send me some lousy vespene gas instead
[2024-4-17. : 1:52 am]
Vrael -- hah do you think I was born yesterday?
[2024-4-17. : 1:08 am]
O)FaRTy1billion[MM] -- i'll trade you mineral counts
[2024-4-16. : 5:05 pm]
Vrael -- Its simple, just send all minerals to Vrael until you have 0 minerals then your account is gone
[2024-4-16. : 4:31 pm]
Zoan -- where's the option to delete my account
[2024-4-16. : 4:30 pm]
Zoan -- goodbye forever
Please log in to shout.


Members Online: RIVE