Jump to content

Ruud033

Former Developers
  • Posts

    1081
  • Joined

  • Last visited

Everything posted by Ruud033

  1. I think you have a point here,, I think it has something to do with the communication between client <> server. Somehow the UI does not update clientside. I just play in the windowed mode (play from here) btw, What trigger? I'm sorry I don't use a trigger here, only level loaded. Even if I would use a trigger, I can't update the terminal clientside... There's no option in modify property for it to be clientside only.. Do I have to replicate this stuff somehow or what's going on here?
  2. Hey people, I've been trying to switch a PT's team number, so when a building is captured, the proper HUD will be shown and the tooltip will be shown to the correct team. This is what it looks like in Kismet (beginning of the level, needs to be team 255) The code does work in the SDK, as soon as I start playing all is fine.. however, when I upload it to our testing server it suddenly does not work anymore, how come? What it does is, it stays at the default team it was at from the beginning... it does not seem to change. So weird that it does work in the SDK but not on the server, what am I doing wrong here? I am changing the teamnumber of the invisible touching actor (the one with the tooltip), not the static mesh, in case you were wondering..
  3. That'd be awesome! I'd really like a custom PT interface. I don't know whether it's much work to get it modular in the SDK, but maybe it's a better idea to load in the flash file as a variable? That way we have full access to the interface. One other way is to limit the amount of adjustments that can be made by using slots. Use name slots and Icon slots, maybe even stick a colour variable to it? So we can colourise the buttons.. I'd be stoked to be involved in this development! I'm looking for a feature like this for a while now. If you need any help / wanna discuss idea's, I'm up for it! It'll help out other modders as well and give a nice extra feature to the custom maps I think!
  4. Hey people, I was wondering if we can also have custom interfaces for PT terminals. Is this doable in code and in flash? Who developed the original PT interface? It would be nice if we could override the interface and have our own I think
  5. Made my own logo this week Still don't have many time though.. I will continue work on the map after my holidays In a week or so, Cheers!
  6. Right now I'm still developing my map with it's assets.. I've got a professional game developer on board (he's working @ activision) for custom models. I'll ask him in the future to create some custom models, such as the construction yard Can you provide me with a list of buildings that are 'extra' in the original renegade? for example: * Construction Yard * Communication center * ????
  7. Weird, well, after enabling the show-decal thing, first restart your SDK. If the problem still occurs: 1. Check if the decals are enabled by selecting them, hitting F4 and see if the checkbox is ticked 2. Check for the decal projection distance, is it infinite or does the projection stop after "n' amount of meters? 3. Is there a material loaded in the decal? 3.1 Does the material that is loaded have a correct referenced path to the texture? 4. Check the bump offset
  8. Try lowering some lightmap resolutions, remove shadows where you can, especially lower resolutions on all those weapons you have in that weapons stash for example..
  9. Lower the light map resolutions to 32 (acceptable). Default is 64. Or even lower it further to 16 or 8, you will get crappy shadows but a small file size. Shadow maps make an impact on the file size believe me, first time on my map building lights (non-optimised) it was ~700MB, did some magic after some help from Kenz, got it reduced to 250MB instantly, only with reducing lightmapresolution's. Removing meshes is always good, it prevents something from dropping a shadow. I believe you can also adjust the vehicle and character lightmapresolution (shadow quality) in the world properties.. correct me if I'm wrong here. Not completely sure if dynamic shadows have an impact on filesize thou Removing shadows from background assets also works really good. (I have some 2D texture background trees which drop shadow by default, I disabled this and saved 50MB!!) Be sure to check the sky dome not to accept dynamic decals / shadows / dynamic lighting (unless you have a thunderstorm in your map, then you would like to enable it) Can't think of much more now.. good luck!
  10. Be sure to use these settings:
  11. NP for adding. No don't ! For foliage that does not matter, only for rocks etc. Foliage does not have collision by default, therefore you can drive through them with a tank. Yep that's it. You can also change the rock property itself, but that requires you to copy the rock mesh to your own package (if you didnt do that already) GL
  12. Updated the map, removed some of the bloatware in the download. 110 MB now. Fixed some issues in kismet and with the PT's in the destroyed WF Added some sounds.
  13. Found lots of bugs in the version I released (bugs in kismet) I'm fixing them now. Will try to do a new release tonight. I'm also gonna remove that piece of tunnel in the map for now, so that saves you 200 MB of download lol. It's not finished yet so. I've also found a nice file with a lot of EVA voices, I'm adding these to the game package.
  14. NP, you're welcome! I also play on a beefy computer, but I've had a lot of feedback already on my own map and had lots of iterations on how to optimise performance ( I have lots more foliage and draw calls than you I think ) No it's not. Epic Games left this out on purpose because if you go mad with the amount of foliage, the GPU of the client has to load each one of those collision volumes in. This eats performance. I've developed a custom script (FoliageCollisionVolume) that takes care of this. By trail and error I've found out that performance indeed drops on an insane scale if we load up all the foliage collision at once. Therefore I used zones. If you really want to have collision on trees you either have to replace them with static meshes or use my custom script and place some zones. What that does is, it creates a temporary invisible collision actor matched to the tree's original collision once a vehicle touches the zone you created in the editor. The collision gets destroyed when ever no vehicles are touching the zone, therefore we don't always load up all the collision at once (unless you create 1 huge zone, but that's not the intention here) The more zones you have the more optimised it all is You could take a look at my map for an example (cnc-crash_site) but it all depends on how you want to solve this. You could also do it like you have right now (blocking it all off) since you don't have that many foliage inside the battlefield. I've added your map to the server for testing!
  15. I think this is the place to search for: Rx_Building_Techbuilding_Internals.uc class Rx_Building_TechBuilding_Internals extends Rx_Building_Team_Internals notplaceable implements(RxIfc_Capturable); // The way the sound arrays are setup did not consider changing ownership. I ain't going to rip out the system and replace it, so I'll just use the shit that's there and be efficent at memory usage seeing as I can't do anything else const GDI_CAPTURED = 1; const NOD_CAPTURED = 2; const GDI_LOST = 3; const NOD_LOST = 4; const GDI_UNDERATTACK = 5; const NOD_UNDERATTACK = 6; `define GdiCapSound FriendlyBuildingSounds[buildingRepaired] `define GdiLostSound FriendlyBuildingSounds[buildingDestroyed] `define NodCapSound EnemyBuildingSounds[buildingRepaired] `define NodLostSound EnemyBuildingSounds[buildingDestroyed] `define GdiUnderAttackForGdiSound FriendlyBuildingSounds[buildingUnderAttack] `define GdiUnderAttackForNodSound FriendlyBuildingSounds[buildingDestructionImminent] `define NodUnderAttackForGdiSound EnemyBuildingSounds[buildingUnderAttack] `define NodUnderAttackForNodSound EnemyBuildingSounds[buildingDestructionImminent] var TEAM ReplicatedTeamID; var repnotify TEAM FlagTeam; var MaterialInstanceConstant MICFlag; var Rx_CapturePoint_TechBuilding CP; var float LastUnderAttackAnnouncement; var float UnderAttackAnnouncementCooldown; replication { if(bNetDirty || bNetInitial) ReplicatedTeamID,FlagTeam,CP; } simulated event ReplicatedEvent(name VarName) { if ( VarName == 'FlagTeam' ) FlagChanged(); else super.ReplicatedEvent(VarName); } simulated function Init(Rx_Building Visuals, bool isDebug ) { super.Init(Visuals, isDebug); //SetupCapturePoint(); MICFlag = BuildingSkeleton.CreateAndSetMaterialInstanceConstant(0); FlagChanged(); } simulated function FlagChanged() { if(FlagTeam == TEAM_NOD) MICFlag.SetScalarParameterValue('FlagTeamNum', 1); else if(FlagTeam == TEAM_GDI) MICFlag.SetScalarParameterValue('FlagTeamNum', 0); else MICFlag.SetScalarParameterValue('FlagTeamNum', 2); } function ChangeFlag(TEAM ToTeam) { FlagTeam = ToTeam; FlagChanged(); } function SetupCapturePoint() { local Vector L; local Rotator R; BuildingSkeleton.GetSocketWorldLocationAndRotation('CapturePoint', L, R); CP = Spawn(class'Rx_CapturePoint_TechBuilding',self,,L,R); } function ChangeTeamReplicate(TEAM ToTeam, optional bool bChangeFlag=false) { TeamID = ToTeam; ReplicatedTeamID = ToTeam; if (bChangeFlag) ChangeFlag(ToTeam); } // damage is ignored, can only be captured through the MCT function TakeDamage(int DamageAmount, Controller EventInstigator, vector HitLocation, vector Momentum, class DamageType, optional TraceHitInfo HitInfo, optional Actor DamageCauser); function bool HealDamage(int Amount, Controller Healer, class DamageType) { local int RealAmount; local float Scr; if ((Health < HealthMax || Healer.GetTeamNum() != GetTeamNum()) && Amount > 0 && Healer != None ) { RealAmount = Min(Amount, HealthMax - Health); if (RealAmount > 0) { if (Health >= HealthMax && SavedDmg > 0.0f) { SavedDmg = FMax(0.0f, SavedDmg - Amount); Scr = SavedDmg * HealPointsScale; Rx_PRI(Healer.PlayerReplicationInfo).AddScoreToPlayerAndTeam(Scr); } Scr = RealAmount * HealPointsScale; Rx_PRI(Healer.PlayerReplicationInfo).AddScoreToPlayerAndTeam(Scr); } if(Healer.GetTeamNum() != GetTeamNum()) { Amount = -1 * Amount; } Health = Min(HealthMax, Health + Amount); if(Health <= 1) { Health = 1; if(GetTeamNum() != TEAM_NOD && GetTeamNum() != TEAM_GDI) { if(Healer.GetTeamNum() == TEAM_NOD) { `LogRx("GAME"`s "Captured;"`s class'Rx_Game'.static.GetTeamName(TeamID)$","$self.class `s "id" `s GetRightMost(self) `s "by" `s `PlayerLog(Healer.PlayerReplicationInfo) ); BroadcastLocalizedMessage(MessageClass,NOD_CAPTURED,Healer.PlayerReplicationInfo,,self); ChangeTeamReplicate(TEAM_NOD,true); } else { `LogRx("GAME"`s "Captured;"`s class'Rx_Game'.static.GetTeamName(TeamID)$","$self.class `s "id" `s GetRightMost(self) `s "by" `s `PlayerLog(Healer.PlayerReplicationInfo) ); BroadcastLocalizedMessage(MessageClass,GDI_CAPTURED,Healer.PlayerReplicationInfo,,self); ChangeTeamReplicate(TEAM_GDI,true); } } else { if (TeamID == TEAM_NOD) BroadcastLocalizedMessage(MessageClass,NOD_LOST,Healer.PlayerReplicationInfo,,self); else if (TeamID == TEAM_GDI) BroadcastLocalizedMessage(MessageClass,GDI_LOST,Healer.PlayerReplicationInfo,,self); `LogRx("GAME"`s "Neutralized;"`s class'Rx_Game'.static.GetTeamName(TeamID)$","$self.class `s "id" `s GetRightMost(self) `s "by" `s `PlayerLog(Healer.PlayerReplicationInfo) ); ChangeTeamReplicate(255,true); Health = BuildingVisuals.HealthMax; } } else if (Amount < 0) TriggerUnderAttack(); return True; } return False; } function TriggerUnderAttack() { if (WorldInfo.TimeSeconds < LastUnderAttackAnnouncement + UnderAttackAnnouncementCooldown) return; if (TeamID == TEAM_GDI) BroadcastLocalizedMessage(MessageClass,GDI_UNDERATTACK,,,self); else if (TeamID == TEAM_Nod) BroadcastLocalizedMessage(MessageClass,NOD_UNDERATTACK,,,self); LastUnderAttackAnnouncement = WorldInfo.TimeSeconds; } function NotifyBeginCaptureBy(byte TeamIndex) { if (TeamIndex == TEAM_GDI) { ChangeFlag(TEAM_GDI); } else if (TeamIndex == TEAM_Nod) { ChangeFlag(TEAM_Nod); } } function NotifyCapturedBy(byte TeamIndex) { `LogRx("GAME"`s "Captured;" `s class'Rx_Game'.static.GetTeamName(TeamID)$","$self.class `s "id" `s GetRightMost(self) `s"by"`s class'Rx_Game'.static.GetTeamName(TeamIndex) ); if (TeamIndex == TEAM_GDI) BroadcastLocalizedMessage(MessageClass,GDI_CAPTURED,,,self); else BroadcastLocalizedMessage(MessageClass,NOD_CAPTURED,,,self); if (TeamIndex == TEAM_GDI) ChangeTeamReplicate(TEAM_GDI); else if (TeamIndex == TEAM_Nod) ChangeTeamReplicate(TEAM_Nod); } function NotifyBeginNeutralizeBy(byte TeamIndex) { TriggerUnderAttack(); } function NotifyNeutralizedBy(byte TeamIndex, byte PreviousOwner) { `LogRx("GAME"`s "Neutralized;"`s class'Rx_Game'.static.GetTeamName(TeamID)$","$self.class `s "id" `s GetRightMost(self) `s "by" `s class'Rx_Game'.static.GetTeamName(TeamIndex) ); if (TeamID == TEAM_GDI) BroadcastLocalizedMessage(MessageClass,GDI_LOST,,,self); else BroadcastLocalizedMessage(MessageClass,NOD_LOST,,,self); ChangeTeamReplicate(255); if (TeamIndex == TEAM_GDI) ChangeFlag(TEAM_GDI); else if (TeamIndex == TEAM_Nod) ChangeFlag(TEAM_Nod); } function NotifyRestoredNeutral() { ChangeFlag(255); } function NotifyRestoredCaptured(); simulated function SoundNodeWave GetAnnouncment(int alarm, int teamNum ) { switch ( alarm ) { case GDI_CAPTURED: if (teamNum == TEAM_GDI) return `GdiCapSound; break; case NOD_CAPTURED: if (teamNum == TEAM_Nod) return `NodCapSound; break; case GDI_LOST: if (teamNum == TEAM_GDI) return `GdiLostSound; break; case NOD_LOST: if (teamNum == TEAM_Nod) return `NodLostSound; break; case GDI_UNDERATTACK: if (teamNum == TEAM_Nod) return `GdiUnderAttackForNodSound; else return `GdiUnderAttackForGDISound; case NOD_UNDERATTACK: if (teamNum == TEAM_Nod) return `NodUnderAttackForNodSound; else return `NodUnderAttackForGDISound; } return None; } static function string GetLocalString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2 ) { local string str; if (RelatedPRI_1 != None) { switch (Switch) { case GDI_CAPTURED: case NOD_CAPTURED: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[2], "`PlayerName`", RelatedPRI_1.PlayerName); return Repl(str, "`BuildingName`", default.BuildingName); case GDI_LOST: case NOD_LOST: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[3], "`PlayerName`", RelatedPRI_1.PlayerName); return Repl(str, "`BuildingName`", default.BuildingName); } } else { switch (Switch) { case GDI_CAPTURED: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[2], "`PlayerName`", "GDI"); return Repl(str, "`BuildingName`", default.BuildingName); case NOD_CAPTURED: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[2], "`PlayerName`", "Nod"); return Repl(str, "`BuildingName`", default.BuildingName); case GDI_LOST: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[3], "`PlayerName`", "Nod"); return Repl(str, "`BuildingName`", default.BuildingName); case NOD_LOST: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[3], "`PlayerName`", "GDI"); return Repl(str, "`BuildingName`", default.BuildingName); } } return ""; } DefaultProperties { MessageClass=class'Rx_Message_TechBuilding' `GdiCapSound = SoundNodeWave'RX_EVA_VoiceClips.gdi_eva.S_EVA_GDI_TechBuilding_Captured' `GdiLostSound = SoundNodeWave'RX_EVA_VoiceClips.gdi_eva.S_EVA_GDI_TechBuilding_Lost' `NodCapSound = SoundNodeWave'RX_EVA_VoiceClips.Nod_EVA.S_EVA_Nod_TechBuilding_Captured' `NodLostSound = SoundNodeWave'RX_EVA_VoiceClips.Nod_EVA.S_EVA_Nod_TechBuilding_Lost' `GdiUnderAttackForGdiSound = SoundNodeWave'RX_EVA_VoiceClips.gdi_eva.S_EVA_GDI_GDISilo_UnderAttack' `GdiUnderAttackForNodSound = SoundNodeWave'RX_EVA_VoiceClips.Nod_EVA.S_EVA_Nod_GDISilo_UnderAttack' `NodUnderAttackForGdiSound = SoundNodeWave'RX_EVA_VoiceClips.gdi_eva.S_EVA_GDI_NodSilo_UnderAttack' `NodUnderAttackForNodSound = SoundNodeWave'RX_EVA_VoiceClips.Nod_EVA.S_EVA_Nod_NodSilo_UnderAttack' //AttachmentClasses.Remove(Rx_BuildingAttachment_MCT) //AttachmentClasses.Add(Rx_BuildingAttachment_MCT_TechBuilding) ReplicatedTeamID=255 FlagTeam=255 UnderAttackAnnouncementCooldown = 15 } and then this specific piece of code: static function string GetLocalString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2 ) { local string str; if (RelatedPRI_1 != None) { switch (Switch) { case GDI_CAPTURED: case NOD_CAPTURED: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[2], "`PlayerName`", RelatedPRI_1.PlayerName); return Repl(str, "`BuildingName`", default.BuildingName); case GDI_LOST: case NOD_LOST: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[3], "`PlayerName`", RelatedPRI_1.PlayerName); return Repl(str, "`BuildingName`", default.BuildingName); } } else { switch (Switch) { case GDI_CAPTURED: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[2], "`PlayerName`", "GDI"); return Repl(str, "`BuildingName`", default.BuildingName); case NOD_CAPTURED: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[2], "`PlayerName`", "Nod"); return Repl(str, "`BuildingName`", default.BuildingName); case GDI_LOST: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[3], "`PlayerName`", "Nod"); return Repl(str, "`BuildingName`", default.BuildingName); case NOD_LOST: str = Repl(class'Rx_Message_Buildings'.default.BuildingBroadcastMessages[3], "`PlayerName`", "GDI"); return Repl(str, "`BuildingName`", default.BuildingName); } } return ""; }
  16. Awesome map and a really nice feel! I like the setting and the ambient you created in it! Simple and effective gameplay it seems.. As for the shadows, I'd suggest to set an environment colour in the world properties (view>world properties) -or- tune the shadow colours. Personally I changed my environment colour because then the characters etc. also get a nice natural colour in my opinion. But that's up to you! Try some settings and figure out whats best! In the world properties you can even change the brightness of the infantry and vehicles seperate (in case they're not lit properly in the map for gameplay purposes) Have all the trees got collision on them where the vehicles can go? Are they static meshes or foliage? Remember to remove all colliison of the background assets (there where you never can go to) to increase performance! Check the skydome and see if it accepts dynamic lights, uncheck that, (unless you're using a thunderstorm thingy) uncheck accept static decals and dynamic decals for the skydome! Also, be sure that the skydome does not cast a shadow! (yes this might be the case sometimes) The rock shadow resolution (called: lightmapresolution) is 64 by default I think, since you're setting is more like dusk, you could consider setting it to 32. This increases performance and reduces map file size. Did you put blocking volumes on top of the walls on both bases? It's quite easy to drive threaded vehicles on top of those walls if they don't have a vehicle blocking volume on top of them (check whiteout for reference) Where are the crates? Maybe design some ambient stuff around the crate? Looking good overall! Keep up the good work! Can't wait to play this! If you need some help please post it in this topic!. I'll add your map to the official test server today.
  17. I have setup the official test server again today. All maps are in, latest version. Only the IRC bot remains.
  18. That's all we need! If you could also include the change from my post in that specific topic it'll be great! I've already asked Yosh to include this in the next patch.
  19. Map updated. See server release thread for download! Lots of changes
  20. Looking awesome! Nice work on that waterfall! I think it would be a nice idea to amp up the infantry brightness a little bit in the world properties.. I can barely see them sometimes.
  21. Awesome coding there dude! Thanks for this. I was looking for something similair but I didnt have the time to code it myself / do some research. Thanks again! The 1 thing I'd like to see in your code is the broadcast being changed. Right now, if we capture an MCT it says: " captured the" without a name. For example, when capturing a silo, it prompts us with: " captured the Silo". Can't we have a string variable (name of the MCT) inside the MCT that will get displayed just like "silo" in the silo capture broadcast? Could you include this in your code?
  22. True, but if we set the interval on the trigger touch event to 1 or 2 seconds instead of 0.1 it should behave better since we don't check/tick when it's not neccesairy New map is online for download!
  23. I'm updating my map as we speak! I've done lots of things in the meantime! - Fixed map so it's compatible with Béta 5 - Removed the 'extra' titan package, since béta 5 has support by default - Added B5 Titan to purchase terminal in destroyed wf - Added B5 Wolverine to purchase terminal in destroyed wf - Added Orca to PT in destroyed wf - Reworked the PT system so the HUD shows it's an enemy PT when the enemy has captured the building (check out the kismet on this if you are making your own capturable building, could be very useful) - Added capturable MCT with working kismet * one thing I'd like to ask the developers is; What does touch the MCT when shooting it with the repair beam? I'd like to use the Event>touch>...sequence here.. to fire when ever the MCT is shot at. Why? Because then I don't have to use a checker clock as Kenz uses in his video's. This means that, when ever the terminal is shot at, it checks which team it is at (via my kismet). At the moment I'm using trigger zones in certain area's to trigger these checks (rather than using a clock). I just don't like to use the clock, it eats performance. - Updated meteor sequence - Added 2 more decoration meteors, which fly over just before the main one hits, so you sort of get 'warned' when to move out of the center! Looks really cool in my opinion. - Updated meteor looks - Updated bases, reworked a bit of the paint jobs - Updated tiberium fields (moved decals, added lights) - Reworked Nod base entrance a bit, still work in progress as I don't really know how exactly I am going to design this just yet. GDI can't have to much advantage, that's the thing I care about. - Reworked the foliage collision volumes, they're more performance optimised now (no more huge volumes) - Small other stuffs.. I don't remember whilst writing! Go check it out.
  24. So if I understand it correctly you'll handle the installer and map versions in it?
  25. Just found out that the thing I postd will never work. The class you're looking for is Rx_VehicleManager, this is where the magic happens. The piece of code that tells to spawn initial harvesters is as following: function SpawnInitialHarvesters() { QueueHarvester(TEAM_GDI,false); QueueHarvester(TEAM_NOD,false); } There is no bool built in this piece of code, so there is no way of disabling the initial spawned harvesters though this specific piece of code. If we look at the function QueueHarvester maybe we can learn something from it: function QueueHarvester(byte team, bool bWithIncreasedDelay) { local VQueueElement NewQueueElement; NewQueueElement.Buyer = None; if(team == TEAM_NOD) { if(bNodRefDestroyed) return; NewQueueElement.VehClass = class'Rx_Vehicle_Harvester_Nod'; NewQueueElement.VehicleID = 8; NOD_Queue.AddItem(NewQueueElement); if (!IsTimerActive('queueWork_NOD')) { if(bWithIncreasedDelay) { SetTimer(ProductionDelay + 10.0, false, 'queueWork_NOD'); if(!AirStrip.IsDestroyed()) SetTimer(10.0,false,'SpawnC130'); } else { if(AirStrip.IsDestroyed()) SpawnC130(); SetTimer(ProductionDelay, false, 'queueWork_NOD'); } } } else if(team == TEAM_GDI) { if(bGDIRefDestroyed) return; NewQueueElement.VehClass = class'Rx_Vehicle_Harvester_GDI'; NewQueueElement.VehicleID = 7; GDI_Queue.AddItem(NewQueueElement); if (!IsTimerActive('queueWork_GDI')) { if(bWithIncreasedDelay) { SetTimer(ProductionDelay + 10.0 + GDIAdditionalAirdropProductionDelay, false, 'queueWork_GDI'); } else { SetTimer(ProductionDelay + GDIAdditionalAirdropProductionDelay, false, 'queueWork_GDI'); } } } } Here we see that it checks for: if(bNodRefDestroyed) return; before executing code, I think this is the way to play with the first piece of code that tells the harvesters to spawn. Maybe, for future purposes RypeL can build-in a bool variable that allows us mappers to change, so we can deny initialharvesterspawn ?? I'm looking into getting that bool (bNodRefDestroyed) to work for us. Will post back later. Edit: Nope, could not find a way to do this. We have no tools built in this piece of code, it's hard coded all the way. One way to possibly fix this, is to write a mutator which we can toggle via kismet. That mutator then has to override the rx_vehiclemanager's bool: bNodRefDestroyed and bGDIRefDestroyed. Since mutators are always loaded on a server, we do not need to change the settings by default, only when overrided by kismet (in other words, when we want it to) Maybe our mutator expert Yosh56 can look into this? I don't have time at the moment, else I could've tried it.. I hope you can do something with this.
×
×
  • Create New...