generated from Jaysyn/ModuleTemplate
Initial upload
Initial upload.
This commit is contained in:
253
_module/nss/inc_bodytailor.nss
Normal file
253
_module/nss/inc_bodytailor.nss
Normal file
@@ -0,0 +1,253 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: BODY TAILOR: include file
|
||||
//:: btlr_* scripts
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
allows restrictions for wings/tails.
|
||||
sets MAX for wings, tails, heads.
|
||||
and misc switches for control.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Modified By: styzygy
|
||||
//:: Created By: bloodsong
|
||||
//:: based on the mil tailor by Jake E. Fitch (Milambus Mandragon)
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//-- CONSTANTS for the soft MAX of each type;
|
||||
//-- the wing/tail 2das can't go above 256 anyway.
|
||||
//-- change these to reflect the max number of whatever
|
||||
//-- that you have in your module.
|
||||
//-- ie: you may not have 200 female human heads, though it is possible.
|
||||
int WINGMAX = 256;
|
||||
int TAILMAX = 256;
|
||||
|
||||
int HFHEADMAX = 200; //-- human female
|
||||
int HMHEADMAX = 200; //-- human male
|
||||
int AFHEADMAX = 100; //-- halfling female
|
||||
int AMHEADMAX = 50; //-- halfling male
|
||||
int EFHEADMAX = 150; //-- elf female
|
||||
int EMHEADMAX = 50; //-- elf male
|
||||
int GFHEADMAX = 50; //-- gnome female
|
||||
int GMHEADMAX = 50; //-- gnome male
|
||||
int DFHEADMAX = 150; //-- dwarf female
|
||||
int DMHEADMAX = 50; //-- dwarf male
|
||||
int OFHEADMAX = 50; //-- halforc female
|
||||
int OMHEADMAX = 50; //-- halforc male
|
||||
|
||||
int CUSTOMPARTS = 2; //-- set this to how many pc parts you have
|
||||
//-- before it should switch up to part 255. default is 0, 1, 2.
|
||||
int MAXPHENO = 2; //-- set to your highest phenotype you are using. 2 if you dont have pheno haks
|
||||
|
||||
|
||||
//--CONSTANTS for switches; set to 0 to turn off
|
||||
int SKIP2DALINES = 0; //--my wings/tails skip 2da lines, so finding a blank
|
||||
//--is not an end-of-file indication. use 1 if your 2das skip,
|
||||
//--and then use the restrictions list and MAX constants
|
||||
//--to define the wing/tail limits.
|
||||
|
||||
int ALLOWBONEARM = 1; //-- anybody can get a palemaster arm
|
||||
int ALLOWBONEREMOVAL= 1; //-- palemasters can remove bone arms
|
||||
int ALLOWRDDWING = 1; //-- anybody can get red dragon wings
|
||||
int ALLOWRDDREMOVAL = 1; //-- red dragon disciples can remove wings
|
||||
int ALLOWEYES = 1; //-- let anybody get glowing eyes
|
||||
//--REMOVED //-- allow monks to remove glowing eyes -- THEY CANT anyway.
|
||||
|
||||
//--notes on EYE numbers; i dont know what the real numbers are,
|
||||
//-- so i set these as tracking numbers.
|
||||
//-- 0=none, 1=red, 2=green, 3=yellow
|
||||
|
||||
//--RESTRICTION LISTS: WINGS/TAILS
|
||||
/* instructions:
|
||||
you can set individual wings/tails or ranges of them
|
||||
to be un-selectable in the body shop tailor.
|
||||
for example, if you dont want people to have angel or demon wings,
|
||||
set a case # for those, like this:
|
||||
case CREATURE_WING_TYPE_ANGEL:
|
||||
case CREATURE_WING_TYPE_DEMON:
|
||||
return TRUE;
|
||||
|
||||
you can also use straight numbers, which match the 2da line numbers.
|
||||
ie: demon = 1 and angel = 2. custom wings will use plain numbers.
|
||||
the scripts should skip blank 2da lines, but to make this process
|
||||
run more smoothly, you should indicate any large gaps in your 2da files,
|
||||
using the invalid range sets, thus:
|
||||
if(n >= 43 && n <= 93) return TRUE;
|
||||
|
||||
this will skip lines 43-93.
|
||||
|
||||
if you touch nothing, there won't be any restrictions.
|
||||
you can still use the soft max constants to tell the scripts
|
||||
when to loop back to the beginning.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
//checks if n is a valid number; TRUE is INvalid, FALSE is valid
|
||||
int WingIsInvalid(int n)
|
||||
{
|
||||
//-- restriction list switch
|
||||
switch(n)
|
||||
{
|
||||
//case #:
|
||||
// return TRUE;
|
||||
}
|
||||
|
||||
// if(n >= [low#] && n<= [high#]) return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
//checks if n is a valid number; TRUE is INvalid, FALSE is valid
|
||||
int TailIsInvalid(int n)
|
||||
{
|
||||
//-- restriction list switch
|
||||
switch(n)
|
||||
{
|
||||
//case #:
|
||||
// return TRUE;
|
||||
}
|
||||
|
||||
// if(n >= [low#] && n<= [high#]) return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--OUTSIDE FUNCTIONS-----------------------------------------------
|
||||
//-- do not modify stuff below
|
||||
|
||||
// Remove an effect of the given type
|
||||
void RemoveEffectOfType(object oTarget, int nEffectType)
|
||||
{
|
||||
effect eEff = GetFirstEffect(oTarget);
|
||||
while (GetIsEffectValid(eEff)) {
|
||||
if ( GetEffectType(eEff) == nEffectType) {
|
||||
RemoveEffect(oTarget, eEff);
|
||||
}
|
||||
eEff = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//--sticks nFX eyes on oCreature
|
||||
//--with routine by the guy who figured out how to figure out eye numbers,
|
||||
//-- but didnt put his/her name on the scripts
|
||||
void ApplyEyes(int nFX, object oCreature)
|
||||
{
|
||||
int nGender = GetGender(oCreature);
|
||||
int nRace = GetAppearanceType(oCreature);
|
||||
//--FX EYE # LIST: 0=none, 1=red, 2=green, 3=yellow. there.
|
||||
|
||||
switch(nRace)
|
||||
{//-- this will make the races translate to proper advances on the fx constants. trust me.
|
||||
case 0: nRace = 2; break;
|
||||
case 1: nRace = 4; break;
|
||||
case 2: nRace = 6; break;
|
||||
case 3: nRace = 8; break;
|
||||
case 4: nRace = 0; break;
|
||||
case 5: nRace = 10; break;
|
||||
default: nRace = 0; break;
|
||||
}
|
||||
|
||||
switch (nFX)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
RemoveEffectOfType(oCreature, EFFECT_TYPE_VISUALEFFECT);
|
||||
effect eEyes = SupernaturalEffect(EffectVisualEffect( VFX_EYES_RED_FLAME_HUMAN_MALE+nGender+nRace));
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEyes, oCreature);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
RemoveEffectOfType(oCreature, EFFECT_TYPE_VISUALEFFECT);
|
||||
effect eEyes = SupernaturalEffect(EffectVisualEffect( VFX_EYES_GREEN_HUMAN_MALE+nGender+nRace));
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEyes, oCreature);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
RemoveEffectOfType(oCreature, EFFECT_TYPE_VISUALEFFECT);
|
||||
|
||||
effect eEyes1 = SupernaturalEffect(EffectVisualEffect( VFX_EYES_GREEN_HUMAN_MALE+nGender+nRace));
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEyes1, oCreature);
|
||||
|
||||
effect eEyes2 = SupernaturalEffect(EffectVisualEffect( VFX_EYES_RED_FLAME_HUMAN_MALE+nGender+nRace));
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEyes2, oCreature);
|
||||
break;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
RemoveEffectOfType(oCreature, EFFECT_TYPE_VISUALEFFECT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
string Get2DACheck(string sFile, int iRow)
|
||||
{
|
||||
//-- this reads a string from the module...!?
|
||||
string sACBonus = GetLocalString(GetModule(), sFile + IntToString(iRow));
|
||||
//-- if the module string is blank...
|
||||
if (sACBonus == "")
|
||||
{ //--read the 2da of the file, for the MODEL column, on our current row.
|
||||
sACBonus = Get2DAString(sFile, "MODEL", iRow);
|
||||
|
||||
if (sACBonus == "" && iRow != 0)//-- dont skip blank row 0, none
|
||||
{//-- if that is blank, we SKIP that line.
|
||||
sACBonus = "SKIP";
|
||||
//-- unless the LABEL row is also blank...
|
||||
string sCost = Get2DAString(sFile, "LABEL", iRow);
|
||||
if (sCost == "" && !SKIP2DALINES) sACBonus = "FAIL";
|
||||
//--AND we are not skipping blank 2da lines.
|
||||
//-- in which case its a FAIL.
|
||||
}
|
||||
//--store the 2da row/column value on the module.
|
||||
SetLocalString(GetModule(), sFile + IntToString(iRow), sACBonus);
|
||||
}
|
||||
//--this returns a number-string, or SKIP or FAIL.
|
||||
return sACBonus;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int GetCachedLimit(string sFile)
|
||||
{
|
||||
if(!SKIP2DALINES)
|
||||
{//-- we're not skipping blank lines
|
||||
if(sFile == "wingmodel.2da")
|
||||
{ return WINGMAX; }
|
||||
else //--its tails
|
||||
{ return TAILMAX; }
|
||||
}
|
||||
//-- if we're not skipping blank lines, we can find the max
|
||||
//-- line number of the 2da using this
|
||||
|
||||
int iLimit = GetLocalInt(GetModule(), sFile + "Limit");
|
||||
|
||||
if (iLimit == 0)
|
||||
{
|
||||
int iCount = 0;
|
||||
|
||||
while (Get2DAString(sFile, "MODEL", iCount + 1) != "")
|
||||
{
|
||||
iCount++;
|
||||
}
|
||||
|
||||
SetLocalInt(GetModule(), sFile + "Limit", iCount);
|
||||
iLimit = iCount;
|
||||
}
|
||||
|
||||
return iLimit;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
void main(){}
|
Reference in New Issue
Block a user