mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-02-06 13:15:33 +00:00
magic effect widget improvements, read name of effect from GMST and don't show duration/target for constant effects
This commit is contained in:
parent
c7381d4491
commit
4889902b98
4 changed files with 178 additions and 14 deletions
|
@ -202,7 +202,7 @@ void BirthDialog::updateSpells()
|
|||
|
||||
MyGUI::IntCoord spellCoord = coord;
|
||||
spellCoord.height = 24; // TODO: This should be fetched from the skin somehow, or perhaps a widget in the layout as a template?
|
||||
spellWidget->createEffectWidgets(spellItems, spellArea, spellCoord);
|
||||
spellWidget->createEffectWidgets(spellItems, spellArea, spellCoord, category);
|
||||
coord.top = spellCoord.top;
|
||||
|
||||
++i;
|
||||
|
|
|
@ -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()
|
||||
{
|
||||
}
|
||||
|
|
|
@ -119,7 +119,7 @@ namespace MWGui
|
|||
|
||||
void setWindowManager(WindowManager* parWindowManager) { mWindowManager = parWindowManager; }
|
||||
void setSpellId(const std::string &id);
|
||||
void createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord);
|
||||
void createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord, const int category);
|
||||
|
||||
const std::string &getSpellId() const { return id; }
|
||||
|
||||
|
@ -174,6 +174,9 @@ namespace MWGui
|
|||
|
||||
void setWindowManager(WindowManager* parWindowManager) { mWindowManager = parWindowManager; }
|
||||
void setSpellEffect(SpellEffectValue value);
|
||||
void setConstant(bool constant) { mIsConstant = constant; }
|
||||
|
||||
std::string effectIDToString(const short effectID);
|
||||
|
||||
const SpellEffectValue &getSpellEffect() const { return effect; }
|
||||
|
||||
|
@ -188,6 +191,7 @@ namespace MWGui
|
|||
|
||||
WindowManager* mWindowManager;
|
||||
SpellEffectValue effect;
|
||||
bool mIsConstant; // constant effect
|
||||
MyGUI::ImageBox* imageWidget;
|
||||
MyGUI::TextBox* textWidget;
|
||||
};
|
||||
|
|
|
@ -184,6 +184,10 @@
|
|||
<State name="normal" colour="0.70 0.57 0.33" shift="0"/>
|
||||
<State name="highlighted" colour="0.85 0.76 0.60" shift="0"/>
|
||||
<State name="pushed" colour="0.33 0.38 0.67" shift="0"/>
|
||||
<State name="disabled_checked" colour="0.33 0.38 0.67" shift="0"/>
|
||||
<State name="normal_checked" colour="0.33 0.38 0.67" shift="0"/>
|
||||
<State name="highlighted_checked" colour="0.33 0.38 0.67" shift="0"/>
|
||||
<State name="pushed_checked" colour="0.33 0.38 0.67" shift="0"/>
|
||||
</BasisSkin>
|
||||
</Skin>
|
||||
|
||||
|
|
Loading…
Reference in a new issue