Jump to content

Ruud033

Former Developers
  • Posts

    1081
  • Joined

  • Last visited

Everything posted by Ruud033

  1. Nice! Looking really good Can't wait for more updates!
  2. @ above, that should work. When using a mutator, you will have to use it for a map-specific only. If we load up a mutator like that for every map (which is default) no harvester will ever spawn!?? So, I'd suggest setting the world setting within kismet somehow, RxGame(WorldInfo.Game).VehicleManager.bNodRefDestroyed = true; RxGame(WorldInfo.Game).VehicleManager.bGDIRefDestroyed = true; I tried something (and several other variants which I didnt make screenshots of) which failed.. Maybe you have better luck!
  3. Ruud033

    Harvester Spawn

    If you upload the map somewhere I can take a look in 2 weeks when I get back from Italy
  4. Thanks. That works indeed, there is also a node called 'get team' or something similar. I use that for now, works perfectly. I will post a screenshot tomorrow. Still think it's better to have a tutorial on this.. If you don't have many knowledge and just want to build cool stuff or whatever I can only imagine that this is quite hard to understand.
  5. In my map? If it was in my map that could be! I have not uploaded the optimised version yet as I have to add stuff to it and what not before I bring it out again.. Oh well, I'll build all and re-upload what I have now. Lots of changes already so.. If it was in your map you might want to ask yourself if you have set the size of the volumes correctly
  6. I'm trying to enable / disable triggers with it basically, Just figuring out how to do the kismet at the moment.. Cant find any logic anywhere on how to do that.
  7. Hey guys, As the title says, I don't quite understand how to do the kismet on the new MCT. I can take a look at the script myself so I can fix it myself, but I also think that for other (future) mappers it would be best to make an essentials tutorial on how to handle the new MCT ? Please post your thoughts.
  8. Jeej I've got some good news. I haven't posted in a while, that does not mean I'm giving up on this development. It's stalled for a while due to holidays and still is a bit stalled... I'm going on a vacation so But, meanwhile I've gathered stuff for the tunnel development, it's looking really good! Will post screenshots soon! I've also done some optimizations and expanded the foliage collision volume. I've started reworking the Nod base entrance.. I've added the capturable MCT (still figuring out kismet) And lots more, cant remember.. Will post screenshots soon and update the map on the server ofcourse.
  9. Why don't you do it yourself?? Meanwhile you can play with em in skirimish by summoning them! f5 summon renx_game. so for example: f5 summon renx_game.rx_vehicle_buggy
  10. Awesome!! I don't have many time to play at the moment, holidays incomming! After that I'll be in once again! Looking really good here
  11. Post your PC-specifications? Processor: Memory type & amount: Graphics card: SSD / HDD?: Those are the most important
  12. Where's the download link so I can add it to the server?
  13. Can you post some progress screenshots? You're doing awesome work mate.
  14. Ruud033

    Harvester Spawn

    Nice to see that it worked out for you Glad to help. Just a check, if it can't find the pathnode, did you even set a tiberium pathnode? So the harvester knows which node to look for? Did you set the correct team number in this? Also, you need 1 ref node for GDI (remember to set the teamnumber!) and 1 for Nod. These nodes need to be connected via Pathnodes (needs to be a green line at minimum)
  15. You're completely missing the whole point there! You unwrap a boring version, then AFTERwards you polish that diffuse map with photoshop!
  16. Did some work on the map again today. Re-added serveral lights in the tiberium fields, added tiberium zones. Nod base and the GDI base Also added some more easter eggs in the map, one of them can be found somewhere on this picture
  17. K, all maps and links are updated.
  18. So.. whats up? it's been a month, how are you doing?
  19. It works perfectly. BlockingMesh.uc //============================================================================= // FoliageCollisionVolume: a vehicle collision solution // used to collide certain classes of actors // primary use is to provide collision for non-zero extent traces around static meshes // Created by Pinheiro, https://forums.epicgames.com/threads/913559-How-to-enable-collision-on-foliage // Modified by Ruud033 //============================================================================= class BlockingMesh extends DynamicSMActor_Spawnable; defaultproperties { Begin Object Name=StaticMeshComponent0 HiddenGame = true //we don't wanna draw this, it's just used to test collision BlockRigidBody=true //DynamicSMActors have collision disabled by default CastShadow=false MaxDrawDistance = 500 bAllowCullDistanceVolume=true AlwaysLoadOnServer=false End object bCollideActors=true //same here bTickIsDisabled = true //greatly improves performance on the game thread bStatic=false bNoDelete=false } FoliageCollisionVolume.uc //============================================================================= // FoliageCollisionVolume: a vehicle collision solution // used to collide certain classes of actors // primary use is to provide collision for non-zero extent traces around static meshes // Created by Pinheiro, https://forums.epicgames.com/threads/91 ... on-foliage // Heavily modified by Ruud033 & Handepsilon // Thanks Crnyo and nameloc for the additional help //============================================================================= class FoliageCollisionVolume extends Volume placeable; var BlockingMesh CreatedBlockingMesh; var Array SpawnedBlockingMeshes; var bool bBlockersHaveSpawned; //Check if blockers have already spawned. If it has, no need to spawn more var Array VehiclesInVolume; static final function vector MatrixGetScale(Matrix TM) { local Vector s; s.x = sqrt(TM.XPlane.X**2 + TM.XPlane.Y**2 + TM.XPlane.Z**2); s.y = sqrt(TM.YPlane.X**2 + TM.YPlane.Y**2 + TM.YPlane.Z**2); s.z = sqrt(TM.ZPlane.X**2 + TM.ZPlane.Y**2 + TM.ZPlane.Z**2); return s; } //Search for each tree apart, the code goes trough the volume and searches each tree. event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal ) { local InstancedFoliageActor ac; local InstancedStaticMeshComponent comp; local vector loc, scale; local Rotator rot; local int i, j; super.Touch(Other, OtherComp, HitLocation, HitNormal); If(Other.IsA('Vehicle')) { VehiclesInVolume.AddItem(Vehicle(Other)); if(!bBlockersHaveSpawned) { bBlockersHaveSpawned = true; //look for the InstancedFoliageActor foreach AllActors(class'InstancedFoliageActor',ac) { //iterate through the various foliage components for(i=0; i { comp = ac.InstancedStaticMeshComponents[i]; if (comp.StaticMesh.BodySetup != none) { //iterate through the various meshes in this component, if it has a collision model for (j=0; j { //decompose the instance's transform matrix loc = MatrixGetOrigin(comp.PerInstanceSMData[j].Transform); if (ContainsPoint(loc)) //check if this instance is within the volume { rot = MatrixGetRotator(comp.PerInstanceSMData[j].Transform); scale = MatrixGetScale(comp.PerInstanceSMData[j].Transform); CreatedBlockingMesh = Spawn(class'BlockingMesh',ac,,loc,rot); CreatedBlockingMesh.StaticMeshComponent.SetStaticMesh(comp.StaticMesh); CreatedBlockingMesh.SetDrawScale3D(scale); SpawnedBlockingMeshes.AddItem(CreatedBlockingMesh); } } } } } } } } //Destroy the spawned meshes once untouched event Untouch( Actor Other ) { local int i; Super.Untouch(Other); VehiclesInVolume.RemoveItem(Vehicle(Other)); if(VehiclesInVolume.Length <= 0) { for(i=0; i < SpawnedBlockingMeshes.Length; i++) { SpawnedBlockingMeshes[i].Destroy();//if bNoDelete is set to false in defaultproperties; this deletes it // Ok removed SpawnedBlockingMeshes.Remove(i--,1); // Hande's note : This is not necessary as the below function will automatically empty the array } SpawnedBlockingMeshes.Length = 0; bBlockersHaveSpawned = false; } } defaultproperties { bColored=true BrushColor=(R=0,G=255,B=255,A=255) bCollideActors=true SupportedEvents.Empty SupportedEvents(0)=class'SeqEvent_Touch' }
  20. New collision volume works perfectly. https://www.dropbox.com/sh/j6t9bx7zdkdm ... NDx0a?dl=0 Features: - Use for adding collision to foliage. - Only foliage which has an existing collision mesh gets the blockingmesh spawned to it. So, stuff like grass etc, don't get the blockingmesh because they don't have a collision mesh by default in their properties - The foliage spawns in when ever a vehicle touches the volume, so, mappers beware!! Keep an eye upon the sizes of your volume. - More trees = more load, keep that in mind, you as a mapper have total control over the amount of trees to be loaded with blockingmeshes. The smaller the volumes the less load you will have on the server the better the performance. - If you have non-flying levels, keep in mind that you only have to rig the outer ring of the forest with this volume, since the inner ring will be inaccessible to vehicles anyway. - The collision despawns (or gets destroyed actually) after ALL the vehicles inside the volume have left the volume. So, If there is still a vehicle inside the volume (also when empty) the collision will still stay there. (Hence the importance of the size of your volume) Thanks to Handepsilon for coding the last bit and helping me debugging. Thanks to others which have helped me out creating this, they're mentioned in the file.
  21. Testing latest script now, seems to be working.
  22. New script update: Delete issue still persists.. It won't delete the actors once Untouch() FoliageCollisionVolume.uc //============================================================================= // FoliageCollisionVolume: a vehicle collision solution // used to collide certain classes of actors // primary use is to provide collision for non-zero extent traces around static meshes // Created by Pinheiro, https://forums.epicgames.com/threads/91 ... on-foliage // Heavily modified by Ruud033 & Handepsilon //============================================================================= class FoliageCollisionVolume extends Volume placeable; var BlockingMesh CreatedBlockingMesh; var Array SpawnedBlockingMeshes; var bool bBlockersHaveSpawned; //Check if blockers have already spawned. If it has, no need to spawn more var Array VehiclesInVolume; static final function vector MatrixGetScale(Matrix TM) { local Vector s; s.x = sqrt(TM.XPlane.X**2 + TM.XPlane.Y**2 + TM.XPlane.Z**2); s.y = sqrt(TM.YPlane.X**2 + TM.YPlane.Y**2 + TM.YPlane.Z**2); s.z = sqrt(TM.ZPlane.X**2 + TM.ZPlane.Y**2 + TM.ZPlane.Z**2); return s; } //Search for each tree apart, the code goes trough the volume and searches each tree. event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal ) { local InstancedFoliageActor ac; local InstancedStaticMeshComponent comp; local vector loc, scale; local Rotator rot; local int i, j; super.Touch(Other, OtherComp, HitLocation, HitNormal); If(Other.IsA('Vehicle')) { VehiclesInVolume.AddItem(Vehicle(Other)); if(!bBlockersHaveSpawned) { bBlockersHaveSpawned = true; //look for the InstancedFoliageActor foreach AllActors(class'InstancedFoliageActor',ac) { //iterate through the various foliage components for(i=0; i { comp = ac.InstancedStaticMeshComponents[i]; if (comp.StaticMesh.BodySetup != none) { //iterate through the various meshes in this component, if it has a collision model for (j=0; j { //decompose the instance's transform matrix loc = MatrixGetOrigin(comp.PerInstanceSMData[j].Transform); if (ContainsPoint(loc)) //check if this instance is within the volume { rot = MatrixGetRotator(comp.PerInstanceSMData[j].Transform); scale = MatrixGetScale(comp.PerInstanceSMData[j].Transform); CreatedBlockingMesh = Spawn(class'BlockingMesh',ac,,loc,rot); CreatedBlockingMesh.StaticMeshComponent.SetStaticMesh(comp.StaticMesh); CreatedBlockingMesh.SetDrawScale3D(scale); SpawnedBlockingMeshes.AddItem(Spawn(class'BlockingMesh')); } } } } } } } } //Destroy the spawned meshes once untouched event Untouch( Actor Other ) { local int i; Super.Untouch(Other); VehiclesInVolume.RemoveItem(Vehicle(Other)); if(VehiclesInVolume.Length <= 0) { for(i=0; i < SpawnedBlockingMeshes.Length; i++) { SpawnedBlockingMeshes[i].Destroy();//if bNoDelete is set to false in defaultproperties; this deletes it // Ok removed SpawnedBlockingMeshes.Remove(i--,1); // Hande's note : This is not necessary as the below function will automatically empty the array } SpawnedBlockingMeshes.Length = 0; bBlockersHaveSpawned = false; } } defaultproperties { bColored=true BrushColor=(R=0,G=255,B=255,A=255) bCollideActors=true SupportedEvents.Empty SupportedEvents(0)=class'SeqEvent_Touch' }
  23. Tried your script, also added a vehicle check. Thanks for this idea Handepsilon, I only need to spawn collision when ever a VEHICLE hits the volume, infantry does not matter since they already collide... all the sudden we have a LOT of performance gain over time :D:D since the server does not have to spawn collision for infantry. Sadly, the collision does not remove itself... I have bNoDelete=false in the BlockingMesh.uc set, so that should not be an issue for Destroy() FoliageCollisionVolume.uc //============================================================================= // FoliageCollisionVolume: a vehicle collision solution // used to collide certain classes of actors // primary use is to provide collision for non-zero extent traces around static meshes // Created by Pinheiro, https://forums.epicgames.com/threads/913559-How-to-enable-collision-on-foliage // Heavily modified by Ruud033 //============================================================================= class FoliageCollisionVolume extends Volume placeable; var BlockingMesh CreatedBlockingMesh; var Array SpawnedBlockingMeshes; static final function vector MatrixGetScale(Matrix TM) { local Vector s; s.x = sqrt(TM.XPlane.X**2 + TM.XPlane.Y**2 + TM.XPlane.Z**2); s.y = sqrt(TM.YPlane.X**2 + TM.YPlane.Y**2 + TM.YPlane.Z**2); s.z = sqrt(TM.ZPlane.X**2 + TM.ZPlane.Y**2 + TM.ZPlane.Z**2); return s; } //Search for each tree apart, the code goes trough the volume and searches each tree. event Touch( Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal ) { local InstancedFoliageActor ac; local InstancedStaticMeshComponent comp; local vector loc, scale; local Rotator rot; local int i, j; super.Touch(Other, OtherComp, HitLocation, HitNormal); If(Other.IsA('Vehicle')) { //look for the InstancedFoliageActor foreach AllActors(class'InstancedFoliageActor',ac) { //iterate through the various foliage components for(i=0; i { comp = ac.InstancedStaticMeshComponents[i]; if (comp.StaticMesh.BodySetup != none) { //iterate through the various meshes in this component, if it has a collision model for (j=0; j { //decompose the instance's transform matrix loc = MatrixGetOrigin(comp.PerInstanceSMData[j].Transform); if (ContainsPoint(loc)) //check if this instance is within the volume { rot = MatrixGetRotator(comp.PerInstanceSMData[j].Transform); scale = MatrixGetScale(comp.PerInstanceSMData[j].Transform); CreatedBlockingMesh = Spawn(class'BlockingMesh',ac,,loc,rot); CreatedBlockingMesh.StaticMeshComponent.SetStaticMesh(comp.StaticMesh); CreatedBlockingMesh.SetDrawScale3D(scale); SpawnedBlockingMeshes.AddItem(Spawn(class'BlockingMesh')); } } } } } } } //Destroy the spawned meshes once untouched event Untouch( Actor Other ) { local int i; Super.Untouch(Other); for(i=0; i > SpawnedBlockingMeshes.Length; i++) { SpawnedBlockingMeshes[i].Destroy();//if bNoDelete is set to false in defaultproperties; this deletes it SpawnedBlockingMeshes.Remove(i--,1); } SpawnedBlockingMeshes.Length = 0; } defaultproperties { bColored=true BrushColor=(R=0,G=255,B=255,A=255) bCollideActors=true SupportedEvents.Empty SupportedEvents(0)=class'SeqEvent_Touch' } BlockingMesh.uc //============================================================================= // FoliageCollisionVolume: a vehicle collision solution // used to collide certain classes of actors // primary use is to provide collision for non-zero extent traces around static meshes // Created by Pinheiro, https://forums.epicgames.com/threads/913559-How-to-enable-collision-on-foliage // Modified by Ruud033 //============================================================================= class BlockingMesh extends DynamicSMActor_Spawnable; defaultproperties { Begin Object Name=StaticMeshComponent0 HiddenGame = true //we don't wanna draw this, it's just used to test collision BlockRigidBody=true //DynamicSMActors have collision disabled by default CastShadow=false MaxDrawDistance = 500 bAllowCullDistanceVolume=true AlwaysLoadOnServer=false End object bCollideActors=true //same here bTickIsDisabled = true //greatly improves performance on the game thread bStatic=false bNoDelete=false }
×
×
  • Create New...