Aschbourne_PRC8/_module/nss/_craft_gembath.nss
GetOffMyYarn 69879d6957 Areas and Fixes
Added CCOH and missing areas
Changed some areas to be craftable,
Fixed some on death issues,
Fixed the Gaurd
2024-08-30 11:38:44 -04:00

229 lines
11 KiB
Plaintext

void CreateAnObject(string sResource, object oPC, int iStackSize);
void main()
{
object oPC = GetLastDisturbed();
object oItem = GetInventoryDisturbItem();
string sItemTag = GetTag(oItem);
string sSuccess = "";
// The following 3 lines are to ensure compatability with UOAbigal's Persistent Token System.
// You can replace them with whatever 'no-drop' code you have or comment them out.
string sNoDropFlag = (GetStringLeft(GetTag(oItem),6));
if (sNoDropFlag == "NoDrop" || sNoDropFlag == "TOKEN_"||sNoDropFlag=="_TBOX_")
return;
if (GetBaseItemType(oItem)==BASE_ITEM_LARGEBOX)
{
DestroyObject(oItem);
SendMessageToPC(oPC,"To avoid possible dupe exploits, the container placed in this bag may be destroyed.");
return;
}
// End of compatability portion.
if (GetStringLeft(sItemTag,9)!="GEMSTONE_")
{
CopyItem(oItem,oPC,TRUE);
FloatingTextStringOnCreature("This is not a gemstone...",oPC,FALSE);
DestroyObject(oItem);
return;
}
if (GetLocalInt(OBJECT_SELF,"iAmInUse")!=0)
{
CopyItem(oItem,oPC,TRUE);
FloatingTextStringOnCreature("The mineral bath is not yet ready for more gemstones...",oPC,FALSE);
DestroyObject(oItem);
return;
}
object oAcid = GetItemPossessedBy(oPC,"ACID_WEAK");
if (oAcid == OBJECT_INVALID)
{
CopyItem(oItem,oPC,TRUE);
DestroyObject(oItem);
FloatingTextStringOnCreature("You must have some weak acid in order to activate the mineral bath.",oPC,FALSE);
return;
}
int iAcidStack = GetNumStackedItems(oAcid)-1;
DestroyObject(oAcid);
if (iAcidStack >0) DelayCommand(1.0,CreateAnObject("acid001",oPC,iAcidStack));
string sGemResRef = "";
if (sItemTag =="GEMSTONE_ORNAMENTAL")
{
switch (d12(1))
{
case 1:{sGemResRef = "azurite001";sSuccess="azurite";break;}
case 2:{sGemResRef = "bandedagate001";sSuccess="banded agate";break;}
case 3:{sGemResRef = "bluequartz001";sSuccess="blue quartz";break;}
case 4:{sGemResRef = "eyeagate001";sSuccess="eye agate";break;}
case 5:{sGemResRef = "hematite001";sSuccess="hematite";break;}
case 6:{sGemResRef = "lapislazuli001";sSuccess="lapis lazuli";break;}
case 7:{sGemResRef = "malachite001";sSuccess="malachite";break;}
case 8:{sGemResRef = "mossagate001";sSuccess="moss agate";break;}
case 9:{sGemResRef = "obsidian001";sSuccess="obsidian";break;}
case 10:{sGemResRef = "rhodochrosite001";sSuccess="rhodochrosite";break;}
case 11:{sGemResRef = "tigereye001";sSuccess="tiger eye";break;}
default:{sGemResRef = "turquoise001";sSuccess="turquoise";break;}
}
}
if (sItemTag =="GEMSTONE_SEMIPRECIOUS")
{
switch (Random(13))
{
case 1:{sGemResRef = "bloodstone001";sSuccess="bloodstone";break;}
case 2:{sGemResRef = "carnelian001";sSuccess="carnelian";break;}
case 3:{sGemResRef = "chalcendony001";sSuccess="chalcendony";break;}
case 4:{sGemResRef = "chrysoprase001";sSuccess="chrysoprase";break;}
case 5:{sGemResRef = "citrine001";sSuccess="citrine";break;}
case 6:{sGemResRef = "jasper001";sSuccess="jasper";break;}
case 7:{sGemResRef = "moonstone001";sSuccess="moonstone";break;}
case 8:{sGemResRef = "onyx001";sSuccess="onyx";break;}
case 9:{sGemResRef = "rockcrystal001";sSuccess="rock crystal";break;}
case 10:{sGemResRef = "sardonyx001";sSuccess="sardonyx";break;}
case 11:{sGemResRef = "smokyquartz001";sSuccess="smoky quartz";break;}
case 12:{sGemResRef = "zircon001";sSuccess="zircon";break;}
default:{sGemResRef = "starrosequart001";sSuccess="star rose quartz";break;}
}
}
if (sItemTag =="GEMSTONE_FANCY")
{
switch (Random(11))
{
case 1:{sGemResRef = "amber001";sSuccess="amber";break;}
case 2:{sGemResRef = "alexandrite001";sSuccess="alexandrite";break;}
case 3:{sGemResRef = "amethyst001";sSuccess="amethyst";break;}
case 4:{sGemResRef = "chrysoberyl001";sSuccess="chrysoberyl";break;}
case 5:{sGemResRef = "coral001";sSuccess="coral";break;}
case 6:{sGemResRef = "garnetsmall001";sSuccess="red garnet";break;}
case 7:{sGemResRef = "jade001";sSuccess="jade";break;}
case 8:{sGemResRef = "jet001";sSuccess="jet";break;}
case 9:{sGemResRef = "whitepearl001";sSuccess="white pearl";break;}
case 10:{sGemResRef = "spinel001";sSuccess="red spinel";break;}
default:{sGemResRef = "tourmaline001";sSuccess="tourmaline";break;}
}
}
if (sItemTag =="GEMSTONE_PRECIOUS")
{
switch (d6(1))
{
case 1:{sGemResRef = "aquamarine001";sSuccess="aquamarine";break;}
case 2:{sGemResRef = "garnetviolet001";sSuccess="violet garnet";break;}
case 3:{sGemResRef = "blackpearl001";sSuccess="black pearl";break;}
case 4:{sGemResRef = "peridot001";sSuccess="peridot";break;}
case 5:{sGemResRef = "bluespinel001";sSuccess="blue spinel";break;}
default:{sGemResRef = "topaz001";sSuccess="topaz";break;}
}
}
if (sItemTag =="GEMSTONE_GEM")
{
switch (Random(9))
{
case 1:{sGemResRef = "blackopal001";sSuccess="black opal";break;}
case 2:{sGemResRef = "emerald001";sSuccess="emerald";break;}
case 3:{sGemResRef = "fireopal001";sSuccess="fire opal";break;}
case 4:{sGemResRef = "opal001";sSuccess="opal";break;}
case 5:{sGemResRef = "orientalameth001";sSuccess="oriental emerald";break;}
case 6:{sGemResRef = "orientaltopaz001";sSuccess="oriental topaz";break;}
case 7:{sGemResRef = "sapphire001";sSuccess="sapphire";break;}
case 8:{sGemResRef = "starruby001";sSuccess="star ruby";break;}
default:{sGemResRef = "starsapphire001";sSuccess="star sapphire";break;}
}
}
if (sItemTag =="GEMSTONE_JEWEL")
{
switch (Random(5))
{
case 1:{sGemResRef = "blacksapphire001";sSuccess="black sapphire";break;}
case 2:{sGemResRef = "diamond001";sSuccess="diamond";break;}
case 3:{sGemResRef = "jacinth001";sSuccess="jacinth";break;}
case 4:{sGemResRef = "orientalemera001";sSuccess="oriental emerald";break;}
default:{sGemResRef = "ruby001";sSuccess="ruby";break;}
}
}
sSuccess = "The mineral bath reveals the gemstone to be "+sSuccess+".";
// This snippet of code is cut-n-paste direct from ATS
// Reason for this is because I had no clue how to assign an increase
// in the z-axis of the location of the anvil for sparks to display.
// After reading through this code, it is obvious that vEffecrPos.z
// is the line which assigns this. Due to my own ignorance in this issue
// I have decided to leave this snippet of code intact with this credit to
// the original ATS script coders, whomever they may have been.
//The only modification to this code is locAnvil was changed to locBath.
location locBath = GetLocation(OBJECT_SELF);
vector vEffectPos = GetPositionFromLocation(locBath);
vEffectPos.z += 1.0;
location locEffect = Location( GetAreaFromLocation(locBath), vEffectPos,GetFacingFromLocation(locBath) );
// End snippet
ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SMOKE_PUFF), locEffect);
ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_FIRE), locEffect);
DelayCommand(0.2,PlaySound("as_cv_smithwatr1"));
DelayCommand(0.5,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPECIAL_RED_WHITE), locEffect));
DelayCommand(1.0,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_ACID), locEffect));
DelayCommand(1.5,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPARKS_PARRY), locEffect));
DelayCommand(1.8,PlaySound("al_cv_firepot1"));
DelayCommand(2.0,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SMOKE_PUFF), locEffect));
DelayCommand(2.5,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPECIAL_WHITE_BLUE), locEffect));
DelayCommand(3.0,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPECIAL_RED_WHITE), locEffect));
DelayCommand(3.5,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPARKS_PARRY), locEffect));
DelayCommand(4.0,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SMOKE_PUFF), locEffect));
DelayCommand(4.5,PlaySound("as_na_steamshrt2"));
DelayCommand(5.5,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPECIAL_BLUE_RED), locEffect));
DelayCommand(5.0,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_ACID), locEffect));
DelayCommand(5.5,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPARKS_PARRY), locEffect));
DelayCommand(6.0,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SMOKE_PUFF), locEffect));
DelayCommand(6.5,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPECIAL_RED_ORANGE), locEffect));
DelayCommand(7.0,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPECIAL_WHITE_BLUE), locEffect));
DelayCommand(7.2,PlaySound("as_na_steamshrt1"));
DelayCommand(7.5,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPARKS_PARRY), locEffect));
DelayCommand(8.0,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SMOKE_PUFF), locEffect));
DelayCommand(8.5,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_ACID), locEffect));
DelayCommand(9.0,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPECIAL_BLUE_RED), locEffect));
DelayCommand(9.5,ApplyEffectAtLocation (DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_SPARKS_PARRY), locEffect));
DestroyObject(oItem);
int iNum = d6(3)/3;
ActionPlayAnimation(ANIMATION_PLACEABLE_ACTIVATE,1.0,9.6);
DelayCommand(9.7,ActionPlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE,1.0,10.0));
AssignCommand(oPC,PlaySound("as_cv_potclang1"));
AssignCommand(oPC,DelayCommand(0.2,ActionPlayAnimation(ANIMATION_LOOPING_GET_MID,1.0,9.5)));
AssignCommand(oPC,DelayCommand(9.5,CreateAnObject(sGemResRef,oPC,iNum)));
AssignCommand(oPC,DelayCommand(8.0,FloatingTextStringOnCreature(sSuccess,oPC,FALSE)));
if (iNum>1)
{
AssignCommand(oPC,DelayCommand(10.0,FloatingTextStringOnCreature("The mineral bath reveals "+IntToString(iNum)+" gems.",oPC,FALSE)));
}
else
{
AssignCommand(oPC,DelayCommand(10.0,FloatingTextStringOnCreature("The mineral bath reveals a single gem.",oPC,FALSE)));
}
SetLocalInt(OBJECT_SELF,"iAmInUse",99);
DelayCommand(10.0,SetLocalInt(OBJECT_SELF,"iAmInUse",0));
}
void CreateAnObject(string sResource, object oPC, int iStackSize)
{
CreateItemOnObject(sResource,oPC,iStackSize);
return;
}