Aschbourne_PRC8/_module/nss/_craft_gembath.nss
Jaysyn904 5d27edafba Major update
Fixed CCOH, Fixed starting GP, Fixed DMFI languages, Fix cep weapon appearances, Fixed new player start up system.  Added PC deleter.  Added ACP 4.1.  Full compile.  Updated release archive.
2024-09-16 23:40:48 -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 revelas 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;
}