|
|
|
@ -222,7 +222,7 @@ void MWSpell::setSpellId(const std::string &spellId)
|
|
|
|
|
updateWidgets();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MWSpell::createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord)
|
|
|
|
|
void MWSpell::createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord, const int category)
|
|
|
|
|
{
|
|
|
|
|
const ESMS::ESMStore &store = mWindowManager->getStore();
|
|
|
|
|
const ESM::Spell *spell = store.spells.search(id);
|
|
|
|
@ -234,6 +234,7 @@ void MWSpell::createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI:
|
|
|
|
|
{
|
|
|
|
|
effect = creator->createWidget<MWSpellEffect>("MW_EffectImage", coord, MyGUI::Align::Default);
|
|
|
|
|
effect->setWindowManager(mWindowManager);
|
|
|
|
|
effect->setConstant(category == 0);
|
|
|
|
|
effect->setSpellEffect(*it);
|
|
|
|
|
effects.push_back(effect);
|
|
|
|
|
coord.top += effect->getHeight();
|
|
|
|
@ -340,8 +341,7 @@ void MWSpellEffect::updateWidgets()
|
|
|
|
|
std::string sec = " " + mWindowManager->getGameSettingString("ssecond", "");
|
|
|
|
|
std::string secs = " " + mWindowManager->getGameSettingString("sseconds", "");
|
|
|
|
|
|
|
|
|
|
// TODO: Get name of effect from GMST
|
|
|
|
|
std::string spellLine = "";
|
|
|
|
|
std::string spellLine = effectIDToString(effect.effectID);
|
|
|
|
|
if (effect.skill >= 0 && effect.skill < ESM::Skill::Length)
|
|
|
|
|
{
|
|
|
|
|
spellLine += " " + mWindowManager->getGameSettingString(ESM::Skill::sSkillNameIds[effect.skill], "");
|
|
|
|
@ -369,18 +369,24 @@ void MWSpellEffect::updateWidgets()
|
|
|
|
|
spellLine += " " + boost::lexical_cast<std::string>(effect.magnMin) + to + boost::lexical_cast<std::string>(effect.magnMin) + " " + pts;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (effect.duration >= 0)
|
|
|
|
|
|
|
|
|
|
// constant effects have no duration and no target
|
|
|
|
|
if (!mIsConstant)
|
|
|
|
|
{
|
|
|
|
|
spellLine += " " + mWindowManager->getGameSettingString("sfor", "") + " " + boost::lexical_cast<std::string>(effect.duration) + ((effect.duration == 1) ? sec : secs);
|
|
|
|
|
if (effect.duration >= 0)
|
|
|
|
|
{
|
|
|
|
|
spellLine += " " + mWindowManager->getGameSettingString("sfor", "") + " " + boost::lexical_cast<std::string>(effect.duration) + ((effect.duration == 1) ? sec : secs);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string on = mWindowManager->getGameSettingString("sonword", "");
|
|
|
|
|
if (effect.range == ESM::RT_Self)
|
|
|
|
|
spellLine += " " + on + " " + mWindowManager->getGameSettingString("sRangeSelf", "");
|
|
|
|
|
else if (effect.range == ESM::RT_Touch)
|
|
|
|
|
spellLine += " " + on + " " + mWindowManager->getGameSettingString("sRangeTouch", "");
|
|
|
|
|
else if (effect.range == ESM::RT_Target)
|
|
|
|
|
spellLine += " " + on + " " + mWindowManager->getGameSettingString("sRangeTarget", "");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string on = mWindowManager->getGameSettingString("sonword", "");
|
|
|
|
|
if (effect.range == ESM::RT_Self)
|
|
|
|
|
spellLine += " " + on + " " + mWindowManager->getGameSettingString("sRangeSelf", "");
|
|
|
|
|
else if (effect.range == ESM::RT_Touch)
|
|
|
|
|
spellLine += " " + on + " " + mWindowManager->getGameSettingString("sRangeTouch", "");
|
|
|
|
|
else if (effect.range == ESM::RT_Target)
|
|
|
|
|
spellLine += " " + on + " " + mWindowManager->getGameSettingString("sRangeTarget", "");
|
|
|
|
|
static_cast<MyGUI::TextBox*>(textWidget)->setCaption(spellLine);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
@ -394,6 +400,156 @@ void MWSpellEffect::updateWidgets()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
std::string MWSpellEffect::effectIDToString(const short effectID)
|
|
|
|
|
{
|
|
|
|
|
// Map effect ID to GMST name
|
|
|
|
|
// http://www.uesp.net/morrow/hints/mweffects.shtml
|
|
|
|
|
std::map<short, std::string> names;
|
|
|
|
|
names[85] ="sEffectAbsorbAttribute";
|
|
|
|
|
names[88] ="sEffectAbsorbFatigue";
|
|
|
|
|
names[86] ="sEffectAbsorbHealth";
|
|
|
|
|
names[87] ="sEffectAbsorbSpellPoints";
|
|
|
|
|
names[89] ="sEffectAbsorbSkill";
|
|
|
|
|
names[63] ="sEffectAlmsiviIntervention";
|
|
|
|
|
names[47] ="sEffectBlind";
|
|
|
|
|
names[123] ="sEffectBoundBattleAxe";
|
|
|
|
|
names[129] ="sEffectBoundBoots";
|
|
|
|
|
names[127] ="sEffectBoundCuirass";
|
|
|
|
|
names[120] ="sEffectBoundDagger";
|
|
|
|
|
names[131] ="sEffectBoundGloves";
|
|
|
|
|
names[128] ="sEffectBoundHelm";
|
|
|
|
|
names[125] ="sEffectBoundLongbow";
|
|
|
|
|
names[121] ="sEffectBoundLongsword";
|
|
|
|
|
names[122] ="sEffectBoundMace";
|
|
|
|
|
names[130] ="sEffectBoundShield";
|
|
|
|
|
names[124] ="sEffectBoundSpear";
|
|
|
|
|
names[7] ="sEffectBurden";
|
|
|
|
|
names[50] ="sEffectCalmCreature";
|
|
|
|
|
names[49] ="sEffectCalmHumanoid";
|
|
|
|
|
names[40] ="sEffectChameleon";
|
|
|
|
|
names[44] ="sEffectCharm";
|
|
|
|
|
names[118] ="sEffectCommandCreatures";
|
|
|
|
|
names[119] ="sEffectCommandHumanoids";
|
|
|
|
|
names[132] ="sEffectCorpus"; // NB this typo. (bethesda made it)
|
|
|
|
|
names[70] ="sEffectCureBlightDisease";
|
|
|
|
|
names[69] ="sEffectCureCommonDisease";
|
|
|
|
|
names[71] ="sEffectCureCorprusDisease";
|
|
|
|
|
names[73] ="sEffectCureParalyzation";
|
|
|
|
|
names[72] ="sEffectCurePoison";
|
|
|
|
|
names[22] ="sEffectDamageAttribute";
|
|
|
|
|
names[25] ="sEffectDamageFatigue";
|
|
|
|
|
names[23] ="sEffectDamageHealth";
|
|
|
|
|
names[24] ="sEffectDamageMagicka";
|
|
|
|
|
names[26] ="sEffectDamageSkill";
|
|
|
|
|
names[54] ="sEffectDemoralizeCreature";
|
|
|
|
|
names[53] ="sEffectDemoralizeHumanoid";
|
|
|
|
|
names[64] ="sEffectDetectAnimal";
|
|
|
|
|
names[65] ="sEffectDetectEnchantment";
|
|
|
|
|
names[66] ="sEffectDetectKey";
|
|
|
|
|
names[38] ="sEffectDisintegrateArmor";
|
|
|
|
|
names[37] ="sEffectDisintegrateWeapon";
|
|
|
|
|
names[57] ="sEffectDispel";
|
|
|
|
|
names[62] ="sEffectDivineIntervention";
|
|
|
|
|
names[17] ="sEffectDrainAttribute";
|
|
|
|
|
names[20] ="sEffectDrainFatigue";
|
|
|
|
|
names[18] ="sEffectDrainHealth";
|
|
|
|
|
names[19] ="sEffectDrainSpellpoints";
|
|
|
|
|
names[21] ="sEffectDrainSkill";
|
|
|
|
|
names[8] ="sEffectFeather";
|
|
|
|
|
names[14] ="sEffectFireDamage";
|
|
|
|
|
names[4] ="sEffectFireShield";
|
|
|
|
|
names[117] ="sEffectFortifyAttackBonus";
|
|
|
|
|
names[79] ="sEffectFortifyAttribute";
|
|
|
|
|
names[82] ="sEffectFortifyFatigue";
|
|
|
|
|
names[80] ="sEffectFortifyHealth";
|
|
|
|
|
names[81] ="sEffectFortifySpellpoints";
|
|
|
|
|
names[84] ="sEffectFortifyMagickaMultiplier";
|
|
|
|
|
names[83] ="sEffectFortifySkill";
|
|
|
|
|
names[52] ="sEffectFrenzyCreature";
|
|
|
|
|
names[51] ="sEffectFrenzyHumanoid";
|
|
|
|
|
names[16] ="sEffectFrostDamage";
|
|
|
|
|
names[6] ="sEffectFrostShield";
|
|
|
|
|
names[39] ="sEffectInvisibility";
|
|
|
|
|
names[9] ="sEffectJump";
|
|
|
|
|
names[10] ="sEffectLevitate";
|
|
|
|
|
names[41] ="sEffectLight";
|
|
|
|
|
names[5] ="sEffectLightningShield";
|
|
|
|
|
names[12] ="sEffectLock";
|
|
|
|
|
names[60] ="sEffectMark";
|
|
|
|
|
names[43] ="sEffectNightEye";
|
|
|
|
|
names[13] ="sEffectOpen";
|
|
|
|
|
names[45] ="sEffectParalyze";
|
|
|
|
|
names[27] ="sEffectPoison";
|
|
|
|
|
names[56] ="sEffectRallyCreature";
|
|
|
|
|
names[55] ="sEffectRallyHumanoid";
|
|
|
|
|
names[61] ="sEffectRecall";
|
|
|
|
|
names[68] ="sEffectReflect";
|
|
|
|
|
names[100] ="sEffectRemoveCurse";
|
|
|
|
|
names[95] ="sEffectResistBlightDisease";
|
|
|
|
|
names[94] ="sEffectResistCommonDisease";
|
|
|
|
|
names[96] ="sEffectResistCorprusDisease";
|
|
|
|
|
names[90] ="sEffectResistFire";
|
|
|
|
|
names[91] ="sEffectResistFrost";
|
|
|
|
|
names[93] ="sEffectResistMagicka";
|
|
|
|
|
names[98] ="sEffectResistNormalWeapons";
|
|
|
|
|
names[99] ="sEffectResistParalysis";
|
|
|
|
|
names[97] ="sEffectResistPoison";
|
|
|
|
|
names[92] ="sEffectResistShock";
|
|
|
|
|
names[74] ="sEffectRestoreAttribute";
|
|
|
|
|
names[77] ="sEffectRestoreFatigue";
|
|
|
|
|
names[75] ="sEffectRestoreHealth";
|
|
|
|
|
names[76] ="sEffectRestoreSpellPoints";
|
|
|
|
|
names[78] ="sEffectRestoreSkill";
|
|
|
|
|
names[42] ="sEffectSanctuary";
|
|
|
|
|
names[3] ="sEffectShield";
|
|
|
|
|
names[15] ="sEffectShockDamage";
|
|
|
|
|
names[46] ="sEffectSilence";
|
|
|
|
|
names[11] ="sEffectSlowFall";
|
|
|
|
|
names[58] ="sEffectSoultrap";
|
|
|
|
|
names[48] ="sEffectSound";
|
|
|
|
|
names[67] ="sEffectSpellAbsorption";
|
|
|
|
|
names[136] ="sEffectStuntedMagicka";
|
|
|
|
|
names[106] ="sEffectSummonAncestralGhost";
|
|
|
|
|
names[110] ="sEffectSummonBonelord";
|
|
|
|
|
names[108] ="sEffectSummonLeastBonewalker";
|
|
|
|
|
names[134] ="sEffectSummonCenturionSphere";
|
|
|
|
|
names[103] ="sEffectSummonClannfear";
|
|
|
|
|
names[104] ="sEffectSummonDaedroth";
|
|
|
|
|
names[105] ="sEffectSummonDremora";
|
|
|
|
|
names[114] ="sEffectSummonFlameAtronach";
|
|
|
|
|
names[115] ="sEffectSummonFrostAtronach";
|
|
|
|
|
names[113] ="sEffectSummonGoldenSaint";
|
|
|
|
|
names[109] ="sEffectSummonGreaterBonewalker";
|
|
|
|
|
names[112] ="sEffectSummonHunger";
|
|
|
|
|
names[102] ="sEffectSummonScamp";
|
|
|
|
|
names[107] ="sEffectSummonSkeletalMinion";
|
|
|
|
|
names[116] ="sEffectSummonStormAtronach";
|
|
|
|
|
names[111] ="sEffectSummonWingedTwilight";
|
|
|
|
|
names[135] ="sEffectSunDamage";
|
|
|
|
|
names[1] ="sEffectSwiftSwim";
|
|
|
|
|
names[59] ="sEffectTelekinesis";
|
|
|
|
|
names[101] ="sEffectTurnUndead";
|
|
|
|
|
names[133] ="sEffectVampirism";
|
|
|
|
|
names[0] ="sEffectWaterBreathing";
|
|
|
|
|
names[2] ="sEffectWaterWalking";
|
|
|
|
|
names[33] ="sEffectWeaknesstoBlightDisease";
|
|
|
|
|
names[32] ="sEffectWeaknesstoCommonDisease";
|
|
|
|
|
names[34] ="sEffectWeaknesstoCorprusDisease";
|
|
|
|
|
names[28] ="sEffectWeaknesstoFire";
|
|
|
|
|
names[29] ="sEffectWeaknesstoFrost";
|
|
|
|
|
names[31] ="sEffectWeaknesstoMagicka";
|
|
|
|
|
names[36] ="sEffectWeaknesstoNormalWeapons";
|
|
|
|
|
names[35] ="sEffectWeaknesstoPoison";
|
|
|
|
|
names[30] ="sEffectWeaknesstoShock";
|
|
|
|
|
|
|
|
|
|
assert(names.find(effectID) != names.end() && "Unimplemented effect type");
|
|
|
|
|
std::string res = mWindowManager->getGameSettingString(names[effectID], "");
|
|
|
|
|
if (res == "")
|
|
|
|
|
std::cout << "Warning: Unknown effect name " << names[effectID] << std::endl;
|
|
|
|
|
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MWSpellEffect::~MWSpellEffect()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|