373 lines
13 KiB
Plaintext
373 lines
13 KiB
Plaintext
|
#include "mk_inc_generic"
|
||
|
#include "mk_inc_craft"
|
||
|
#include "mk_inc_body"
|
||
|
#include "mk_inc_ccoh_db"
|
||
|
#include "mk_inc_states"
|
||
|
#include "mk_inc_delimiter"
|
||
|
|
||
|
int StartingConditional()
|
||
|
{
|
||
|
object oPC = GetPCSpeaker();
|
||
|
object oTarget = MK_GetCurrentTarget(oPC);
|
||
|
object oItem = CIGetCurrentModItem(oPC);
|
||
|
|
||
|
MK_CCOH_DB_Init(oPC);
|
||
|
|
||
|
MK_DELIMITER_Initialize();
|
||
|
|
||
|
int nState = MK_GenericDialog_GetState();
|
||
|
int nAction = MK_GenericDialog_GetAction();
|
||
|
|
||
|
// MK_DEBUG_TRACE("mk_pre_db_item: nState="+IntToString(nState)+", nAction="+IntToString(nAction));
|
||
|
|
||
|
switch (nState)
|
||
|
{
|
||
|
case MK_STATE_INIT:
|
||
|
// We've just selected "Save/Restore" (coming from modify an item)
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_1);
|
||
|
break;
|
||
|
case MK_STATE_BODY_SELECT:
|
||
|
// We've just selected "Save/Restore" (coming from modify body)
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_1);
|
||
|
// So the cancel script restores the body
|
||
|
CISetCurrentModMode(oPC, MK_CI_MODMODE_BODY);
|
||
|
MK_SetBodyPartToBeModified(oPC, nAction);
|
||
|
// MK_SaveBody(oPC, 0);
|
||
|
break;
|
||
|
case MK_STATE_DATABASE_1:
|
||
|
// We've choosen to read from local/global or to write to local/global
|
||
|
switch (nAction)
|
||
|
{
|
||
|
case 10: // save to database
|
||
|
case 12:
|
||
|
// MK_CCOH_DB_SetDatabaseName(oPC, "");
|
||
|
MK_CCOH_DB_SetReadWriteMode(oPC, MK_CCOH_DB_WRITE);
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_2);
|
||
|
break;
|
||
|
case 11: // read from database
|
||
|
case 13:
|
||
|
// MK_CCOH_DB_SetDatabaseName(oPC, "");
|
||
|
MK_CCOH_DB_SetReadWriteMode(oPC, MK_CCOH_DB_READ);
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_2);
|
||
|
break;
|
||
|
case 15: // database administration
|
||
|
MK_CCOH_DB_SetReadWriteMode(oPC, MK_CCOH_DB_ADMIN);
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_2);
|
||
|
break;
|
||
|
/* case 12: // save to global
|
||
|
MK_CCOH_DB_SetDatabaseName(oPC, MK_CCOH_DB_DATABASE_NAME);
|
||
|
MK_CCOH_DB_SetReadWriteMode(oPC, MK_CCOH_DB_WRITE);
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_2);
|
||
|
break;
|
||
|
case 13: // read from global
|
||
|
MK_CCOH_DB_SetDatabaseName(oPC, MK_CCOH_DB_DATABASE_NAME);
|
||
|
MK_CCOH_DB_SetReadWriteMode(oPC, MK_CCOH_DB_READ);
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_2);
|
||
|
break;*/
|
||
|
}
|
||
|
break;
|
||
|
case MK_STATE_DATABASE_2:
|
||
|
// We've just choosen the slot number
|
||
|
if ((nAction>=1) && (nAction<=30))
|
||
|
{
|
||
|
MK_CCOH_DB_SetCurrentSlot(oPC, nAction);
|
||
|
string sSlotName;
|
||
|
if (MK_CCOH_DB_GetIsSlotUsed(oPC, nAction))
|
||
|
{
|
||
|
sSlotName = MK_CCOH_DB_CreateSlotName(oPC, nAction, FALSE);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
switch (CIGetCurrentModMode(oPC))
|
||
|
{
|
||
|
case MK_CI_MODMODE_BODY:
|
||
|
sSlotName = GetName(oTarget);
|
||
|
break;
|
||
|
default:
|
||
|
sSlotName = GetName(oItem);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
MK_CCOH_DB_SetCurrentSlotName(oPC, sSlotName);
|
||
|
|
||
|
int nValidIASStrTypes;
|
||
|
switch (MK_CCOH_DB_GetReadWriteMode(oPC))
|
||
|
{
|
||
|
case MK_CCOH_DB_READ:
|
||
|
nValidIASStrTypes = MK_CCOH_DB_GetIASStrTypesFromSlot(oPC, nAction);
|
||
|
break;
|
||
|
case MK_CCOH_DB_WRITE:
|
||
|
switch (CIGetCurrentModMode(oPC))
|
||
|
{
|
||
|
case X2_CI_MODMODE_ARMOR:
|
||
|
case MK_CI_MODMODE_CLOAK:
|
||
|
case MK_CI_MODMODE_HELMET:
|
||
|
nValidIASStrTypes = MK_CCOH_DB_ITEM_APPR_MODEL | MK_CCOH_DB_ITEM_APPR_COLOR;
|
||
|
break;
|
||
|
case X2_CI_MODMODE_WEAPON:
|
||
|
case MK_CI_MODMODE_SHIELD:
|
||
|
nValidIASStrTypes = MK_CCOH_DB_ITEM_APPR_MODEL;
|
||
|
break;
|
||
|
case MK_CI_MODMODE_BODY:
|
||
|
nValidIASStrTypes = MK_CCOH_DB_BODY_APPR_HEAD | MK_CCOH_DB_BODY_APPR_TAIL
|
||
|
| MK_CCOH_DB_BODY_APPR_WINGS | MK_CCOH_DB_BODY_APPR_PHENO
|
||
|
| MK_CCOH_DB_BODY_APPR_PORTRAIT | MK_CCOH_DB_BODY_APPR_BODY
|
||
|
| MK_CCOH_DB_BODY_APPR_COLOR | MK_CCOH_DB_BODY_APPR_TYPE
|
||
|
| MK_CCOH_DB_BODY_APPR_SCALE;
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
MK_CCOH_DB_SetValidIASStrTypes(oPC, nValidIASStrTypes);
|
||
|
MK_CCOH_DB_SetSelectedIASStrTypes(oPC, nValidIASStrTypes);
|
||
|
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_3);
|
||
|
}
|
||
|
else if (nAction == 255)
|
||
|
{
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_1);
|
||
|
}
|
||
|
break;
|
||
|
case MK_STATE_DATABASE_3:
|
||
|
// We've just choosen what to read or write (model, color or both)
|
||
|
switch (nAction)
|
||
|
{
|
||
|
case 18:
|
||
|
switch (CIGetCurrentModMode(oPC))
|
||
|
{
|
||
|
case X2_CI_MODMODE_ARMOR:
|
||
|
case X2_CI_MODMODE_WEAPON:
|
||
|
case MK_CI_MODMODE_CLOAK:
|
||
|
case MK_CI_MODMODE_HELMET:
|
||
|
case MK_CI_MODMODE_SHIELD:
|
||
|
MK_CCOH_DB_SetCurrentSlotName(oPC, GetName(oItem));
|
||
|
break;
|
||
|
case MK_CI_MODMODE_BODY:
|
||
|
MK_CCOH_DB_SetCurrentSlotName(oPC, GetName(oTarget));
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
case 20:
|
||
|
// SendMessageToPC(oPC, "Delete selected slot!");
|
||
|
MK_CCOH_DB_DeleteCurrentSlot(oPC);
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_2);
|
||
|
break;
|
||
|
case 100:
|
||
|
{
|
||
|
// Editor: OK
|
||
|
string sSlotName = MK_TrimString(GetLocalString(oPC, g_varEditorBuffer));
|
||
|
MK_CCOH_DB_SetCurrentSlotName(oPC, sSlotName);
|
||
|
MK_Editor_CleanUp(oPC);
|
||
|
break;
|
||
|
}
|
||
|
case 101:
|
||
|
// Editor: Cancel
|
||
|
MK_Editor_CleanUp(oPC);
|
||
|
break;
|
||
|
case 255:
|
||
|
MK_CCOH_DB_SetCurrentSlot(oPC, -1);
|
||
|
MK_CCOH_DB_SetCurrentSlotName(oPC, "");
|
||
|
MK_GenericDialog_SetState(MK_STATE_DATABASE_2);
|
||
|
break;
|
||
|
default:
|
||
|
if ((nAction>=0) && (nAction<=15))
|
||
|
{
|
||
|
MK_CCOH_DB_ToggleSelectedIASStrType(oPC, nAction);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
int bOk;
|
||
|
|
||
|
nState = MK_GenericDialog_GetState();
|
||
|
|
||
|
// MK_DEBUG_TRACE("mk_pre_db_item(2): nState="+IntToString(nState)+
|
||
|
// ", nCurrentModMode="+IntToString(CIGetCurrentModMode(oPC)));
|
||
|
|
||
|
int iCondition;
|
||
|
|
||
|
switch (nState)
|
||
|
{
|
||
|
case MK_STATE_DATABASE_1:
|
||
|
{
|
||
|
// We're about to choose what to do: read/write, local/global
|
||
|
bOk = MK_CCOH_DB_GetUseLocalDb(oPC);
|
||
|
MK_GenericDialog_SetCondition(10, bOk);
|
||
|
MK_GenericDialog_SetCondition(11, bOk);
|
||
|
MK_GenericDialog_SetCondition(12, !bOk);
|
||
|
MK_GenericDialog_SetCondition(13, !bOk);
|
||
|
MK_GenericDialog_SetCondition(15, TRUE);
|
||
|
int nMode = CIGetCurrentModMode(oPC);
|
||
|
for (iCondition=1; iCondition<=5; iCondition++)
|
||
|
{
|
||
|
MK_GenericDialog_SetCondition(iCondition, nMode == iCondition);
|
||
|
}
|
||
|
MK_GenericDialog_SetCondition(127, (nMode == MK_CI_MODMODE_BODY));
|
||
|
break;
|
||
|
}
|
||
|
case MK_STATE_DATABASE_2:
|
||
|
{
|
||
|
// We're about to choose the slot number
|
||
|
int nReadWriteMode = MK_CCOH_DB_GetReadWriteMode(oPC);
|
||
|
int nEmptySlots = 0;
|
||
|
int nMaxEmptySlots = 1;
|
||
|
int bIsEmpty;
|
||
|
for (iCondition=1; iCondition<=30; iCondition++)
|
||
|
{
|
||
|
switch (nReadWriteMode)
|
||
|
{
|
||
|
case MK_CCOH_DB_READ:
|
||
|
bOk = MK_CCOH_DB_GetIsSlotValid(oPC, iCondition, oItem);
|
||
|
break;
|
||
|
case MK_CCOH_DB_WRITE:
|
||
|
{
|
||
|
bOk = TRUE;
|
||
|
if (!MK_CCOH_DB_GetIsSlotUsed(oPC, iCondition) && (nMaxEmptySlots < ++nEmptySlots))
|
||
|
{
|
||
|
bOk = FALSE;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case MK_CCOH_DB_ADMIN:
|
||
|
bOk = MK_CCOH_DB_GetIsSlotUsed(oPC, iCondition);
|
||
|
break;
|
||
|
default:
|
||
|
bOk = FALSE;
|
||
|
break;
|
||
|
}
|
||
|
if (bOk)
|
||
|
{
|
||
|
string sSlotName = MK_CCOH_DB_CreateSlotName(oPC, iCondition, TRUE);
|
||
|
SetCustomToken(14439+iCondition, sSlotName);
|
||
|
}
|
||
|
MK_GenericDialog_SetCondition(iCondition, bOk);
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case MK_STATE_DATABASE_3:
|
||
|
{
|
||
|
// We're about to choose what to read or write (model, color or both)
|
||
|
int nSlot = MK_CCOH_DB_GetCurrentSlot(oPC);
|
||
|
SetCustomToken(14430, (nSlot!=-1 ? MK_CCOH_DB_GetCurrentSlotName(oPC) + " ("+IntToString(nSlot)+")" : GetStringByStrRef(53185)) );
|
||
|
|
||
|
int nCurrentModMode = CIGetCurrentModMode(oPC);
|
||
|
|
||
|
int nValidIASStrTypes = MK_CCOH_DB_GetValidIASStrTypes(oPC);
|
||
|
int nSelectedIASStrTypes = MK_CCOH_DB_GetSelectedIASStrTypes(oPC);
|
||
|
|
||
|
MK_DEBUG_TRACE("mk_pre_db_item: nValidIASStrTypes="+IntToString(nValidIASStrTypes)+
|
||
|
", nSelectedIASStrTypes="+IntToString(nSelectedIASStrTypes));
|
||
|
|
||
|
int iCondition;
|
||
|
int nApprFlag = 1;
|
||
|
int nCount=0;
|
||
|
for (iCondition=0; iCondition<=15; iCondition++)
|
||
|
{
|
||
|
bOk = (nValidIASStrTypes & nApprFlag);
|
||
|
SetCustomToken(14440+iCondition,
|
||
|
( nSelectedIASStrTypes & nApprFlag ? "[X] " : "[<c >_</c>] ")
|
||
|
+ MK_CCOH_DB_GetIASStrTypeName(nCurrentModMode, iCondition+1));
|
||
|
MK_GenericDialog_SetCondition(iCondition, bOk);
|
||
|
if (bOk) nCount++;
|
||
|
|
||
|
nApprFlag*=2;
|
||
|
}
|
||
|
|
||
|
string sText1="";
|
||
|
string sText2="";
|
||
|
switch (MK_CCOH_DB_GetReadWriteMode(oPC))
|
||
|
{
|
||
|
case MK_CCOH_DB_READ:
|
||
|
sText1 = MK_TLK_GetStringByStrRef(-79);
|
||
|
sText2 = MK_TLK_GetStringByStrRef(-91);
|
||
|
|
||
|
MK_GenericDialog_SetCondition(18,FALSE);
|
||
|
MK_GenericDialog_SetCondition(19,FALSE);
|
||
|
|
||
|
MK_GenericDialog_SetCondition(20, FALSE);
|
||
|
|
||
|
break;
|
||
|
case MK_CCOH_DB_WRITE:
|
||
|
{
|
||
|
sText1 = MK_TLK_GetStringByStrRef(-78);
|
||
|
sText2 = MK_TLK_GetStringByStrRef(-92);
|
||
|
|
||
|
string sText18;
|
||
|
int bEnable18;
|
||
|
switch (nCurrentModMode)
|
||
|
{
|
||
|
case MK_CI_MODMODE_BODY:
|
||
|
sText18 = GetName(oTarget);
|
||
|
bEnable18 = (sText18!=MK_CCOH_DB_GetCurrentSlotName(oPC));
|
||
|
break;
|
||
|
default:
|
||
|
sText18 = GetName(oItem);
|
||
|
bEnable18 = (sText18!=MK_CCOH_DB_GetCurrentSlotName(oPC));
|
||
|
break;
|
||
|
}
|
||
|
SetCustomToken(14431, sText18);
|
||
|
MK_GenericDialog_SetCondition(18, bEnable18);
|
||
|
|
||
|
MK_GenericDialog_SetCondition(19,
|
||
|
MK_VERSION_GetIsVersionGreaterEqual_1_69(oPC) && (GetLocalInt(oPC, "MK_DISABLE_TEXT_EDITOR")!=1));
|
||
|
|
||
|
MK_GenericDialog_SetCondition(20, FALSE);
|
||
|
|
||
|
// In case the editor gets started
|
||
|
int bUseChatEvent = GetLocalInt(oPC, "MK_EDITOR_USE_CHAT_EVENT");
|
||
|
SetLocalString(oPC, g_varEditorText, MK_CCOH_DB_GetCurrentSlotName(oPC));
|
||
|
|
||
|
// MK_DEBUG_TRACE("MK_PrepeareEditor()");
|
||
|
MK_PrepareEditor(oPC, 3, 24, 25, "Edit slot name:",
|
||
|
30,
|
||
|
TRUE, FALSE, bUseChatEvent);
|
||
|
// MK_GenericDialog_SetCondition(100, FALSE);
|
||
|
// MK_GenericDialog_SetCondition(101, FALSE);
|
||
|
// MK_GenericDialog_SetCondition(102, TRUE);
|
||
|
// MK_GenericDialog_SetCondition(103, FALSE);
|
||
|
break;
|
||
|
}
|
||
|
case MK_CCOH_DB_ADMIN:
|
||
|
MK_GenericDialog_SetCondition(19, nSlot!=-1);
|
||
|
MK_GenericDialog_SetCondition(20, nSlot!=-1);
|
||
|
|
||
|
// In case the editor gets started
|
||
|
int bUseChatEvent = GetLocalInt(oPC, "MK_EDITOR_USE_CHAT_EVENT");
|
||
|
SetLocalString(oPC, g_varEditorText, MK_CCOH_DB_GetCurrentSlotName(oPC));
|
||
|
|
||
|
// MK_DEBUG_TRACE("MK_PrepeareEditor()");
|
||
|
MK_PrepareEditor(oPC, 3, 24, 25, "Edit slot name:",
|
||
|
30,
|
||
|
TRUE, FALSE, bUseChatEvent);
|
||
|
// MK_GenericDialog_SetCondition(100, FALSE);
|
||
|
// MK_GenericDialog_SetCondition(101, FALSE);
|
||
|
// MK_GenericDialog_SetCondition(102, TRUE);
|
||
|
// MK_GenericDialog_SetCondition(103, FALSE);
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// MK_DEBUG_TRACE("SetCustomToken(14460, "+sText1+")");
|
||
|
SetCustomToken(14460, sText1);
|
||
|
SetCustomToken(14461, sText2);
|
||
|
|
||
|
MK_GenericDialog_SetCondition(21, nSelectedIASStrTypes && (nCurrentModMode == X2_CI_MODMODE_ARMOR));
|
||
|
MK_GenericDialog_SetCondition(22, nSelectedIASStrTypes && (nCurrentModMode == X2_CI_MODMODE_WEAPON));
|
||
|
MK_GenericDialog_SetCondition(23, nSelectedIASStrTypes && (nCurrentModMode == MK_CI_MODMODE_CLOAK));
|
||
|
MK_GenericDialog_SetCondition(24, nSelectedIASStrTypes && (nCurrentModMode == MK_CI_MODMODE_HELMET));
|
||
|
MK_GenericDialog_SetCondition(25, nSelectedIASStrTypes && (nCurrentModMode == MK_CI_MODMODE_SHIELD));
|
||
|
MK_GenericDialog_SetCondition(29, nSelectedIASStrTypes && (nCurrentModMode == MK_CI_MODMODE_BODY));
|
||
|
|
||
|
MK_DELIMITER_Initialize(nCount>0);
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|