mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-26 03:52:01 +02:00
spell replacement works
This commit is contained in:
parent
a9327b3fa3
commit
857b2e9a35
@ -37,6 +37,7 @@ public:
|
|||||||
void visitHeroVisitCastle(HeroVisitCastle & pack) override;
|
void visitHeroVisitCastle(HeroVisitCastle & pack) override;
|
||||||
void visitSetMana(SetMana & pack) override;
|
void visitSetMana(SetMana & pack) override;
|
||||||
void visitSetMovePoints(SetMovePoints & pack) override;
|
void visitSetMovePoints(SetMovePoints & pack) override;
|
||||||
|
void visitSetTownSpells(SetTownSpells & pack) override;
|
||||||
void visitFoWChange(FoWChange & pack) override;
|
void visitFoWChange(FoWChange & pack) override;
|
||||||
void visitChangeStackCount(ChangeStackCount & pack) override;
|
void visitChangeStackCount(ChangeStackCount & pack) override;
|
||||||
void visitSetStackType(SetStackType & pack) override;
|
void visitSetStackType(SetStackType & pack) override;
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "CPlayerInterface.h"
|
#include "CPlayerInterface.h"
|
||||||
#include "CGameInfo.h"
|
#include "CGameInfo.h"
|
||||||
#include "windows/GUIClasses.h"
|
#include "windows/GUIClasses.h"
|
||||||
|
#include "windows/CCastleInterface.h"
|
||||||
#include "mapView/mapHandler.h"
|
#include "mapView/mapHandler.h"
|
||||||
#include "adventureMap/AdventureMapInterface.h"
|
#include "adventureMap/AdventureMapInterface.h"
|
||||||
#include "adventureMap/CInGameConsole.h"
|
#include "adventureMap/CInGameConsole.h"
|
||||||
@ -172,6 +173,12 @@ void ApplyClientNetPackVisitor::visitSetMovePoints(SetMovePoints & pack)
|
|||||||
callInterfaceIfPresent(cl, h->tempOwner, &IGameEventsReceiver::heroMovePointsChanged, h);
|
callInterfaceIfPresent(cl, h->tempOwner, &IGameEventsReceiver::heroMovePointsChanged, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ApplyClientNetPackVisitor::visitSetTownSpells(SetTownSpells & pack)
|
||||||
|
{
|
||||||
|
for(const auto & win : GH.windows().findWindows<CMageGuildScreen>())
|
||||||
|
win->update();
|
||||||
|
}
|
||||||
|
|
||||||
void ApplyClientNetPackVisitor::visitFoWChange(FoWChange & pack)
|
void ApplyClientNetPackVisitor::visitFoWChange(FoWChange & pack)
|
||||||
{
|
{
|
||||||
for(auto &i : cl.playerint)
|
for(auto &i : cl.playerint)
|
||||||
|
@ -1966,7 +1966,7 @@ void CFortScreen::RecruitArea::showPopupWindow(const Point & cursorPosition)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CMageGuildScreen::CMageGuildScreen(CCastleInterface * owner, const ImagePath & imagename)
|
CMageGuildScreen::CMageGuildScreen(CCastleInterface * owner, const ImagePath & imagename)
|
||||||
: CWindowObject(BORDERED, imagename), town(owner->town)
|
: CWindowObject(BORDERED, imagename), townId(owner->town->id)
|
||||||
{
|
{
|
||||||
OBJECT_CONSTRUCTION;
|
OBJECT_CONSTRUCTION;
|
||||||
|
|
||||||
@ -1982,6 +1982,12 @@ CMageGuildScreen::CMageGuildScreen(CCastleInterface * owner, const ImagePath & i
|
|||||||
|
|
||||||
exit = std::make_shared<CButton>(Point(748, 556), AnimationPath::builtin("TPMAGE1.DEF"), CButton::tooltip(CGI->generaltexth->allTexts[593]), [&](){ close(); }, EShortcut::GLOBAL_RETURN);
|
exit = std::make_shared<CButton>(Point(748, 556), AnimationPath::builtin("TPMAGE1.DEF"), CButton::tooltip(CGI->generaltexth->allTexts[593]), [&](){ close(); }, EShortcut::GLOBAL_RETURN);
|
||||||
|
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMageGuildScreen::update()
|
||||||
|
{
|
||||||
|
OBJECT_CONSTRUCTION;
|
||||||
static const std::vector<std::vector<Point> > positions =
|
static const std::vector<std::vector<Point> > positions =
|
||||||
{
|
{
|
||||||
{Point(222,445), Point(312,445), Point(402,445), Point(520,445), Point(610,445), Point(700,445)},
|
{Point(222,445), Point(312,445), Point(402,445), Point(520,445), Point(610,445), Point(700,445)},
|
||||||
@ -1991,21 +1997,28 @@ CMageGuildScreen::CMageGuildScreen(CCastleInterface * owner, const ImagePath & i
|
|||||||
{Point(491,325), Point(591,325)}
|
{Point(491,325), Point(591,325)}
|
||||||
};
|
};
|
||||||
|
|
||||||
for(size_t i=0; i<owner->town->town->mageLevel; i++)
|
spells.clear();
|
||||||
|
emptyScrolls.clear();
|
||||||
|
|
||||||
|
const CGTownInstance * town = LOCPLINT->cb->getTown(townId);
|
||||||
|
|
||||||
|
for(size_t i=0; i<town->town->mageLevel; i++)
|
||||||
{
|
{
|
||||||
size_t spellCount = owner->town->spellsAtLevel((int)i+1,false); //spell at level with -1 hmmm?
|
size_t spellCount = town->spellsAtLevel((int)i+1,false); //spell at level with -1 hmmm?
|
||||||
for(size_t j=0; j<spellCount; j++)
|
for(size_t j=0; j<spellCount; j++)
|
||||||
{
|
{
|
||||||
if(i<owner->town->mageGuildLevel() && owner->town->spells[i].size()>j)
|
if(i<town->mageGuildLevel() && town->spells[i].size()>j)
|
||||||
spells.push_back(std::make_shared<Scroll>(positions[i][j], owner->town->spells[i][j].toSpell(), town));
|
spells.push_back(std::make_shared<Scroll>(positions[i][j], town->spells[i][j].toSpell(), townId));
|
||||||
else
|
else
|
||||||
emptyScrolls.push_back(std::make_shared<CAnimImage>(AnimationPath::builtin("TPMAGES.DEF"), 1, 0, positions[i][j].x, positions[i][j].y));
|
emptyScrolls.push_back(std::make_shared<CAnimImage>(AnimationPath::builtin("TPMAGES.DEF"), 1, 0, positions[i][j].x, positions[i][j].y));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
CMageGuildScreen::Scroll::Scroll(Point position, const CSpell *Spell, const CGTownInstance *town)
|
CMageGuildScreen::Scroll::Scroll(Point position, const CSpell *Spell, ObjectInstanceID townId)
|
||||||
: spell(Spell), town(town)
|
: spell(Spell), townId(townId)
|
||||||
{
|
{
|
||||||
OBJECT_CONSTRUCTION;
|
OBJECT_CONSTRUCTION;
|
||||||
|
|
||||||
@ -2017,6 +2030,7 @@ CMageGuildScreen::Scroll::Scroll(Point position, const CSpell *Spell, const CGTo
|
|||||||
|
|
||||||
void CMageGuildScreen::Scroll::clickPressed(const Point & cursorPosition)
|
void CMageGuildScreen::Scroll::clickPressed(const Point & cursorPosition)
|
||||||
{
|
{
|
||||||
|
const CGTownInstance * town = LOCPLINT->cb->getTown(townId);
|
||||||
if(LOCPLINT->cb->getSettings().getBoolean(EGameSettings::TOWNS_SPELL_RESEARCH))
|
if(LOCPLINT->cb->getSettings().getBoolean(EGameSettings::TOWNS_SPELL_RESEARCH))
|
||||||
LOCPLINT->cb->spellResearch(town);
|
LOCPLINT->cb->spellResearch(town);
|
||||||
else
|
else
|
||||||
|
@ -379,10 +379,10 @@ class CMageGuildScreen : public CStatusbarWindow
|
|||||||
{
|
{
|
||||||
const CSpell * spell;
|
const CSpell * spell;
|
||||||
std::shared_ptr<CAnimImage> image;
|
std::shared_ptr<CAnimImage> image;
|
||||||
const CGTownInstance *town;
|
ObjectInstanceID townId;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Scroll(Point position, const CSpell *Spell, const CGTownInstance *town);
|
Scroll(Point position, const CSpell *Spell, ObjectInstanceID townId);
|
||||||
void clickPressed(const Point & cursorPosition) override;
|
void clickPressed(const Point & cursorPosition) override;
|
||||||
void showPopupWindow(const Point & cursorPosition) override;
|
void showPopupWindow(const Point & cursorPosition) override;
|
||||||
void hover(bool on) override;
|
void hover(bool on) override;
|
||||||
@ -394,10 +394,11 @@ class CMageGuildScreen : public CStatusbarWindow
|
|||||||
|
|
||||||
std::shared_ptr<CMinorResDataBar> resdatabar;
|
std::shared_ptr<CMinorResDataBar> resdatabar;
|
||||||
|
|
||||||
const CGTownInstance *town;
|
ObjectInstanceID townId;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CMageGuildScreen(CCastleInterface * owner, const ImagePath & image);
|
CMageGuildScreen(CCastleInterface * owner, const ImagePath & image);
|
||||||
|
void update();
|
||||||
};
|
};
|
||||||
|
|
||||||
/// The blacksmith window where you can buy available in town war machine
|
/// The blacksmith window where you can buy available in town war machine
|
||||||
|
@ -2248,21 +2248,17 @@ bool CGameHandler::spellResearch(ObjectInstanceID tid)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
CGTownInstance *t = gs->getTown(tid);
|
CGTownInstance *t = gs->getTown(tid);
|
||||||
auto spells = t->spells.at(1);
|
auto spells = t->spells.at(0);
|
||||||
auto spell = SpellID(SpellID::FLY);
|
auto spell = SpellID(SpellID::FLY);
|
||||||
spells.at(0) = spell;
|
spells.at(0) = spell;
|
||||||
setTownSpells(t, 1, spells);
|
setTownSpells(t, 0, spells);
|
||||||
spellResearchFinished(tid);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CGameHandler::spellResearchFinished(ObjectInstanceID tid)
|
|
||||||
{
|
|
||||||
const CGTownInstance * t = getTown(tid);
|
|
||||||
if(t->visitingHero)
|
if(t->visitingHero)
|
||||||
giveSpells(t, t->visitingHero);
|
giveSpells(t, t->visitingHero);
|
||||||
if(t->garrisonHero)
|
if(t->garrisonHero)
|
||||||
giveSpells(t, t->garrisonHero);
|
giveSpells(t, t->garrisonHero);
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CGameHandler::recruitCreatures(ObjectInstanceID objid, ObjectInstanceID dstid, CreatureID crid, ui32 cram, si32 fromLvl, PlayerColor player)
|
bool CGameHandler::recruitCreatures(ObjectInstanceID objid, ObjectInstanceID dstid, CreatureID crid, ui32 cram, si32 fromLvl, PlayerColor player)
|
||||||
|
@ -220,7 +220,6 @@ public:
|
|||||||
bool visitTownBuilding(ObjectInstanceID tid, BuildingID bid);
|
bool visitTownBuilding(ObjectInstanceID tid, BuildingID bid);
|
||||||
bool razeStructure(ObjectInstanceID tid, BuildingID bid);
|
bool razeStructure(ObjectInstanceID tid, BuildingID bid);
|
||||||
bool spellResearch(ObjectInstanceID tid);
|
bool spellResearch(ObjectInstanceID tid);
|
||||||
void spellResearchFinished(ObjectInstanceID tid);
|
|
||||||
bool disbandCreature( ObjectInstanceID id, SlotID pos );
|
bool disbandCreature( ObjectInstanceID id, SlotID pos );
|
||||||
bool arrangeStacks( ObjectInstanceID id1, ObjectInstanceID id2, ui8 what, SlotID p1, SlotID p2, si32 val, PlayerColor player);
|
bool arrangeStacks( ObjectInstanceID id1, ObjectInstanceID id2, ui8 what, SlotID p1, SlotID p2, si32 val, PlayerColor player);
|
||||||
bool bulkMoveArmy(ObjectInstanceID srcArmy, ObjectInstanceID destArmy, SlotID srcSlot);
|
bool bulkMoveArmy(ObjectInstanceID srcArmy, ObjectInstanceID destArmy, SlotID srcSlot);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user