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.
497 lines
17 KiB
Plaintext
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;
|
|
}
|