/* -------------------------------------------------------------- KF_StoryInvPickupSpot -------------------------------------------------------------- When placing Inventory Pickups in Story maps this actor should be used in place of KF_StoryInventoryPickups. Author : Alex Quick -------------------------------------------------------------- */ class KF_PlaceableStoryPickup extends xPickupBase hidecategories(PickupBase); /* Icon to render for this Pickup on the holding player's HUD */ var(Pickup_HUD) Material HUDMaterial; /* Icon to render over top of this Pickup while it's sitting on the ground */ var(Pickup_HUD) Material GroundMaterial; /* If true, don't perform line traces to determine if we should render the GroundMaterial (setting this true is an optimization) */ var(Pickup_HUD) bool bRenderIconThroughWalls; /* Modifier to apply to the holding player's groundspeed */ var(Pickup_PawnModifiers) float MovementSpeedModifier; var(Pickup_Feedback) localized string Message_Dropped; // Human readable description when dropped. var(Pickup_Feedback) localized string Message_PickedUp; var(Pickup_Feedback) localized string Message_Use; var(Pickup_Audio) Sound Sound_Dropped,Sound_PickedUp; var(Pickup_3P) vector Attachment_Offset; var(Pickup_3P) name Attachment_Bone; var(Pickup_3P) rotator Attachment_Rotation; var(Pickup_1P) bool bRender1PMesh; /* When holding this item, display it with an 'X-Ray' shader in first person */ var(Pickup_1P) bool bUseFirstPersonXRayEffect; var(Pickup_1P) rotator ViewRotationOffset; var(Pickup_1P) vector ViewLocationOffset; /* Multiplies the height of the player's jumpZ by this amount */ var(Pickup_PawnModifiers) float JumpZModifier; /* List of weapons which cannot be used when this Item is carrieed */ var(Pickup_Restrictions) array< Class > Weapons_Restricted; /* List of weapons which can *only* be used when this item is carried */ var(Pickup_Restrictions) array < Class > Weapons_Allowed; /* Changes the amount of interest ZEDs will show in the player holding this item */ var(Pickup_PawnModifiers) float AIThreatModifier; /* Number of items of this class which can be held by a pawn at once */ var(Pickup_Restrictions) int MaxHeldCopies; /* Number of Inventory blocks this item takes up of the holder's weight allowance */ var(Pickup_Restrictions) int InventoryWeight; /* Determines when the pickup actor should be spawned for this pickupspot */ enum EPickupSpawnMethod { Spawn_OnMapLoad, Spawn_OnMatchBegin, Spawn_OnTrigger, }; var(Pickup_Spawning) EPickupSpawnMethod SpawnMethod; var KF_StoryInventoryPickup MyStoryPickup; struct SCarriedEvent { var() name EventName; var() float TriggerInterval; var() int NumRepeats; var int NumTimesTriggered; var float LastTriggerTime; }; var(Events) array CarriedEvents; var(Events) name DroppedEvent; /* UUs per second this pickup should travel at when tossed by a player */ var(Pickup_Tossing) float Pickup_TossVelocity; /* If true, orient this pickup's toss direction from the players camera instead of his pawn rotation */ var(Pickup_Tossing) bool bDropFromCameraLoc; /* Type of damage this pickup does when it smacks into something :- ) */ var(Pickup_Tossing) class ImpactDamType; var(Pickup_Tossing) int ImpactDamage; simulated event PostBeginPlay() { if(SpawnMethod == Spawn_OnMapLoad) { Super.PostBeginPlay(); } } function MatchStarting() { Super.MatchStarting(); if(SpawnMethod == Spawn_OnMatchBegin) { SpawnPickup(); } } event Trigger( Actor Other, Pawn EventInstigator ) { Super.Trigger(Other,EventInstigator); if(SpawnMethod == Spawn_OnTrigger) { SpawnPickup(); } } simulated function CopyPropertiesTo(KF_StoryInventoryPickup NewPickup) { // log("*******************************************************"); // log("Client Copy properties from : "@self@" to - :"@NewPickup); NewPickup.StoryPickupBase = self; NewPickup.Event = event; NewPickup.tag = tag; NewPickup.MaxHeldCopies = MaxHeldCopies; NewPickup.SetCollisionSize(CollisionRadius,CollisionHeight); NewPickup.PrePivot = PrePivot; NewPickup.PlacedRotation = Rotation; NewPickup.SetDrawType(DrawType); NewPickup.SetStaticMesh(StaticMesh); NewPickup.LinkMesh(Mesh); NewPickup.SetDrawScale(DrawScale); NewPickup.SetDrawScale3D(DrawScale3D); NewPickup.bRenderIconThroughWalls = bRenderIconThroughWalls; NewPickup.bUseFirstPersonXRayEffect = bUseFirstPersonXRayEffect; NewPickup.MovementSpeedModifier = MovementSpeedModifier; NewPickup.AIThreatModifier = AIThreatModifier; NewPickup.Weight = InventoryWeight; NewPickup.default.DroppedMessage = Message_Dropped; NewPickup.default.UseMeMessage = Message_Use; NewPickup.default.PickupMessage = Message_PickedUp; NewPickup.CarriedMaterial = HUDMaterial ; Newpickup.GroundMaterial = GroundMaterial; NewPickup.PickupSound = Sound_PickedUp; NewPickup.DroppedSound = Sound_Dropped; NewPickup.UV2Texture = UV2Texture; NewPickup.bRender1PMesh = bRender1PMesh; NewPickup.ViewLocationOffset = ViewLocationOffset; NewPickup.ViewRotationOffset = ViewRotationOffset; NewPickup.Pickup_TossVelocity = Pickup_TossVelocity; NewPickup.bDropFromCameraLoc = bDropFromCameraLoc; NewPickup.ImpactDamType = ImpactDamType; NewPickup.ImpactDamage = ImpactDamage; // Lighting NewPickup.LightType = LightType; NewPickup.LightCone = LightCone; NewPickup.LightBrightness = LightBrightness; NewPickup.LightRadius = LightRadius; NewPickup.bUseDynamicLights = bUseDynamicLights; NewPickup.LightSaturation = LightSaturation; NewPickup.bDynamicLight = bDynamicLight; NewPickup.AmbientGlow = AmbientGlow; NewPickup.LightHue = LightHue; NewPickup.bLightChanged = true; } function SpawnPickup() { if( myPickUp != none || PowerUp == None || Level.NetMode == NM_Client ) return; myPickUp = Spawn(PowerUp,,,Location,Rotation); if(myPickup != none) { myPickUp.PickUpBase = self; MyStoryPickup = KF_StoryInventoryPickup(myPickup); if(MyStoryPickup != none) { CopyPropertiesTo(MyStoryPickup); } } if (myMarker != None) { myMarker.markedItem = myPickUp; myMarker.ExtraCost = ExtraPathCost; if (myPickUp != None) myPickup.MyMarker = MyMarker; } else log("No marker for "$self); } defaultproperties { ImpactDamType = class 'Engine.Crushed' ImpactDamage = 0 Pickup_TossVelocity = 250 bRender1PMesh = true bStatic=false // to receive events bRenderIconThroughWalls = true bHidden = true bUseDynamicLights = true bNetInitialRotation = true bNoDelete = true DrawType=DT_StaticMesh PrePivot=(X=0,Y=0,Z=10) DrawScale = 1 StaticMesh = StaticMesh 'DetailSM.Crates.WoodBox_B' CollisionHeight = 10 CollisionRadius = 30 Message_Use = "Press USE key to Pick up" MovementSpeedModifier = 1.f JumpZModifier = 1.f AIThreatModifier = 1.f PowerUp = class 'KF_StoryInventoryPickup' Sound_Dropped = Sound'Inf_Player.RagdollImpacts.BodyImpact' Sound_PickedUp = Sound 'KF_AxeSnd.Axe_Select' }