240 lines
9.3 KiB
Plaintext
240 lines
9.3 KiB
Plaintext
|
//::///////////////////////////////////////////////
|
||
|
//:: Name(ASG_RULE) Build Research
|
||
|
//:: FileName asg_rul_buldresr
|
||
|
//:: Copyright (c) 2001 Bioware Corp.
|
||
|
//:://////////////////////////////////////////////
|
||
|
/*
|
||
|
|
||
|
|
||
|
*/
|
||
|
//:://////////////////////////////////////////////
|
||
|
//:: Created By: Donny Wilbanks
|
||
|
//:: Created On: 09/07/02
|
||
|
//:://////////////////////////////////////////////
|
||
|
#include "nw_i0_plot"
|
||
|
#include "asg_include_mics"
|
||
|
|
||
|
object oChest = GetLocalObject(OBJECT_SELF,"ASG_MIC_CHEST");
|
||
|
int GetFocus()
|
||
|
{
|
||
|
int iFmod = 0;
|
||
|
object oFocusLevel = GetNearestObjectByTag("asg_magicfocus_1",OBJECT_SELF);
|
||
|
if (GetIsObjectValid(oFocusLevel))
|
||
|
{
|
||
|
iFmod = 5;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
oFocusLevel = GetNearestObjectByTag("asg_magicfocus_2",OBJECT_SELF);
|
||
|
if (GetIsObjectValid(oFocusLevel))
|
||
|
{
|
||
|
iFmod = 10;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
oFocusLevel = GetNearestObjectByTag("asg_magicfocus_3",OBJECT_SELF);
|
||
|
if (GetIsObjectValid(oFocusLevel))
|
||
|
{
|
||
|
iFmod = 20;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
oFocusLevel = GetNearestObjectByTag("asg_magicfocus_4",OBJECT_SELF);
|
||
|
if (GetIsObjectValid(oFocusLevel))
|
||
|
{
|
||
|
iFmod = 100;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
oFocusLevel = GetNearestObjectByTag("asg_magicfocus_5",OBJECT_SELF);
|
||
|
if (GetIsObjectValid(oFocusLevel))
|
||
|
{
|
||
|
iFmod = -20;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// **
|
||
|
return iFmod;
|
||
|
}
|
||
|
string AsgBaseType(object oItem)
|
||
|
{
|
||
|
int iBT = GetBaseItemType(oItem);
|
||
|
string sBaseT = "INVALID";
|
||
|
switch(iBT)
|
||
|
{
|
||
|
case(BASE_ITEM_AMULET): sBaseT = "Amulet";break;
|
||
|
case(BASE_ITEM_ARMOR): sBaseT = "Armor";break;
|
||
|
case(BASE_ITEM_ARROW): sBaseT = "Arrow";break;
|
||
|
case(BASE_ITEM_BASTARDSWORD): sBaseT = "Bastard Sword"; break;
|
||
|
case(BASE_ITEM_BATTLEAXE): sBaseT = "Battleaxe"; break;
|
||
|
case(BASE_ITEM_BELT): sBaseT = "Belt"; break;
|
||
|
case(BASE_ITEM_BOLT): sBaseT = "Bolt"; break;
|
||
|
case(BASE_ITEM_BOOK): sBaseT = "Book"; break;
|
||
|
case(BASE_ITEM_BOOTS): sBaseT = "Boots"; break;
|
||
|
case(BASE_ITEM_BRACER): sBaseT = "Bracer"; break;
|
||
|
case(BASE_ITEM_CLOAK): sBaseT = "Cloak"; break;
|
||
|
case(BASE_ITEM_CLUB): sBaseT = "Club"; break;
|
||
|
case(BASE_ITEM_DAGGER): sBaseT = "Dagger"; break;
|
||
|
case(BASE_ITEM_DART): sBaseT = "Dart";break;
|
||
|
case(BASE_ITEM_DIREMACE): sBaseT = "Dire Mace";break;
|
||
|
case(BASE_ITEM_DOUBLEAXE): sBaseT = "Double Axe";break;
|
||
|
case(BASE_ITEM_GLOVES): sBaseT = "Gloves"; break;
|
||
|
case(BASE_ITEM_GREATAXE): sBaseT = "Greataxe"; break;
|
||
|
case(BASE_ITEM_GREATSWORD): sBaseT = "Greatsword"; break;
|
||
|
case(BASE_ITEM_HALBERD): sBaseT = "Halberd"; break;
|
||
|
case(BASE_ITEM_HANDAXE): sBaseT = "Handaxe"; break;
|
||
|
case(BASE_ITEM_HEALERSKIT): sBaseT = "Healers Kit";break;
|
||
|
case(BASE_ITEM_HEAVYCROSSBOW): sBaseT = "Heavy Crossbow"; break;
|
||
|
case(BASE_ITEM_HEAVYFLAIL): sBaseT = "Heavy Flail"; break;
|
||
|
case(BASE_ITEM_HELMET): sBaseT = "Helmet"; break;
|
||
|
case(BASE_ITEM_KAMA): sBaseT = "Kama"; break;
|
||
|
case(BASE_ITEM_KATANA): sBaseT = "Katana"; break;
|
||
|
case(BASE_ITEM_KUKRI): sBaseT = "Kurkri"; break;
|
||
|
case(BASE_ITEM_LARGEBOX): sBaseT = "Large Box"; break;
|
||
|
case(BASE_ITEM_LARGESHIELD): sBaseT = "Large Sheild"; break;
|
||
|
case(BASE_ITEM_LIGHTCROSSBOW): sBaseT = "Light Crossbow"; break;
|
||
|
case(BASE_ITEM_LIGHTFLAIL): sBaseT = "Light Flail"; break;
|
||
|
case(BASE_ITEM_LIGHTHAMMER): sBaseT = "Light Hammer"; break;
|
||
|
case(BASE_ITEM_LIGHTMACE): sBaseT = "Light Mace"; break;
|
||
|
case(BASE_ITEM_LONGBOW): sBaseT = "Long Bow"; break;
|
||
|
case(BASE_ITEM_LONGSWORD): sBaseT = "Longsword"; break;
|
||
|
case(BASE_ITEM_MAGICROD): sBaseT = "Magic Rod"; break;
|
||
|
case(BASE_ITEM_MAGICSTAFF): sBaseT = "Magic Staff"; break;
|
||
|
case(BASE_ITEM_MAGICWAND): sBaseT = "Magic Wand"; break;
|
||
|
case(BASE_ITEM_MISCLARGE): sBaseT = "Misc Large"; break;
|
||
|
case(BASE_ITEM_MISCMEDIUM): sBaseT = "Misc Medium"; break;
|
||
|
case(BASE_ITEM_MISCSMALL): sBaseT = "Misc Small"; break;
|
||
|
case(BASE_ITEM_MISCTALL): sBaseT = "Misc Tall"; break;
|
||
|
case(BASE_ITEM_MISCWIDE): sBaseT = "Misc Wide"; break;
|
||
|
case(BASE_ITEM_MISCTHIN): sBaseT = "Misc Thin"; break;
|
||
|
case(BASE_ITEM_MORNINGSTAR): sBaseT = "Morningstar"; break;
|
||
|
case(BASE_ITEM_POTIONS): sBaseT = "Potions"; break;
|
||
|
case(BASE_ITEM_QUARTERSTAFF): sBaseT = "Quarter Staff"; break;
|
||
|
case(BASE_ITEM_RAPIER): sBaseT = "Rapier"; break;
|
||
|
case(BASE_ITEM_RING): sBaseT = "Ring"; break;
|
||
|
case(BASE_ITEM_SCIMITAR): sBaseT = "Scimitar"; break;
|
||
|
case(BASE_ITEM_SCROLL): sBaseT = "Scroll"; break;
|
||
|
case(BASE_ITEM_SCYTHE): sBaseT = "Scythe"; break;
|
||
|
case(BASE_ITEM_SHORTBOW): sBaseT = "Short Bow"; break;
|
||
|
case(BASE_ITEM_SHORTSPEAR): sBaseT = "Short Spear"; break;
|
||
|
case(BASE_ITEM_SHORTSWORD): sBaseT = "Short Sword"; break;
|
||
|
case(BASE_ITEM_SHURIKEN): sBaseT = "Shuriken"; break;
|
||
|
case(BASE_ITEM_SICKLE): sBaseT = "Sickle"; break;
|
||
|
case(BASE_ITEM_SLING): sBaseT = "Sling"; break;
|
||
|
case(BASE_ITEM_SMALLSHIELD): sBaseT = "Small Shield";break;
|
||
|
case(BASE_ITEM_SPELLSCROLL): sBaseT = "Spell Scroll";break;
|
||
|
case(BASE_ITEM_THIEVESTOOLS): sBaseT = "Theives Tools";break;
|
||
|
case(BASE_ITEM_THROWINGAXE):sBaseT = "Throwing Axe";break;
|
||
|
case(BASE_ITEM_TORCH):sBaseT = "Torch";break;
|
||
|
case(BASE_ITEM_TOWERSHIELD):sBaseT = "Tower Sheild";break;
|
||
|
case(BASE_ITEM_TRAPKIT):sBaseT = "Trap Kit"; break;
|
||
|
case(BASE_ITEM_TWOBLADEDSWORD): sBaseT = "Two Bladedsword";break;
|
||
|
case(BASE_ITEM_WARHAMMER): sBaseT = "Warhammer"; break;
|
||
|
}
|
||
|
return sBaseT;
|
||
|
}
|
||
|
int StartingConditional()
|
||
|
{
|
||
|
// asgmagicitemdesi
|
||
|
int iResult = FALSE;
|
||
|
float rMatCost = GetLocalFloat(GetModule(),"ASG_MICS_MATERIALCOST");
|
||
|
int iXpCost = GetLocalInt(GetModule(),"ASG_MICS_XPCOST");
|
||
|
|
||
|
object oCChest = GetObjectByTag("ASG_MIC_MIS_COMPONANTS");
|
||
|
object oCCChest = GetNearestObjectByTag("ASG_CCHEST",OBJECT_SELF);
|
||
|
int vOption = GetLocalInt(OBJECT_SELF,"ASG_RESEARCH_OPTION");
|
||
|
int iGPValue;
|
||
|
string sBluePrint = GetLocalString(OBJECT_SELF,"ASG_BLUEPRINT");
|
||
|
string sItemName;
|
||
|
int iBonus = GetLocalInt(OBJECT_SELF,"ASG_MIC_RESEARCHBONUS");
|
||
|
object oPC = GetPCSpeaker();
|
||
|
int iHD;
|
||
|
// Set up Temporay item
|
||
|
string sChestTag = "ASG_TTEMPSTORAGECHEST";
|
||
|
object oChest = GetObjectByTag(sChestTag);
|
||
|
string sArDiv = GetLocalString(OBJECT_SELF,"ASG_MIC_MAGICTYPE");
|
||
|
if (sArDiv=="A")
|
||
|
{
|
||
|
|
||
|
iHD = GetHitDice(oPC);
|
||
|
|
||
|
}else
|
||
|
{
|
||
|
iHD = GetHitDice(oPC);
|
||
|
}
|
||
|
int iPass = FALSE;
|
||
|
object oItem;
|
||
|
if (GetIsObjectValid(oChest))
|
||
|
{
|
||
|
oItem = GetLocalObject(OBJECT_SELF,"ASG_BUILDITEM_ITEM");
|
||
|
string sText;
|
||
|
if (GetIsObjectValid(oItem))
|
||
|
{
|
||
|
int iMlevel = FindItemLevel(oItem);
|
||
|
int iFmod = GetFocus();
|
||
|
if (iFmod<0) iMlevel = iMlevel + iFmod; else iMlevel = iMlevel - iFmod;
|
||
|
if (iMlevel<0) iMlevel = 1;
|
||
|
int iBT = GetBaseItemType(oItem);
|
||
|
iGPValue = GetGoldPieceValue(oItem);
|
||
|
SetIdentified(oItem,TRUE);
|
||
|
sItemName = GetName(oItem);
|
||
|
int iType = GetBaseItemType(oItem);
|
||
|
// Check for Scrolls and Potions
|
||
|
if (iHD>=iMlevel)
|
||
|
{
|
||
|
iPass = TRUE;
|
||
|
}
|
||
|
string sBaseType = AsgBaseType(oItem);
|
||
|
|
||
|
string sLevel;
|
||
|
float fTemp;
|
||
|
sText = "The books pages detail plans to build a "+sItemName+" by a ";
|
||
|
if (sArDiv == "A") sText = sText + "Arcane"; else sText = sText +"Divine";
|
||
|
sLevel = IntToString(iMlevel);
|
||
|
sText = sText + " caster who has reached level "+sLevel+" in their art.";
|
||
|
fTemp = IntToFloat(iGPValue)*rMatCost;
|
||
|
iGPValue=FloatToInt(fTemp);
|
||
|
string sGold = IntToString(iGPValue);
|
||
|
sText = sText +" The project will require atleast "+sGold+" gold in Magic Powder.";
|
||
|
sText = sText +" The construction will require a "+sBaseType+" along with the Magic Powder.";
|
||
|
int iXPloss = iGPValue/iXpCost;if (iXPloss<1) iXPloss = 1;
|
||
|
string sXPloss = IntToString(iXPloss);
|
||
|
sText = sText +" Estimated Essences (XP) loss should be around "+sXPloss+" Shards of Life.";
|
||
|
|
||
|
}
|
||
|
if (iPass == TRUE) SetCustomToken(197000,sText);
|
||
|
else SendMessageToPC(oPC,"You realise that this project is beyound your current ability.");
|
||
|
ActionSpeakString(GetName(oPC)+" reads the book to himself.");
|
||
|
|
||
|
}
|
||
|
if (iPass == TRUE)
|
||
|
{
|
||
|
sArDiv = GetLocalString(OBJECT_SELF,"ASG_MIC_MAGICTYPE");
|
||
|
string sTag;
|
||
|
if (sArDiv=="A")
|
||
|
{
|
||
|
sTag="ASG_ENANVIL";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sTag="ASG_ENALTER";
|
||
|
}
|
||
|
object oTarget = GetNearestObjectByTag(sTag,OBJECT_SELF);
|
||
|
if (GetIsObjectValid(oTarget)==FALSE)
|
||
|
{
|
||
|
iPass = FALSE;
|
||
|
FloatingTextStringOnCreature("No Altar or Enchanted Alar.",oPC,FALSE);
|
||
|
}
|
||
|
}
|
||
|
if (iPass==TRUE)
|
||
|
{
|
||
|
iResult = TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
return iResult;
|
||
|
}
|
||
|
|