// ------------------------------------------------------------------ // Flamer Ammo Pack datablock ShapeBaseImageData(FlamerAmmoPackImage) { shapeFile = "ammo_plasma.dts"; item = FlamerAmmoPack; mountPoint = 1; offset = "0 0 -0.4"; mass = 32; }; datablock ItemData(FlamerAmmoPack) { className = Pack; catagory = "Packs"; shapeFile = "ammo_plasma.dts"; offset = "0 -0.2 -0.55"; mass = 18.0; elasticity = 0.2; friction = 0.6; pickupRadius = 2; rotate = true; image = "FlamerAmmoPackImage"; pickUpName = "an flamer ammo pack"; computeCRC = true; // lightType = "PulsingLight"; // lightColor = "0.2 0.4 0.0 1.0"; // lightTime = "1200"; // lightRadius = "1.0"; max[ChaingunAmmo] = 0; max[MortarAmmo] = 0; max[MissileLauncherAmmo] = 0; max[mgclip] = 0; max[SniperGunAmmo] = 0; max[BazookaAmmo] = 0; max[MG42Clip] = 0; max[Pistolclip] = 0; max[FlamerAmmo] = 150; max[AALauncherAmmo] = 0; max[RifleClip] = 0; max[ShotgunClip] = 0; max[RShotgunClip] = 0; max[LMissileLauncherAmmo] = 0; max[RPGAmmo] = 0; max[PBCAmmo] = 0; }; function FlamerAmmoPack::onPickup(%this,%pack,%player,%amount) { // %this = AmmoPack datablock // %pack = AmmoPack object number // %player = player // %amount = 1 for (%idx = 0; %idx < $numAmmoItems; %idx++) { %ammo = $AmmoItem[%idx]; if (%pack.inv[%ammo] > 0) { %amount = %pack.getInventory(%ammo); %player.incInventory(%ammo,%amount); %pack.setInventory(%ammo,0); } else if(%pack.inv[%ammo] == -1) { // this particular type of ammo has already been exhausted for this pack; // don't give the player any } else { // Assume it's full if no inventory has been assigned %player.incInventory(%ammo,%this.max[%ammo]); } } } function FlamerAmmoPack::onThrow(%this,%pack,%player) { // %this = AmmoPack datablock // %pack = AmmoPack object number // %player = player %player.throwflamerAmmoPack = 1; dropFlamerAmmoPack(%pack, %player); // do the normal ItemData::onThrow stuff -- sound and schedule deletion serverPlay3D(ItemThrowSound, %player.getTransform()); %pack.schedulePop(); } function FlamerAmmoPack::onInventory(%this,%player,%value) { // %this = AmmoPack // %player = player // %value = 1 if gaining a pack, 0 if losing a pack // the below test is necessary because this function is called everytime the ammo // pack gains or loses an item if(%player.getClassName() $= "Player") { if(!%value) if(%player.throwflamerAmmoPack == 1) { %player.throwflamerAmmoPack = 0; } else { dropflamerAmmoPack(-1, %player); } } Pack::onInventory(%this,%player,%value); } function dropFlamerAmmoPack(%packObj, %player) { // %packObj = Ammo Pack object number if pack is being thrown, -1 if sold at inv station // %player = player object for(%i = 0; %i < $numAmmoItems; %i++) { %ammo = $AmmoItem[%i]; %pAmmo = %player.getInventory(%ammo); %pMax = %player.getDatablock().max[%ammo]; if(%pAmmo > %pMax) { if(%packObj > 0) { %packObj.setInventory(%ammo, %pAmmo - %pMax); } %player.setInventory(%ammo, %pMax); } else { if(%packObj > 0) { %packObj.inv[%ammo] = -1; } } } }