Totem Arts Staff yosh56 Posted July 1, 2015 Totem Arts Staff Share Posted July 1, 2015 Simple question I ran in to that is currently breaking my Commander mod. It appears that in Skirmish/single-player, turrets spawn fine and if you look up how many defence classes there are it will show a correct number: e.g on Field if you look up how many Rx_Defence class objects there are, it will show just 2, an Rx_Defence_Turret_0 and 1. Now, take this on-line, and if you look for how many instances of turrets there are it will be FOUR, from 0-3. If you want to really look at a crazy list, list Rx_Defence objects on Whiteout... that list is rediculous. I was just wondering if this is intentional or not, because the way it affects me is the that I can not have turrets set to attack targets properly because the client sends one actor's name, but the server is using some other name for the exact same turret. I might be able to make a full list and make any "0" be a 1 or something like that. I'll probably post and release the mutator with this deficiency for now, but I would really love to get it settled. Quote Link to comment Share on other sites More sharing options...
Crnyo Posted July 1, 2015 Share Posted July 1, 2015 Hm the number of initialized turrets in multiplayer match is different from singleplayer match? That is weird. It would be interesting to find out why this is the case. How can I replicate your finding? Is there a console command which lists all objects of specific class? In any case, I think your issue could be solved this way: (Replace Rx_Defence with the exact name of duplicated turret class) Struct All_Actors_Refering_ToA_Single_Turret { var array Actors; } var array Turrets; ... local int i; local All_Actors_Refering_ToA_Single_Turret NewTurret; local bool Turret_Already_Exists; foreach Rx_Game(WorldInfo.Game).AllActors(class'Actor', Other) { if (Rx_Defence(Other) != none) { Turret_Already_Exists = false; for(i = 0; i < Turrets.Length;i++) { if (Turrets[i].Actors[0] == Other.Location) { Turrets[i].Actors.AddItem(Rx_Defence(Other)); Turret_Already_Exists = true; } } if (Turret_Already_Exists == false) { NewTurret.Actors.AddItem(Rx_Defence(Other)); Turrets.AddItem(NewTurret); NewTurret.Actors.Length = 0; } } } So basically every element of array Turrets will hold all actors refering to a single turret. Say Field has 2 turrets. If you want to order second turret to fire then iterate through Turrets[1].Actors array and give order to every individual Actor to fire. This is not elegant solution but I hope it will get the job done until someone manages to figure out this singleplayer-multiplayer weirdness. Quote Link to comment Share on other sites More sharing options...
Crnyo Posted July 1, 2015 Share Posted July 1, 2015 It seems that turrets have their own Controller class. Instead of referring to placeable turret classes perhaps you should try referring to Rx_Defence_Controller class. Those shouldn't be duplicated in MP match. You should be able to find the location of Controller's turret using this: Rx_Defence_Controller(Actor).Pawn.Location Quote Link to comment Share on other sites More sharing options...
RypeL Posted July 2, 2015 Share Posted July 2, 2015 Never heard of this. Definatly not intentional. Maybe the map spawns them and then the server replicate spawns them once again. Quote Link to comment Share on other sites More sharing options...
Totem Arts Staff yosh56 Posted July 2, 2015 Author Totem Arts Staff Share Posted July 2, 2015 I think I found a workaround to solve all problems I'm having now. For vehicles, if the vehicle doesn't have a PRI, it simply sends the location to the server, then the server sets the vehicle actor on itself (Rx_Defence extends vehicles, as I may have told someone otherwise by accident), then it replicates the location of that vehicle to the clients which just find the closest vehicle (of that kind) that is near that location for them, and sets that vehicle to the target. For Pawns it's much simpler. All Pawns have a PRI attached to them, even bots. I just send the player ID up and tell the clients to look for what actor has that PID. EDIT: This is no longer an issue I have to concern myself with, thanks to the above change to how I find targets. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.