Aschbourne_PRC8/_module/nss/mk_pre_body.nss
Jaysyn904 903f023230 Major update
Created top hak for crafting dialog.  Moved Bioware creature abilities to top hak.  Fixed DMFI wand handouts.  Added DMFI language handouts.  Added CCOH 6.  Disabled PC corpse system.  Modified new player startup system.  Full compile.  Updated release archive.
2024-09-17 13:24:57 -04:00

497 lines
17 KiB
Plaintext

#include "mk_inc_generic"
#include "mk_inc_body"
#include "mk_inc_craft"
#include "mk_inc_ccoh_db"
#include "mk_inc_states"
#include "mk_inc_horse"
#include "mk_inc_delimiter"
int GetIsCraftingDisabled(object oPC, int i)
{
string sVarName = "MK_DISABLE_CRAFT_" + MK_IntToString(i, 2, "0");
return (GetLocalInt(oPC, sVarName)==1);
}
int StartingConditional()
{
object oPC = GetPCSpeaker();
MK_CCOH_DB_Init(oPC);
int nState = MK_GenericDialog_GetState();
int nAction = MK_GenericDialog_GetAction();
object oTarget = MK_GetCurrentTarget(oPC);
int nBodyPartToBeModified = MK_GetBodyPartToBeModified(oPC);
MK_DEBUG_TRACE("mk_pre_body: nState="+IntToString(nState)+", nAction="+IntToString(nAction));
switch (nState)
{
case MK_STATE_INIT:
switch (nAction)
{
case MK_CRAFTBODY_HORSE:
// Riding
StoreCameraFacing();
nState = MK_STATE_BODY_MODIFY;
CISetCurrentModMode(oPC, MK_CI_MODMODE_BODY);
MK_SetBodyPartToBeModified(oPC, nAction, TRUE);
// MK_SaveBodyPart(oPC);
MK_InitializeHorseSelection(oTarget);
MK_AddTemporaryEffects(oPC, MK_TAG_TEMP_EFFECT, FALSE, oTarget);
break;
default:
StoreCameraFacing();
nState = MK_STATE_BODY_SELECT;
break;
}
MK_CCOH_DB_SaveBody(oTarget);
// MK_SaveBody(oPC, 0);
MK_GenericDialog_SetState(nState);
break;
case MK_STATE_VFX_SELECT_FILTER:
// if (nAction==255)
MK_GenericDialog_SetState(nState = MK_STATE_BODY_SELECT);
break;
case MK_STATE_DATABASE_1:
MK_GenericDialog_SetState(nState = MK_STATE_BODY_SELECT);
break;
case MK_STATE_DATABASE_3:
switch (nAction)
{
case 250:
{
int nSelectedIASStrTypes = MK_CCOH_DB_GetSelectedIASStrTypes(oPC);
MK_DEBUG_TRACE("> nIASStrTypes="+IntToString(nSelectedIASStrTypes)+
", RWmode="+IntToString(MK_CCOH_DB_GetReadWriteMode(oPC)));
switch (MK_CCOH_DB_GetReadWriteMode(oPC))
{
case MK_CCOH_DB_READ:
switch (CIGetCurrentModMode(oPC))
{
case MK_CI_MODMODE_BODY:
if (MK_CCOH_DB_ReadBodyAppearanceFromDatabase(
oPC, oTarget,
MK_CCOH_DB_GetCurrentSlot(oPC),
nSelectedIASStrTypes))
{
SendMessageToPC(oPC, "Appearance read from database!");
}
else
{
SendMessageToPC(oPC, "Failed to read appearance from database!");
}
break;
}
break;
case MK_CCOH_DB_WRITE:
switch (CIGetCurrentModMode(oPC))
{
case MK_CI_MODMODE_BODY:
if (MK_CCOH_DB_WriteBodyAppearanceToDatabase(
oPC, oTarget,
MK_CCOH_DB_GetCurrentSlot(oPC),
nSelectedIASStrTypes,
MK_CCOH_DB_GetCurrentSlotName(oPC)))
{
SendMessageToPC(oPC, "Appearance written to database!");
}
else
{
SendMessageToPC(oPC, "Failed to write appearance to database!");
}
break;
}
break;
}
break;
}
}
nState = MK_STATE_BODY_SELECT;
MK_GenericDialog_SetState(nState);
break;
case MK_STATE_BODY_SELECT:
if ((nAction>0) && (nAction<=MK_CRAFTBODY_NUMBER_OF_BODYPARTS))
{
// So the finish/cancel scripts work properly
CISetCurrentModMode(oPC, MK_CI_MODMODE_BODY);
MK_SetBodyPartToBeModified(oPC, nAction, TRUE);
// MK_SaveBodyPart(oPC);
switch (nAction)
{
case MK_CRAFTBODY_BODY:
MK_SetSubPartToBeModified(oPC, -1, FALSE);
break;
case MK_CRAFTBODY_COLOR:
MK_SetSubPartToBeModified(oPC, -1, oPC==oTarget);
break;
}
nState = MK_STATE_BODY_MODIFY;
MK_GenericDialog_SetState(nState);
}
/* else if (nAction==MK_CRAFTBODY_SAVERESTORE)
{
// So the cancel script restores the body
CISetCurrentModMode(oPC, MK_CI_MODMODE_BODY);
MK_SetBodyPartToBeModified(oPC, nAction);
// MK_SaveBody(oPC, 0);
}*/
else if (nAction!=255)
{
SendMessageToPC(oPC, "mk_pre_body: I think we shouldn't be here. Something went wrong?");
}
switch (MK_GetBodyPartToBeModified(oPC))
{
// case MK_CRAFTBODY_HORSE:
case MK_CRAFTBODY_BODY:
case MK_CRAFTBODY_COLOR:
case MK_CRAFTBODY_PHENOTYPE:
case MK_CRAFTBODY_HEAD:
case MK_CRAFTBODY_TAIL:
case MK_CRAFTBODY_WINGS:
// case MK_CRAFTBODY_SCALE:
MK_AddTemporaryEffects(oPC, MK_TAG_TEMP_EFFECT, FALSE, oTarget);
break;
}
break;
case MK_STATE_BODY_MODIFY:
switch (nBodyPartToBeModified)
{
case MK_CRAFTBODY_PORTRAIT:
if ((nAction>=1) && (nAction<=4))
{
MK_NewPortrait(oTarget, nAction, oPC);
ClearAllActions();
// So we have the proper portrait in the dialog as well
ActionPauseConversation();
ActionWait(GetLocalFloat(oPC, "MK_PORTRAIT_DELAY"));
ActionResumeConversation();
}
break;
case MK_CRAFTBODY_HEAD:
switch (nAction)
{
case 1:
case 2:
MK_NewBodyPart(oTarget, nAction, oPC);
break;
case 20:
case 21:
case 22:
case 23:
case 24:
SetLocalInt(oPC, MK_CRAFTBODY_HEAD_FILTER, (nAction-20));
break;
case 250:
MK_SwapTattooColors(oTarget);
break;
}
break;
case MK_CRAFTBODY_PHENOTYPE:
case MK_CRAFTBODY_TAIL:
case MK_CRAFTBODY_WINGS:
switch (nAction)
{
case 1:
case 2:
case 3:
MK_NewBodyPart(oTarget, nAction, oPC);
break;
}
break;
case MK_CRAFTBODY_BODY:
{
int nCurrentSubPart = MK_GetSubPartToBeModified(oPC);
if (nCurrentSubPart==-1)
{
nCurrentSubPart = nAction;
nAction = -1;
MK_SetSubPartToBeModified(oPC, nCurrentSubPart, (oPC==oTarget) && (nBodyPartToBeModified == MK_CRAFTBODY_BODY));
}
else if (nAction == -1)
{
nCurrentSubPart = -1;
MK_SetSubPartToBeModified(oPC, nCurrentSubPart, (oPC==oTarget) && (nBodyPartToBeModified == MK_CRAFTBODY_BODY));
}
if ((nCurrentSubPart!=-1) && (nAction!=-1))
{
switch (nAction)
{
case 1:
case 2:
MK_NewBodyPart(oTarget, nAction, oPC);
break;
}
}
break;
}
case MK_CRAFTBODY_COLOR:
{
int nCurrentSubPart = MK_GetSubPartToBeModified(oPC);
if ((nCurrentSubPart==-1) && (nAction==250))
{
MK_SwapTattooColors(oTarget);
}
else if (nCurrentSubPart==-1)
{
nCurrentSubPart = nAction;
nAction = -1;
MK_SetSubPartToBeModified(oPC, nCurrentSubPart, (oPC==oTarget) && (nBodyPartToBeModified == MK_CRAFTBODY_BODY));
}
else if (nAction == -1)
{
nCurrentSubPart = -1;
MK_SetSubPartToBeModified(oPC, nCurrentSubPart, (oPC==oTarget) && (nBodyPartToBeModified == MK_CRAFTBODY_BODY));
}
if ((nCurrentSubPart!=-1) && (nAction!=-1))
{
switch (nAction)
{
case 1:
case 2:
MK_NewBodyPart(oTarget, nAction, oPC);
break;
}
}
break;
}
case MK_CRAFTBODY_HORSE:
{
int nHorse=-1;
switch (nAction)
{
case 1:
case 2:
MK_NewBodyPart(oTarget, nAction, oPC);
break;
case 3:
nHorse = GetLocalInt(oTarget, MK_VAR_CURRENT_HORSE);
break;
case 4:
nHorse = MK_HORSE_1;
break;
case 5:
nHorse = MK_HORSE_2;
break;
case 6:
nHorse = MK_HORSE_3;
break;
case 7:
nHorse = MK_HORSE_4;
break;
case 8:
nHorse = MK_HORSE_5;
break;
case 20:
nHorse = 0;
break;
}
if (nHorse!=-1)
{
MK_CreatureMountHorse(oTarget,nHorse);
}
break;
}
}
break;
}
switch (nState)
{
case MK_STATE_BODY_SELECT:
{
// MK_DEBUG_TRACE("mk_pre_body: state=MK_STATE_BODY_SELECT");
int nPartBased = MK_GetIsPartBasedAppearanceType(oTarget);
int iCondition;
int bOk;
string sVarName;
for (iCondition=11; iCondition<=26; iCondition++)
{
bOk = (!GetIsCraftingDisabled(oPC, iCondition));
switch (iCondition)
{
case 11: // portraits
bOk = bOk && MK_VERSION_GetIsVersionGreaterEqual_1_67(oPC);
break;
case 12: // head
case 14: // body parts
case 15: // tail
case 16: // wings
bOk = bOk && nPartBased && MK_VERSION_GetIsVersionGreaterEqual_1_67(oPC);
break;
case 13: // pheno
bOk = bOk && nPartBased && MK_VERSION_GetIsVersionGreaterEqual_1_64(oPC);
break;
case 17: // color
bOk = bOk && nPartBased && MK_VERSION_GetIsVersionGreaterEqual_1_69(oPC);
break;
case 18: // not used
case 20: // not used
bOk = FALSE;
break;
case 21: // scale
// bOk = bOk && MK_VERSION_GetIsVersionGreaterEqual_1_75(oPC);
bOk = bOk && MK_VERSION_GetIsBuildVersionGreaterEqual(oPC, 8193, 21);
break;
case 23: // description
bOk = bOk && MK_VERSION_GetIsVersionGreaterEqual_1_69(oPC) &&
// (!GetIsCraftingDisabled(oPC, iCondition)) &&
(!MK_CCOH_DB_GetIsBodyChanged(oPC)) &&
(GetLocalInt(oPC, "MK_DISABLE_TEXT_EDITOR")!=1);
break;
case 25: // footstep type
bOk = bOk && MK_VERSION_GetIsVersionGreaterEqual_1_66(oPC);
break;
case 26: // deity
bOk = bOk && (oPC == oTarget);
break;
// default:
// bOk = (!GetIsCraftingDisabled(oPC, iCondition));
// break;
}
MK_GenericDialog_SetCondition(iCondition, bOk);
}
MK_GenericDialog_SetCondition(254, MK_CCOH_DB_GetIsBodyChanged(oPC));
break;
}
case MK_STATE_BODY_MODIFY:
// MK_DEBUG_TRACE("mk_pre_body: state=MK_STATE_BODY_MODIFY");
MK_GenericDialog_SetCondition(254, MK_CCOH_DB_GetIsBodyChanged(oPC));
MK_GenericDialog_SetCondition(255, FALSE);
MK_GenericDialog_SetCondition(257, TRUE);
switch (MK_GetBodyPartToBeModified(oPC))
{
/*
case MK_CRAFTBODY_SAVERESTORE:
{
int bUsedAny=FALSE;
int nSlot;
for (nSlot=1; nSlot<=MK_CRAFTBODY_NUMBER_OF_SLOTS; nSlot++)
{
int bUsed = MK_GetIsUsedSaveBodySlot(oPC, nSlot);
bUsedAny = bUsedAny || bUsed;
MK_GenericDialog_SetCondition(nSlot, !bUsed);
MK_GenericDialog_SetCondition(10+nSlot, bUsed);
}
MK_GenericDialog_SetCondition(0, bUsedAny);
MK_GenericDialog_SetCondition(22, !bIsModified);
break;
}
*/
case MK_CRAFTBODY_HEAD:
{
MK_GenericDialog_SetCondition(17,
MK_VERSION_GetIsVersionGreaterEqual_1_69(oPC) &&
(!GetIsCraftingDisabled(oPC, 17)));
int nCurrentFilter = GetLocalInt(oPC, MK_CRAFTBODY_HEAD_FILTER);
int nUserFilter = (GetLocalString(oPC, "MK_2DA_VALID_HEADS")!="");
int nCEPFilter = (MK_BODY_GetCEPHeadFilterExists(oPC));
MK_GenericDialog_SetCondition(20, (nCurrentFilter!=0));
MK_GenericDialog_SetCondition(21, (nCurrentFilter!=1));
MK_GenericDialog_SetCondition(22, (nCurrentFilter!=2) && (nUserFilter) && (!nCEPFilter));
MK_GenericDialog_SetCondition(23, (nCurrentFilter!=3) && (!nUserFilter) && (nCEPFilter));
MK_GenericDialog_SetCondition(24, (nCurrentFilter!=4) && (nUserFilter) && (nCEPFilter));
string sFilter="";
switch (nCurrentFilter)
{
case 0:
sFilter = "none";
break;
case 1:
sFilter = "Bioware";
break;
case 2:
sFilter = "User";
break;
case 3:
sFilter = "CEP";
break;
case 4:
sFilter = "User / CEP";
break;
}
SetCustomToken(14433, sFilter);
break;
}
case MK_CRAFTBODY_PORTRAIT:
{
int nMaxCustomId = MK_GetMaxPortraitId(oPC, TRUE);
MK_GenericDialog_SetCondition(3,nMaxCustomId>0);
MK_GenericDialog_SetCondition(4,nMaxCustomId>0);
break;
}
case MK_CRAFTBODY_BODY:
{
int nBodyPart;
for (nBodyPart=0; nBodyPart<=17; nBodyPart++)
{
int nMaxBodyPartID = MK_GetMaxBodyPartID(oPC, nBodyPart);
MK_GenericDialog_SetCondition(nBodyPart, nMaxBodyPartID>0);
}
break;
}
case MK_CRAFTBODY_HORSE:
{
// MK_DEBUG_TRACE("mk_pre_body: part=MK_CRAFTBODY_HORSE");
int bIsRiding = MK_GetIsRiding(oTarget);
int nCurrentHorse = GetLocalInt(oTarget, MK_VAR_CURRENT_HORSE);
int nHorse = GetCreatureTailType(oTarget);
// MK_DEBUG_TRACE("bIsRiding="+IntToString(bIsRiding)+", nCurrentHorse="+IntToString(nCurrentHorse)+", nHorse="+IntToString(nHorse));
MK_GenericDialog_SetCondition(1, bIsRiding);
MK_GenericDialog_SetCondition(2, bIsRiding);
MK_GenericDialog_SetCondition(3, (nCurrentHorse!=0) && (nHorse!=nCurrentHorse));
MK_GenericDialog_SetCondition(4, (nCurrentHorse!=MK_HORSE_1) && (nHorse!=MK_HORSE_1));
MK_GenericDialog_SetCondition(5, (nCurrentHorse!=MK_HORSE_2) && (nHorse!=MK_HORSE_2));
MK_GenericDialog_SetCondition(6, (nCurrentHorse!=MK_HORSE_3) && (nHorse!=MK_HORSE_3));
MK_GenericDialog_SetCondition(7, (nCurrentHorse!=MK_HORSE_4) && (nHorse!=MK_HORSE_4));
MK_GenericDialog_SetCondition(8, (nCurrentHorse!=MK_HORSE_5) && (nHorse!=MK_HORSE_5));
MK_GenericDialog_SetCondition(20, bIsRiding);
MK_SetBodyPartTokens(oPC, oTarget);
switch (MK_HORSE_GetHorseSystem(oPC))
{
case MK_HORSE_BIOWARE_HORSE_SYSTEM:
MK_GenericDialog_SetCondition(254, FALSE);
MK_GenericDialog_SetCondition(255, TRUE);
MK_GenericDialog_SetCondition(257, FALSE);
SetCustomToken(14424, "Bioware Instant Horse System.");
break;
case MK_HORSE_CCOH_HORSE_SYSTEM:
MK_GenericDialog_SetCondition(254, TRUE);
MK_GenericDialog_SetCondition(255, FALSE);
MK_GenericDialog_SetCondition(257, TRUE);
SetCustomToken(14424, "CCOH Simple Horse System.");
break;
}
break;
}
/* default:
MK_SetBodyPartTokens(oPC);
break;*/
}
MK_SetBodyPartTokens(oPC, oTarget);
break;
}
MK_DELIMITER_Initialize();
return TRUE;
}