V1.1(ma_use_hwpotionsw_mod_darutilshw_tm_ew_flmwfhw_tm_ew_mgwfhw_tm_ew_wfwhhw_tm_mw_hlgswhw_tm_mw_mmgwfhw_tm_nd_auftrhw_tm_nd_bluffhw_tm_nd_dipl hw_tm_nd_prov hw_tm_nd_eins hw_tm_nw_hlgsw hw_tm_nw_mmgwf hw_tm_nw_scharfhw_tm_nw_zlsshw_tm_nd_konzhw_tm_sd_auftrhw_tm_sd_bluffhw_tm_sd_diplhw_tm_sd_einshw_tm_sd_konzhw_tm_sd_provhw_tm_sw_flmwfhw_tm_sw_mmgwfhw_tm_sw_scharfhw_tm_uw_flmwfhw_tm_uw_hlgswhw_tm_uw_scharf(88>' f o {y 2 Q  { ? Q     V' 0 : lD "N W a // ############################################### // #### #### // #### Amdir - HWPotion Script #### // #### (c) 2009 by Darnah #### // #### Version 1.0a NWN2 Script #### // #### #### // ############################################### #include "x2_inc_itemprop" #include "sw_mod_wizutils" #include "sw_mod_darutils" // * Variable für die Berechnung der Chance, dass eine Waffe zerstört wird // * (10.0 = 100%, 0.1 = 1%). Bei 0.0 wird keine Abfrage durchgeführt float BREAK_CHANCE = 0.1; // * Wirkungsdauer der Duftöle float OIL_DURATION = 30.0;//HoursToSeconds(6); // * Variablen für den Öltyp int WEAPON_OIL = 1; int FLAVOR_OIL = 2; // * EFFECT_TYPE_-Konstanten für die Waffenöle /*const int EFFECT_TYPE_MYSTRA = SKILL_CONCENTRATION; //1 const int EFFECT_TYPE_LLIIRA = SKILL_PERFORM; //11 const int EFFECT_TYPE_OGHMA = SKILL_DIPLOMACY; //12 const int EFFECT_TYPE_CYRIC = SKILL_TAUNT; //18 const int EFFECT_TYPE_SHAR = SKILL_BLUFF; //23 const int EFFECT_TYPE_TEMPUS = SKILL_INTIMIDATE; //24*/ const int EFFECT_TYPE_TRUE_STRIKE = ITEM_PROPERTY_ATTACK_BONUS; //56 const int EFFECT_TYPE_BLESS_WEAPON = ITEM_PROPERTY_DAMAGE_BONUS_VS_RACIAL_GROUP; //18 const int EFFECT_TYPE_BLESS_WEAPON_TYPE = IP_CONST_RACIALTYPE_UNDEAD; //24 const int EFFECT_TYPE_HOLY_SWORD = ITEM_PROPERTY_HOLY_AVENGER; //36 const int EFFECT_TYPE_KEEN_WEAPON = ITEM_PROPERTY_KEEN; //43 const int EFFECT_TYPE_FLAME_WEAPON = ITEM_PROPERTY_DAMAGE_BONUS; //16 const int EFFECT_TYPE_FLAME_WEAPON_TYPE = IP_CONST_DAMAGETYPE_FIRE; //10 const int EFFECT_TYPE_MAGIC_WEAPON = ITEM_PROPERTY_ENHANCEMENT_BONUS; //6 // * ::::::::::::::::::::::::: FUNKTIONSIMPLEMENTIERUNG ::::::::::::::::::::::::: // * Überprüft, ob auf dem Item bereits ein Effekt vorhanden ist // * und fügt diesen zu dem Item hinzu. void AddEffectToWeapon(object oPC, object oItem, object oOil); // * Überprüft, ob auf der Person bereits ein Effekt vorhanden ist // * und fügt diesen zu der Person hinuz. void AddEffectToPC(object oPC, object oTarget, object oOil); // * Workaround für Effekte mit Subtype. Gibt TRUE zurück, wenn Subtype existiert int GetIsSubTypeOnItem(object oItem, int iPropertyType, int iPropertySubtype); // * Prüfen, ob Variable gesetzt wurde. Gibt TRUE zurück, wenn Variable existiert int GetIsOilOnItem(object oPC, object oItem); // * Prüfen, ob Variable gesetzt wurde. Gibt TRUE zurück, wenn Variable existiert int GetIsOilOnPC(object oPC); // * Workaround für Wurfwaffen und Projektile. Liefert TRUE zurück, wenn die // * Waffe eine Wurfwaffe oder ein Projektil ist int GetIsStackWeapon(object oItem); // * Workaround für alle Waffen. Liefert TRUE zurück, wenn das Item eine Waffe ist int GetIsWeapon(object oItem); // * Prüfen, was für ein Typ das Öl ist. Gibt FALSE zurück, wenn das Item kein Öl ist. int GetOilType(object oItem); // * Flammenwaffe. Liefert Dauer als Float zurück float AddFlamingEffect(object oItem, int iCasterLevel); // * Heiliges Schwert. Liefert Dauer als Float zurück float AddHolyAvengerEffect(object oItem, int iCasterLevel); // * Waffe schärfen. Liefert Dauer als Float zurück float AddKeenEffect(object oItem, int iCasterLevel); // * Waffe weihen. Liefert Dauer als Float zurück float AddBlessEffect(object oItem, int iCasterLevel); // * Magische Waffe. Liefert Dauer als Float zurück float AddEnhancementEffect(object oItem, int iCasterLevel); // * Zielsicherer Schlag. Liefert Dauer als Float zurück float AddTrueStrikeEffect(object oItem); // * ::::::::::::::::::::::::: FUNKTIONEN ::::::::::::::::::::::::: void AddEffectToWeapon(object oPC, object oItem, object oOil) { if (GetIsObjectValid(oPC) && GetIsWeapon(oItem) && GetOilType(oOil) == WEAPON_OIL) { //Chance, dass die Waffe zerstört wird if (BREAK_CHANCE > 0.0) { if (RandomFloat(10.0, BREAK_CHANCE) == BREAK_CHANCE) { DestroyMyObject(oItem); SendWarningMessage(oPC, "Die Waffe wurde durch das Öl zerstört"); return; } } int iPropType = GetLocalInt(oOil, "PT"); int iPropSubType = GetLocalInt(oOil, "PST"); if (!GetIsSubTypeOnItem(oItem, iPropType, iPropSubType) && !GetIsOilOnItem(oPC, oItem)) { float fDuration = 1.0f; int iCasterLevel = GetLocalInt(oOil, "PWR"); //Zielsicherer Schlag (Wegen Tests noch ausser Funktion!) if (iPropType == EFFECT_TYPE_TRUE_STRIKE) { //fDuration = AddTrueStrikeEffect(oItem); return; } //Waffe Weihen else if (iPropType == EFFECT_TYPE_BLESS_WEAPON) { fDuration = AddBlessEffect(oItem, iCasterLevel); } //Heiliges Schwert else if (iPropType == EFFECT_TYPE_HOLY_SWORD) { if (IPGetIsMeleeWeapon(oItem)) { fDuration = AddHolyAvengerEffect(oItem, iCasterLevel); } else { SendWarningMessage(oPC, "Heiliges Schwert kann nur auf eine Nahkampfwaffen aufgetragen werden!"); SetItemStackSize(oOil, GetItemStackSize(oOil)+1, FALSE); return; } } //Waffe Schärfen else if (iPropType == EFFECT_TYPE_KEEN_WEAPON) { if (IPGetIsMeleeWeapon(oItem)) { fDuration = AddKeenEffect(oItem, iCasterLevel); } else { SendWarningMessage(oPC, "Waffe Schärfen kann nur auf eine Nahkampfwaffe aufgetragen werden!"); SetItemStackSize(oOil, GetItemStackSize(oOil)+1, FALSE); return; } } //Flammenwaffe else if (iPropType == EFFECT_TYPE_FLAME_WEAPON) { fDuration = AddFlamingEffect(oItem, iCasterLevel); } //Magische Waffe else if (iPropType == EFFECT_TYPE_MAGIC_WEAPON) { if(!IPGetIsProjectile(oItem)) { fDuration = AddEnhancementEffect(oItem, iCasterLevel); } else { SendWarningMessage(oPC, "Magische Waffe kann nicht auf Projektile aufgetragen werden!"); SetItemStackSize(oOil, GetItemStackSize(oOil)+1, FALSE); return; } } //Kein Öl else { SendWarningMessage(oPC, "Kein bekanntes Waffenöl"); return; } //Zeit bis zum nächsten möglichen Öl setzen if (GetIsStackWeapon(oItem)) { SetLocalInt(oPC, "OilCheck"+IntToString(GetBaseItemType(oItem)), TRUE); DelayCommand(fDuration , SetLocalInt(oPC , "OilCheck"+IntToString(GetBaseItemType(oItem)), FALSE)); } else { SetLocalInt(oItem, "OilCheck", TRUE); DelayCommand(fDuration , SetLocalInt(oItem , "OilCheck", FALSE)); } SendMessageToPC(oPC, GetName(oOil)+" wurde auf die Waffe "+GetName(oItem)+ " aufgetragen und hält "+IntToString(FloatToInt(fDuration))+" Sekunden"); } //Es wurde bereits ein Öl aufgetragen else { SendMessageToPC(oPC, "Du hast bereits ein Öl aufgetragen"); SetItemStackSize(oOil, GetItemStackSize(oOil)+1, FALSE); } } //Keine Waffe/kein Waffenöl else { SendWarningMessage(oPC, "Ziel muss eine Waffe sein oder es wurde kein Waffenöl ausgewählt!"); } return; } void AddEffectToPC(object oPC, object oTarget, object oOil) { if (GetIsPC(oPC) && GetIsPC(oTarget) && GetOilType(oOil) == FLAVOR_OIL) { if (!GetIsOilOnPC(oTarget)) { // Effekt auslesen int iFertigkeit = GetLocalInt(oOil, "FTG"); int iPower = GetLocalInt(oOil, "PWR"); if (iFertigkeit > 0 && iPower > 0) { // Effekt anwenden ApplyEffectToObject( DURATION_TYPE_TEMPORARY, EffectSkillIncrease(iFertigkeit, iPower), oTarget, OIL_DURATION); SetLocalInt(oTarget, "FlavorCheck" , TRUE); DelayCommand(OIL_DURATION, SetLocalInt(oTarget, "FlavorCheck", FALSE)); SendMessageToPC(oPC, GetName(oOil)+" wurde auf "+GetName(oTarget)+ " aufgetragen und hält "+IntToString(FloatToInt(OIL_DURATION))+" Sekunden"); SendMessageToPC(oTarget, "Auf dich wurde "+GetName(oOil)+" aufgetragen und hält "+ IntToString(FloatToInt(OIL_DURATION))+" Sekunden"); } else { SendWarningMessage(oPC, "Kein bekanntes Duftöl"); return; } } //Es wurde bereits ein Öl aufgetragen else { SendMessageToPC(oPC, "Du hast bereits ein Öl aufgetragen"); SetItemStackSize(oOil, GetItemStackSize(oOil)+1, FALSE); } } //Keine Person/kein Duftöl else { SendWarningMessage(oPC, "Ziel muss eine Person sein oder es wurde kein Duftöl ausgewählt!"); } return; } int GetIsSubTypeOnItem(object oItem, int iPropertyType, int iPropertySubType) { itemproperty iProp = GetFirstItemProperty(oItem); while (GetIsItemPropertyValid(iProp)) { if (GetItemPropertyType(iProp) == iPropertyType && GetItemPropertySubType(iProp) == iPropertySubType) { return TRUE; } iProp = GetNextItemProperty(oItem); } return FALSE; } int GetIsOilOnItem(object oPC, object oItem) { int iCheck; if (GetIsObjectValid(oItem)) { if (GetIsStackWeapon(oItem)) { iCheck = GetLocalInt(oPC, "OilCheck"+IntToString(GetBaseItemType(oItem))); } else { iCheck = GetLocalInt(oItem, "OilCheck"); } } else { return TRUE; } if (iCheck > 0) return TRUE; else return FALSE; } int GetIsOilOnPC(object oPC) { if (GetIsObjectValid(oPC) && GetIsPC(oPC)) { int iCheck = GetLocalInt(oPC, "FlavorCheck"); if (iCheck > 0) return TRUE; else return FALSE; } return TRUE; } int GetIsStackWeapon(object oItem) { if (GetIsObjectValid(oItem)) { if (IPGetIsProjectile(oItem)) return TRUE; else if (GetWeaponRanged(oItem)) { if (GetBaseItemType(oItem) != BASE_ITEM_HEAVYCROSSBOW && GetBaseItemType(oItem) != BASE_ITEM_LIGHTCROSSBOW && GetBaseItemType(oItem) != BASE_ITEM_LONGBOW && GetBaseItemType(oItem) != BASE_ITEM_SHORTBOW) { return TRUE; } } } return FALSE; } int GetIsWeapon(object oItem) { if (GetIsObjectValid(oItem)) { if (IPGetIsMeleeWeapon(oItem) || IPGetIsProjectile(oItem) || GetWeaponRanged(oItem)) { return TRUE; } } return FALSE; } int GetOilType(object oOil) { if (GetIsObjectValid(oOil)) { string sTag = GetTag(oOil); if (FindSubString( sTag , "HW_TM_EW_" ) != -1 || FindSubString( sTag , "HW_TM_NW_" ) != -1 || FindSubString( sTag , "HW_TM_SW_" ) != -1 || FindSubString( sTag , "HW_TM_MW_" ) != -1 || FindSubString( sTag , "HW_TM_UW_" ) != -1) { return WEAPON_OIL; } else if (FindSubString( sTag , "HW_TM_ND_" ) != -1 || FindSubString( sTag , "HW_TM_SD_" ) != -1) { return FLAVOR_OIL; } } return FALSE; } // * ::::::::::::::::::::::::: EFFEKT-FUNKTIONEN ::::::::::::::::::::::::: float AddFlamingEffect(object oItem, int iCasterLevel) { float fDuration = HoursToSeconds(iCasterLevel*2); IPSafeAddItemProperty( oItem, ItemPropertyDamageBonus(EFFECT_TYPE_FLAME_WEAPON_TYPE, IP_CONST_DAMAGEBONUS_1d8), fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, TRUE); IPSafeAddItemProperty( oItem, ItemPropertyVisualEffect(ITEM_VISUAL_FIRE), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE); return fDuration; } float AddHolyAvengerEffect(object oItem, int iCasterLevel) { float fDuration = RoundsToSeconds(iCasterLevel); IPSafeAddItemProperty( oItem, ItemPropertyHolyAvenger(), fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, TRUE); IPSafeAddItemProperty( oItem, ItemPropertyVisualEffect(ITEM_VISUAL_HOLY), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE); return fDuration; } float AddKeenEffect(object oItem, int iCasterLevel) { float fDuration = TurnsToSeconds(iCasterLevel*10); IPSafeAddItemProperty( oItem, ItemPropertyKeen(), fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING , TRUE); return fDuration; } float AddBlessEffect(object oItem, int iCasterLevel) { float fDuration = TurnsToSeconds(iCasterLevel*2); IPSafeAddItemProperty( oItem, ItemPropertyEnhancementBonusVsAlign(ALIGNMENT_EVIL, 1), fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, TRUE); IPSafeAddItemProperty( oItem, ItemPropertyDamageBonusVsRace(EFFECT_TYPE_BLESS_WEAPON_TYPE, IP_CONST_DAMAGETYPE_DIVINE, IP_CONST_DAMAGEBONUS_2d6), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING); IPSafeAddItemProperty( oItem, ItemPropertyVisualEffect(ITEM_VISUAL_HOLY), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, TRUE); return fDuration; } float AddEnhancementEffect(object oItem, int iCasterLevel) { float fDuration = HoursToSeconds(iCasterLevel); if (iCasterLevel > 3) { int iBonus = (iCasterLevel /3); switch ( iCasterLevel ) { case 5: { iBonus = 2; break; } case 10: { iBonus = 3; break; } case 15: { iBonus = 5; break; } default: break; } IPSafeAddItemProperty( oItem, ItemPropertyEnhancementBonus(iBonus), fDuration, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, TRUE); } else { IPSafeAddItemProperty( oItem, ItemPropertyEnhancementBonus(1), fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, TRUE); } return fDuration; } float AddTrueStrikeEffect(object oItem) { float fDuration = 9.0; IPSafeAddItemProperty( oItem, ItemPropertyAttackBonus(20), fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, TRUE); ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_HIT_SPELL_DIVINATION), oItem); return fDuration; } // * ::::::::::::::::::::::::: MAIN-FUNKTION ::::::::::::::::::::::::: void main() { object oPC = GetItemActivator(); object oPotion = GetItemActivated(); object oTarget = GetItemActivatedTarget(); if (GetOilType(oPotion) == FLAVOR_OIL) { AddEffectToPC(oPC, oTarget, oPotion); } else if(GetOilType(oPotion) == WEAPON_OIL) { AddEffectToWeapon(oPC, oTarget, oPotion); } else { SendMessageToPC(oPC, "Das Öl zeigt an diesem Gegenstand keine Wirkung!"); SetItemStackSize(oPotion, GetItemStackSize(oPotion)+1, FALSE); } }// Diverse Funktionen von Darnah. (c) 2009 bei eigenen Funktionen //////////////////////////////////////////////////////////////////////////////// // Math functions // // Created by Dave Musser (Syrsnein) // 17 December 2006 //////////////////////////////////////////////////////////////////////////////// /* A group of math functions not present in nwscript and improved random number functions Floor returns the largest float value that is less than or equal to the argument and is equal to an integer. Ceil returns the smallest float value that is greater than or equal to the argument and is equal to an integer. Round returns the closest integer to the argument by adding 1/2 and then taking the floor of the result. MaxFloat returns the greater of two float values. MinFloat returns the lesser of two float values. MaxInt returns the greater of two integer values. MinInt returns the lesser of two integer values. Hypot returns the square root of the sum of x squared and y squared. RandomInit initializes a history buffer on an object for RandomFloat and RandomInt. RandomFloat returns a random float between two float values. RandomInt returns a random integer between two integer values. */ const int MATH_DEBUG = FALSE; void MathDebug(string sMessage) { if (!MATH_DEBUG) return; PrintString("SY Math: " + sMessage); } struct RandomHistoryBuffer { float x0; float x1; float x2; float x3; float x4; }; //--------------------------- // Prototype Public Functions //--------------------------- // Floor // Returns a float value with no precision beyond 1/(10^i). // - x: float value to be floored // - i: precision of the value to be floored (default = 0) float Floor(float x, int i=0); // Ceil // Returns a float value with the 1/(10^i) precision incremented by 1 and no // precision beyond. // - x: float value to be ceiled // - i: precision of the value to be ceiled (default = 0) float Ceil(float x, int i=0); // Round // Returns a float value with the 1/(10^i) rounded up or down depending on the // 1/(10^(i+1)) value // - x: float value to be rounded // - i: precision of the value to be rounded (default = 0) float Round(float x, int i=0); // MaxFloat // Returns the greater of two float values // - x: float value; // - y: float value; float MaxFloat(float x, float y); // MinFloat // Returns the lesser of two float values // - x: float value; // - y: float value; float MinFloat(float x, float y); // MaxI // Returns the greater of two integers // - x: int value; // - y: int value; int MaxInt(int x, int y); // MinInt // Returns the lesser of two integers // - x: int value; // - y: int value; int MinInt(int x, int y); // Hypot // Returns sqrt(x^2 + y^2) // - x: float value; // - y: float value; float Hypot(float x, float y); // Returns the // RandomInit // Initializes a RandomHistoryBuffer on an object // - oObject: The object on which to store the history buffer. If oObject is // invalid, the module object will be used. // - nSeed: An initial value to use to seed the random engine. void RandomInit (object oObject, int nSeed); // RandomInt // A call to retrieve a random integer number. Default behavior is to return // either a 0 or a 1. // - nMax: The maximum random value // - nMin: The minimum random value // - nSeed: An integer number used to initialize the random number engine // - oObject: The object on which to store the history buffer. If oObject is // invalid, the module object will be used. int RandomInt(int nMax=1, int nMin=0, int nSeed=0, object oObject = OBJECT_INVALID); // RandomFloat // A call to retrieve a random float number. Default behavior is to return // a number between 0.0 and 1.0 // - fMax: The maximum random value // - fMin: The minimum random value // - nSeed: An integer number used to initialize the random number engine // - oObject: The object on which to store the history buffer. If oObject is // invalid, the module object will be used. float RandomFloat(float fMax=1.0, float fMin=0.0, int nSeed=0, object oObject = OBJECT_INVALID); //------------------------- // Define Private Functions //------------------------- struct RandomHistoryBuffer GetRandomHistoryBuffer(object oObject) { struct RandomHistoryBuffer strBuffer; strBuffer.x0 = GetLocalFloat(oObject, "RandomHistoryBuffer0"); strBuffer.x1 = GetLocalFloat(oObject, "RandomHistoryBuffer1"); strBuffer.x2 = GetLocalFloat(oObject, "RandomHistoryBuffer2"); strBuffer.x3 = GetLocalFloat(oObject, "RandomHistoryBuffer3"); strBuffer.x4 = GetLocalFloat(oObject, "RandomHistoryBuffer4"); return strBuffer; } void SetRandomHistoryBuffer(object oObject, struct RandomHistoryBuffer strBuffer) { SetLocalFloat(oObject, "RandomHistoryBuffer0", strBuffer.x0); SetLocalFloat(oObject, "RandomHistoryBuffer1", strBuffer.x1); SetLocalFloat(oObject, "RandomHistoryBuffer2", strBuffer.x2); SetLocalFloat(oObject, "RandomHistoryBuffer3", strBuffer.x3); SetLocalFloat(oObject, "RandomHistoryBuffer4", strBuffer.x4); } struct RandomHistoryBuffer UpdateRandomBufferValue(struct RandomHistoryBuffer strBuffer, int nIndex, float fValue = 0.) { switch(nIndex) { case 0: strBuffer.x0 = fValue; break; case 1: strBuffer.x1 = fValue; break; case 2: strBuffer.x2 = fValue; break; case 3: strBuffer.x3 = fValue; break; case 4: strBuffer.x4 = fValue; break; } return strBuffer; } struct RandomHistoryBuffer InitRandomHistoryBuffer() { struct RandomHistoryBuffer strBuffer; strBuffer.x0 = 0.0; strBuffer.x1 = 0.0; strBuffer.x2 = 0.0; strBuffer.x3 = 0.0; strBuffer.x4 = 0.0; return strBuffer; } int GetRandomInitialized(object oObject) { return GetLocalInt(oObject, "RandomHistoryBufferInit"); } void SetRandomInitialized(object oObject, int bVal) { SetLocalInt(oObject, "RandomHistoryBufferInit", TRUE); } int GetRandomSeed(object oObject) { if (!GetIsObjectValid(oObject)) oObject = GetModule(); int nSeed = GetLocalInt(oObject, "RandomSeed"); if (nSeed <= 0) nSeed = GetTimeMillisecond(); int nNewSeed = (nSeed < 10) ? 1000 - (10-nSeed) : nSeed - 10; SetLocalInt(oObject, "RandomSeed", nNewSeed); return nSeed; } float GetRandomMultiplier(object oObject) { struct RandomHistoryBuffer strBuffer = GetRandomHistoryBuffer(oObject); int nTemp = GetTimeMillisecond(); float c = 65528 * strBuffer.x3 + 2 * (strBuffer.x3 = strBuffer.x2) + 1 * (strBuffer.x2 = strBuffer.x1) + 5 * (strBuffer.x1 = strBuffer.x0) + strBuffer.x4; strBuffer.x4 = Floor(c); strBuffer.x0 = c - strBuffer.x4; strBuffer.x4 = strBuffer.x4 * (1./(256.*256.)); SetRandomHistoryBuffer(oObject, strBuffer); return strBuffer.x0; } //---------------------- // End private functions //---------------------- //------------------------ // Define Public Functions //------------------------ float Floor(float x, int i=0) { if (i==0) return IntToFloat(FloatToInt(x)); float y = pow(10., IntToFloat(i)); return IntToFloat(FloatToInt(x * y))/y; } float Ceil(float x, int i=0) { if (i==0) return IntToFloat(FloatToInt(x) + 1); float y = pow(10., IntToFloat(i)); return IntToFloat(FloatToInt(x * y)+1)/y; } float Round(float x, int i=0) { if (i==0) { float y = x - Floor(x); if (y>0.5) return Ceil(x); return Floor(x); } float y = pow(10., IntToFloat(i)); float z = IntToFloat(FloatToInt(x * y))/y; if ((z - Floor(z))>0.5) return Ceil(z)/y; return Floor(z)/y; } float MaxFloat(float x, float y) { return (x > y) ? x : y; } float MinFloat(float x, float y) { return (x < y) ? x : y; } int MaxInt(int x, int y) { return (x > y) ? x : y; } int MinInt(int x, int y) { return (x < y) ? x : y; } float Hypot(float x, float y) { return sqrt((x*x) + (y*y)); } void RandomInit (object oObject, int nSeed) { int i; int s = nSeed; struct RandomHistoryBuffer strBuffer = InitRandomHistoryBuffer(); // make random numbers and put them into the buffer for (i=0; i<5; i++) { float s = nSeed * 1074816.64; strBuffer = UpdateRandomBufferValue(strBuffer, i, s * (1./(32768.*32768.))); } // Set the buffer on our object SetRandomHistoryBuffer(oObject, strBuffer); // Let the object know it has been initialized SetRandomInitialized(oObject, TRUE); // randomize the buffer some more now. int nLoops = d10(); for (i=0; i < nLoops; i++) GetRandomMultiplier(oObject); } float RandomFloat(float fMax=1., float fMin=0., int nSeed=0, object oObject = OBJECT_INVALID) { fMin = MinFloat(fMin, 0.0); fMax = MaxFloat(fMax, fMin); // if an object has not be specified or is invalid, use the module. oObject = (oObject == OBJECT_INVALID) ? GetModule() : oObject; // if a seed has not been passed, then generate a seed based on the clock int nMySeed = (nSeed > 0) ? nSeed : GetRandomSeed(oObject); // If the random history buffer hasn't been initialized, do so now if (!GetRandomInitialized(oObject)) RandomInit(oObject, nMySeed); float fRange = fMax - fMin; // Generate our number float fNum = fRange * GetRandomMultiplier(oObject) + fMin; return fNum; } int RandomInt(int nMax=1, int nMin=0, int nSeed=0, object oObject = OBJECT_INVALID) { float fMin = IntToFloat(MinInt(nMin, 0)); float fMax = IntToFloat(MaxInt(nMax, nMin+1)); return FloatToInt(RandomFloat(fMax+1, fMin, nSeed, oObject)); } //////////////////////////////////////////////////////////////////////////////// // // Math functions end // ////////////////////////////////////////////////////////////////////////////////UTI V3.28 I(;}  $       AId E !T"#$ %r&'()*+,-./0 123 123 123 45 67829:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem1!Einfaches Waffenöl: Flammenwaffehw_tm_ew_flmwfAmdirhandwerk|TrankmischerHW_TM_EW_FLMWFPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;}  $       CId G !U"#$ %s&'()*+,-./0 123 123 123 45 67829:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem3#Einfaches Waffenöl: Magische Waffe hw_tm_ew_mgwfAmdirhandwerk|Trankmischer HW_TM_EW_MGWFPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;{  $       AId E !S"#K$ %q&'()*+,-./0 123 123 123 45 67829:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem1!Einfaches Waffenöl: Waffe Weihen hw_tm_ew_wfwhAmdirhandwerk|Trankmischer HW_TM_EW_WFWHPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;  $       FId J !Y"#$ %w&'()*+,-./0 123$ 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem6&Mächtiges Waffenöl: Heiliges Schwerthw_tm_mw_hlgswAmdirhandwerk|TrankmischerHW_TM_MW_HLGSWPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;  $       NId R !a"#$ %&'()*+,-./0 123 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem>.Mächtiges Waffenöl: Mächtige Magische Waffehw_tm_mw_mmgwfAmdirhandwerk|TrankmischerHW_TM_MW_MMGWFPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 F;o $      : iId m !|"#$ %&'()*+,-./0 123 123 45 678d9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem6&+2 Auftreten. Wirkungsdauer 6 Stunden.+Normales Duftöl der Lliirahw_tm_nd_auftrAmdirhandwerk|TrankmischerHW_TM_ND_AUFTRFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 F;k $      8 eId i !x"#$ %&'()*+,-./0 123 123 45 678d9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem4$+2 Bluffen. Wirkungsdauer 6 Stunden.)Normales Duftöl der Sharhw_tm_nd_bluffAmdirhandwerk|TrankmischerHW_TM_ND_BLUFFFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 F;m $      ; iId m !{"#$ %&'()*+,-./0 123 123 45 678d9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem7'+2 Diplomatie. Wirkungsdauer 6 Stunden.*Normales Duftöl des Oghma hw_tm_nd_diplAmdirhandwerk|Trankmischer HW_TM_ND_DIPLFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 F;q $      < mId q !"#$ %&'()*+,-./0 123 123 45 678d9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem8(+2 Provozieren. Wirkungsdauer 6 Stunden.-Normales Moschusöl des Cyric hw_tm_nd_provAmdirhandwerk|Trankmischer HW_TM_ND_PROVFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 F;u $      ? qId u !"#$ %&'()*+,-./0 123 123 45 678d9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem;++2 Einschüchtern. Wirkungsdauer 6 Stunden..Normales Moschusöl des Tempus hw_tm_nd_einsAmdirhandwerk|Trankmischer HW_TM_ND_EINSFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 I(;  $       DId H !W"#$ %u&'()*+,-./0 123$ 123 123 45 678d9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem4$Normales Waffenöl: Heiliges Schwerthw_tm_nw_hlgswAmdirhandwerk|TrankmischerHW_TM_NW_HLGSWPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;  $       LId P !_"#$ %}&'()*+,-./0 123 123 123 45 678d9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem<,Normales Waffenöl: Mächtige Magische Waffehw_tm_nw_mmgwfAmdirhandwerk|TrankmischerHW_TM_NW_MMGWFPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;{  $       =Id A !Q"#U$ %o&'()*+,-./0 123+ 123 123 45 678d9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem-Normales Waffenöl: Schärfenhw_tm_nw_scharfAmdirhandwerk|TrankmischerHW_TM_NW_SCHARFPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;  $       GId K !Y"#$ %w&'()*+,-./0 1238 123 123 45 678d9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem7'Normales Waffenöl: Zielsicherer Schlag hw_tm_nw_zlssAmdirhandwerk|Trankmischer HW_TM_NW_ZLSSPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 F;r $      > nId r !"#j$ %&'()*+,-./0 123 123 45 678d9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem:*+2 Konzentration. Wirkungsdauer 6 Stunden.,Normales Aromaöl der Mystra hw_tm_nd_konzAmdirhandwerk|Trankmischer HW_TM_ND_KONZFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 F;n $      : hId l !{"#$ %&'()*+,-./0 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem6&+4 Auftreten. Wirkungsdauer 6 Stunden.*Starkes Duftöl der Lliirahw_tm_sd_auftrAmdirhandwerk|TrankmischerHW_TM_SD_AUFTRFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 F;j~ $      8 dId h !w"#$ %&'()*+,-./0 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem4$+4 Bluffen. Wirkungsdauer 6 Stunden.(Starkes Duftöl der Sharhw_tm_sd_bluffAmdirhandwerk|TrankmischerHW_TM_SD_BLUFFFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 F;l $      ; hId l !z"#$ %&'()*+,-./0 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem7'+4 Diplomatie. Wirkungsdauer 6 Stunden.)Starkes Duftöl des Oghma hw_tm_sd_diplAmdirhandwerk|Trankmischer HW_TM_SD_DIPLFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 F;t $      ? pId t !"#$ %&'()*+,-./0 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem;++4 Einschüchtern. Wirkungsdauer 6 Stunden.-Starkes Moschusöl des Tempus hw_tm_sd_einsAmdirhandwerk|Trankmischer HW_TM_SD_EINSFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 F;q $      > mId q !"#$ %&'()*+,-./0 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem:*+4 Konzentration. Wirkungsdauer 6 Stunden.+Starkes Aromaöl der Mystra hw_tm_sd_konzAmdirhandwerk|Trankmischer HW_TM_SD_KONZFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 F;p $      < lId p !~"#$ %&'()*+,-./0 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem8(+4 Provozieren. Wirkungsdauer 6 Stunden.,Starkes Moschusöl des Cyric hw_tm_sd_provAmdirhandwerk|Trankmischer HW_TM_SD_PROVFTGPWR"#$()*+,-./012345678?@ABCDE   !%&'9:;<=> UTI V3.28 I(;{  $       ?Id C !R"#$ %p&'()*+,-./0 123 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem/Starkes Waffenöl: Flammenwaffehw_tm_sw_flmwfAmdirhandwerk|TrankmischerHW_TM_SW_FLMWFPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;  $       KId O !^"#$ %|&'()*+,-./0 123 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem;+Starkes Waffenöl: Mächtige Magische Waffehw_tm_sw_mmgwfAmdirhandwerk|TrankmischerHW_TM_SW_MMGWFPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;z  $       <Id @ !P"#U$ %n&'()*+,-./0 123+ 123 123 45 6789:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem,Starkes Waffenöl: Schärfenhw_tm_sw_scharfAmdirhandwerk|TrankmischerHW_TM_SW_SCHARFPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;  $       GId K !Z"#$ %x&'()*+,-./0 123 123 123 45 678 9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem7'Übermächtiges Waffenöl: Flammenwaffehw_tm_uw_flmwfAmdirhandwerk|TrankmischerHW_TM_UW_FLMWFPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;  $       KId O !^"#$ %|&'()*+,-./0 123$ 123 123 45 678 9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem;+Übermächtiges Waffenöl: Heiliges Schwerthw_tm_uw_hlgswAmdirhandwerk|TrankmischerHW_TM_UW_HLGSWPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A UTI V3.28 I(;  $       DId H !X"#U$ %v&'()*+,-./0 123+ 123 123 45 678 9:TintableTint1rabg23ContainerUIModelPart2DescriptionCostItemCastsShadowLocalizedNameCommentPropertiesListSubtypeParam2ValuePropertyNameCostValueCostTableChanceAppearParam2Param1ValueParam1ItemRcvShadowTemplateResRefUVScrollUVScrollStolenClassificationPlotIconDropableTagModelPart1ForceContainerModelPart3IPActPrefDmgReductionCursedGMaterialChargesIdentifiedPickpocketableVarTableNameTypeValueDescIdentifiedStackSizeAppearanceSEFContainerPrefModifyCostArmorRulesTypeBaseItem4$Übermächtiges Waffenöl: Schärfenhw_tm_uw_scharfAmdirhandwerk|TrankmischerHW_TM_UW_SCHARFPTPSTPWR"#$()*+,-./012345678BCDEFGH   !%&'9:;<=>?@A