127 lines
4.1 KiB
Plaintext
127 lines
4.1 KiB
Plaintext
/****************************************************
|
|
Action Taken Script: Forge - Salvage Crafted
|
|
ats_forge_salvag
|
|
|
|
Last Updated: July 22, 2002
|
|
|
|
***Ambrosia Tradeskill System***
|
|
Created by Mojo(Allen Sun)
|
|
|
|
This script is responsible for salvaging crafted
|
|
armor and weapons back into useable ingots.
|
|
****************************************************/
|
|
#include "ats_inc_common"
|
|
#include "ats_inc_constant"
|
|
#include "ats_config"
|
|
#include "ats_inc_skill_bs"
|
|
#include "ats_inc_skill"
|
|
#include "ats_inc_material"
|
|
#include "ats_inc_cr_get"
|
|
#include "ats_inc_cr_comp"
|
|
|
|
int CINT_SALVAGE_UNSKILLED = -1;
|
|
|
|
int ATS_GetSalvageRate(string sCraftTag)
|
|
{
|
|
return GetLocalInt(GetModule(), sCraftTag + "_ingots_salvageable");
|
|
}
|
|
|
|
int ATS_CalculateSalvagingSuccess(int iOreType, object oPlayer, int iMaxIngots)
|
|
{
|
|
int iDiceRoll;
|
|
int iMaterialDifficulty = ATS_GetSmeltingLevel(iOreType);
|
|
int iIngotsSalvaged = 0;
|
|
|
|
int iSuccessLevel = iMaterialDifficulty - ATS_GetTradeskill(oPlayer, CSTR_SKILLNAME_BLACKSMITHING);
|
|
|
|
if(iSuccessLevel > 50)
|
|
return CINT_SALVAGE_UNSKILLED;
|
|
|
|
int i;
|
|
for(i = 0; i < iMaxIngots; ++i)
|
|
{
|
|
iDiceRoll = d100(1) / 2;
|
|
if( (iDiceRoll > iSuccessLevel) && (iDiceRoll != 0) )
|
|
++iIngotsSalvaged;
|
|
}
|
|
return iIngotsSalvaged;
|
|
|
|
}
|
|
|
|
void ATS_SalvageCraftable(object oPlayer, object oCraftable)
|
|
{
|
|
int iIngotType = ATS_GetMaterialType(oCraftable);
|
|
string sCraftTag = ATS_GetCraftTag(oCraftable);
|
|
int iSalvageRate = ATS_GetSalvageRate(sCraftTag);
|
|
string sIngotTag = ATS_GetComponentTagFromRecipe(sCraftTag, CINT_COMPONENT_ID_INGOTS, iIngotType);
|
|
int iIngotAmount = ATS_GetComponentAmountFromRecipe(sCraftTag, CINT_COMPONENT_ID_INGOTS, iIngotType);
|
|
|
|
float fSalvageMultiplier = (iSalvageRate/100.0f);
|
|
int iMaxIngots = FloatToInt(iIngotAmount * fSalvageMultiplier);
|
|
if(iMaxIngots == 0)
|
|
iMaxIngots = 1;
|
|
|
|
int iIngotsSalvaged = ATS_CalculateSalvagingSuccess(iIngotType, oPlayer, iMaxIngots);
|
|
if(iIngotsSalvaged > 0)
|
|
{
|
|
string sMaterialName = ATS_GetMaterialName(iIngotType);
|
|
string sSuccessString = "You have successfully salvaged " +
|
|
IntToString(iIngotsSalvaged) + " " +
|
|
sMaterialName + " ingot";
|
|
if(iIngotsSalvaged > 1)
|
|
sSuccessString += "s";
|
|
sSuccessString += (" from the " + GetName(oCraftable));
|
|
|
|
FloatingTextStringOnCreature(sSuccessString, oPlayer, FALSE);
|
|
while(iIngotsSalvaged > 10)
|
|
{
|
|
CreateItemOnObject(ATS_GetResRefFromTag(sIngotTag), oPlayer, 10);
|
|
iIngotsSalvaged -= 10;
|
|
}
|
|
|
|
CreateItemOnObject(ATS_GetResRefFromTag(sIngotTag), oPlayer, iIngotsSalvaged);
|
|
DestroyObject(oCraftable);
|
|
}
|
|
else if(iIngotsSalvaged == CINT_SALVAGE_UNSKILLED)
|
|
{
|
|
string sFailureString = "The " + GetName(oCraftable) +
|
|
" is beyond your ability to salvage.";
|
|
FloatingTextStringOnCreature(sFailureString, oPlayer, FALSE);
|
|
}
|
|
else
|
|
{
|
|
DestroyObject(oCraftable);
|
|
string sFailureString = "You have failed to salvage any ingots from the ";
|
|
sFailureString += (GetName(oCraftable) + ".");
|
|
|
|
FloatingTextStringOnCreature(sFailureString, oPlayer, FALSE);
|
|
}
|
|
|
|
}
|
|
void main()
|
|
{
|
|
string sCraftTag;
|
|
string sMessage;
|
|
object oPlayer = GetPCSpeaker();
|
|
object oCurrentItem = GetFirstItemInInventory();
|
|
if(oCurrentItem == OBJECT_INVALID)
|
|
return;
|
|
do
|
|
{
|
|
sCraftTag = ATS_GetCraftTag(oCurrentItem);
|
|
if(ATS_GetSalvageRate(sCraftTag) == 0)
|
|
{
|
|
sMessage = "The " + GetName(oCurrentItem) + " is not salvageable.";
|
|
AssignCommand(oPlayer, ActionDoCommand(FloatingTextStringOnCreature(sMessage, oPlayer, FALSE)));
|
|
oCurrentItem = GetNextItemInInventory();
|
|
continue;
|
|
}
|
|
AssignCommand(oPlayer, ActionDoCommand(ATS_SalvageCraftable(oPlayer, oCurrentItem)));
|
|
AssignCommand(oPlayer, ActionWait(1.0));
|
|
|
|
oCurrentItem = GetNextItemInInventory();
|
|
}
|
|
while(oCurrentItem != OBJECT_INVALID);
|
|
|
|
}
|