diff --git a/client/CBattleInterface.cpp b/client/CBattleInterface.cpp index 494f37ae1..6cc2a4dd8 100644 --- a/client/CBattleInterface.cpp +++ b/client/CBattleInterface.cpp @@ -2867,6 +2867,11 @@ void CBattleInterface::castThisSpell(int spellID) spellSelMode = 5; } + if(spell.range[ castingHero->getSpellSchoolLevel(&spell) ].size() > 1) //spell has many-hex range + { + spellSelMode = 0; + } + if(spellSelMode == -1) //user does not have to select location { spellToCast->destinationTile = -1; diff --git a/lib/CGameState.cpp b/lib/CGameState.cpp index 847f078c0..9b297fdff 100644 --- a/lib/CGameState.cpp +++ b/lib/CGameState.cpp @@ -3059,6 +3059,15 @@ std::set BattleInfo::getAttackedCreatures( const CSpell * s, int skillL } } } + else if (s->range[skillLevel].size() > 1) //custom many-hex range + { + for(std::set::iterator it = attackedHexes.begin(); it != attackedHexes.end(); ++it) + { + CStack * st = getStackT(*it, onlyAlive); + if(st) + attackedCres.insert(st); + } + } else if(VLC->spellh->spells[s->id].attributes.find("CREATURE_TARGET_1") != std::string::npos || VLC->spellh->spells[s->id].attributes.find("CREATURE_TARGET_2") != std::string::npos) //spell to be cast on a specific creature but massive on expert { diff --git a/server/CGameHandler.cpp b/server/CGameHandler.cpp index 39cd91b4c..73649d076 100644 --- a/server/CGameHandler.cpp +++ b/server/CGameHandler.cpp @@ -3928,6 +3928,21 @@ void CGameHandler::playerMessage( ui8 player, const std::string &message ) gs->getPlayer(player)->enteredLosingCheatCode = 1; checkLossVictory(player); } + else if (message == "vcmiforgeofnoldorking") //hero gets all artifacts except war machines, spell scrolls and spell book + { + CGHeroInstance *hero = gs->getHero(gs->getPlayer(player)->currentSelection); + if(!hero) return; + SetHeroArtifacts sha; + sha.hid = hero->id; + sha.artifacts = hero->artifacts; + sha.artifWorn = hero->artifWorn; + sha.artifacts.push_back(2); //grail + for (int g=7; g<=140; ++g) + { + sha.artifacts.push_back(g); + } + sendAndApply(&sha); + } else cheated = false; if(cheated)