Docking Ports unavailable to NPCs..

Freeform discussion about anything related to modding Transcendence.
Post Reply
shanejfilomena
Fleet Officer
Fleet Officer
Posts: 1436
Joined: Tue Mar 22, 2011 8:43 pm
Location: Alaska

Thu Jan 25, 2018 7:15 am

We have all been there :
An Armor Dealer with traffic backed up so bad it makes LA look like it doesn't have any issues.

What I did was give the &baCorporateStation a traffic code that changes out the guards and during that time frees up the ports.

Good Side Effect : it can give Corporate Stations or station using the &ba guards they didn't have before.

Negative Side Effects : It doesn't always play as well with others as I would like.

However, IF you would like to give it a go and see if you think it's worth having in Your Extensions :

Code: Select all


<!-- BASE CLASSES -->
	
	<!-- Corporate Hierarchy Station Base Class
	
	USAGE: Corporate stations should inherit from this class. Derrived classes
		should manually call OnCreate and OnDestroy in case they need to override
		those events.
	
	-->
	
	<StationType unid="&baCorporateStation;"
			name=			"(Corporate station base class)"
			virtual=		"true"
			>
		
		<Events>

			<OnCreate>
				(block Nil
					; Behavior event 
				
				; This only applies to corporate stations
				(objMatches gSource Nil "sTAV +corporate; +corporateArms; +corporateCustoms; +populated; -korolovShipping;")
				
				(or	
				 (objMatches gSource Nil "sTAV +corporate; +corporateArms; +corporateCustoms; +majorStation; +populated; -korolovShipping;")
					)
					
					(sysAddObjRecurringTimerEvent 90 gSource "OnBehavior")
					)
			</OnCreate>
			
          <OnBehavior>
		  
				(block (escorts escortCount portsLeft)
				; Initialize some variables
					(setq escorts (sysFindObject gSource "sHZ O:guard;"))
					(setq dockedFreighters (sysFindObject gSource "sHZ O:docked; +commonwealth;"))
					(setq freightersInFlight (objGetData gSource "freightersInFlight"))
					(setq freighterCount (add (count dockedFreighters) freightersInFlight))
					(setq escortCount (add (count escorts) freightersInFlight))

					; Exclude freighters being escorted by the player
					(setq dockedFreighters (filter dockedFreighters theFreighter
						(not (objGetData theFreighter "korolovPlayerEscort"))
						))

					; See if we have any docking ports free
					(setq portsLeft (gr (objGetOpenDockingPortCount gSource) 0))

					
					; If we don't have enough escorts, then we better get some more
					(if (and portsLeft
							(or
								(and (ls escortCount 1) (eq (random 1 2) 1))
								(and (objGetData gSource "needEscorts") (eq (random 1 2) 1))
								
								)
								
							)
						(block (newShip)
							(setq newShip
								(sysCreateShip 
									(random '(&scAsterionHeavyGunship; &scBritannia; &scManticore; &scCenturion; &scRoninC; &scWolfen; &scRoninB; &scRoninA; &scArmstrongTransport; &scManticore;))
									(objGetNearestStargate gSource) 
									&svCorporate;
									)
								)
							(shpOrder newShip "guard" gSource)
							(objSetData gSource "needEscorts" Nil)
							)
						)

					; Send out a freighter to a random station
					(switch
						; If we have no ports left, then send some escorts away
						(and (not portsLeft) escorts)
							(block (theCount)
								(setq theCount (max 2 (subtract (count escorts) 2)))
								(for i 1 theCount
									(block (theEscort)
										(setq theEscort (item escorts (subtract i 1)))
										(shpCancelOrders theEscort)
										(shpOrder theEscort 'gate)
										)
									)
								)

						; Must have freighters
						(not dockedFreighters)
							Nil
   
						; If we don't have enough freighters, then don't worry
						(and (ls (count dockedFreighters) 1) portsLeft)
							Nil

						; Random interval
						(and (gr (random 1 6) 3) portsLeft)
							Nil
						)
					)
							
		  </OnBehavior>
		
			<OnDestroy>
				(block Nil
					(intCorporateOnDestroy)
					
					; we scare any sister ships
				(block (targets)
					(setq targets (sysFindObject gSource "sAN:25; B:commonwealth;"))
					(enum targets target
						(block Nil
							(shpCancelOrders target)
							(shpOrder target 'gate)
							)
						)	
					)
					
					(sysCancelTimerEvent gSource "OnBehavior")
					(sysCancelTimerEvent gSource "OnTrafficControl")
					)
			</OnDestroy>
		</Events>
		
		
		<Language>
			<Text id="customs.chargedForDecon">
				(cat
					"Corporate security stops your ship for decontamination. "
					"You are automatically charged " (@ gData 'cost) " for decontaminating your ship."
					)
			</Text>
			<Text id="customs.cantAffordDecon">
				(cat
					"Corporate security stops your ship for decontamination. "
					"Unfortunately, you do not have " (@ gData 'cost) " to pay for decontamination."
					)
			</Text>
		</Language>
	</StationType>
Flying Irresponsibly In Eridani......

I don't like to kill pirates in cold blood ..I do it.. but I don't like it..

Post Reply