public static int NewWeapon(CLRScriptBase script, int maxValue)
{
int itemType = SelectWeaponType(ref maxValue);
int weaponValue = Pricing.BaseItemValues[itemType];
maxValue -= weaponValue;
generateId++;
uint weapon = script.CreateItemOnObject(WeaponResrefs[itemType], script.OBJECT_SELF, 1, WeaponResrefs[itemType]+generateId.ToString(), FALSE);
#region About +1.4 weapons
if (maxValue > 4220)
{
if (Generation.rand.Next(10) > 0)
{
if (Pricing.GetIsAmmunition(itemType))
{
if (itemType == BASE_ITEM_BULLET)
{
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_BLUDGEONING, 1), weapon, 0.0f);
}
else
{
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_PIERCING, 1), weapon, 0.0f);
}
}
else
{
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyEnhancementBonus(1), weapon, 0.0f);
}
switch (Generation.rand.Next(7))
{
case 0:
script.SetFirstName(weapon, "Flametouched " + script.GetName(weapon) + " +1");
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE, 1), weapon, 0.0f);
if (Pricing.GetIsAmmunition(itemType))
{
weaponValue += 1600;
}
else
{
weaponValue += 4220;
}
break;
case 1:
script.SetFirstName(weapon, "Frosttouched " + script.GetName(weapon) + " +1");
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD, 1), weapon, 0.0f);
if (Pricing.GetIsAmmunition(itemType))
{
weaponValue += 1600;
}
else
{
weaponValue += 4220;
}
break;
case 3:
script.SetFirstName(weapon, "Acidtouched " + script.GetName(weapon) + " +1");
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID, 1), weapon, 0.0f);
if (Pricing.GetIsAmmunition(itemType))
{
weaponValue += 1600;
}
else
{
weaponValue += 4220;
}
break;
case 4:
script.SetFirstName(weapon, "Sparktouched " + script.GetName(weapon) + " +1");
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, 1), weapon, 0.0f);
if (Pricing.GetIsAmmunition(itemType))
{
weaponValue += 1600;
}
else
{
weaponValue += 4220;
}
break;
case 5:
script.SetFirstName(weapon, "Humming " + script.GetName(weapon) + " +1");
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC, 1), weapon, 0.0f);
if (Pricing.GetIsAmmunition(itemType))
{
weaponValue += 1600;
}
else
{
weaponValue += 4220;
}
break;
case 6:
script.SetFirstName(weapon, "Blessed " + script.GetName(weapon) + " +1");
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL, IP_CONST_DAMAGETYPE_MAGICAL, 1), weapon, 0.0f);
if (Pricing.GetIsAmmunition(itemType))
{
weaponValue += 1500;
}
else
{
weaponValue += 3945;
}
break;
}
}
else
{
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyEnhancementBonus(1), weapon, 0.0f);
script.SetFirstName(weapon, script.GetName(weapon) + " +1");
weaponValue += 2300;
}
}
#endregion
#region Simple Enchantment, +1
else if (maxValue > 2300)
{
if (Generation.rand.Next(10) > 0)
{
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyEnhancementBonus(1), weapon, 0.0f);
script.SetFirstName(weapon, script.GetName(weapon) + " +1");
weaponValue += 2300;
}
else
{
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyAttackBonus(1), weapon, 0.0f);
script.SetFirstName(weapon, "Masterwork " + script.GetName(weapon));
weaponValue += 300;
}
}
#endregion
#region Simple Bonus Damage, < +1 equiv
else if (maxValue > 1100)
{
if (Generation.rand.Next(10) > 0)
{
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyAttackBonus(1), weapon, 0.0f);
switch (Generation.rand.Next(7))
{
case 0:
script.SetFirstName(weapon, "Flametouched " + script.GetName(weapon));
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_FIRE, 1), weapon, 0.0f);
weaponValue += 1100;
break;
case 1:
script.SetFirstName(weapon, "Frosttouched " + script.GetName(weapon));
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_COLD, 1), weapon, 0.0f);
weaponValue += 1100;
break;
case 3:
script.SetFirstName(weapon, "Acidtouched " + script.GetName(weapon));
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ACID, 1), weapon, 0.0f);
weaponValue += 1100;
break;
case 4:
script.SetFirstName(weapon, "Sparktouched " + script.GetName(weapon));
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_ELECTRICAL, 1), weapon, 0.0f);
weaponValue += 1100;
break;
case 5:
script.SetFirstName(weapon, "Humming " + script.GetName(weapon));
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonus(IP_CONST_DAMAGETYPE_SONIC, 1), weapon, 0.0f);
weaponValue += 1100;
break;
case 6:
script.SetFirstName(weapon, "Blessed " + script.GetName(weapon));
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_EVIL, IP_CONST_DAMAGETYPE_MAGICAL, 1), weapon, 0.0f);
weaponValue += 1000;
break;
}
}
else
{
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyAttackBonus(1), weapon, 0.0f);
script.SetFirstName(weapon, "Masterwork " + script.GetName(weapon));
weaponValue += 300;
}
}
#endregion
#region Masterwork Only
else if (maxValue > 300)
{
if (Generation.rand.Next(10) > 0)
{
script.AddItemProperty(DURATION_TYPE_PERMANENT, script.ItemPropertyAttackBonus(1), weapon, 0.0f);
script.SetFirstName(weapon, "Masterwork " + script.GetName(weapon));
weaponValue += 300;
}
}
#endregion
if (Pricing.GetIsAmmunition(itemType))
{
script.SetItemStackSize(weapon, 50, FALSE);
weaponValue /= 2;
}
Pricing.CalculatePrice(script, weapon);
return weaponValue;
}