在C&C2里,NOD方具有名为隐形发生器的建筑,它可以使一定范围内的部队隐形。现在我们在绝命时刻里加入这一建筑。首先在System.ini里加入以下代码:
Object stealthgenobject
VisionRange = 0.0
EditorSorting = SYSTEM
Draw = W3DModelDraw ModuleTag_NOTREALLYADRAW
DefaultConditionState
Model = None
End
End
KindOf = NO_COLLIDE IMMOBILE UNATTACKABLE
Body = ImmortalBody ModuleTag_01
MaxHealth = 1
InitialHealth = 1
End
Behavior = GrantStealthBehavior ModuleTag_02
StartRadius = 200.0
FinalRadius = 200.0
RadiusGrowRate = 100.0
KindOf = VEHICLE INFANTRY
End
End
然后随便拷贝一个建筑的代码作为隐形发生器的代码加入FactionBuilding.ini中,并加入以下代码:
Behavior = FireWeaponUpdate ModuleTag_xx
Weapon = stealthgenWeapon
End
并且在Weapon.ini里加入
Weapon stealthgenWeapon
PrimaryDamage = 0
PrimaryDamageRadius = 0.0
AttackRange = 1.0
DamageType = ARMOR_PIERCING
DeathType = NORMAL
WeaponSpeed = 99999
ProjectileObject = stealthgenobject
RadiusDamageAffects = ALLIES ENEMIES NEUTRALS
DelayBetweenShots = 250
ClipSize = 0
ClipReloadTime = 0
End
最后,在可以被隐形发生器影响的单位的代码中加入
Behavior = StealthUpdate ModuleTag_xx
StealthDelay = 999999999
StealthForbiddenConditions = FIRING_PRIMARY TAKING_DAMAGE MOVING
FriendlyOpacityMin = 50.0%
FriendlyOpacityMax = 100.0%
InnateStealth = No
OrderIdleEnemiesToAttackMeUponReveal = Yes
MoveThresholdSpeed = 3
End
这样一来,所有进入隐形发生器影响范围的单位都会隐形。而当他们移动的时候--比如说移动出隐形发生器影响范围--便会显形。不过这样的方法有个问题:当隐形发生器被卖掉或者被摧毁的时候,正在受到影响(即隐形中)的单位不会自动显形。如果想要解决这个问题,有一个并不是很理想的方法:
首先,回到隐形发生器的代码,加入以下代码:
Behavior = FireWeaponWhenDeadBehavior ModuleTag_xx
DeathWeapon = stealthdisableWeapon
StartsActive = Yes
End
Behavior = ObjectCreationUpgrade ModuleTag_xx
UpgradeObject = OCL_stealthdieDrone
TriggeredBy = Upgrade_AmericaBattleDrone
End
Behavior = GrantUpgradeCreate ModuleTag_xx
UpgradeToGrant = Upgrade_AmericaBattleDrone
End
Behavior = AIUpdateInterface ModuleTag_xx
End
在ObjectCreationList.ini里加入
ObjectCreationList OCL_stealthdieDrone
CreateObject
Offset = X:0 Y:0 Z:1
ObjectNames = stealthdieDrone
IgnorePrimaryObstacle = Yes
Disposition = LIKE_EXISTING
Count = 1
RequiresLivePlayer = Yes
End
End
在FactionUnit.ini里加入
Object stealthdieDrone
Draw = W3DModelDraw ModuleTag_NOTREALLYADRAW
DefaultConditionState
Model = None
End
End
EditorSorting = SYSTEM
TransportSlotCount = 0 ;how many “slots” we take in a transport (0 == not transportable)
ArmorSet
Conditions = None
Armor = InvulnerableAllArmor
End
VisionRange = 0
ShroudClearingRange = 0
; RadarPriority = UNIT
KindOf = NO_COLLIDE UNATTACKABLE NO_SELECT
Body = ActiveBody ModuleTag_02
MaxHealth = 10000.0
InitialHealth = 10000.0
End
Behavior = AIUpdateInterface ModuleTag_03
End
Locomotor = SET_NORMAL DroneLocomotor
Behavior = PhysicsBehavior ModuleTag_05
Mass = 5000.0
KillWhenRestingOnGround = Yes
AllowBouncing = No
End
Behavior = SlavedUpdate ModuleTag_06
GuardMaxRange = 1
GuardWanderRange = 1
AttackRange = 1
AttackWanderRange = 1
ScoutRange = 1
ScoutWanderRange = 1
StayOnSameLayerAsMaster = Yes
End
Behavior = DestroyDie ModuleTag_08
DeathTypes = ALL
End
Behavior = FireWeaponWhenDeadBehavior ModuleTag_98
DeathWeapon = stealthdisableWeapon
StartsActive = Yes
End
Behavior = StealthUpdate ModuleTag_99
StealthDelay = 0 ; msec
StealthForbiddenConditions = NONE
InnateStealth = Yes
OrderIdleEnemiesToAttackMeUponReveal = No
End
Geometry = CYLINDER
GeometryMajorRadius = 5.0
GeometryMinorRadius = 6.0
GeometryHeight = 3.0
GeometryIsSmall = Yes
Shadow = SHADOW_VOLUME
ShadowSizeX = 89 ; minimum elevation angle above horizon. Used to limit shadow length
End
在Weapon.ini里加入
Weapon stealthdisableWeapon
PrimaryDamage = 0.001
PrimaryDamageRadius = 250.0
AttackRange = 1.0
DamageType = FLAME
DeathType = NORMAL
WeaponSpeed = 99999
RadiusDamageAffects = ALLIES
DelayBetweenShots = 50
ClipSize = 0
ClipReloadTime = 0
End
这样一来,当隐形发生器被卖掉或者被摧毁的时候,受到影响(即隐形中)的单位便会自动显形了。
