...
Code Block |
---|
<object Name="12 Gauge Shotgun" Inherits="BaseMagazineRifle"> <part Name="Render" DisplayName="12 gauge shotgun" RenderString=")"></part> <part Name="Physics" bUsesTwoSlots="true" Weight="16"></part> <part Name="Commerce" Value="100"></part> <part Name="MissileWeapon" Skill="Rifle" NoWildfire="true" NoAmmoProjectile="Ammo12Gauge" ShotsPerAction="8" AmmoPerAction="1" ShotsPerAnimation="8" WeaponAccuracy="35" RangeIncrement="6"></part> <!-- heres the important bit that links the loader to AmmoPart="Ammo12Gauge", but we're going to use "AmmoGeneric" instead of an actual in game class part called "Ammo12Gauge"--> <part Name="MagazineAmmoLoader" ProjectileObject="" AmmoPart="Ammo12Gauge" MaxAmmo="6"></part> <!-- --> <part Name="Description" Short="A stockless, pump-action shotgun of jet black."></part> <part Name="Metal"></part> <tag Name="Tier" Value="3"></tag> <part Name="Examiner" AlternateDisplayName="rifle" Complexity="3" Difficulty="0"></part> </object> <object Name="Projectile12Gauge" Inherits="TemporaryProjectile"> <part Name="Projectile" BasePenetration="4" BaseDamage="1d10" ColorString="&y"></part> <part Name="Physics" IsReal="false"></part> </object> <object Name="12 Gauge Shell" Inherits="TemporaryProjectile"> <part Name="Render" DisplayName="12 gauge 00 buckshot" ColorString="&y"></part> <!-- heres the important bit that links it to AmmoPart="Ammo12Gauge" in the 12 Gauge Shotgun definition, give it an AmmoGeneric component and two tags, AmmoPartType with the value set to Ammo12Gauge, and a tag with just the name of the ammo part name itself --> <part Name="AmmoGeneric" ProjectileObject="Projectile12Gauge"></part> <tag Name="AmmoPartType" Value="Ammo12Gauge"></tag> <tag Name="Ammo12Gauge"></tag> <!-- --> <part Name="Physics" Category="Ammo"></part> <part Name="Description" Short="A brass-cased cartridge of round lead balls."></part> <part Name="TinkerItem" Bits="C" CanBuild="true" CanRepair="false" CanDisassemble="false" NumberMade="4"></part> <part Name="Commerce" Value="0.04"></part> </object> |
Scripting Impact Ammo Effects
Here's an example ammo part you can put on the projectile object that poisons on hit.
Code Block |
---|
using System;
namespace XRL.World.Parts
{
[Serializable]
public class Example_MissilePoisonOnHit : IPart
{
public int Chance = 0;
int Strength = 15;
string DamageIncrement = "3d3";
string Duration = "6-9";
public Example_MissilePoisonOnHit()
{
Name = "Example_MissilePoisonOnHit";
}
public override void Register(GameObject Object)
{
Object.RegisterPartEvent(this, "ProjectileHit");
}
public override bool FireEvent(Event E)
{
if (E.ID == "ProjectileHit")
{
if (Rules.Stat.Random(1, 100) <= Chance)
{
GameObject Defender = E.GetParameter("Defender") as GameObject;
if (Defender == null) return true;
if( !Defender.Statistics.ContainsKey("Toughness") || Rules.Stat.Roll("1d20")+Defender.Statistics["Toughness"].Modifier <= 10+Strength )
{
Defender.ApplyEffect( new Effects.Poisoned( Rules.Stat.Roll(Duration), DamageIncrement, Strength, ParentObject.pPhysics.Equipped ) );
}
}
}
return base.FireEvent(E);
}
}
} |