#include "mk_inc_generic" #include "mk_inc_debug" #include "mk_inc_states" #include "mk_inc_math" #include "mk_inc_delimiter" #include "mk_inc_itm_disp" #include "mk_inc_2da_disp" #include "mk_inc_cheats" //const int MK_CHEATS_DEBUG = FALSE; const string MK_CHEATS_LEVEL_XP = "MK_CHEATS_LEVEL_XP"; const string MK_CHEATS_GOLD_AMOUNT = "MK_CHEATS_GOLD_AMOUNT"; const string MK_CHEATS_ALIGNMENT_GOODEVIL = "MK_CHEATS_ALIGNMENT_GOODEVIL"; const string MK_CHEATS_ALIGNMENT_LAWCHAOS = "MK_CHEATS_ALIGNMENT_LAWCHAOS"; /* void MK_CHEATS_DEBUG_TRACE(string sMessage) { if (MK_ITM_DISPLAY_DEBUG) { MK_DEBUG_TRACE(sMessage); } } */ string MK_CHEATS_GetCheatEnabledDisableVarName(int nState, int bEnabled) { return "MK_CHEATS_" + IntToString(nState) + "_" + (bEnabled ? "ENABLED" : "DISABLED"); } int MK_CHEATS_GetIsCheatEnabled(int nState) { string sVarName = MK_CHEATS_GetCheatEnabledDisableVarName(nState, TRUE); int nReturn = GetLocalInt(OBJECT_SELF, sVarName); MK_CHEATS_DEBUG_TRACE("MK_CHEATS_GetIsCheatEnabled("+IntToString(nState)+"): GetLocalInt("+sVarName+")="+IntToString(nReturn)); return nReturn; } int MK_CHEATS_GetIsCheatDisabled(int nState) { string sVarName = MK_CHEATS_GetCheatEnabledDisableVarName(nState, FALSE); int nReturn = GetLocalInt(OBJECT_SELF, sVarName); MK_CHEATS_DEBUG_TRACE("MK_CHEATS_GetIsCheatDisabled("+IntToString(nState)+"): GetLocalInt("+sVarName+")="+IntToString(nReturn)); return nReturn; } void MK_CHEATS_DisableCheat(int nState, int bDisable=TRUE) { SetLocalInt(OBJECT_SELF, MK_CHEATS_GetCheatEnabledDisableVarName(nState, FALSE), bDisable); MK_CHEATS_DEBUG_TRACE("MK_CHEATS_DisableCheat("+IntToString(nState)+", "+IntToString(bDisable)+"): " +"GetLocalInt("+MK_CHEATS_GetCheatEnabledDisableVarName(nState, FALSE)+")=" + IntToString(GetLocalInt(OBJECT_SELF, MK_CHEATS_GetCheatEnabledDisableVarName(nState, FALSE)))); } int MK_CHEATS_GetItemFlagDefaultMode(int nState) { int nMode = 0; switch (nState) { case MK_STATE_CHEATS_PLOTFLAG: nMode = MK_ITM_DISP_ALL | MK_ITM_DISP_HIDDENSLOTS; break; default: nMode = MK_ITM_DISP_ALL; break; } return nMode; } string MK_CHEATS_GetCheatDisabledMessage(int nState) { string sReturn = ""; if (!MK_CHEATS_GetIsCheatEnabled(nState)) { sReturn = MK_TLK_GetStringByStrRef(-466); } else if (MK_CHEATS_GetIsCheatDisabled(nState)) { sReturn = MK_TLK_GetStringByStrRef(-485); } else { switch (nState) { case MK_STATE_CHEATS_CURSEDFLAG: case MK_STATE_CHEATS_PLOTFLAG: case MK_STATE_CHEATS_STOLENFLAG: case MK_STATE_CHEATS_NOTIDENTIFIED: { int nStateQ = MK_GenericDialog_SetState(nState); MK_ITM_DISPLAY_Initialize(BASE_ITEM_INVALID, MK_CHEATS_GetItemFlagDefaultMode(nState), MK_ITM_DISP_MAX_PAGE_LENGTH, "mk_cb_iflag_chk"); MK_CHEATS_DEBUG_TRACE("MK_CHEATS_GetCheatDisabledMessage("+IntToString(nState)+"): nItemCount = "+IntToString(MK_ITM_DISPLAY_GetItemCount())); MK_GenericDialog_SetState(nStateQ); if (MK_ITM_DISPLAY_GetItemCount()==0) { sReturn = MK_TLK_GetStringByStrRef(-467); } MK_ITM_DISPLAY_Cleanup(); break; } case MK_STATE_CHEATS_FEATS: case MK_STATE_CHEATS_SKILLPOINTS: if (!GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CARMOUR, OBJECT_SELF))) { sReturn = MK_TLK_GetStringByStrRef(-465); } break; // case MK_STATE_CHEATS_CHARGES: // sReturn = MK_TLK_GetStringByStrRef(-473); // break; } } return sReturn; } int MK_CHEATS_GetCheatEnabled(int nState) { return (MK_CHEATS_GetCheatDisabledMessage(nState)==""); } void MK_CHEATS_SetCustomTokens() { string sDisabledOptionsColor = GetLocalString(OBJECT_SELF, "MK_DISABLED_OPTIONS_COLOR"); string sCloseColor = (sDisabledOptionsColor!="" ? "" : ""); string sMessage=""; int nToken1,nToken2; int nCondition; int iState; for (iState = MK_STATE_CHEATS+1; iState<=MK_STATE_CHEATS_SWAPITEMPROPS; iState++) { sMessage = MK_CHEATS_GetCheatDisabledMessage(iState); switch (iState) { case MK_STATE_CHEATS_LEVEL: nToken1 = 14460; nToken2 = nToken1+10; nCondition = 31; break; case MK_STATE_CHEATS_GOLD: nToken1 = 14461; nToken2 = nToken1+10; nCondition = 32; break; case MK_STATE_CHEATS_ALIGNMENT: nToken1 = 14462; nToken2 = nToken1+10; nCondition = 33; break; case MK_STATE_CHEATS_FEATS: nToken1 = 14463; nToken2 = nToken1+10; nCondition = 34; break; case MK_STATE_CHEATS_SKILLPOINTS: nToken1 = 14464; nToken2 = nToken1+10; nCondition = 37; break; case MK_STATE_CHEATS_ITEMPROPS: nToken1 = 14465; nToken2 = nToken1+10; nCondition = 38; break; case MK_STATE_CHEATS_CURSEDFLAG: nToken1 = 14466; nToken2 = nToken1+10; nCondition = 35; break; case MK_STATE_CHEATS_OPENSTORE: nToken1 = 14467; nToken2 = nToken1+10; nCondition = 36; break; case MK_STATE_CHEATS_CHARGES: nToken1 = 14468; nToken2 = nToken1+10; nCondition = 39; break; case MK_STATE_CHEATS_PLOTFLAG: nToken1 = 14469; nToken2 = nToken1+10; nCondition = 30; break; case MK_STATE_CHEATS_STOLENFLAG: nToken1 = 14449; nToken2 = nToken1+10; nCondition = 29; break; case MK_STATE_CHEATS_NOTIDENTIFIED: nToken1 = 14448; nToken2 = nToken1+10; nCondition = 28; break; case MK_STATE_CHEATS_SWAPITEMPROPS: nToken1 = 14447; nToken2 = nToken1+10; nCondition = 27; break; } int bEnable = (sMessage==""); SetCustomToken(nToken1, (!bEnable ? sDisabledOptionsColor : "")); SetCustomToken(nToken2, (!bEnable ? sMessage+sCloseColor : "")); MK_GenericDialog_SetCondition(nCondition, bEnable); } } int MK_CHEATS_GetLevel(object oPC) { int nCurrentXP = GetXP(oPC); int nCurrentLevel = FloatToInt(0.5 + sqrt((125.0+nCurrentXP)/500.0)); // 1/2+WURZEL((125+D11)/500) return nCurrentLevel; } int _max(int n1, int n2) { return (n1>n2 ? n1 : n2); } int _min(int n1, int n2) { return (n1=0) { int nXP = GetLocalInt(oPC, MK_CHEATS_LEVEL_XP); SetXP(oPC, nRequiredXP); SetLocalInt(oPC, MK_CHEATS_LEVEL_XP, nXP + (nRequiredXP - nCurrentXP)); } } } void MK_CHEATS_GiveGold(object oPC, int nGold) { int nCurrentGold = GetGold(oPC); int nGoldGiven = GetLocalInt(oPC, MK_CHEATS_GOLD_AMOUNT); if (nGold>0) { GiveGoldToCreature(oPC, nGold); } else if (nGold<0) { TakeGoldFromCreature(-nGold, oPC, TRUE); } SetLocalInt(oPC, MK_CHEATS_GOLD_AMOUNT, nGoldGiven + GetGold(oPC) - nCurrentGold); } void MK_CHEATS_AdjustAlignment(object oPC, int nAlignment, int nShift) { int nCurrentAlignment=-1; int nAlignmentShifted=-1; switch (nAlignment) { case ALIGNMENT_CHAOTIC: nAlignment = ALIGNMENT_LAWFUL; nShift*=-1; case ALIGNMENT_LAWFUL: nCurrentAlignment = GetLawChaosValue(oPC); nAlignmentShifted = GetLocalInt(oPC, MK_CHEATS_ALIGNMENT_LAWCHAOS); break; break; case ALIGNMENT_EVIL: nAlignment = ALIGNMENT_GOOD; nShift*=-1; case ALIGNMENT_GOOD: nCurrentAlignment = GetGoodEvilValue(oPC); nAlignmentShifted = GetLocalInt(oPC, MK_CHEATS_ALIGNMENT_GOODEVIL); break; } MK_CHEATS_DEBUG_TRACE("MK_CHEATS_AdjustAlignment: nAlignment="+IntToString(nAlignment) +", nShift="+IntToString(nShift)+", nCurrentAlignment="+IntToString(nCurrentAlignment)); AdjustAlignment(oPC, nAlignment, nShift, FALSE); int nNewAlignment=-1; switch (nAlignment) { case ALIGNMENT_LAWFUL: nNewAlignment = GetLawChaosValue(oPC); break; case ALIGNMENT_GOOD: nNewAlignment = GetGoodEvilValue(oPC); break; } int nCurrentShift = nNewAlignment - nCurrentAlignment; MK_CHEATS_DEBUG_TRACE(" > nNewAlignment="+IntToString(nNewAlignment) + ", nNewAlignment-nOldAlignment="+IntToString(nNewAlignment-nCurrentAlignment) + ", desired="+IntToString(nShift)); if ((nCurrentShift != nShift) && (nNewAlignment!=0) && (nNewAlignment!=100)) { int nAdjustment = -(nCurrentShift - nShift); MK_CHEATS_DEBUG_TRACE(" > adjustment required: adjustment="+IntToString(nAdjustment)); AdjustAlignment(oPC, nAlignment, nAdjustment, FALSE); } switch (nAlignment) { case ALIGNMENT_LAWFUL: nNewAlignment = GetLawChaosValue(oPC); SetLocalInt(oPC, MK_CHEATS_ALIGNMENT_LAWCHAOS, nAlignmentShifted + (nNewAlignment-nCurrentAlignment)); break; case ALIGNMENT_GOOD: nNewAlignment = GetGoodEvilValue(oPC); SetLocalInt(oPC, MK_CHEATS_ALIGNMENT_GOODEVIL, nAlignmentShifted + (nNewAlignment-nCurrentAlignment)); break; } } void MK_CHEATS_RestoreAlignment(object oPC) { int nShift; nShift = GetLocalInt(oPC, MK_CHEATS_ALIGNMENT_LAWCHAOS); if (nShift>0) { MK_CHEATS_AdjustAlignment(oPC, ALIGNMENT_CHAOTIC, nShift); } else if (nShift<0) { MK_CHEATS_AdjustAlignment(oPC, ALIGNMENT_LAWFUL, -nShift); } nShift = GetLocalInt(oPC, MK_CHEATS_ALIGNMENT_GOODEVIL); if (nShift>0) { MK_CHEATS_AdjustAlignment(oPC, ALIGNMENT_EVIL, nShift); } else if (nShift<0) { MK_CHEATS_AdjustAlignment(oPC, ALIGNMENT_GOOD, -nShift); } } void _SetAlignmentToken(int nToken, string sAlignmentText, int nAlignmentValue, int nShifted) { string s = sAlignmentText + " (" + IntToString(nAlignmentValue) + (nShifted!=0 ? " / " + (nShifted>0 ? "+" : "") + IntToString(nShifted) : "") + ")"; SetCustomToken(nToken, s); } void MK_CHEATS_SetAlignmentToken(object oPC, int nTokenLawChaos, int nTokenGoodEvil) { int nStrRef=-1; switch (GetAlignmentGoodEvil(oPC)) { case ALIGNMENT_GOOD: nStrRef = 265; break; case ALIGNMENT_EVIL: nStrRef = 266; break; case ALIGNMENT_NEUTRAL: nStrRef = 264; break; default: nStrRef=-1; break; } string sAlignmentGoodEvilText = (nStrRef!=-1 ? GetStringByStrRef(nStrRef) : ""); switch (GetAlignmentLawChaos(oPC)) { case ALIGNMENT_LAWFUL: nStrRef = 268; break; case ALIGNMENT_CHAOTIC: nStrRef = 267; break; case ALIGNMENT_NEUTRAL: nStrRef = 264; break; default: nStrRef=-1; break; } string sAlignmentLawChaosText = (nStrRef!=-1 ? GetStringByStrRef(nStrRef) : ""); int nCurrentAlignmentGoodEvil = GetGoodEvilValue(oPC); int nCurrentAlignmentLawChaos = GetLawChaosValue(oPC); int nShiftedGoodEvil = GetLocalInt(oPC, MK_CHEATS_ALIGNMENT_GOODEVIL); int nShiftedLawChaos = GetLocalInt(oPC, MK_CHEATS_ALIGNMENT_LAWCHAOS); _SetAlignmentToken(nTokenGoodEvil, sAlignmentGoodEvilText, nCurrentAlignmentGoodEvil, nShiftedGoodEvil); _SetAlignmentToken(nTokenLawChaos, sAlignmentLawChaosText, nCurrentAlignmentLawChaos, nShiftedLawChaos); // SetCustomToken(nTokenGoodEvil, sAlignmentGoodEvilText + " (" + IntToString(nCurrentAlignmentGoodEvil) // + "[" + ( nShiftedGoodEvil > 0 ? "+" : "" ) + IntToString(nShiftedGoodEvil) + "])"); // SetCustomToken(nTokenLawChaos, sAlignmentLawChaosText + " (" + IntToString(nCurrentAlignmentLawChaos) // + "[" + ( nShiftedLawChaos > 0 ? "+" : "" ) + IntToString(nShiftedLawChaos) + "])"); } void MK_CHEATS_ToggleFeat(int nFeat) { object oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, OBJECT_SELF); if (!GetIsObjectValid(oItem)) { return; } itemproperty iProp = MK_IPRP_GetItemProperty(oItem, ITEM_PROPERTY_BONUS_FEAT, nFeat); if (GetIsItemPropertyValid(iProp)) { RemoveItemProperty(oItem, iProp); } else { // iProp = TagItemProperty(ItemPropertyBonusFeat(nFeat), MK_CHEATS_CreateItemPropertyTag(ITEM_PROPERTY_BONUS_FEAT, nFeat)); iProp = ItemPropertyBonusFeat(nFeat); AddItemProperty(DURATION_TYPE_PERMANENT, iProp, oItem); } } int MK_CHEATS_GetCurrentSkillBonus(int bRemoveProperties=FALSE) { int nSkillBonus = 0; object oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, OBJECT_SELF); if (GetIsObjectValid(oItem)) { int nSkill = MK_CHEATS_GetCurrentSkill(); if (nSkill!=-1) { nSkillBonus = MK_IPRP_GetSkillBonus(oItem, nSkill, bRemoveProperties); } } return nSkillBonus; } int MK_CHEATS_GetHasModifiedSkill() { object oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, OBJECT_SELF); int iSkill; for (iSkill=0; iSkill=0) && (!bCanSetSkillBonus); bDisableDecrease = (nSkillBonus<=0) && (!bCanSetSkillBonus); } SetCustomToken(14471, (bDisableIncrease ? sDisabledOptionsColor : "")); SetCustomToken(14472, (bDisableIncrease ? "" : "")); SetCustomToken(14473, (bDisableDecrease ? sDisabledOptionsColor : "")); SetCustomToken(14474, (bDisableDecrease ? "" : "")); SetCustomToken(14475, (nSkillBonus==0 ? sDisabledOptionsColor : "")); SetCustomToken(14476, (nSkillBonus==0 ? "" : "")); SetCustomToken(14477, (!bHasModifiedSkills ? sDisabledOptionsColor : "")); SetCustomToken(14478, (!bHasModifiedSkills ? "" : "")); } void MK_CHEATS_AdjustCurrentSkill(int nValue) { int nSkill = MK_CHEATS_GetCurrentSkill(); if (nSkill == -1) { return; } object oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, OBJECT_SELF); if (!GetIsObjectValid(oItem)) { return; } if (!MK_CHEATS_GetCanSetSkillBonus(MK_CHEATS_GetCurrentSkillBonus(FALSE) + nValue)) { return; } int nSkillBonus = MK_CHEATS_GetCurrentSkillBonus(TRUE) + nValue; if (nSkillBonus!=0) { itemproperty iProp; string sTag; if (nSkillBonus>0) { iProp = ItemPropertySkillBonus(nSkill, nSkillBonus); // sTag = MK_CHEATS_CreateItemPropertyTag(ITEM_PROPERTY_SKILL_BONUS, nSkill); } else { iProp = ItemPropertyDecreaseSkill(nSkill, -nSkillBonus); // sTag = MK_CHEATS_CreateItemPropertyTag(ITEM_PROPERTY_DECREASED_SKILL_MODIFIER, nSkill); } if (GetIsItemPropertyValid(iProp)) { // iProp = TagItemProperty(iProp, sTag); AddItemProperty(DURATION_TYPE_PERMANENT, iProp, oItem); } } } void MK_CHEATS_ResetCurrentSkill() { MK_CHEATS_GetCurrentSkillBonus(TRUE); } void MK_CHEATS_ResetAllSkills() { object oItem = GetItemInSlot(INVENTORY_SLOT_CARMOUR, OBJECT_SELF); int iSkill; for (iSkill=0; iSkill=MK_CHEATS_MIN_CHARGES) || (nAdjustBy>0)) { SetItemCharges(oItem, MK_MATH_MaxInt(MK_CHEATS_MIN_CHARGES, nCharges + nAdjustBy)); } } } int MK_CHEATS_FinishChangeCharges() { int nState = MK_GenericDialog_GetState(); object oItem = MK_CHEATS_GetCurrentItem(); if (MK_CHEATS_FinishModifyItem()) { MK_CHEATS_SetCurrentItem(oItem); // MK_ITM_DISPLAY_Cleanup(); // MK_GenericDialog_SetState(nState = MK_STATE_CHEATS); } return nState; } int MK_CHEATS_CancelChangeCharges() { MK_CHEATS_DEBUG_TRACE("MK_CHEATS_CancelChangeCharges() *start*"); int nState = MK_GenericDialog_GetState(); MK_CHEATS_CancelModifyItem(); MK_ITM_DISPLAY_Cleanup(); MK_ITM_DISPLAY_Initialize(BASE_ITEM_INVALID, MK_ITM_DISP_ALL, 10, "mk_cb_ichrg_chk"); // MK_GenericDialog_SetState(nState = MK_STATE_CHEATS); MK_CHEATS_DEBUG_TRACE("MK_CHEATS_CancelChangeCharges(): *terminate*"); return nState; } int MK_CHEATS_OpenCurrentStore() { int bReturn = TRUE; int nStoreID = MK_CHEATS_GetCurrentStore(); if (nStoreID!=-1) { object oPC = GetPCSpeaker(); object oStore = MK_CHEATS_SearchCurrentStore(); if (!GetIsObjectValid(oStore)) { MK_DEBUG_TRACE("MK_CHEATS_OpenCurrentStore: store with tag '"+MK_CHEATS_GetCurrentStoreTag()+"' not found!"); oStore = CreateObject(OBJECT_TYPE_STORE, MK_CHEATS_GetCurrentStoreResRef(), GetLocation(oPC)); } if (GetIsObjectValid(oStore)) { MK_DEBUG_TRACE("MK_CHEATS_OpenCurrentStore: sResRef ='"+MK_CHEATS_GetCurrentStoreResRef()+"', sTag = '"+GetTag(oStore)+"'"); object oStoreQ = GetObjectByTag(MK_CHEATS_GetCurrentStoreTag()); if (!GetIsObjectValid(oStoreQ)) { MK_DEBUG_TRACE(" > store sill not found?"); } int nMarkUp = 0, nMarkDown=0; if (MK_Get2DAInt("mk_cheat_stores", "ADJUST_PRICES", nStoreID, 0)) { nMarkUp = FloatToInt(100*GetLocalFloat(oPC, "MK_CHEATS_ITEM_BUY") - 100); nMarkDown = FloatToInt(100*GetLocalFloat(oPC, "MK_CHEATS_ITEM_SELL") - 100); int nStoreMarkUp = MK_Get2DAInt("mk_cheat_stores", "SELL", nStoreID, -1); int nStoreMarkDown = MK_Get2DAInt("mk_cheat_stores", "BUY", nStoreID, -1); if (nStoreMarkUp!=-1) { nMarkUp += (100-nStoreMarkUp); } if (nStoreMarkDown!=-1) { nMarkDown += (100-nStoreMarkDown); } } MK_DEBUG_TRACE("OpenStore('"+GetName(oStore)+"', '"+GetName(oPC)+"', nMarkup="+IntToString(nMarkUp)+", "+IntToString(nMarkDown)+")"); OpenStore(oStore, oPC, nMarkUp, nMarkDown); bReturn = !GetLocalInt(OBJECT_SELF, "MK_CHEATS_EXTITDLGONOPENSTORE"); MK_DEBUG_TRACE("MK_CHEATS_OpenCurrentStore(): "+GetTag(oStore)+" opened!"); } } MK_CHEATS_DEBUG_TRACE("MK_CHEATS_OpenCurrentStore()="+IntToString(bReturn)); return bReturn; } int MK_CHEATS_PrepareDisablingCurrentCheat() { int nState = MK_GenericDialog_GetState(); int nToken = 0; switch (nState) { case MK_STATE_CHEATS_LEVEL: nToken = -475; break; case MK_STATE_CHEATS_GOLD: nToken = -476; break; case MK_STATE_CHEATS_ALIGNMENT: nToken = -477; break; case MK_STATE_CHEATS_FEATS: nToken = -478; break; case MK_STATE_CHEATS_CURSEDFLAG: nToken = -481; break; case MK_STATE_CHEATS_OPENSTORE: nToken = -483; break; case MK_STATE_CHEATS_SKILLPOINTS: nToken = -479; break; case MK_STATE_CHEATS_ITEMPROPS: nToken = -480; break; case MK_STATE_CHEATS_CHARGES: nToken = -482; break; case MK_STATE_CHEATS_PLOTFLAG: nToken = -489; break; case MK_STATE_CHEATS_STOLENFLAG: nToken = -493; break; case MK_STATE_CHEATS_NOTIDENTIFIED: nToken = -494; break; default: nToken = -484; break; } SetCustomToken(14422, MK_TLK_GetStringByStrRef(nToken)); SetLocalInt(OBJECT_SELF, "MK_CHEATS_DISABLE_CHEAT", nState); MK_GenericDialog_SetState(nState = MK_STATE_CHEATS_DISABLE); return nState; } int MK_CHEATS_DisableCurrentCheat() { int nCheat = GetLocalInt(OBJECT_SELF, "MK_CHEATS_DISABLE_CHEAT"); MK_CHEATS_DisableCheat(nCheat, TRUE); int nState = MK_STATE_CHEATS; MK_GenericDialog_SetState(nState); return nState; } int MK_CHEATS_ToggleFlag(object oItem, int nState) { int nFlag; string sVarName = "MK_CHEATS_FLAG_"+IntToString(nState); int nMarked = GetLocalInt(oItem, sVarName); switch (nState) { case MK_STATE_CHEATS_CURSEDFLAG: SetItemCursedFlag(oItem, nFlag = !GetItemCursedFlag(oItem)); break; case MK_STATE_CHEATS_PLOTFLAG: SetPlotFlag(oItem, nFlag = !GetPlotFlag(oItem)); break; case MK_STATE_CHEATS_STOLENFLAG: SetStolenFlag(oItem, nFlag = !GetStolenFlag(oItem)); break; case MK_STATE_CHEATS_NOTIDENTIFIED: { int nIdentified = GetIdentified(oItem); int nGold = GetLocalInt(OBJECT_SELF, "MK_CHEATS_ITEM_IDENTIFY"); if ((!nIdentified) && (!nMarked)) { int nGold = GetLocalInt(OBJECT_SELF, "MK_CHEATS_ITEM_IDENTIFY"); if (GetGold() >= nGold) { SetIdentified(oItem, TRUE); nFlag = FALSE; if (nGold>0) { TakeGoldFromCreature(nGold, OBJECT_SELF, TRUE); SendMessageToPC(OBJECT_SELF, "Item identified: name is "+MK_IPRP_GetItemName(oItem)+"!"); } } else { // we haven't done anything so we make sure that // the local int doesn't get changed later nMarked = !nMarked; nFlag = TRUE; SendMessageToPC(OBJECT_SELF, "Failed to identify "+MK_IPRP_GetItemName(oItem)+": not enough gold!"); } } else { if ((nIdentified) && (nMarked) && (nGold>0)) { GiveGoldToCreature(OBJECT_SELF, nGold); SendMessageToPC(OBJECT_SELF, "Previously identified item made unidentified again. Gold is returned!"); } SetIdentified(oItem, !nIdentified); nFlag = nIdentified; } break; } } // Mark Uncursed/Unplot/Unstolen/Identified items or remove mark // when items are recursed, re-plot, re-stolen or re-unidentified // or mark items, when they are cursed, plot, stolen or unidentified // and remove mark, when they are uncursed, unplot, unstolen or identified. // This looks confusing but the idea is, that marked items are modified // by CCOH SetLocalInt(oItem, sVarName, !nMarked); return nFlag; } void MK_CHEATS_SetToggleFlagToken(int nState) { // MK_DEBUG_TRACE("MK_CHEATS_SetToggleFlagToken("+IntToString(nState)+")"); object oPC = OBJECT_SELF; int nStrRef1, nStrRef2, nStrRef3, nStrRefS; string sText1, sText2, sText3, sTextS; int bText3Colored=TRUE; string sColorToken; string sTokenEnd = ""; switch (nState) { case MK_STATE_CHEATS_CURSEDFLAG: nStrRef1 = -486; nStrRef2 = -487; nStrRef3 = -488; nStrRefS = 111874; break; case MK_STATE_CHEATS_PLOTFLAG: nStrRef1 = -490; nStrRef2 = -491; nStrRef3 = -492; nStrRefS = 6808; break; case MK_STATE_CHEATS_STOLENFLAG: nStrRef1 = -495; nStrRef2 = -496; nStrRef3 = -497; nStrRefS = 7102; break; case MK_STATE_CHEATS_NOTIDENTIFIED: nStrRef1 = -498; nStrRef2 = 0; nStrRef3 = 0; nStrRefS = 5548; sColorToken = GetLocalString(oPC, "MK_GOLD_COLOR"); sText2 = "\n"+GetStringByStrRef(65759)+": "+sColorToken+IntToString(GetGold(oPC))+sTokenEnd; sText3 = "\n"+GetStringByStrRef(84370)+": "+sColorToken+IntToString(GetLocalInt(oPC, "MK_CHEATS_ITEM_IDENTIFY"))+sTokenEnd; bText3Colored=FALSE; break; } int nGender = GetGender(OBJECT_SELF); if (nStrRef1!=0) sText1 = MK_TLK_GetStringByStrRef(nStrRef1, nGender); if (nStrRef2!=0) sText2 = MK_TLK_GetStringByStrRef(nStrRef2, nGender); if (nStrRef3!=0) sText3 = MK_TLK_GetStringByStrRef(nStrRef3, nGender); if (nStrRefS!=0) sTextS = MK_TLK_GetStringByStrRef(nStrRefS, nGender); if (bText3Colored) { string sColorToken = GetLocalString(oPC, "MK_WARNING_COLOR"); if (sColorToken!="") { sText3 = sColorToken+sText3+sTokenEnd; } } SetCustomToken(14422, sText1); SetCustomToken(14423, sText2); SetCustomToken(14424, sText3); SetCustomToken(14425, sTextS); } void MK_CHEATS_UnsetCurrentFlagForAllItems() { object oPC = GetPCSpeaker(); int nState = MK_GenericDialog_GetState(); int nFlag; string sVarName = "MK_CHEATS_FLAG_"+IntToString(nState); int nMarked; int nCount = MK_ITM_DISPLAY_GetItemCount(); int iItem; for (iItem=0; iItem=nGoldRequired) { SetIdentified(oItem, nFlag); TakeGoldFromCreature(nGoldRequired, oPC, TRUE); } else { nFlag = FALSE; SendMessageToPC(oPC, "Failed to identify "+MK_IPRP_GetItemName(oItem)+": not enough gold!"); } } break; } if (nFlag) { SetLocalInt(oItem, sVarName, TRUE); } } } } } void MK_CHEATS_RestoreCurrentFlagForAllItems() { object oPC = GetPCSpeaker(); int nState = MK_GenericDialog_GetState(); int nFlag; string sVarName = "MK_CHEATS_FLAG_"+IntToString(nState); int nMarked; int nCount = MK_ITM_DISPLAY_GetItemCount(); int iItem; for (iItem=0; iItem=0) && (nAction=0) && (nAction=0) && (nAction=0) && (nAction=0) && (nAction" : "")); SetCustomToken(14473, (bMaxLevel ? GetLocalString(OBJECT_SELF, MK_DISABLED_OPTIONS_COLOR) : "")); SetCustomToken(14474, (bMaxLevel ? "" : "")); int nXP = GetLocalInt(oPC, MK_CHEATS_LEVEL_XP); MK_GenericDialog_SetConditionRange(28, 31, TRUE); MK_GenericDialog_SetCondition(38, nXP!=0); MK_GenericDialog_SetCondition(39, nXP!=0); SetCustomToken(14421, IntToString(nLevel)); SetCustomToken(14422, IntToString(GetXP(oPC))); SetCustomToken(14423, IntToString(nXP)); MK_GenericDialog_SetCondition(127, TRUE); break; } case MK_STATE_CHEATS_GOLD: { int nCurrentGold = GetGold(oPC); int nGoldGiven = GetLocalInt(oPC, MK_CHEATS_GOLD_AMOUNT); SetCustomToken(14471, (nCurrentGold==0 ? GetLocalString(OBJECT_SELF, MK_DISABLED_OPTIONS_COLOR) : "")); SetCustomToken(14472, (nCurrentGold==0 ? "" : "")); MK_GenericDialog_SetConditionRange(25, 34, TRUE); MK_GenericDialog_SetCondition(38, nGoldGiven!=0); MK_GenericDialog_SetCondition(39, nGoldGiven!=0); SetCustomToken(14422, IntToString(nCurrentGold)); SetCustomToken(14423, (nGoldGiven>0 ? "+" : "") + IntToString(nGoldGiven)); MK_GenericDialog_SetCondition(127, TRUE); break; } case MK_STATE_CHEATS_ALIGNMENT: { MK_CHEATS_SetAlignmentToken(oPC, 14422, 14424); // SetCustomToken(14422, IntToString(nAlignmentGoodEvil)); // int nAlignmentShiftGoodEvil = GetLocalInt(oPC, MK_CHEATS_ALIGNMENT_GOODEVIL); // SetCustomToken(14423, (nAlignmentShiftGoodEvil>0 ? "+" : "") + IntToString(nAlignmentShiftGoodEvil)); // SetCustomToken(14424, IntToString(nAlignmentLawChaos)); // int nAlignmentShiftLawChaos = GetLocalInt(oPC, MK_CHEATS_ALIGNMENT_LAWCHAOS); // SetCustomToken(14425, (nAlignmentShiftLawChaos>0 ? "+" : "") + IntToString(nAlignmentShiftLawChaos)); int bAlignmentShifted = (GetLocalInt(oPC, MK_CHEATS_ALIGNMENT_GOODEVIL)!=0) || (GetLocalInt(oPC, MK_CHEATS_ALIGNMENT_LAWCHAOS)!=0); MK_GenericDialog_SetConditionRange(31, 34, TRUE); MK_GenericDialog_SetCondition(35, bAlignmentShifted); MK_GenericDialog_SetCondition(36, bAlignmentShifted); string sDisabledColor = GetLocalString(OBJECT_SELF, MK_DISABLED_OPTIONS_COLOR); string sEndColor = ""; int nAlignmentGoodEvil = GetGoodEvilValue(oPC); int nAlignmentLawChaos = GetLawChaosValue(oPC); SetCustomToken(14471, (nAlignmentGoodEvil==100 ? sDisabledColor : "")); SetCustomToken(14472, (nAlignmentGoodEvil==100 ? sEndColor : "")); SetCustomToken(14473, (nAlignmentGoodEvil==0 ? sDisabledColor : "")); SetCustomToken(14474, (nAlignmentGoodEvil==0 ? sEndColor : "")); SetCustomToken(14475, (nAlignmentLawChaos==100 ? sDisabledColor : "")); SetCustomToken(14476, (nAlignmentLawChaos==100 ? sEndColor : "")); SetCustomToken(14477, (nAlignmentLawChaos==0 ? sDisabledColor : "")); SetCustomToken(14478, (nAlignmentLawChaos==0 ? sEndColor : "")); MK_GenericDialog_SetCondition(127, TRUE); break; } case MK_STATE_CHEATS_FEATS: MK_2DA_DISPLAY_DisplayPage(MK_2DA_DISPLAY_GetCurrentPage(), -1, "mk_cb_iprp_ftlbl", TRUE); MK_GenericDialog_SetCondition(127, TRUE); break; case MK_STATE_CHEATS_CURSEDFLAG: case MK_STATE_CHEATS_PLOTFLAG: case MK_STATE_CHEATS_STOLENFLAG: case MK_STATE_CHEATS_NOTIDENTIFIED: { MK_ITM_DISPLAY_DisplayPage(MK_ITM_DISPLAY_GetCurrentPage(), "mk_cb_iflag_lbl"); MK_GenericDialog_SetCondition(127, TRUE); MK_CHEATS_SetToggleFlagToken(nState); int bShowAll = GetLocalInt(oPC, "MK_CHEATS_SHOWALLITEMS"); MK_GenericDialog_SetCondition(39, !bShowAll); MK_GenericDialog_SetCondition(38, bShowAll); MK_GenericDialog_SetConditionRange(30, 31, TRUE); break; } case MK_STATE_CHEATS_CHARGES: { object oItem = MK_CHEATS_GetCurrentItem(); int bIsValid = GetIsObjectValid(oItem); MK_CHEATS_SetCustomToken(); MK_GenericDialog_SetConditionRange(30, 33, bIsValid); if (GetIsObjectValid(oItem)) { int nCharges = GetItemCharges(oItem); SetCustomToken(14461, (!GetIsObjectValid(oItem) ? GetLocalString(OBJECT_SELF, MK_DISABLED_OPTIONS_COLOR) : "")); SetCustomToken(14462, (!GetIsObjectValid(oItem) || (nCharges<=MK_CHEATS_MIN_CHARGES) ? GetLocalString(OBJECT_SELF, MK_DISABLED_OPTIONS_COLOR) : "")); SetCustomToken(14471, (!GetIsObjectValid(oItem) ? "" : "")); SetCustomToken(14472, (!GetIsObjectValid(oItem) || (nCharges<=MK_CHEATS_MIN_CHARGES) ? "" : "")); SetCustomToken(14424, IntToString(GetItemCharges(oItem))); MK_ITM_DISPLAY_HidePage(); MK_GenericDialog_SetConditionRange(38,39, FALSE); MK_GenericDialog_SetCondition(127, FALSE); } else { SetCustomToken(14424, "-"); MK_ITM_DISPLAY_DisplayPage(MK_ITM_DISPLAY_GetCurrentPage(), "mk_cb_ichrg_lbl"); int bShowAll = GetLocalInt(oPC, "MK_CHEATS_SHOWALLITEMS"); MK_GenericDialog_SetCondition(39, !bShowAll); MK_GenericDialog_SetCondition(38, bShowAll); // MK_GenericDialog_SetCondition(37, TRUE); MK_GenericDialog_SetCondition(127, TRUE); } int bModified = MK_CHEATS_GetIsCurrentItemModified(); MK_GenericDialog_SetCondition(254, bModified); MK_GenericDialog_SetCondition(255, !bModified); MK_GenericDialog_SetCondition(257, bModified); break; } case MK_STATE_CHEATS_SKILLPOINTS: MK_CHEATS_SetSkillsToken(); MK_2DA_DISPLAY_DisplayPage(MK_2DA_DISPLAY_GetCurrentPage(), MK_CHEATS_GetCurrentSkill(), "mk_cb_iprp_sklbl", FALSE); MK_GenericDialog_SetConditionRange(30, 34, TRUE); MK_GenericDialog_SetCondition(127, TRUE); break; case MK_STATE_CHEATS_OPENSTORE: { MK_2DA_DISPLAY_DisplayPage(MK_2DA_DISPLAY_GetCurrentPage(), MK_CHEATS_GetCurrentStore(), "mk_cb_store_lbl", TRUE); SetCustomToken(14422, MK_CHEATS_GetCurrentStoreName()); SetCustomToken(14460, ""); SetCustomToken(14470, ""); object oStore = MK_CHEATS_SearchCurrentStore(); int nStoreID = MK_CHEATS_GetCurrentStore(); if (GetIsObjectValid(oStore)) { object oArea = GetArea(oStore); SetCustomToken(14424, GetName(oArea)); } else if (nStoreID!=-1) { int nStrRef = MK_Get2DAInt("mk_cheat_stores", "LOCATION", nStoreID, 7221); SetCustomToken(14424, MK_TLK_GetStringByStrRef(nStrRef, GetGender(oPC))); } else { SetCustomToken(14460, GetLocalString(OBJECT_SELF, "MK_DISABLED_OPTIONS_COLOR")); SetCustomToken(14470, " *no store selected*"); SetCustomToken(14424, ""); } MK_GenericDialog_SetCondition(30, TRUE); MK_GenericDialog_SetCondition(127, TRUE); break; } case MK_STATE_CHEATS_DISABLE: // custom token set in MK_CHEATS_PrepareDisablingCurrentCheat() break; } MK_DEBUG_TRACE("mk_pre_cheats: bReturn="+IntToString(bReturn)); if (bReturn) { MK_DELIMITER_Initialize(); } else { ExecuteScript("mk_im_cancel"); } MK_GenericDialog_SetCondition(256, FALSE); return bReturn; }