Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class SillyRPGArtifactManager extends Info
- placeable;
- struct ArtifactChance
- {
- var() class<RPGArtifact> ArtifactClass;
- var() int Chance;
- var() int MaxArtifacts;
- var() int LifeSpan;
- var int ArtifactsCreated;
- };
- var() int ArtifactDelay; //spawn an artifact every this many seconds - zero disables
- var() array<ArtifactChance> AvailableArtifacts;
- var int TotalArtifactChance; // precalculated total Chance of all artifacts
- var array<PathNode> PathNodes;
- function PostBeginPlay()
- {
- local NavigationPoint N;
- local int x;
- Super.PostBeginPlay();
- for (x = 0; x < AvailableArtifacts.length; x++)
- if (AvailableArtifacts[x].ArtifactClass == None)
- {
- AvailableArtifacts.Remove(x, 1);
- x--;
- }
- if (ArtifactDelay > 0 && AvailableArtifacts.length > 0)
- {
- for (N = Level.NavigationPointList; N != None; N = N.NextNavigationPoint)
- if (PathNode(N) != None && !N.IsA('FlyingPathNode'))
- PathNodes[PathNodes.length] = PathNode(N);
- for (x = 0; x < AvailableArtifacts.length; x++)
- {
- TotalArtifactChance += AvailableArtifacts[x].Chance;
- }
- if (TotalArtifactChance <= 0)
- Destroy();
- }
- else
- Destroy();
- }
- function MatchStarting()
- {
- SetTimer(ArtifactDelay, true);
- }
- // select a random artifact based on the Chance entries in the artifact list and return its index
- function int GetRandomArtifactIndex()
- {
- local int i;
- local int Chance;
- Chance = Rand(TotalArtifactChance);
- for (i = 0; i < AvailableArtifacts.Length; i++)
- {
- Chance -= AvailableArtifacts[i].Chance;
- if (Chance < 0)
- {
- return i;
- }
- }
- }
- function Timer()
- {
- local int Chance;
- Chance = GetRandomArtifactIndex();
- SpawnArtifact(Chance);
- }
- function SpawnArtifact(int Index)
- {
- local Pickup APickup;
- if (AvailableArtifacts[Index].MaxArtifacts <=0 || AvailableArtifacts[Index].MaxArtifacts > AvailableArtifacts[Index].ArtifactsCreated)
- {
- APickup = spawn(AvailableArtifacts[Index].ArtifactClass.default.PickupClass,,, PathNodes[Rand(PathNodes.length)].Location);
- if (APickup == None)
- return;
- APickup.RespawnEffect();
- APickup.RespawnTime = 0.0;
- APickup.AddToNavigation();
- APickup.bDropped = true;
- APickup.SetTimer(AvailableArtifacts[Index].LifeSpan, false);
- AvailableArtifacts[Index].ArtifactsCreated ++;
- }
- }
- defaultproperties
- {
- ArtifactDelay=30
- AvailableArtifacts(0)=(ArtifactClass=Class'SillyRPGv1-1.ArtifactWeaponBasePlacer',Chance=1,MaxArtifacts=0,LifeSpan=120,ArtifactsCreated=0)
- bBlockZeroExtentTraces=False
- bBlockNonZeroExtentTraces=False
- }
Advertisement
Add Comment
Please, Sign In to add comment