Core.Object | +--Engine.Actor | +--Engine.Pickup | +--Engine.WeaponPickup
bool
bWeaponStay
float
BotDesireability(Pawn Bot)
// tell the bot how much it wants this weapon pickup // called when the bot is trying to decide which inventory pickup to go after next
simulated
PostBeginPlay()
//_____________________________________________________________________________
void
SetWeaponStay()
00001 // CHANGENOTE: All changes to this class since v739 are related to the Weapon code updates. 00002 00003 class WeaponPickup extends Pickup 00004 abstract; 00005 00006 var() bool bWeaponStay; 00007 00008 //_____________________________________________________________________________ 00009 event ParseDynamicLoading(LevelInfo MyLI) 00010 { 00011 Log("ParseDynamicLoading Actor="$self); 00012 class<Weapon>(default.InventoryType).Static.StaticParseDynamicLoading(MyLI); 00013 // MyLI.ForcedMeshes[MyLI.ForcedMeshes.Length] = mesh(DynamicLoadObject(class<Weapon>(default.InventoryType).default.MeshName, class'mesh')); 00014 } 00015 00016 //_____________________________________________________________________________ 00017 simulated function PostBeginPlay() 00018 { 00019 Super.PostBeginPlay(); 00020 SetWeaponStay(); 00021 MaxDesireability = 1.2 * class<Weapon>(InventoryType).Default.AIRating; 00022 } 00023 00024 function SetWeaponStay() 00025 { 00026 bWeaponStay = bWeaponStay || Level.Game.bCoopWeaponMode; 00027 } 00028 00029 // tell the bot how much it wants this weapon pickup 00030 // called when the bot is trying to decide which inventory pickup to go after next 00031 function float BotDesireability(Pawn Bot) 00032 { 00033 local Weapon AlreadyHas; 00034 local float desire; 00035 00036 // bots adjust their desire for their favorite weapons 00037 desire = MaxDesireability + Bot.Controller.AdjustDesireFor(self); 00038 00039 // see if bot already has a weapon of this type 00040 AlreadyHas = Weapon(Bot.FindInventoryType(InventoryType)); 00041 if ( AlreadyHas != None ) 00042 { 00043 if ( (RespawnTime < 10) 00044 && ( bHidden || (AlreadyHas.AmmoType == None) 00045 || (AlreadyHas.AmmoType.AmmoAmount < AlreadyHas.AmmoType.MaxAmmo)) ) 00046 return 0; 00047 00048 // can't pick it up if weapon stay is on 00049 if ( bWeaponStay && ((Inventory == None) || Inventory.bTossedOut) ) 00050 return 0; 00051 00052 // bot wants this weapon for the ammo it holds 00053 if ( AlreadyHas.HasAmmo() ) 00054 return FMax( 0.25 * desire, 00055 AlreadyHas.AmmoType.PickupClass.Default.MaxDesireability 00056 * FMin(1, 0.15 * AlreadyHas.AmmoType.MaxAmmo/AlreadyHas.AmmoType.AmmoAmount) ); 00057 else 00058 return 0.05; 00059 } 00060 00061 // incentivize bot to get this weapon if it doesn't have a good weapon already 00062 if ( (Bot.Weapon == None) || (Bot.Weapon.AIRating <= 0.4) ) 00063 return 2*desire; 00064 00065 return desire; 00066 } 00067 00068 defaultproperties 00069 { 00070 MaxDesireability=0.500000 00071 RespawnTime=30.000000 00072 PickupMessage="You got a weapon" 00073 Texture=Texture'Engine.S_Weapon' 00074 }