// serialization void BoundItemMgefHandler::LinkHandler() { TESForm* assocItem = TESForm::LookupByFormID(parentEffect.mgefParam); #ifndef OBLIVION if (assocItem) FormRefCounter::AddReference(&parentEffect,assocItem); // add a cross ref for the associated form #endif if (!parentEffect.GetFlag(EffectSetting::kMgefFlagShift_UseArmor) && !parentEffect.GetFlag(EffectSetting::kMgefFlagShift_UseWeapon)) { // Use* flags are not set properly, attempt to guess value from assoc item and/or defaults if (assocItem && assocItem->GetFormType() == TESForm::kFormType_Weapon) // assoc item is a weapon parentEffect.SetFlag(EffectSetting::kMgefFlagShift_UseWeapon,true); else if (assocItem && assocItem->GetFormType() == TESForm::kFormType_Armor) // assoc item is armor parentEffect.SetFlag(EffectSetting::kMgefFlagShift_UseArmor,true); else if (EffectSetting::GetDefaultMgefFlags(parentEffect.mgefCode) & EffectSetting::kMgefFlag_UseWeapon) // default flag is 'Use Weapon' parentEffect.SetFlag(EffectSetting::kMgefFlagShift_UseWeapon,true); else // default flag is 'Use Armor' OR there is no default flag setting parentEffect.SetFlag(EffectSetting::kMgefFlagShift_UseArmor,true); // check vanilla bound item group & switch groups if necessary if (parentEffect.MagicGroupList::GetMagicGroup(MagicGroup::g_BoundWeaponLimit) && parentEffect.GetFlag(EffectSetting::kMgefFlagShift_UseArmor)) { // TODO - implement switch over armor slot to choose appripriate limit parentEffect.RemoveMagicGroup(MagicGroup::g_BoundWeaponLimit); parentEffect.AddMagicGroup(MagicGroup::g_BoundHelmLimit,1); } } }
void DispelMgefHandler::SetInDialog(HWND dialog) { HWND ctl = 0; // Effect Handler TESComboBox::SetCurSelByData(GetDlgItem(dialog,IDC_DSPL_EFFECTHANDLER),(void*)ehCode); // Effect Setting ::EffectSetting* mgef = EffectSettingCollection::LookupByCode(mgefCode); TESComboBox::SetCurSelByData(GetDlgItem(dialog,IDC_DSPL_EFFECTSETTING),mgef); // Magic Type Checkboxes CheckDlgButton(dialog,IDC_DSPL_SPELLS,magicTypes & (1 << Magic::kMagicType_Spell)); CheckDlgButton(dialog,IDC_DSPL_DISEASES,magicTypes & (1 << Magic::kMagicType_Disease)); CheckDlgButton(dialog,IDC_DSPL_POWERS,magicTypes & (1 << Magic::kMagicType_Power)); CheckDlgButton(dialog,IDC_DSPL_LPOWERS,magicTypes & (1 << Magic::kMagicType_LesserPower)); CheckDlgButton(dialog,IDC_DSPL_ABILITIES,magicTypes & (1 << Magic::kMagicType_Ability)); CheckDlgButton(dialog,IDC_DSPL_POISONS,magicTypes & (1 << Magic::kMagicType_Poison)); CheckDlgButton(dialog,IDC_DSPL_POTIONS,magicTypes & (1 << Magic::kMagicType_AlchemyItem)); CheckDlgButton(dialog,IDC_DSPL_INGREDIENTS,magicTypes & (1 << Magic::kMagicType_Ingredient)); // Cast Type Checkboxes CheckDlgButton(dialog,IDC_DSPL_SCROLLENCH,castTypes & (1 << ::Magic::kCast_Once)); CheckDlgButton(dialog,IDC_DSPL_STAFFENCH,castTypes & (1 << ::Magic::kCast_WhenUsed)); CheckDlgButton(dialog,IDC_DSPL_WEAPENCH,castTypes & (1 << ::Magic::kCast_WhenStrikes)); CheckDlgButton(dialog,IDC_DSPL_APPARELENCH,castTypes & (1 << ::Magic::kCast_Constant)); // Magic Item Type Select TESForm* form = TESForm::LookupByFormID(magicitemFormID); TESComboBox::SetCurSelByData(GetDlgItem(dialog,IDC_DSPL_MAGICITEMTYPE),form ? (void*)form->GetFormType() : 0); SendNotifyMessage(dialog, WM_USERCOMMAND, MAKEWPARAM(IDC_DSPL_MAGICITEMTYPE,CBN_SELCHANGE),(LPARAM)GetDlgItem(dialog,IDC_DSPL_MAGICITEMTYPE)); // behaviors CheckDlgButton(dialog,IDC_DSPL_ATOMICITEM,atomicItems); CheckDlgButton(dialog,IDC_DSPL_ATOMICDISPEL,atomicDispel); CheckDlgButton(dialog,IDC_DSPL_DISTRIBUTEMAG,distributeMag); CheckDlgButton(dialog,IDC_DSPL_USECASTINGCOST,useCastingCost); }