Core.Object | +--Engine.Actor | +--Engine.Pickup | +--Engine.ArmorPickup
int
ProtectionLevel
float
BotDesireability(Pawn Bot)
//_____________________________________________________________________________
Inventory
SpawnCopy(Pawn Other)
//_____________________________________________________________________________ // Either give this inventory to player Other, or spawn a copy // and give it to the player Other, setting up original to be respawned.
00001 class ArmorPickup extends Pickup 00002 abstract; 00003 00004 var() int ProtectionLevel; 00005 00006 //_____________________________________________________________________________ 00007 event ParseDynamicLoading(LevelInfo MyLI) 00008 { 00009 Log("ParseDynamicLoading Actor="$self); 00010 class<Armor>(default.InventoryType).Static.StaticParseDynamicLoading(MyLI); 00011 // MyLI.ForcedMeshes[MyLI.ForcedMeshes.Length] = mesh(DynamicLoadObject(class<Weapon>(default.InventoryType).default.MeshName, class'mesh')); 00012 } 00013 00014 //_____________________________________________________________________________ 00015 // Either give this inventory to player Other, or spawn a copy 00016 // and give it to the player Other, setting up original to be respawned. 00017 function inventory SpawnCopy( pawn Other ) 00018 { 00019 local inventory Copy; 00020 00021 if ( Inventory != None ) 00022 { 00023 Copy = Inventory; 00024 Inventory = None; 00025 } 00026 else 00027 { 00028 Copy = spawn(InventoryType,Other,,,rot(0,0,0)); 00029 // ELR Added this to make each armor type unique in inventory (not giletMk1 & Mk2) 00030 Copy.Charge = ProtectionLevel; 00031 } 00032 00033 Copy.GiveTo( Other ); 00034 00035 if( Level.Game.ShouldRespawn(self) ) 00036 StartSleeping(); 00037 else 00038 Destroy(); 00039 return Copy; 00040 } 00041 00042 //_____________________________________________________________________________ 00043 function float BotDesireability( pawn Bot ) 00044 { 00045 local Inventory AlreadyHas; 00046 local Armor AlreadyHasArmor; 00047 local float desire; 00048 local bool bChecked; 00049 00050 desire = MaxDesireability; 00051 00052 if ( RespawnTime < 10 ) 00053 { 00054 bChecked = true; 00055 AlreadyHas = Bot.FindInventoryType(InventoryType); 00056 if ( AlreadyHas != None ) 00057 { 00058 if ( Inventory != None ) 00059 { 00060 if( Inventory.Charge <= AlreadyHas.Charge ) 00061 return -1; 00062 } 00063 else if ( InventoryType.Default.Charge <= AlreadyHas.Charge ) 00064 return -1; 00065 } 00066 } 00067 00068 if ( !bChecked ) 00069 AlreadyHasArmor = Armor(Bot.FindInventoryType(InventoryType)); 00070 if ( AlreadyHasArmor != None ) 00071 desire *= (1 - AlreadyHasArmor.Charge * AlreadyHasArmor.ArmorAbsorption * 0.00003); 00072 00073 if ( Armor(Inventory) != None ) 00074 { 00075 // pointing to specific, existing item 00076 desire *= (Inventory.Charge * 0.005); 00077 desire *= (Armor(Inventory).ArmorAbsorption * 0.01); 00078 } 00079 else 00080 { 00081 desire *= (InventoryType.default.Charge * 0.005); 00082 desire *= (class<Armor>(InventoryType).default.ArmorAbsorption * 0.01); 00083 } 00084 return desire; 00085 } 00086 00087 defaultproperties 00088 { 00089 CollisionHeight=20.000000 00090 }