コード例 #1
0
// 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);
        }
    }
}
コード例 #2
0
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);
}