Updated Release Archive
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
This commit is contained in:
154
nwn/trunk/smp/xxx_s_appraisal.nss
Normal file
154
nwn/trunk/smp/xxx_s_appraisal.nss
Normal file
@@ -0,0 +1,154 @@
|
||||
/*:://////////////////////////////////////////////
|
||||
//:: Spell Name Appraisal
|
||||
//:: Spell FileName XXX_S_Appraisal
|
||||
//:://////////////////////////////////////////////
|
||||
//:: In Game Spell desctiption
|
||||
//:://////////////////////////////////////////////
|
||||
Divination
|
||||
Level: Brd 1, Sor/Wiz 1
|
||||
Components: V, S, F
|
||||
Casting Time: 1 full round
|
||||
Range: Touch
|
||||
Target: One item
|
||||
Duration: Instantaneous
|
||||
Saving Throw: Will negates (harmless, object)
|
||||
Spell Resistance: Yes (harmless, object)
|
||||
Source: Various (Aenea DM)
|
||||
|
||||
When this spell is cast, it brings to the caster's mind the amount of money,
|
||||
to within 10% of their value, that the item is worth to the average buyer.
|
||||
An item may be worth more or less to specific buyers, but this spell provides
|
||||
only what an average buyer would pay for it.
|
||||
|
||||
If this spell is cast on a magical item, the appraisal is based only on the
|
||||
non-magical properties of the item, with any magical weapons being treated
|
||||
as masterwork, +1 attack only, weapons.
|
||||
|
||||
Focus: A miniature scale worth at least 50 gp.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Spell Effects Applied / Notes
|
||||
//:://////////////////////////////////////////////
|
||||
The example was:
|
||||
|
||||
If this spell is cast on a magical item, the appraisal is based only on the
|
||||
non-magical properties of the item. As an example, a keen flaming longsword
|
||||
+1 would, according to this spell, be worth between 284 gp and 346 gp
|
||||
(within 10% of the price of a masterwork longsword, which is 315 gp).
|
||||
|
||||
Which is fine.
|
||||
|
||||
This is done via. 2da lookups, as to make it easier. Noting, of course, that
|
||||
unless they know it is masterwork, they will not even get the +1 attack bonus
|
||||
bonus to the price.
|
||||
|
||||
Arrows ETC which are treated as 1 GP, cannot be anything but 1GP. Nothing
|
||||
will be estimated at 0.
|
||||
|
||||
Masterwork (+1 attack) costs 404 when added to a blank weapon - thusly, this
|
||||
is how much will be added if the weapon is actually magical.
|
||||
|
||||
NOTE:
|
||||
|
||||
Average buyer, as it is only the base cost, is using a check of 100% basically.
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Jasperre
|
||||
//::////////////////////////////////////////////*/
|
||||
|
||||
#include "SMP_INC_SPELLS"
|
||||
|
||||
const int SMP_MASTERWORK_BONUSPRICE = 404;
|
||||
|
||||
void main()
|
||||
{
|
||||
// Spell hook check.
|
||||
if(!SMP_SpellHookCheck(SMP_SPELL_APPRAISAL)) return;
|
||||
|
||||
//Declare major variables
|
||||
object oCaster = OBJECT_SELF;
|
||||
object oTarget = GetSpellTargetObject();
|
||||
object oPossessor = GetItemPossessor(oTarget);
|
||||
int nValue, nBasePrice;
|
||||
int bMagical = SMP_IP_GetIsEnchanted(oTarget);
|
||||
int bIdentified = GetIdentified(oTarget);
|
||||
int bPlot = GetPlotFlag(oTarget);
|
||||
float fTimesBy;
|
||||
|
||||
// Check for focus
|
||||
if(!SMP_ComponentFocusItem(SMP_ITEM_MINATURE_SCALES, "Minature scales worth at least 50GP", "Appraisal")) return;
|
||||
|
||||
// Check target - must be an item
|
||||
if(GetObjectType(oTarget) != OBJECT_TYPE_ITEM)
|
||||
{
|
||||
FloatingTextStringOnCreature("*You must cast appraisal on a item*", oCaster, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
// Signal event for possessor - make sure it is some valid creature (else, the caster)
|
||||
if(!GetIsObjectValid(oPossessor))
|
||||
{
|
||||
oPossessor = oCaster;
|
||||
}
|
||||
|
||||
// If plot, report it (they'd know if they tried to sell it anyway)
|
||||
if(bPlot == TRUE)
|
||||
{
|
||||
FloatingTextStringOnCreature("*The item targeted is too important to sell*", oCaster, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Report the price
|
||||
nBasePrice = StringToInt(Get2DAString("baseitems", "BaseCost", GetBaseItemType(oTarget)));
|
||||
|
||||
// If identified, we will know if it is magical
|
||||
if(bIdentified == TRUE)
|
||||
{
|
||||
// If magical, add on the SMP_MASTERWORK_BONUSPRICE amount
|
||||
if(bMagical == TRUE)
|
||||
{
|
||||
nBasePrice += SMP_MASTERWORK_BONUSPRICE;
|
||||
}
|
||||
}
|
||||
|
||||
// 10% either way.
|
||||
if(d2() == 1)
|
||||
{
|
||||
// Add 0-10% value
|
||||
fTimesBy = 1.0 + (IntToFloat(Random(10001)) / 100000);
|
||||
if(fTimesBy == 0.0 || fTimesBy == 1.0)
|
||||
{
|
||||
nValue = nBasePrice;
|
||||
}
|
||||
else
|
||||
{
|
||||
nValue = FloatToInt(IntToFloat(nBasePrice) * fTimesBy);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Take away 0-10% value
|
||||
fTimesBy = 1.0 - (IntToFloat(Random(10001)) / 100000);
|
||||
if(fTimesBy == 0.0 || fTimesBy == 1.0)
|
||||
{
|
||||
nValue = nBasePrice;
|
||||
}
|
||||
else
|
||||
{
|
||||
nValue = FloatToInt(IntToFloat(nBasePrice) * fTimesBy);
|
||||
}
|
||||
}
|
||||
// Check nValue, must be >= 1
|
||||
if(nValue < 1) nValue = 1;
|
||||
|
||||
// Report value
|
||||
FloatingTextStringOnCreature("*You determine " + GetName(oTarget) + " to be worth around " + IntToString(nValue) + "GP*", oCaster, FALSE);
|
||||
|
||||
// Delcare effects
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_MAGICAL_VISION);
|
||||
|
||||
// Signal event
|
||||
SMP_SignalSpellCastAt(oPossessor, SMP_SPELL_APPRAISAL, FALSE);
|
||||
|
||||
// Apply effects
|
||||
SMP_ApplyVFX(oPossessor, eVis);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user