// ==UserScript==
// @name battleHelper (fixed)
// @author Neleus
// @namespace Neleus
// @description Исправленный и рабочий battleHelper
// @version 0.44
// @include /^https{0,1}:\/\/((www|qrator|my)\.(heroeswm|lordswm)\.(ru|com)|178\.248\.235\.15)\/(war|warlog|leader_guild|leader_army|inventory).php(?!.?setkamarmy)/
// @grant GM_xmlhttpRequest
// @grant unsafeWindow
// @license GNU GPLv3
// ==/UserScript==
;(function () {
if (location.pathname.indexOf('leader_guild.php') >= 0) {
var turnId = {
amummy: { id: 933, hp: 80 },
acrossbowman: { id: 1021, hp: 24 },
air: { id: 153, hp: 30 },
ancienent: { id: 238, hp: 181 },
ancientpig: { id: 691, hp: 15 },
angel: { id: 132, hp: 180 },
anubis: { id: 917, hp: 160 },
arcaneelf: { id: 261, hp: 12 },
archer: { id: 2, hp: 7 },
archlich: { id: 146, hp: 55 },
archmage: { id: 104, hp: 30 },
armorgnom: { id: 982, hp: 55 },
assassin: { id: 56, hp: 14 },
assida: { id: 847, hp: 30 },
axegnom: { id: 985, hp: 10 },
banditka: { id: 729, hp: 8 },
banshee: { id: 515, hp: 110 },
battlegriffin: { id: 36, hp: 35 },
battlegriffon: { id: 493, hp: 52 },
battlemage: { id: 578, hp: 29 },
battlerager: { id: 960, hp: 30 },
bear: { id: 172, hp: 22 },
bearrider: { id: 161, hp: 25 },
behemoth: { id: 131, hp: 210 },
berserker: { id: 163, hp: 25 },
bigspider: { id: 724, hp: 55 },
blackbearrider: { id: 162, hp: 30 },
blackknight: { id: 272, hp: 90 },
blackwidow: { id: 661, hp: 14 },
bloodsister: { id: 315, hp: 24 },
boar: { id: 690, hp: 17 },
boarrider: { id: 318, hp: 14 },
bobbit: { id: 895, hp: 6 },
bonedragon: { id: 133, hp: 150 },
brawler: { id: 114, hp: 20 },
brigand: { id: 725, hp: 5 },
briskrider: { id: 316, hp: 50 },
brute: { id: 254, hp: 8 },
cavalier: { id: 90, hp: 90 },
cbal: { id: 791, hp: 65 },
cerberus: { id: 75, hp: 15 },
champion: { id: 495, hp: 100 },
chieftain: { id: 436, hp: 48 },
colossus: { id: 106, hp: 175 },
conscript: { id: 34, hp: 6 },
cpirate: { id: 677, hp: 4 },
crossman: { id: 257, hp: 8 },
crusader: { id: 672, hp: 30 },
cursed: { id: 522, hp: 20 },
cursedent: { id: 664, hp: 215 },
cyclop: { id: 89, hp: 85 },
cyclopking: { id: 237, hp: 95 },
cyclopod: { id: 537, hp: 100 },
dancer: { id: 25, hp: 12 },
darkbird: { id: 544, hp: 60 },
darkrider: { id: 51, hp: 40 },
ddhigh: { id: 587, hp: 34 },
deephydra: { id: 149, hp: 125 },
defender: { id: 157, hp: 7 },
devil: { id: 82, hp: 166 },
dgolem: { id: 520, hp: 350 },
diamondgolem: { id: 660, hp: 60 },
djinn: { id: 39, hp: 40 },
djinn_sultan: { id: 105, hp: 45 },
djinn_vizier: { id: 579, hp: 50 },
druid: { id: 26, hp: 34 },
druideld: { id: 120, hp: 38 },
dryad: { id: 255, hp: 6 },
eadaughter: { id: 333, hp: 35 },
earth: { id: 154, hp: 75 },
efreeti: { id: 280, hp: 90 },
elf: { id: 19, hp: 10 },
elgargoly: { id: 256, hp: 16 },
enforcer: { id: 35, hp: 7 },
executioner: { id: 335, hp: 40 },
familiar: { id: 80, hp: 6 },
fatpirate: { id: 651, hp: 100 },
fatpirateup: { id: 652, hp: 120 },
fcentaur: { id: 310, hp: 6 },
fire: { id: 155, hp: 43 },
firebird: { id: 536, hp: 65 },
firedragon: { id: 168, hp: 230 },
flamelord: { id: 958, hp: 120 },
footman: { id: 10, hp: 16 },
foulhydra: { id: 746, hp: 125 },
foulwyvern: { id: 337, hp: 105 },
fury: { id: 53, hp: 16 },
ghost: { id: 11, hp: 8 },
giant: { id: 792, hp: 100 },
giantarch: { id: 817, hp: 100 },
gnomon: { id: 728, hp: 9 },
goblin: { id: 14, hp: 3 },
goblinarcher: { id: 314, hp: 3 },
goblinmag: { id: 545, hp: 3 },
goblinus: { id: 329, hp: 3 },
gogachi: { id: 285, hp: 13 },
greendragon: { id: 103, hp: 200 },
gremlin: { id: 9, hp: 5 },
griffon: { id: 3, hp: 30 },
grimrider: { id: 121, hp: 50 },
harpooner: { id: 378, hp: 10 },
harpy: { id: 200, hp: 15 },
harpyhag: { id: 201, hp: 15 },
hellcharger: { id: 76, hp: 50 },
hellhound: { id: 74, hp: 15 },
hellkon: { id: 290, hp: 66 },
highwayman: { id: 730, hp: 24 },
hobgoblin: { id: 33, hp: 4 },
horneddemon: { id: 77, hp: 13 },
hornedoverseer: { id: 79, hp: 13 },
hotdog: { id: 288, hp: 15 },
hydra: { id: 50, hp: 80 },
hyenarider: { id: 859, hp: 14 },
imp: { id: 78, hp: 4 },
impergriffin: { id: 117, hp: 35 },
inquisitor: { id: 145, hp: 80 },
iron_golem: { id: 12, hp: 18 },
jdemon: { id: 289, hp: 13 },
kachok: { id: 601, hp: 50 },
kamneed: { id: 202, hp: 45 },
kamnegryz: { id: 203, hp: 55 },
leprekon: { id: 610, hp: 7 },
lich: { id: 29, hp: 50 },
mage: { id: 16, hp: 18 },
magneticgolem: { id: 259, hp: 28 },
maiden: { id: 49, hp: 16 },
manticore: { id: 754, hp: 80 },
marksman: { id: 42, hp: 10 },
mastergremlin: { id: 32, hp: 6 },
masterhunter: { id: 72, hp: 14 },
masterlich: { id: 341, hp: 55 },
matriarch: { id: 239, hp: 90 },
mauler: { id: 320, hp: 12 },
mcentaur: { id: 309, hp: 10 },
medusa: { id: 752, hp: 25 },
medusaup: { id: 753, hp: 30 },
megogachi: { id: 287, hp: 13 },
mercarcher: { id: 20, hp: 8 },
mercfootman: { id: 21, hp: 24 },
minotaur: { id: 55, hp: 31 },
minotaurguard: { id: 70, hp: 35 },
mistress: { id: 745, hp: 100 },
mountaingr: { id: 339, hp: 12 },
mummy: { id: 268, hp: 50 },
ncentaur: { id: 311, hp: 9 },
negro: { id: 849, hp: 17 },
nightmare: { id: 150, hp: 66 },
nomad: { id: 897, hp: 30 },
obsgargoyle: { id: 44, hp: 20 },
ocean: { id: 848, hp: 30 },
ogre: { id: 24, hp: 50 },
ogrebrutal: { id: 535, hp: 70 },
ogremagi: { id: 119, hp: 65 },
ogreshaman: { id: 855, hp: 55 },
orc: { id: 23, hp: 12 },
orcchief: { id: 73, hp: 18 },
orcrubak: { id: 534, hp: 20 },
orcshaman: { id: 546, hp: 13 },
outlaw: { id: 727, hp: 6 },
outlawup: { id: 896, hp: 8 },
peasant: { id: 4, hp: 4 },
pegasus: { id: 625, hp: 30 },
pikeman: { id: 1004, hp: 15 },
piratemonster: { id: 644, hp: 190 },
piratka: { id: 649, hp: 10 },
piratkaup: { id: 650, hp: 12 },
pitfiend: { id: 83, hp: 110 },
pitlord: { id: 236, hp: 120 },
pity: { id: 291, hp: 140 },
pixel: { id: 17, hp: 5 },
plaguezombie: { id: 40, hp: 17 },
plant: { id: 624, hp: 60 },
poltergeist: { id: 512, hp: 20 },
priest: { id: 37, hp: 54 },
priestess: { id: 852, hp: 35 },
priestessup: { id: 853, hp: 35 },
pristineunicorn: { id: 588, hp: 80 },
rakshasa_kshatra: { id: 580, hp: 135 },
rakshasa_raja: { id: 108, hp: 140 },
rakshasa_rani: { id: 93, hp: 120 },
rapukk: { id: 283, hp: 99 },
reptiloid: { id: 850, hp: 80 },
reptiloidup: { id: 851, hp: 90 },
robber: { id: 726, hp: 5 },
rocbird: { id: 30, hp: 55 },
rotzombie: { id: 270, hp: 23 },
runekeeper: { id: 961, hp: 65 },
runepatriarch: { id: 165, hp: 70 },
runepriest: { id: 164, hp: 60 },
saboteurgremlin: { id: 253, hp: 6 },
satyr: { id: 626, hp: 36 },
savageent: { id: 589, hp: 175 },
sceletonwar: { id: 267, hp: 5 },
scout: { id: 52, hp: 10 },
sdaughter: { id: 332, hp: 35 },
seducer: { id: 485, hp: 26 },
shadowdragon: { id: 102, hp: 200 },
shadow_witch: { id: 94, hp: 80 },
shamancyclop: { id: 860, hp: 105 },
shamaness: { id: 331, hp: 30 },
shieldguard: { id: 158, hp: 12 },
shootpirate: { id: 646, hp: 15 },
shootpirateup: { id: 647, hp: 18 },
silverunicorn: { id: 147, hp: 77 },
skeleton: { id: 1, hp: 4 },
skeletonarcher: { id: 28, hp: 4 },
skeletonpirate: { id: 604, hp: 4 },
skeletonpirateup: { id: 606, hp: 4 },
skirmesher: { id: 160, hp: 12 },
skmarksman: { id: 340, hp: 6 },
slayer: { id: 334, hp: 34 },
snowwolf: { id: 942, hp: 50 },
spearwielder: { id: 159, hp: 10 },
spectre: { id: 68, hp: 19 },
spegasus: { id: 629, hp: 30 },
spider: { id: 198, hp: 9 },
spiderpois: { id: 199, hp: 11 },
sprite: { id: 31, hp: 6 },
squire: { id: 71, hp: 26 },
stalker: { id: 696, hp: 15 },
steelgolem: { id: 69, hp: 24 },
stone_gargoyle: { id: 8, hp: 15 },
succubus: { id: 81, hp: 20 },
succubusmis: { id: 122, hp: 30 },
taskmaster: { id: 317, hp: 40 },
tengu: { id: 793, hp: 45 },
thane: { id: 166, hp: 100 },
thiefarcher: { id: 124, hp: 40 },
thiefmage: { id: 125, hp: 30 },
thiefwarrior: { id: 123, hp: 45 },
throwgnom: { id: 993, hp: 24 },
thunderbird: { id: 148, hp: 65 },
thunderlord: { id: 167, hp: 120 },
trapper: { id: 386, hp: 7 },
treant: { id: 92, hp: 175 },
troglodyte: { id: 750, hp: 5 },
troglodyteup: { id: 751, hp: 6 },
troll: { id: 204, hp: 150 },
unicorn: { id: 38, hp: 57 },
vampire: { id: 15, hp: 30 },
vampirelord: { id: 118, hp: 35 },
vampireprince: { id: 513, hp: 40 },
vermin: { id: 281, hp: 6 },
vindicator: { id: 260, hp: 23 },
vulture: { id: 731, hp: 40 },
wardancer: { id: 41, hp: 12 },
warmong: { id: 330, hp: 20 },
warrior: { id: 319, hp: 12 },
water: { id: 156, hp: 43 },
wdancer: { id: 258, hp: 14 },
whitebearrider: { id: 959, hp: 30 },
wight: { id: 91, hp: 95 },
wolfraider: { id: 43, hp: 12 },
wolfrider: { id: 18, hp: 10 },
wraith: { id: 235, hp: 100 },
wyvern: { id: 336, hp: 90 },
zealot: { id: 494, hp: 80 },
zombie: { id: 5, hp: 17 },
zpirate: { id: 679, hp: 150 },
archangel: { id: 249, hp: 220 },
seraph2: { id: 496, hp: 220 },
spectraldragon: { id: 300, hp: 160 },
ghostdragon: { id: 514, hp: 150 },
titan: { id: 107, hp: 190 },
stormtitan: { id: 581, hp: 190 },
emeralddragon: { id: 100, hp: 200 },
crystaldragon: { id: 590, hp: 200 },
ancientbehemoth: { id: 301, hp: 250 },
dbehemoth: { id: 538, hp: 280 },
cursedbehemoth: { id: 861, hp: 250 },
blackdragon: { id: 101, hp: 240 },
reddragon: { id: 747, hp: 235 },
archdevil: { id: 292, hp: 199 },
archdemon: { id: 293, hp: 211 },
magmadragon: { id: 169, hp: 280 },
lavadragon: { id: 962, hp: 275 },
untamedcyc: { id: 433, hp: 225 },
bloodeyecyc: { id: 399, hp: 235 },
cyclopus: { id: 397, hp: 220 },
paladin: { id: 234, hp: 100 },
efreetisultan: { id: 282, hp: 100 },
naga: { id: 673, hp: 110 },
golddragon: { id: 609, hp: 169 },
pharaoh: { id: 269, hp: 70 },
deadknight: { id: 273, hp: 100 },
zhryak: { id: 284, hp: 99 },
ballista: { id: 85, hp: 200 },
tent: { id: 0, hp: 0 },
piratemonsterup: { id: 645, hp: 200 },
blacktroll: { id: 205, hp: 180 },
zasad: { id: 1047, hp: 70 },
magicel: { id: 662, hp: 80 },
scorp: { id: 923, hp: 4 },
duneraider: { id: 921, hp: 12 },
scorpup: { id: 924, hp: 5 },
dromad: { id: 919, hp: 40 },
duneraiderup: { id: 922, hp: 12 },
shakal: { id: 925, hp: 24 },
slon: { id: 931, hp: 100 },
priestmoon: { id: 929, hp: 50 },
slonup: { id: 932, hp: 110 },
shakalup: { id: 926, hp: 30 },
dromadup: { id: 920, hp: 45 },
priestsun: { id: 930, hp: 55 },
anubisup: { id: 918, hp: 200 },
scarab: { id: 927, hp: 6 },
scarabup: { id: 928, hp: 6 },
tenguup: { id: 937, hp: 60 },
gnoll: { id: 1041, hp: 6 },
brigandup: { id: 1038, hp: 6 },
verblud: { id: 1060, hp: 35 },
gnollum: { id: 1042, hp: 6 },
krokodil: { id: 1067, hp: 70 },
krokodilup: { id: 1068, hp: 80 },
gnollsh: { id: 1089, hp: 6 },
smaster: { id: 1095, hp: 84 },
manticoreup: { id: 755, hp: 80 },
apirate: { id: 612, hp: 13 },
bpirate: { id: 611, hp: 16 },
wendigoup: { id: 945, hp: 35 },
whitetiger: { id: 631, hp: 35 },
dgolemup: { id: 521, hp: 400 },
exile: { id: 1040, hp: 28 },
banditkaup: { id: 936, hp: 9 },
nomadup: { id: 938, hp: 33 },
spearthrower: { id: 1114, hp: 19 },
gatekeeper: { id: 1132, hp: 120 },
gnollup: { id: 1138, hp: 9 },
gnollka: { id: 1139, hp: 6 },
gnollboss: { id: 1140, hp: 36 },
pushkar: { id: 1055, hp: 64 },
robberup: { id: 1044, hp: 6 },
sekhmet: { id: 1062, hp: 50 },
valkyrie: { id: 1185, hp: 61 },
goblinshaman: { id: 1193, hp: 5 },
poukai: { id: 1194, hp: 120 },
monk: { id: 1221, hp: 20 },
warden: { id: 1223, hp: 39 },
snowwolfup: { id: 1165, hp: 53 },
necrodogup: { id: 1325, hp: 9 },
necrodog: { id: 1324, hp: 8 },
blackarcher: { id: 1311, hp: 13 },
deadarcher: { id: 1312, hp: 16 },
ork: { id: 1346, hp: 24 },
grib: { id: 1187, hp: 20 },
gribok: { id: 1188, hp: 16 },
}
var imgId = {
mundus: 'acrossbowman',
assasin: 'assassin',
ocean: 'assida',
knight: 'cavalier',
crossbowman: 'crossman',
cursed_: 'cursed',
cyclopod_: 'cyclopod',
lizardrider: 'darkrider',
dd_: 'druid',
ddeld: 'druideld',
dryad_: 'dryad',
firebird_: 'firebird',
gog: 'gogachi',
nightmare: 'hellcharger',
demondog: 'hellhound',
hellstallion: 'hellkon',
hdemon: 'horneddemon',
fdemon: 'hornedoverseer',
firehound: 'hotdog',
golem: 'iron_golem',
lepr: 'leprekon',
hunterelf: 'masterhunter',
magog: 'megogachi',
minotaurguard_: 'minotaurguard',
stallion: 'nightmare',
obsgargoly: 'obsgargoyle',
assida: 'ocean',
paesant: 'peasant',
pitfiend_: 'pitfiend',
pitlord_: 'pitlord',
pitspawn: 'pity',
pp: 'pixel',
rakshas: 'rakshasa_rani',
roc: 'rocbird',
witch: 'shadow_witch',
cyclopshaman: 'shamancyclop',
sceleton: 'skeleton',
sceletonarcher: 'skeletonarcher',
dpirate: 'skeletonpirate',
dpirateup: 'skeletonpirateup',
swordman: 'squire',
gargoly: 'stone_gargoyle',
succub: 'succubus',
succubusm: 'succubusmis',
ent: 'treant',
bladedancer: 'wardancer',
winddancer: 'wdancer',
hobwolfrider: 'wolfraider',
abehemoth: 'ancientbehemoth',
bbehemoth: 'cursedbehemoth',
zhrica: 'priestmoon',
zhricaup: 'priestsun',
mmaster: 'smaster',
jpirate: 'spearthrower',
witchdoctor: 'goblinshaman',
paokai: 'poukai',
deaddog: 'necrodogup',
blackdog: 'necrodog',
}
let tr = document.getElementById('gl_tasks').getElementsByTagName('tr')
for (let i = 0; i < tr.length; i++) {
if (tr[i].childNodes.length != 1) {
continue
}
let cre = tr[i].getElementsByClassName('cre_creature')
let checkSum = 0
let hp = 0
let f = true
for (let j = 0; j < cre.length; j++) {
let id = cre[j].innerHTML.match(/name=([^\"]+)/)[1]
let count = cre[j].querySelector('#add_now_count').innerHTML
checkSum += turnId[id].id * count
hp += turnId[id].hp * count
}
if (checkSum > 0 && hp > 0) {
// tr[i].querySelector("td").innerHTML += "<div style = 'margin-left:10px'><a href = 'https://daily.heroeswm.ru/leader/bandits.php?hp=" + hp + "&sum=" + checkSum + "'>Поиск боя на Daily</a></div>";
}
}
}
if ((location.pathname.indexOf('war.php') >= 0 || location.pathname.indexOf('warlog.php') >= 0) && location.href.indexOf('show_enemy') == -1) {
var timerIdn = setInterval(check, 100)
}
function check() {
if (document.getElementById('play_button').style.display == 'none') {
unsafeWindow.gpause = false
}
if (
typeof unsafeWindow.stage !== 'undefined' &&
typeof unsafeWindow.stage.pole !== 'undefined' &&
typeof unsafeWindow.stage.pole.onMouseMoveFlash === 'function'
) {
clearInterval(timerIdn)
if (typeof unsafeWindow.setshadAbs !== 'undefined') {
return 0
}
unsafeWindow.spell_type = {
raisedead: '1',
magicfist: '1',
lighting: '2',
magicarrow: '2',
slow: '4',
fast: '3',
swarm: '1',
curse: '4',
bless: '3',
stoneskin: '3',
stonespikes: '2',
poison: '4',
mfast: '3',
mbless: '3',
mstoneskin: '3',
dispel: '3',
dray: '4',
icebolt: '2',
fireball: '2',
mdispel: '3',
righteous_might: '3',
deflect_missile: '3',
suffering: '4',
confusion: '4',
circle_of_winter: '2',
phantom_forces: '1',
mslow: '4',
mcurse: '4',
mpoison: '4',
mdray: '4',
msuffering: '4',
mconfusion: '4',
mrighteous_might: '3',
mdeflect_missile: '3',
armageddon: '2',
blind: '4',
frenzy: '4',
teleport: '3',
meteor: '2',
chainlighting: '2',
summonel: '1',
antimagic: '3',
firewall: '1',
earthquake: '1',
summonphoenix: '1',
arcanearmor: '1',
resurrection2: '3',
divinevengeance: '3',
divinev: '3',
summonel_f: '1',
summonel_a: '1',
summonel_w: '1',
summonel_e: '1',
}
unsafeWindow.magicbookspells_new = []
for (let i = 0; i <= 4; i++) {
for (let j in magicbookspells) {
let type = 0
if (spell_type[magicbookspells[j]]) {
type = spell_type[magicbookspells[j]]
}
if (type == i) {
magicbookspells_new.push(magicbookspells[j])
}
}
}
stage.pole.showmagicbook = function (page, iszak, check_spell) {
let actMiniSpells = hwm_set['miniSpells']
spell_per_page = actMiniSpells ? 16 : 6
var cm = magicbookspells_new.length
let count = 0
for (i = 0; i < cm; i++) {
if (hwm_set['spellsOrder']) {
s = magicbookspells_new[i]
} else {
s = magicbookspells[i]
}
if (this.obj[activeobj][s] == 1 || (s == 'gating' && magic[activeobj]['dem'] && magic[activeobj]['dem']['effect'] == 1)) {
if (s == 'gating' && this.obj[activeobj].alreadysummon) {
continue
}
if (s == 'firstblood') {
continue
}
if (s == 'explosion' && this.obj[activeobj].nowmanna == 0) {
continue
}
if (s == 'teleport' && this.obj[activeobj].demonic) {
continue
}
if (s == 'summonpitlords' && magic[activeobj]['pit']) {
continue
}
if (s == 'invisibility' && magic[activeobj]['2in'] && magic[activeobj]['2in']['effect'] == 1) {
continue
}
if (s == 'seduction' && magic[activeobj]['usd']) {
continue
}
if (s == 'manafeed' && this.obj[activeobj].nowmanna == 0) {
continue
}
count++
}
if (
this.obj[activeobj].darkpower &&
this.obj[activeobj][s] == 1 &&
magicbookchaos[magicbookspells.indexOf(s)] &&
k >= page &&
k < page + spell_per_page
) {
count++
}
if (this.check_mass_day_or_night(activeobj, s)) {
if (k >= page && k < page + spell_per_page) {
var scut = s.substr(1)
count++
}
}
}
actMiniSpells = count > 6 ? actMiniSpells : 0
if (!android) {
spell_per_page = actMiniSpells ? 16 : 6
} else {
spell_per_page = 4
}
var k = 0,
j = 0,
s = '',
so = '',
book_txt = '',
was_spell = 0
lastpage = page
if (iszak != 1) zakarrow = false
function proccedinbook(so, powered, showed_cnt) {
if (so == 'zakarrow' && (zakarrow == true || (magic[activeobj]['za2'] && magic[activeobj]['za2']['effect'] > 0))) return 0
j = k % spell_per_page
var cost = stage[war_scr].obj[activeobj][s + 'cost']
if (powered) {
cost *= 2
}
kz = 1
var kz2 = 1
if (isperk(activeobj, 110) && stage[war_scr].obj[activeobj].hero) {
kz *= 0.8
}
if (isperk(activeobj, 87) && !stage[war_scr].obj[activeobj].hero) {
kz = 0.5
}
if (isperk(activeobj, 111) && stage[war_scr].obj[activeobj].hero) {
kz *= 0.8
}
if (magic[activeobj]['dnn']) {
var sp_bonus = 1.03 + umelka[stage[war_scr].obj[activeobj]['owner']][10] * 0.03
if (is_day_or_night(activeobj, s)) {
kz2 /= sp_bonus
}
}
cost = Math.round(cost * kz)
cost = Math.round(cost * eco * kz2)
if (s == 'manafeed') {
cost = Math.min(stage[war_scr].obj[activeobj].nowmanna, stage[war_scr].obj[activeobj].nownumber)
}
if (s == 'explosion') {
cost = ''
}
if (s == 'invisibility') {
cost = ''
}
if (s == 'channeling') {
cost = ''
}
if (s == 'siphonmana') {
cost = ''
}
if (s == 'leap') {
cost = ''
}
if (s == 'leap6') {
cost = ''
}
if (s == 'sacrificegoblin') {
cost = ''
}
if (s == 'gating') {
cost = ''
}
if (s == 'summonpitlords') {
cost = ''
}
if (s == 'seduction') {
cost = ''
}
if (s == 'teleportother') {
cost = ''
}
if (s == 'consumecorpse' || s == 'benediction') {
cost = ''
}
if (cost > stage[war_scr].obj[activeobj].nowmanna || (cost == 0 && s == 'manafeed')) {
var disabled = true
} else {
var disabled = false
was_spell = 1
}
if (check_spell) {
return 0
}
var s_name = ''
if (magicbooknames[magicbookspells.indexOf(s)].includes('Mass ')) {
s_name += 'Mass'
}
if (magicbooknames[magicbookspells.indexOf(s)].includes('Массов')) {
s_name += 'Массовое'
}
var nametxt = magicbooknames[magicbookspells.indexOf(s)]
if (powered || is_day_or_night(activeobj, s)) {
switch (lang) {
case 0:
nametxt += ' (усиленное)'
s_name += ' Усиленное'
break
case 1:
nametxt += ' (empowered)'
s_name += '(emp)'
break
}
}
if (s == 'angerofhorde') {
eff = 0
var len = stage[war_scr].obj_array.length
for (var k1 = 0; k1 < len; k1++) {
var k = stage[war_scr].obj_array[k1]
if (
stage[war_scr].obj[k]['owner'] == stage[war_scr].obj[activeobj]['owner'] &&
!stage[war_scr].obj[k]['hero'] &&
!stage[war_scr].obj[k]['warmachine']
) {
eff += stage[war_scr].obj[k]['nownumber']
}
}
stage[war_scr].obj[activeobj][s + 'effmain'] = eff
}
if (stage[war_scr].obj[activeobj][s + 'effmain'] > 0) {
if (stage[war_scr].obj[activeobj].hero) {
var s1 = 0
if (isperk(activeobj, 93) && (s == 'magicfist' || s == 'raisedead')) {
s1 = 4
}
if (isperk(activeobj, 78) && (s == 'poison' || s == 'mpoison')) {
s1 += 5
}
if (isperk(activeobj, 89) && (s == 'poison' || s == 'mpoison')) {
s1 += 3
}
eff =
stage[war_scr].obj[activeobj][s + 'effmain'] + stage[war_scr].obj[activeobj][s + 'effmult'] * (stage[war_scr].getspellpower(activeobj, s) + s1)
if (stage[war_scr].obj[activeobj][s + 'effmult'] == 1.5) {
eff = Math.round(eff)
}
var teff = eff
if (powered) {
eff = Math.round(eff * 1.5)
}
} else {
eff = Math.round(
stage[war_scr].obj[activeobj][s + 'effmain'] +
stage[war_scr].obj[activeobj][s + 'effmult'] * Math.pow(stage[war_scr].obj[activeobj]['nownumber'], 0.7)
)
if (s == 'blind') {
eff = Math.round(
stage[war_scr].obj[activeobj][s + 'effmain'] + stage[war_scr].obj[activeobj][s + 'effmult'] * stage[war_scr].obj[activeobj]['nownumber']
)
}
var teff = eff
}
if (!powered) stage[war_scr].obj[activeobj][s + '_magiceff'] = eff
if (stage[war_scr].obj[activeobj][s + 'time'] > 0 && stage[war_scr].obj[activeobj][s + 'effmain'] > 15 && s != 'antimagic') {
eff = stage[war_scr].obj[activeobj][s + 'effmain'] + '%'
}
if (s.substr(0, s.length - 1) == 'summoncreature') {
if (magic[activeobj]['suc']) {
eff = Math.floor(eff * Math.pow(0.9, magic[activeobj]['suc']['effect']))
}
}
efftxt = eff
} else {
efftxt = ''
if (s == 'explosion') {
eff = Math.round(9 + 9 * Math.pow(stage[war_scr].obj[activeobj]['nownumber'], 0.7))
efftxt = eff
}
if (s == 'channeling') {
eff = Math.max(1, Math.floor(stage[war_scr].obj[activeobj]['nownumber'] * 0.5))
efftxt = eff
}
}
if (stage[war_scr].obj[activeobj][s + 'time'] > 0) {
if (stage[war_scr].obj[activeobj].hero || magic[activeobj]['her']) {
eff = stage[war_scr].getspellpower(activeobj, s)
if (isperk(activeobj, 89)) {
eff += 3
}
if (isperk(activeobj, 78) && checkdark(s)) {
eff += 5
}
} else {
eff = stage[war_scr].obj[activeobj]['nownumber']
if (magic[activeobj]['bhr']) {
eff = Math.max(eff, Math.floor(stage[war_scr].obj[activeobj]['maxmanna'] / 5))
}
}
if (eff == 0) {
eff = 0.5
}
durationtxt = eff
} else {
durationtxt = ''
}
var add_desktop = ''
if (!android) add_desktop = '_Desktop'
book_txt +=
'<div' +
(actMiniSpells ? '' : " title = '" + nametxt + "'") +
' class="book_skill_block' +
add_desktop +
'" id="spell_block' +
showed_cnt +
'" style="background-image:url(' +
stage[war_scr].subpath +
'combat/magicbook/' +
so +
'.png?v=' +
image_ver +
');'
if (disabled == false) {
book_txt += '"><div class="spell_btn' + add_desktop + '" id="spell' + showed_cnt + '" attr_disabled="0" style="cursor: pointer;" '
} else {
book_txt += 'opacity: 0.3;"><div attr_disabled="1" style="cursor: auto;"'
}
spell_id[showed_cnt] = so
spell_powered[showed_cnt] = powered
let style = actMiniSpells ? 'font-size: 0.8rem;line-height: 1;' : ''
book_txt +=
'></div><div class="book_skill_block_container"><div class="book_skill_block_amounts book_skill_block_name" style = "' +
style +
'">' +
(actMiniSpells ? s_name : nametxt) +
'</div>'
if (cost != '') book_txt += '<div class="book_skill_block_amounts book_skill_block_effects">' + cost + '</div>'
if (efftxt != '') book_txt += '<div class="book_skill_block_amounts book_skill_block_cost">' + efftxt + '</div>'
if (durationtxt != '') book_txt += '<div class="book_skill_block_amounts book_skill_block_durt">' + durationtxt + '</div>'
book_txt += '</div></div>'
}
page = page * spell_per_page
var eco = 1
if (this.obj[activeobj]['hero']) {
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (this.obj[i]['energychannel'] && this.obj[i]['nownumber'] > 0 && this.obj[i]['owner'] == this.obj[activeobj]['owner']) {
eco = 0.75
}
}
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (this.obj[i]['manaeater'] && this.obj[i]['nownumber'] > 0 && this.obj[i]['side'] != this.obj[activeobj]['side']) {
eco = 1.3
}
}
} else {
var len = this.obj_array.length
var max = 0
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (this.obj[i]['manacurser'] && this.obj[i]['nownumber'] > 0 && this.obj[i]['side'] != this.obj[activeobj]['side']) {
max = Math.max(max, this.obj[i]['nownumber'])
}
}
max = Math.min(40, max)
eco *= 1 + max / 100
}
var cm = magicbookspells_new.length
for (zz = 0; zz <= 1; zz++) {
var showed_cnt = 0
k = 0
for (i = 0; i < cm; i++) {
if (hwm_set['spellsOrder']) {
s = magicbookspells_new[i]
} else {
s = magicbookspells[i]
}
if (
(this.obj[activeobj][s] == 1 || (s == 'gating' && magic[activeobj]['dem'] && magic[activeobj]['dem']['effect'] == 1)) &&
((k >= page && k < page + spell_per_page) || check_spell)
) {
if (s == 'gating' && this.obj[activeobj].alreadysummon) {
continue
}
if (s == 'firstblood') {
continue
}
if (s == 'explosion' && this.obj[activeobj].nowmanna == 0) {
continue
}
if (s == 'teleport' && this.obj[activeobj].demonic) {
continue
}
if (s == 'summonpitlords' && magic[activeobj]['pit']) {
continue
}
if (s == 'invisibility' && magic[activeobj]['2in'] && magic[activeobj]['2in']['effect'] == 1) {
continue
}
if (s == 'seduction' && magic[activeobj]['usd']) {
continue
}
if (s == 'manafeed' && this.obj[activeobj].nowmanna == 0) {
continue
}
showed_cnt++
proccedinbook(s, 0, showed_cnt)
}
if (this.obj[activeobj][s] == 1 || (s == 'gating' && magic[activeobj]['dem'] && magic[activeobj]['dem']['effect'] == 1)) {
k++
}
if (
this.obj[activeobj].darkpower &&
this.obj[activeobj][s] == 1 &&
magicbookchaos[magicbookspells.indexOf(s)] &&
k >= page &&
k < page + spell_per_page
) {
showed_cnt++
proccedinbook(s, 1, showed_cnt)
}
if (this.obj[activeobj].darkpower && this.obj[activeobj][s] == 1 && magicbookchaos[magicbookspells.indexOf(s)]) {
k++
}
if (this.check_mass_day_or_night(activeobj, s)) {
if (k >= page && k < page + spell_per_page) {
var scut = s.substr(1)
showed_cnt++
this.obj[activeobj][s + 'cost'] = this.obj[activeobj][scut + 'cost'] * 2
this.obj[activeobj][s + 'effmain'] = this.obj[activeobj][scut + 'effmain']
this.obj[activeobj][s + 'effmult'] = this.obj[activeobj][scut + 'effmult']
this.obj[activeobj][s + 'time'] = this.obj[activeobj][scut + 'time']
proccedinbook(s, 0, showed_cnt)
}
k++
}
}
if (k > page || k == 0) break
else {
page = 0
bookpage = 0
}
}
if (check_spell) {
return was_spell
}
if (actMiniSpells) {
book_txt +=
'<style>.book_skill_block_amounts {font-weight:bold;}.book_skill_block_Desktop{width:25% !important;height: 17vh !important;} .book_skills_container_Desktop{margin-left: 5%;margin-right: 5%;}</style>'
}
document.getElementById('magic_book_page').innerHTML = book_txt
document.getElementById('book_mana').innerHTML = '<div>' + this.obj[activeobj].nowmanna + ' / ' + this.obj[activeobj].maxmanna + '</div>'
for (i = 1; i <= spell_per_page; i++) {
if (document.getElementById('spell' + i)) {
if (magic_book_hints) {
var disabled = tointeger(document.getElementById('spell' + i).getAttribute('attr_disabled'))
if (disabled != 1) {
show_div_arrow(
'spell_block' + i,
'',
'position: absolute; left: calc(50% - 25px); top: 90%; width: 50px; height: 50px; pointer-events: none; display: block; transform: rotate(270deg);'
)
} else {
hide_div_arrow('spell_block' + i)
}
}
document.getElementById('spell' + i).addEventListener('mouseup', spell_button_release.bind(null, i))
}
}
}
//
unsafeWindow.hwm_set = {
miniSpells: false,
atbStartDisplay: false,
spellsOrder: false,
}
for (i in hwm_set) {
hwm_set[i] = localStorage.getItem(i)
if (hwm_set[i] === null || hwm_set[i] === undefined || hwm_set[i] === '1' || hwm_set[i] === '0' || hwm_set[i] === 1 || hwm_set[i] === 0) {
hwm_set[i] = false
}
}
unsafeWindow.checkTrue = function (name) {
return hwm_set[name] === true || hwm_set[name] === 'true'
}
unsafeWindow.setAtbStyle = function () {
let elems = document.getElementsByClassName('atb-info')
for (let i = 0; i < elems.length; i++) {
elems[i].style.display = checkTrue('atbStartDisplay') ? 'block' : 'none'
}
}
setAtbStyle()
unsafeWindow.checkSet = function (name) {
document.getElementById(name + '_checkbox').checked = checkTrue(name) ? true : false
localStorage.setItem(name, checkTrue(name) ? false : true)
hwm_set[name] = checkTrue(name) ? false : true
if (name == 'atbStartDisplay') {
setAtbStyle()
}
}
unsafeWindow.chatMode = function () {
return chat.className.substring(chat.className.length - 1)
}
let divs = [],
divc = [],
divt = []
let backgroundColors = ['', '#991515', '#4b66ff', '#25C953', '#BD8500', '#B000FF', '#005C13']
for (let i = btype == 145 ? 6 : 2; i >= 1; i--) {
divs[i] = document.createElement('div')
divs[i].setAttribute('id', 'hp' + i)
divs[i].classList.add('hp')
divc[i] = document.createElement('div')
divc[i].style.backgroundColor = backgroundColors[i]
divc[i].setAttribute('id', 'hp' + i + 'c')
divc[i].classList.add('hpc')
divt[i] = document.createElement('div')
divt[i].setAttribute('id', 'hp' + i + 't')
divt[i].classList.add('hpt')
if (i > 1) {
divs[i].style.marginTop = '3px'
}
document.querySelector('#chat_format').prepend(divs[i])
divs[i].prepend(divc[i])
divs[i].prepend(divt[i])
}
div = document.createElement('div')
div.innerHTML =
"<div class='info_row' id='atb-start-bonus' onmouseup = 'checkSet(\"atbStartDisplay\")'><label class='checkbox_container'>Стартовый бонус АТБ<input type='checkbox'" +
(checkTrue('atbStartDisplay') ? ' checked ' : '') +
"id='atbStartDisplay_checkbox'><span class='checkbox_checkmark'></span></label></div><br>"
document.getElementById('win_Settings').getElementsByTagName('form')[0].querySelector('#webgl_settings_whole').after(div)
global_init = 0
unsafeWindow.firsTurnShow = tointeger(command.substr(1, command.indexOf(':') - 1)) <= 1 ? true : false
unsafeWindow.btime = false
unsafeWindow.fireInfo = false
unsafeWindow.skillProbability = ''
unsafeWindow.luckProbability = 0
unsafeWindow.curAbil = ''
unsafeWindow.last_line3 = ''
unsafeWindow.phm = {}
unsafeWindow.psc = {}
unsafeWindow.psa = {}
unsafeWindow.sHP = [0, 0]
unsafeWindow.nHP = [0, 0]
//unsafeWindow.gate = {};
unsafeWindow.lastChain = 0
unsafeWindow.damageTable = ''
unsafeWindow.damage = [[], []]
unsafeWindow.targetMagicdamage = 0
unsafeWindow.targetMagickills = 0
unsafeWindow.test_temp = 0
unsafeWindow.addSpeedLastTurn = 0
unsafeWindow.addIniLastTurn = 0
unsafeWindow.lastRaidsCount = 0
unsafeWindow.raidsCurrentWave = 0
damageTableStyle = document.createElement('style')
damageTableStyle.innerHTML =
'#win_BattleResult{max-height:90%} #damageTable td {vertical-align: baseline; font-size:90%} #damageTable {max-height: 30vh;overflow: auto;}'
damageTableStyle.innerHTML +=
'#test table {width:100%;margin-left:3px;} #test {padding-left:5px;font-weight:bold;height:100%;width:100%;position: absolute;top:0;right: 0;background: #151313;font-size: 0.9em;z-index:101;}'
damageTableStyle.innerHTML +=
'#effectsDisplay:hover{filter: brightness(1500%) drop-shadow(0 0 10px #fff);} #effectsDisplay {display: inline-block;float: right;height: 26px;cursor: pointer;line-height: 26px;color:#979797;font-size:12px}'
damageTableStyle.innerHTML +=
'#dop-info img {filter: drop-shadow(#000 0px 0px 0.1em);margin-left:-2px;vertical-align: baseline;} #dop-info {position:absolute;font-family: Arial;position: absolute;text-align: right;text-shadow: -0 -0.03em 0.03em #000, 0 -0.03em 0.03em #000,-0 0.03em 0.03em #000, 0 0.03em 0.03em #000,-0.03em -0 0.03em #000, 0.03em -0 0.03em #000,-0.03em 0 0.03em #000, 0.03em 0 0.03em #000,-0.03em -0.03em 0.03em #000, 0.03em -0.03em 0.03em #000,-0.03em 0.03em 0.03em #000, 0.03em 0.03em 0.03em #000,-0.03em -0.03em 0.03em #000, 0.03em -0.03em 0.03em #000,-0.03em 0.03em 0.03em #000, 0.03em 0.03em 0.03em #000;color: #fff;font-size:130%}'
damageTableStyle.innerHTML += '.hp {width:100%; height:15px; border: 1px solid #fff; border-radius: 5px; color:#fff; position:relative;}'
damageTableStyle.innerHTML +=
'.hpt {width:100%; height:100%; text-align:center; line-height:15px; font-size:13px; font-weight:bold; color:#fff; position:absolute; z-index:1;}'
damageTableStyle.innerHTML += '.hpc {width:100%; height:100%; border-radius: 5px; position:absolute;}'
document.head.appendChild(damageTableStyle)
effectsDisplay = document.createElement('div')
effectsDisplay.setAttribute('id', 'effectsDisplay')
effectsDisplay.innerHTML = 'Эффекты'
effectsDisplay.setAttribute('title', 'Отображать в окне чата бафы и дебафы существ при наведении курсора')
effectsDisplay.setAttribute('onclick', 'setEffectDisplay()')
document.getElementById('chat_panelPosition_btn1').before(effectsDisplay)
dopInfoPanel = document.createElement('div')
dopInfoPanel.setAttribute('id', 'dop-info')
unsafeWindow.lastFire = 0
document.getElementById('timer').after(dopInfoPanel)
unsafeWindow.testBlock = function (i = 0, firewall = false) {
if (chatMode() == 'V') {
return 0
}
let div = document.getElementById('test')
if (firewall == true && i != lastFire && i > 0) {
div.style.height = '100%'
div.innerHTML = '<center>Огнестенка ' + i + ' ход.</center>'
lastFire = i
fireInfo = true
} else if (firewall == false) {
fireInfo = false
if (i == 0 || stage.pole.showmagicinfo(i, 1).indexOf('Эффекты отсутствуют') != -1) {
div.innerHTML = ''
div.style.height = '0'
lastFire = 0
return 0
}
div.style.height = '100%'
if (lastFire == 0) {
div.innerHTML = ''
}
div.innerHTML += '<center>' + stage.pole.get_name_html(i) + '</center>'
let str = stage.pole.showmagicinfo(i, 1)
div.innerHTML += str
}
}
unsafeWindow.updateBar = function (ch = 2) {
sHP = [0, 0, 0, 0, 0, 0]
nHP = [0, 0, 0, 0, 0, 0]
for (k in stage.pole.obj) {
let ow = ch == 2 ? (stage.pole.obj[k].owner % 2) * -1 + 1 : +stage.pole.obj[k].owner - 1
if (stage.pole.obj[k].hero != undefined || stage.pole.obj[k].warmachine != undefined || stage.pole.obj[k].building != undefined) continue
sHP[ow] += stage.pole.obj[k].maxnumber * stage.pole.obj[k].maxhealth
nHP[ow] += Math.max(stage.pole.obj[k].nownumber - 1, 0) * stage.pole.obj[k].maxhealth + stage.pole.obj[k].nowhealth
}
for (let i = 1; i <= ch; i++) {
let percentage = (nHP[i - 1] / sHP[i - 1]) * 100
document.getElementById('hp' + i + 't').innerHTML = `${nHP[i - 1]}/${sHP[i - 1]} (${percentage.toFixed(2)}%)`
document.getElementById('hp' + i + 'c').style.width = `${percentage.toFixed(2)}%`
}
}
unsafeWindow.infoBlock = function (i = 0) {
let div = document.getElementById('dop-info')
if (i == 0) {
div.innerHTML = ''
return 0
}
let str = ''
let h = Math.round((atb_scaling * atb_height * stage.pole.scaling * (1 / MainPixelRatio)) / 3)
if (stage.pole.luckMoraleProbability(i, 'morale') > 0) {
str +=
"<div style = 'line-height:" +
(h - 2) +
'px;height:' +
h +
"px;'><img align='absmiddle' height = '" +
(h - 4) +
"px' src = 'https://dcdn.heroeswm.ru/i/icons/attr_morale.png'> " +
stage.pole.luckMoralePerc(i, 'morale') +
'</div>'
}
if (stage.pole.luckMoraleProbability(i, 'luck') > 0) {
str +=
"<div style = 'line-height:" +
(h - 2) +
'px;height:' +
h +
"px;'><img align='absmiddle' height = '" +
(h - 4) +
"px' src = 'https://dcdn.heroeswm.ru/i/icons/attr_fortune.png'> " +
stage.pole.luckMoralePerc(i, 'luck') +
'</div>'
}
if (str != '' && time > 0) {
str += '<style>#timer {opacity:0.3}</style>'
}
div.innerHTML = str
}
let damageTableDisplay = localStorage.getItem('damage-table-display')
if (damageTableDisplay === null || damageTableDisplay === undefined) {
damageTableDisplay = 'table'
}
let spanHTML = damageTableDisplay == 'table' ? '(скрыть)' : '(показать)'
let effectDisplay = localStorage.getItem('effect-display')
if (effectDisplay === null || effectDisplay === undefined) {
effectDisplay = 'block'
}
div = document.createElement('div')
div.setAttribute('id', 'test')
div.style.height = '0'
div.style.display = effectDisplay
document.getElementById('effectsDisplay').style.textDecoration = effectDisplay == 'none' ? 'line-through' : 'none'
document.getElementById('chat_format').prepend(div)
unsafeWindow.setEffectDisplay = function () {
effectDisplay = effectDisplay == 'none' ? 'block' : 'none'
localStorage.setItem('effect-display', effectDisplay)
document.getElementById('test').style.display = effectDisplay
document.getElementById('effectsDisplay').style.textDecoration = effectDisplay == 'none' ? 'line-through' : 'none'
}
unsafeWindow.setDamageTableDisplay = function () {
damageTableDisplay = damageTableDisplay == 'table' ? 'none' : 'table'
localStorage.setItem('damage-table-display', damageTableDisplay)
document.getElementById('win_BattleResult').querySelector('table').style.display = damageTableDisplay
spanHTML = damageTableDisplay == 'table' ? '(скрыть)' : '(показать)'
updateDamageData()
}
unsafeWindow.updateDamageData = function () {
if (damageTable == '') {
damageTable = document.createElement('div')
damageTable.setAttribute('id', 'damageTable')
document.getElementById('win_BattleResult').querySelector('#btn_watch_WatchBattle').before(damageTable)
}
let txt =
"<B>Нанесённый урон</B> <span onclick = 'setDamageTableDisplay()' title 'скрыть/показать' style = 'font-size:80%;cursor:pointer'>" +
spanHTML +
"</span><table width = 100% style = 'display:" +
damageTableDisplay +
"'><tbody><tr>"
for (let i = 0; i < 2; i++) {
if (damage[i].length == 0) {
continue
}
txt += '<td width = 50%><table width = 95%><tbody>'
damage[i].sort((a, b) => (a.s < b.s ? 1 : -1))
for (let j = 0; j < damage[i].length; j++) {
txt += '<tr><td align = left>' + stage.pole.html('name', damage[i][j]['id']) + '</td><td align = right>' + damage[i][j]['s'] + '</td></tr>'
}
txt += '</tbody></table></td>'
}
txt += '</tr></tbody></table>'
document.getElementById('damageTable').innerHTML = txt
}
stage.pole.procceddamage = unsafeWindow.procceddamage = function (i) {
realDamage = Math.min(this.obj[i].damage, (this.obj[i].nownumber - 1) * this.obj[i].maxhealth + this.obj[i].nowhealth)
if (this.obj[this.obj[i].damaged] !== undefined || this.obj[i].damaged == -2 || this.obj[i].damaged == -1 || this.obj[i].damaged == -9) {
let id = 0
if (this.obj[i].damaged == -9 && psa[i] !== 'undefined') {
// id = psa[i];
} else if (this.obj[i].damaged == -1 && psc[i] !== 'undefined') {
id = psc[i]
} else if (this.obj[i].damaged == -2) {
let x = tointeger(tmp.substr(6, 2))
let y = tointeger(tmp.substr(8, 2))
id = Math.floor(firewalls[x + y * defxn] / 100)
} else {
id = this.obj[i].damaged
}
if (id > 0 && this.obj[id] && this.obj[id].owner) {
let owner = this.obj[id].owner
let side = (this.obj[id].owner % 2) * -1 + 1
let name = this.obj[id].nametxt
let f = false
for (let j = 0; j < damage[side].length; j++) {
if (damage[side][j]['name'] == name && damage[side][j]['owner'] == owner) {
f = true
damage[side][j]['s'] += realDamage
}
}
if (f == false) {
let o = {
id: id,
s: realDamage,
name: name,
owner: owner,
}
damage[side].push(o)
}
updateDamageData()
}
}
if (this.obj[this.obj[i].damaged] !== undefined) {
if (this.obj[this.obj[i].damaged].separhsum === null || this.obj[this.obj[i].damaged].separhsum === undefined) {
this.obj[this.obj[i].damaged].separhsum = 0
}
let s = 0
if (realDamage >= this.obj[i].nowhealth) {
s += this.obj[i].level
if (realDamage - this.obj[i].nowhealth > 0) {
s *= Math.floor((realDamage - this.obj[i].nowhealth) / this.obj[i].maxhealth) + 1
}
this.obj[this.obj[i].damaged].separhsum += s
}
if (stage.pole.obj[this.obj[i].damaged]['hitcount'] === undefined) {
stage.pole.obj[this.obj[i].damaged]['hitcount'] = 0
stage.pole.obj[this.obj[i].damaged]['luckcount'] = 0
}
if (this['nowhit'] != this.obj[i].damaged && !this.obj[i].magicdamage) {
let curName = curAbil.substr(0, 3)
if (
curAbil == '' ||
parseInt(curAbil.substr(3, 3)) != this.obj[i].damaged ||
(curName != 'stb' &&
curName != 'htc' &&
curName != 'blh' &&
curName != 'dwl' &&
curName != 'ltn' &&
curName != 'clt' &&
curName != 'lep' &&
curName != 'spk' &&
curName != 'bdd' &&
curName != 'rs2' &&
curName != 'ooc' &&
curName != 'fls')
) {
if (magic[this.obj[i].damaged] && magic[this.obj[i].damaged]['hyp'] && magic[this.obj[i].damaged]['hyp']['nowinit'] > 0) {
} else {
this.obj[this.obj[i].damaged]['hitcount'] += 1
}
this['nowhit'] = this.obj[i].damaged
}
curAbil = ''
}
}
curshowmagic = ''
if (this.obj[i].damaged > 0) {
this.obj[this.obj[i].damaged].att = true
}
if (this.obj[i].damage != 0 || !this.obj[i].runaway) {
this.obj[i].donow = 'b'
if (this.obj[i].incorporeal) {
if (this.obj[i].magicdamage && this.obj[i].magicdamage != 'Магический кулак') {
this.obj[i].misscount = 0
} else {
if (this.obj[i].damage == 0) {
if (this.obj[i].misscount === undefined || this.obj[i].misscount == 0) {
this.obj[i].misscount = -1
} else {
if (this.obj[i].misscount == -1) {
this.obj[i].misscount = -2
} else {
this.obj[i].misscount = -1
}
}
} else {
if (this.obj[i].misscount === undefined || this.obj[i].misscount == 0) {
this.obj[i].misscount = 1
} else {
if (this.obj[i].misscount == 1) {
this.obj[i].misscount = 2
} else {
this.obj[i].misscount = 1
}
}
}
}
}
if (this.obj[i].damage == 0 && magic[i]['phm']) {
this.obj[i].donow = ''
} else {
if (this.obj[i].damaged > 0) {
this.obj[i].destx = this.obj[this.obj[i].damaged].x
}
if (this.obj[i].damaged > 0) {
this.obj[i].desty = this.obj[this.obj[i].damaged].y
}
this.obj[i].active = true
someactive = true
}
}
this.obj[i]['needSetNumber'] = 0
this.calcdamage(i)
}
stage.pole.process_luck = unsafeWindow.process_luck = function (current) {
var lucky = command.substring(4, command.indexOf('^'))
playsound(current, lucky, 70)
if (lucky == 'badmorale') {
switch (lang) {
case 0:
htmllog += '' + this.html('name', current) + ' ожидают в страхе' + this.html('end')
break
case 1:
htmllog += '' + this.html('name', current) + ' freeze in fear.' + this.html('end')
break
}
showtext()
showdefwait(current, 'unmorale')
}
if (lucky == 'morale') {
this.incrementParam(current, 'moraleCount')
switch (lang) {
case 0:
htmllog += '' + this.html('name', current) + ' рвутся в бой!' + this.html('end')
break
case 1:
htmllog += '' + this.html('name', current) + ' are bursting for more action!' + this.html('end')
break
}
showtext()
showdefwait(current, 'morale')
}
if (lucky == 'luck') {
if (stage.pole.obj[current]['hitcount'] === undefined) {
stage.pole.obj[current]['hitcount'] = 0
stage.pole.obj[current]['luckcount'] = 0
}
stage.pole.obj[current]['luckcount'] += 1
switch (lang) {
case 0:
htmllog += '' + this.html('name', current) + ' посетила удача!' + this.html('end')
break
case 1:
htmllog += 'Luck befalls ' + this.html('name', current) + '!' + this.html('end')
break
}
showtext()
showdefwait(current, 'luck')
}
if (lucky == 'unluck') {
switch (lang) {
case 0:
htmllog += '' + this.html('name', current) + ' посетила неудача.' + this.html('end')
break
case 1:
htmllog += 'Bad luck befalls ' + this.html('name', current) + '.' + this.html('end')
break
}
showtext()
showdefwait(current, 'unluck')
}
if (lucky == 'critical') {
switch (lang) {
case 0:
htmllog += '' + this.html('name', current) + ' - критический удар по заклятому врагу.' + this.html('end')
break
case 1:
htmllog += '' + this.html('name', current) + ' deal critical damage to favoured enemy.' + this.html('end')
break
}
showtext()
showdefwait(current, 'crit')
}
if (lucky == 'drunk') {
switch (lang) {
case 0:
htmllog += '' + this.html('name', current) + ' - самоуправство.' + this.html('end')
break
case 1:
htmllog += '' + this.html('name', current) + ' - independence.' + this.html('end')
break
}
showtext()
showdefwait(current, 'rage', 0)
}
command = command.substr(command.indexOf('^') + 1)
}
stage.pole.luckMoraleProbability = function (i, name) {
let probability = 0
if (!firsTurnShow) {
return 0
}
let cre = stage.pole.obj[i]
if (cre === undefined) {
return 0
}
let allCount = ''
let yesCount = ''
let lastValue = ''
let luck = 0
if (name == 'morale') {
allCount = 'turnCount'
yesCount = 'moraleCount'
lastValue = 'lastMorale'
luck = stage.pole.getMoraleN(i)
} else if (name == 'luck') {
allCount = 'hitcount'
yesCount = 'luckcount'
lastValue = 'lastluck'
luck = cre['luck'] + cre['luckaddon']
}
if (cre[allCount] === undefined) {
cre[allCount] = 0
}
if (cre[yesCount] === undefined) {
cre[yesCount] = 0
}
if (cre['checkMrl'] !== undefined && cre['checkMrl'] == 1) {
if (magic[i]['mrl'] === 0) {
stage.pole.clearPar(i, 'morale')
cre['checkMrl'] = 0
}
}
if (cre[lastValue] !== undefined && luck != cre[lastValue]) {
stage.pole.clearPar(i, name)
}
cre[lastValue] = luck
luck = Math.max(0, Math.min(luck * 0.1, 0.5))
if (cre['hero'] != 1) {
probability = Math.min(Math.pow(luck, 1 + cre[yesCount] - ((cre[allCount] - cre[yesCount]) * luck) / (1 - luck)), 1)
}
if (probability >= 0.1) {
return probability.toFixed(2)
} else {
return probability.toFixed(3)
}
}
stage.pole.luckMoralePerc = function (i, name) {
let prob = this.luckMoraleProbability(i, name)
if (prob >= 0.1) {
return (prob * 100).toFixed(0) + '%'
} else {
return (prob * 100).toFixed(1) + '%'
}
}
stage.pole.snaresPossible = unsafeWindow.snaresPossible = function (attacker, defender) {
let n = Math.floor(attacker.nownumber / 25) - (defender.level + Math.floor((defender.nownumber * defender.maxhealth) / (80 + defender.level * 20)))
let possible = [25, 25, 25, 25]
let b = n
if (n > 0) {
for (let i = 3; i >= 1; i--) {
while (possible[i] > 5 && n > 0) {
possible[0] += 5
possible[i] -= 5
n -= 1
}
}
}
if (n < 0) {
for (let i = 0; i <= 2; i++) {
while (possible[i] > 5 && n < 0) {
possible[3] += 5
possible[i] -= 5
n += 1
}
}
}
return possible[0] + possible[1] + possible[2] + '%'
}
stage.pole.checkProbabilitySkill = unsafeWindow.checkProbabilitySkill = function (attacker, attackx, attacky, ax, ay, range = 0) {
unsafeWindow.skillProbability = ''
if (!this.obj[attacker] || !this.obj[attacker].hasOwnProperty('nownumber')) {
return false
}
var defender = mapobj[ax + ay * defxn]
if (!this.obj[defender] || !this.obj[defender].hasOwnProperty('nownumber')) {
return false
}
let hpa = (this.obj[attacker].nownumber - 1) * this.obj[attacker].maxhealth + this.obj[attacker].nowhealth
let hpd = (this.obj[defender].nownumber - 1) * this.obj[defender].maxhealth + this.obj[defender].nowhealth
let soldiersLuck = 0
if (heroes[this.obj[activeobj]['owner']] > 0) {
let h = heroes[this.obj[activeobj]['owner']]
if (isperk(activeobj, 33)) {
soldiersLuck = 1
}
}
if (
this.obj[attacker]['blinding_attack'] &&
this.obj[defender]['alive'] &&
!this.obj[defender]['warmachine'] &&
!this.obj[defender]['iblind'] &&
!this.obj[defender]['imind'] &&
!this.obj[defender]['twistedmind'] &&
!this.obj[defender]['absolutepurity'] &&
!this.obj[defender]['enchantedarmor']
) {
skillProbability = getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage))
if (skillProbability != getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage2))) {
skillProbability = skillProbability + '% - ' + getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage2))
}
}
if (
this.obj[attacker]['fearattack'] &&
this.obj[defender]['alive'] &&
!this.obj[defender]['imind'] &&
!this.obj[defender]['twistedmind'] &&
!this.obj[defender]['absolutepurity']
) {
skillProbability = getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage))
if (skillProbability != getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage2))) {
skillProbability = skillProbability + '% - ' + getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage2))
}
}
if (
this.obj[attacker]['flamewave'] ||
(this.obj[attacker]['shootbash'] && range == 1) ||
this.obj[attacker]['shieldbash'] ||
this.obj[attacker]['deathattack'] ||
(this.obj[attacker]['wardingarrows'] && !this.obj[defender]['warmachine'] && !this.obj[defender]['mechanical'])
) {
skillProbability = getSkillProbability(hpa, hpd)
}
if (this.obj[attacker]['torpor'] && this.obj[defender]['alive'] && !this.obj[defender]['warmachine'] && !this.obj[defender]['absolutepurity']) {
skillProbability = getSkillProbability(hpa, hpd)
}
if (this.obj[attacker]['pawstrike']) {
let len = wmap2[attacky * defxn + attackx]
let spd = Math.max(
0,
Math.round((this.obj[attacker].speed + this.obj[attacker]['ragespeed'] + this.obj[attacker]['speedaddon']) * this.obj[attacker].speedmodifier)
)
if (magic[attacker]['ent'] && magic[attacker]['ent']['nowinit'] > 0) {
spd = 0
}
if (this.obj[attacker].x == attackx && this.obj[attacker].y == attacky) {
len = spd
}
let movelen = spd - len
skillProbability = getSkillProbability(hpa, hpd, Math.floor(movelen))
}
if ((this.obj[attacker]['bindshot'] && range == 1) || (this.obj[attacker]['bindingstrike'] && range == 0)) {
skillProbability = getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage), 2)
if (skillProbability != getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage2), 2)) {
skillProbability = skillProbability + '% - ' + getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage2), 2)
}
}
if (
this.obj[attacker]['purge'] ||
this.obj[attacker]['cripplingwound'] ||
this.obj[attacker]['assault'] ||
(this.obj[attacker]['markoffire'] && range == 1) ||
(this.obj[attacker]['powerstrike'] && !this.obj[defender]['big']) ||
this.obj[attacker]['lighting_attack'] ||
(this.obj[attacker]['whipstrike'] && range == 0) ||
(this.obj[attacker]['forcearrow'] && range == 1) ||
(this.obj[attacker]['stoning'] && range == 0) ||
this.obj[attacker]['paralyzing'] ||
this.obj[attacker]['hexingattack']
) {
skillProbability = getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage))
if (skillProbability != getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage2))) {
skillProbability = skillProbability + '% - ' + getSkillProbability(hpa, Math.max(1, hpd - tPhysicalDamage2))
}
}
function getSkillProbability(hpa, hpd, attempt = 1) {
let skillProbability = 0
if (hpa > hpd) {
skillProbability = 25 + 3 * (hpa / hpd)
} else {
skillProbability = 25 - 3 * (hpd / hpa)
}
skillProbability = Math.min(75, Math.max(5, skillProbability))
skillProbability = Math.round((1 - Math.pow(1 - skillProbability / 100, attempt * (soldiersLuck + 1))) * 100)
return skillProbability
}
}
unsafeWindow.showuron = function (mag, effect = '') {
if (myuron.line3 === undefined) {
var ttext = Make_Text('', uron_data)
set_X(ttext, uron_data.x)
set_Y(ttext, uron_data.y + 69)
myuron.line3 = ttext
Make_addChild(myuron2, ttext)
option = {
offsetX: -razmetka['war_images'][24][mqc['sdx']],
offsetY: -razmetka['war_images'][24][mqc['sdy']] - (razmetka['war_images'][19][mqc['ys']] + razmetka['war_images'][24][mqc['y']]),
image: stage.pole.ground['war_images'],
width: razmetka['war_images'][24][mqc['xs']],
height: razmetka['war_images'][24][mqc['ys']],
crop: {
x: razmetka['war_images'][24][mqc['x']],
y: razmetka['war_images'][24][mqc['y']],
width: razmetka['war_images'][24][mqc['xs']],
height: razmetka['war_images'][24][mqc['ys']],
visible: 1,
},
listening: false,
}
var img_temp = My_Image(option)
img_temp.option = option
set_visible(img_temp, 1)
Make_addChild(myuron2, img_temp)
set_scaleX(img_temp, sub_scale * 0.4)
set_scaleY(img_temp, sub_scale * 0.4)
}
var line1 = 0
var line2 = 0
var line3 = stage.pole.luckMoraleProbability(activeobj, 'luck')
if (umelka[1][0] == undefined) {
return 0
}
if (effect != '') {
line1 = ''
line2 = effect
} else if (mag == 1) {
if (ctrldown && targetMagicdamage > 0) {
line2 = targetMagicdamage
line1 = targetMagickills
} else {
line2 = Totalmagicdamage
line1 = Totalmagickills
}
} else {
if (ctrldown) {
line1 = Uronkills
if (Uronkills != Uronkills2) line1 += ' - ' + Uronkills2
line2 = PhysicalDamage
if (PhysicalDamage != PhysicalDamage2) line2 += ' - ' + PhysicalDamage2
} else {
line1 = tUronkills
if (tUronkills != tUronkills2) {
line1 += ' - ' + tUronkills2
}
line2 = tPhysicalDamage
if (tPhysicalDamage != tPhysicalDamage2) {
line2 += ' - ' + tPhysicalDamage2
}
if (skillProbability != '') {
line2 += ' (' + skillProbability + '%)'
}
}
}
var scale = Math.max(min_uron_scale, stage[war_scr].scaling_ratio) * MainPixelRatio
set_scaleX(myuron2, scale)
set_scaleY(myuron2, scale)
if (last_line1 != line1 || last_line2 != line2 || last_line3 != line3) {
last_line1 = line1
last_line2 = line2
last_line3 = line3
set_cache(myuron, false)
set_text(myuron.line1, line1 + ' ')
set_text(myuron.line2, line2 + ' ')
luckProbability = stage.pole.luckMoraleProbability(activeobj, 'luck')
if (mag == 1 || luckProbability == 0 || magicuse == 'leap' || magicuse == 'leap6') {
myuron2.children[4].visible = 0
myuron.line3.visible = 0
} else {
myuron2.children[4].visible = 1
myuron.line3.visible = 1
set_text(myuron.line3, stage.pole.luckMoralePerc(activeobj, 'luck'))
}
set_visible(myuron, 1)
set_strokeThickness(myuron.line1, Math.round(uron_stroke_width * Math.min(1, scale)))
set_strokeThickness(myuron.line2, Math.round(uron_stroke_width * Math.min(1, scale)))
set_strokeThickness(myuron.line3, Math.round(uron_stroke_width * Math.min(1, scale)))
// myuron.cacheAsBitmap = true;
}
set_visible(myuron, 1)
// set_cache(myuron, true);
var sc = 1
var ratio = getDevicePixelRatio()
// if (android)
// {
var sc = stage[war_scr].scaling * ratio
// }
var rect = get_clientRect(myuron)
if (currentTip == 1) {
rect.width *= scale
rect.height *= scale
}
if (currentTip == 1 && (rect.x > 6000 || rect.width > 2000 || rect.height > 200)) {
rect.width = Math.min(300, Math.max(myuron.line1.width, myuron.line2.width) + 20) * stage[war_scr].scaling
rect.height = Math.min(100, myuron.line1.height * 2 + 5) * stage[war_scr].scaling
}
var gscaling = stage[war_scr].scaling
var xx2 = scr_xmouse
var max_x = original_width
if (android && stage_width > stage_height) {
max_x = original_width - pole_left - pole_right
}
if (xx2 + get_width(myuron) > max_x * gscaling) {
xx2 = max_x * gscaling - get_width(myuron)
}
var xx = xx2
var yy = scr_ymouse
if (!android) {
xx -= cursor_width * scale
yy += cursor_height * 1.5 * scale
} else {
xx -= cursor_width * scale
yy -= cursor_height * 4 * scale
if (yy < 3) yy = 3
}
if (yy + get_height(rect) * 1.2 > atby) {
yy = atby - get_height(rect) * 1.2
}
if (xx + get_width(rect) * 1.1 > stage_width) {
xx = stage_width - get_width(rect) * 1.1
}
set_X(myuron, Math.round(xx))
set_Y(myuron, Math.round(yy))
}
stage.pole.onMouseMoveFlash = unsafeWindow.onMouseMoveFlash = function (from_event, xmouse, ymouse, force, reset, lastcoords) {
attack_xr = 0
attack_yr = 0
targetMagicdamage = 0
targetMagickills = 0
if (buttons_visible['win_dialog']) return 0
if (buttons_visible['scroll_runes']) return 0
if (buttons_visible['magic_book']) return 0
if (buttons_visible['win_SeparateArmy']) return 0
if (buttons_visible['win_Mission']) return 0
if (buttons_visible['win_Settings']) return 0
if (total_delta > 20) return 0
if (typeof unsafeWindow.csword === 'undefined') return 0
shiftdown = false
ctrldown = false
if (!android) {
var isRightMB = false
var e = 0
if ((typeof event !== 'undefined' && event) || from_event) {
var e = from_event
if (typeof event !== 'undefined' && event) e = event
if (e.which) {
if (e.which == 2 || e.which == 3) {
isRightMB = 1
}
} else if (e.button) isRightMB = e.button >= 2
}
if (KeyisDown(16)) shiftdown = true
else shiftdown = false
if (KeyisDown(17) || isRightMB) ctrldown = true
else ctrldown = false
}
shiftdown = (shiftdown || shift_button) && shift_ok
ctrldown = ctrldown || info_button
if (activeobj > 0 && this.obj[activeobj]) {
if (this.obj[activeobj]['was_atb'] > 0) {
this.reset_temp_magic()
this.showatb()
this.obj[activeobj]['was_atb'] = 0
}
if (
magicuse != '' &&
this.obj[activeobj][magicuse + 'elem'] == 'air' &&
((this.obj[activeobj]['hero'] && isperk(activeobj, 100)) || this.obj[activeobj]['master_of_storms'])
) {
this.reset_temp_magic()
this.showatb()
}
if (
magicuse != '' &&
(magicuse == 'circle_of_winter' || magicuse == 'icebolt') &&
((this.obj[activeobj]['hero'] && isperk(activeobj, 99)) || this.obj[activeobj]['master_of_ice'])
) {
this.reset_temp_magic()
this.showatb()
}
}
movecounter++
var i = 0,
bigok = false,
len = 0,
xk = 0,
yk = 0,
range = 0,
xaa = 0,
yaa = 0,
x = 0,
y = 0,
xr = 0,
yr = 0,
a = 0,
ab = 0,
ac = 0,
xb = 0,
yb = 0,
res = 0,
ok = false
if (onrune) {
if (lastshad > 0) {
set_visible(shado[lastshad], 0)
set_visible(shado[lastshad + 1], 0)
set_visible(shado[lastshad + 1 + defxn], 0)
set_visible(shado[lastshad + defxn], 0)
}
lastshad = 0
return 0
}
if (itrunepanel()) {
return 0
}
attackx = 0
attacky = 0
movex = 0
movey = 0
magicx = -1
magicy = 0
scr_ymouse = ymouse
scr_xmouse = xmouse
if (lastcoords == true) {
scr_ymouse = scr_ymouselast
scr_xmouse = scr_xmouselast
}
scr_ymouselast = scr_ymouse
scr_xmouselast = scr_xmouse
var r = getxa_from(scr_xmouse, scr_ymouse)
x = r.x + 1
y = r.y + 1
xr = Math.ceil(r.x)
yr = Math.ceil(r.y)
if (interactive_obj > 0) {
if (xr > 0 && yr > 0 && xr <= defxn - 2 && yr <= defyn && mapobj[yr * defxn + xr] == interactive_obj) {
} else {
xr = this.obj[interactive_obj].x
yr = this.obj[interactive_obj].y
}
}
xr_last = xr
yr_last = yr
xr_z = scr_xmouse
yr_z = scr_ymouse
if (reset) {
xr_z = -100
yr_z = -100
xr = -5
yr = -5
}
if (buttons_visible['win_InfoCreatureEffect']) return 0
if (buttons_visible['win_InfoHero']) return 0
if (buttons_visible['win_InfoHero2']) return 0
if (buttons_visible['win_InfoCreature']) return 0
if (xr > 0 && yr > 0 && xr <= defxn - 2 && yr <= defyn) {
show_coords(xr, yr)
if (firewalls[yr * defxn + xr] > 0) {
let lifeTime = (
magic[Math.floor(firewalls[yr * defxn + xr] / 100)]['F' + ((firewalls[yr * defxn + xr] % 100) + '').padStart(2, '0')]['nowinit'] / 100
).toFixed(2)
testBlock(lifeTime, true)
} else if (fireInfo) {
testBlock()
}
} else {
show_coords(0, 0)
}
if (loader.loading || ((someactive || command != '') && !gpause) || buttons_visible['magic_book'] || buttons_visible['scroll_runes']) {
return 0
}
if (!inserted && inssubmit) {
return 0
}
if (!inserted && !inssubmit) {
if (reset) {
xr = -5
yr = -5
}
if (activestek <= 0) {
lastshad = -1
}
if (xr + yr * defxn != lastshad) {
if (shado[lastshad]) set_visible(shado[lastshad], 0)
if (shado[lastshad + 1]) set_visible(shado[lastshad + 1], 0)
if (shado[lastshad + 1 + defxn]) set_visible(shado[lastshad + 1 + defxn], 0)
if (shado[lastshad + defxn]) set_visible(shado[lastshad + defxn], 0)
lastshad = xr + yr * defxn
if (activestek > 0) {
if (stekx[activestek] > 0) {
set_visible(shado[stekx[activestek] + steky[activestek] * defxn], 1)
if (this.obj[activestek].big) {
set_visible(shado[stekx[activestek] + steky[activestek] * defxn + 1], 1)
set_visible(shado[stekx[activestek] + steky[activestek] * defxn + 1 + defxn], 1)
set_visible(shado[stekx[activestek] + steky[activestek] * defxn + defxn], 1)
}
if (this.obj[activestek].bigx) {
set_visible(shado[stekx[activestek] + steky[activestek] * defxn + 1], 1)
}
if (this.obj[activestek].bigy) {
set_visible(shado[stekx[activestek] + steky[activestek] * defxn + defxn], 1)
}
}
po = Math.floor((playero - 1) / 2)
if (getbtype(btype) == 1 || getbtype(btype) == 3) {
if (playero > 2) {
playero1 = playero + 1
} else {
playero1 = playero
}
t1 = 0
t2 = 0
t11 = 0
t21 = 0
k = playero
k1 = playero1
if (isperk(0, 12, k)) {
if (k % 2 == 0) {
t1 = -1
} else {
t2 = 1
}
if (k1 % 2 == 0) {
t11 = -1
} else {
t21 = 1
}
}
for (x = 9 - (playero % 2) * 8 + t1; x <= 9 - (playero % 2) * 8 + 3 + t2; x++) {
for (y = (defyn - 4) * ((playero1 + 1) % 2) + 1 + t11; y <= (defyn - 4) * ((playero1 + 1) % 2) + 4 + t21; y++) {
setmap(x, y, 250)
}
}
} else {
if (getbtype(btype) == NEWKZS || btype == _PIRATE_NEW_EVENT || winter == 'arena8' || btype == _VILLAGE_EVENT) {
setpole(btype, 250, playero, yourside, defxn - 2, defyn)
} else if (
getbtype(btype) == 4 ||
getbtype(btype, defxn - 2, defyn) == _NEWTHIEF ||
getbtype(btype) == _NECR_EVENT2 ||
btype == _ELKA_DEFENSE
) {
setpole(btype, 250, playero, yourside, defxn - 2, defyn, po)
} else {
t1 = 0
t2 = 0
k = playero
if (isperk(0, 12, k)) {
if ((k + camp_mirror) % 2 == 0) {
t1 = -1
} else {
t2 = 1
}
}
y1 = Math.floor((po * defyn) / yourside + 1)
y2 = Math.floor(((po + 1) * defyn) / yourside)
if (fullinsert) {
y1 = 1
y2 = defyn
}
for (
x = defxn - 3 - ((playero + camp_mirror) % 2) * (defxn - 4) + t1;
x <= defxn - 3 - ((playero + camp_mirror) % 2) * (defxn - 4) + 1 + t2;
x++
) {
for (y = y1; y <= y2; y++) {
setmap(x, y, 250)
}
}
}
}
this.setotherobjs()
for (k = 1; k <= Math.max(7, stackcount); k++) {
if (k != activestek) {
setmap(stekx[k], steky[k], 210)
if (this.obj[k]) {
if (this.obj[k].big) {
setmap(stekx[k] + 1, steky[k], 210)
setmap(stekx[k] + 1, steky[k] + 1, 210)
setmap(stekx[k], steky[k] + 1, 210)
}
if (this.obj[k].bigx) {
setmap(stekx[k] + 1, steky[k], 210)
}
if (this.obj[k].bigy) {
setmap(stekx[k], steky[k] + 1, 210)
}
}
}
}
var bigx = this.obj[activestek]['big']
var bigy = this.obj[activestek]['big']
if (this.obj[activestek]['bigx']) bigx = 1
if (this.obj[activestek]['bigy']) bigy = 1
var cnt = 0
var xp = Array(0, -1, 0, -1)
var yp = Array(0, 0, -1, -1)
var xro = xr,
yro = yr
if (this.obj[activestek]['big']) cnt = 3
for (k = 0; k <= cnt; k++) {
ok = true
xr = xro + xp[k]
yr = yro + yp[k]
xr_last = xr
yr_last = yr
for (x = 0; x <= bigx; x++) {
for (y = 0; y <= bigy; y++) {
if (getmap(x + xr, y + yr) != 250) {
ok = false
}
}
}
if (ok) break
}
if (ok && (xr != stekx[activestek] || yr != steky[activestek])) {
lastshad = xr + yr * defxn
setstekx = xr
setsteky = yr
set_visible(shado[xr + yr * defxn], 1)
if (this.obj[activestek].big) {
set_visible(shado[xr + yr * defxn + 1], 1)
set_visible(shado[xr + yr * defxn + 1 + defxn], 1)
set_visible(shado[xr + yr * defxn + defxn], 1)
}
if (this.obj[activestek].bigx) {
set_visible(shado[xr + yr * defxn + 1], 1)
}
if (this.obj[activestek].bigy) {
set_visible(shado[xr + yr * defxn + defxn], 1)
}
} else {
setstekx = -1
setsteky = -1
}
}
}
var i = mapobj[yr * defxn + xr]
if (i > 0) {
if ((activeobj > 0 || someactive == false || gpause) && this.obj[i].doing != 'walk' && (activeobj != i || gpause) && !this.obj[i].hero && showway) {
this.showposway(i, 0, activeobj)
if (!gpause) this.checkthrower(activeobj)
}
} else {
var was = 0,
m = 0
lastpole = 0
if (this.shadows)
for (x = 0; x <= defxn + 1; x++) {
if (!this.shadows.shad1[x]) continue
for (y = 1; y <= defyn; y++) {
if (!this.shadows.shad1[x][y]) continue
m = getmap(x, y)
if (m == 210) {
m = 250
}
if (m == 200 || m == 250 || mapzz[y * defxn + x] == 240) {
if (!was) set_visible(this.shadows.shadow1, 1)
was = 1
}
if (this.shadows.shad1[x][y].shadowed == 1) {
set_Alpha(this.shadows.shad1[x][y], 0.3)
}
if (mapzz[y * defxn + x] == 240) {
set_Alpha(this.shadows.shad1[x][y], 0.5)
this.shadows.shad1[x][y].shadowed = 1
}
if (m == 200 && gpause) continue
if (m == 200 || m == 250 || mapzz[y * defxn + x] == 240) {
set_visible(this.shadows.shad1[x][y], 1)
} else {
set_visible(this.shadows.shad1[x][y], 0)
}
}
}
this.shadows.shadow1.no_filter = true
if (shadow_cache) set_cache(this.shadows.shadow1, true, 1)
}
return 0
}
var cur_atb = this.get_cur_atb(scr_xmouse, scr_ymouse)
if (cur_atb > 0 && zoomed == false) {
if (combat_zoom_timeout > 0) {
clearTimeout(combat_zoom_timeout)
combat_zoom_timeout = 0
}
k = cur_atb - 1
for (var kk = 0; kk <= atb_cnt; kk++) {
if (kk != k) {
if (typeof this.p_array === 'undefined' || !this.portraits[this.p_array[kk]]) continue
showshadow(this.portraits[this.p_array[kk]].under, false)
}
}
if (this.obj[atb[k + atbsd]] && !this.obj[atb[k + atbsd]].shadowed && !someactive) {
this.showmi(atb[k + atbsd])
var i = atb[k + atbsd]
showshadow(this.obj[atb[k + atbsd]], true)
lasti = atb[k + atbsd]
showshadow(this.portraits[this.p_array[k]].under, true)
if (this.obj[atb[k + atbsd]].nownumber > 0 && !this.obj[atb[k + atbsd]].stone && !this.obj[atb[k + atbsd]].portal) {
this.obj[atb[k + atbsd]].ontop = 1
this.obj[atb[k + atbsd]].get_obj_z(this.obj[atb[k + atbsd]].y)
if (this.obj[atb[k + atbsd]].hero) {
set_visible(this.obj[atb[k + atbsd]].number, 1)
}
showshadow(this.obj[atb[k + atbsd]], true)
need_sort = true
}
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (i != atb[k + atbsd] && this.obj[i].shadowed) {
clearpole2()
if (this.obj[i].nownumber > 0 && !this.obj[i].stone && !this.obj[i].portal) {
this.obj[i].ontop = 0
this.obj[i].get_obj_z(this.obj[i].y)
if (this.obj[i].hero) {
set_visible(this.obj[i].number, 0)
}
need_sort = true
}
showshadow(this.obj[i], false)
}
}
}
if (lastk != k) re_cache_atb()
lastk = k
if (inserted) {
set_cursor(0)
if (myuron) set_visible(myuron, 0)
if (csword) set_visible(csword, 0)
clearshado()
clearshadway()
}
return 0
}
lastk = -1
if (reset) {
xr = -5
yr = -5
}
mishowed = false
var i = mapobj[yr * defxn + xr]
var nowi = 0
if (lasti > 0 && lasti != i && this.obj[lasti].shadowed) {
i = lasti
lasti = 0
for (k = 0; k <= atb_cnt; k++) {
if (atb[k + atbsd] == i) {
showshadow(this.portraits[this.p_array[k]].under, false)
}
}
if (!mishowed) {
set_visible(mini_info_panel, 0)
this.showmi(-1)
if (btype == 20 || btype == _SURVIVAL_GNOM || btype == _2SURVIVAL) {
this.showmitnv()
}
if (btype == 8) {
this.showmitnv(1)
}
if (btype == 119) {
// this.showmitnv(2);
}
clearpole2()
}
if (this.obj[i].nownumber > 0 && !this.obj[i].stone && !this.obj[i].portal) {
this.obj[i].ontop = 0
this.obj[i].get_obj_z(this.obj[i].y)
if (this.obj[i].hero) {
set_visible(this.obj[i].number, 0)
}
need_sort = true
}
showshadow(this.obj[i], false)
if (!(mapobj[yr * defxn + xr] > 0)) re_cache_atb()
}
if (gpause) this.fill_mapobj()
if (i > 0) {
bigok = false
if (this.obj[i].big) {
if (this.obj[i].x <= xr && this.obj[i].x + 1 >= xr && this.obj[i].y <= yr && this.obj[i].y + 1 >= yr) {
bigok = true
}
}
if (this.obj[i].bigx) {
if (this.obj[i].x <= xr && this.obj[i].x + 1 >= xr && this.obj[i].y == yr) {
bigok = true
}
}
if (this.obj[i].bigy) {
if (this.obj[i].y <= yr && this.obj[i].y + 1 >= yr && this.obj[i].x == xr) {
bigok = true
}
}
if (!this.obj[i].rock && this.obj[i].nownumber > 0 && (!someactive || gpause) && ((this.obj[i].x == xr && this.obj[i].y == yr) || bigok)) {
nowi = i
if (!this.obj[i].shadowed && this.obj[i].inited_show) {
if (!this.obj[i].stone && !this.obj[i].portal) {
this.obj[i].ontop = 1
this.obj[i].get_obj_z(this.obj[i].y)
if (this.obj[i].hero) {
set_visible(this.obj[i].number, 1)
}
need_sort = true
}
mishowed = true
this.showmi(i)
showshadow(this.obj[i], true)
if (
(activeobj > 0 || someactive == false || gpause) &&
this.obj[i].doing != 'walk' &&
(activeobj != i || gpause) &&
!this.obj[i].hero &&
showway
) {
this.showposway(i, 0, activeobj)
if (!gpause) this.checkthrower(activeobj)
}
for (k = 0; k <= atb_cnt; k++) {
if (atb[k + atbsd] == i) {
showshadow(this.portraits[this.p_array[k]].under, true)
}
}
}
}
if (lasti != i) re_cache_atb()
}
if (i > 0) lasti = i
else lasti = 0
crun_visible2 = true
if (typeof unsafeWindow.myuron !== 'undefined') set_visible(myuron, 0)
k = getmap(xr, yr)
clearshado()
if (k == 200) {
k = 250
}
if (xr > defxn - 1 || xr < 0) {
k = 0
}
if (
magicuse != '' &&
magicuse != 'layhands' &&
magicuse != 'orderofchief' &&
magicuse != 'harmtouch' &&
magicuse != 'hailstorm' &&
magicuse != 'allaroundslash' &&
magicuse != 'feralcharge' &&
magicuse != 'slam' &&
magicuse != 'unstoppablecharge' &&
magicuse != 'mightyslam' &&
magicuse != 'incinerate' &&
magicuse != 'leap' &&
magicuse != 'leap6' &&
magicuse != 'harpoonstrike'
) {
k = magicuse
}
if (magicuse == 'ssh') {
if (xr >= 1 && xr <= defxn - 2 && yr >= 1 && yr <= defyn && (Math.abs(xr - this.obj[activeobj].x) > 1 || Math.abs(yr - this.obj[activeobj].y) > 1)) {
k = 'ssh'
} else {
k = 0
}
}
if (k == 'mdispel' || k == 'mstoneskin' || k == 'mbless' || k == 'mrighteous_might' || k == 'mdeflect_missile' || k == 'mskyandearth') {
k = 'mfast'
}
if (k == 'mslow' || k == 'mcurse' || k == 'mdray' || k == 'msuffering' || k == 'mconfusion') {
k = 'mslow'
}
if (k == 'knightmark' || k == 'necr_soul') {
k = 'knightmark'
}
if (k == 'righteous_might' || k == 'deflect_missile' || k == 'antimagic') {
k = 'fast'
}
if (k == 'implosion') {
k = 'lighting'
}
if (k == 'divinev') {
k = 'angerofhorde'
}
if (k == 'suffering') {
k = 'curse'
}
var enemy = 210
if (magicuse == 'layhands') enemy = 211
if (magicuse == 'orderofchief') enemy = 211
switch (k) {
case 'magicfist':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'magicfist'
magicx = xr
magicy = yr
this.calcmagic(activeobj, xr, yr, magicuse)
break
case 'lighting':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'lighting'
magicx = xr
magicy = yr
this.calcmagic(activeobj, xr, yr, magicuse)
break
case 'chainlighting':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
lastshad = -2
clearshado()
var len = this.obj_array.length
for (var k = 0; k < len; k++) {
i = this.obj_array[k]
if (this.obj[i].inited_image == true && this.obj[i].inited_show) {
this.obj[i].set_number()
}
}
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'chainlighting'
magicx = xr
magicy = yr
this.calcchainlighting(activeobj, xr, yr, magicuse)
lastChain = activeobj
break
case 'knightmark':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
!this.obj[i].warmachine &&
!this.obj[i].hero &&
i == mapobj[xr + yr * defxn] &&
this.obj[i].owner == this.obj[activeobj].owner &&
this.obj[i].nownumber > 0 &&
!magic[i]['sum']
) {
ok = true
break
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'fast'
magicx = xr
magicy = yr
break
case 'dispel':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (i == mapobj[xr + yr * defxn] && this.obj[i].nownumber > 0 && !this.obj[i].hero) {
ok = true
break
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'fast'
magicx = xr
magicy = yr
break
case 'mfast':
set_cursor(6)
var p = 2
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(-1, -1, p, p, false)
}
}
if (magicuse == 'mfast') {
this.reset_temp_magic()
this.showatb()
}
if (xr > 0 && xr <= defxn - 2 && yr > 0 && yr <= defyn) {
} else {
return 0
}
lastshad = xr + yr * defxn
setshad(-1, -1, p, p, true)
if (magicuse == 'mfast') {
this.reset_temp_magic()
for (var xrr = xr - 1; xrr <= xr + p; xrr++)
for (var yrr = yr - 1; yrr <= yr + p; yrr++) {
var i = mapobj[xrr + yrr * defxn]
if (
i > 0 &&
i < 1000 &&
!this.obj[i].warmachine &&
!this.obj[i].immunity &&
!this.obj[i].enchantedarmor &&
!this.obj[i].hero &&
this.obj[i].side == this.obj[activeobj].getside() &&
this.obj[i].nownumber > 0
) {
setn_temp_magic(i, 'fst')
}
}
this.showatb()
}
res = 'mfast'
magicx = xr
magicy = yr
break
case 'mslow':
set_cursor(6)
var p = 2
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(-2, -2, p, p, false)
}
}
if (magicuse == 'mslow') {
this.reset_temp_magic()
this.showatb()
}
if (xr > 0 && xr <= defxn - 2 && yr > 0 && yr <= defyn) {
} else {
return 0
}
lastshad = xr + yr * defxn
setshad(-2, -2, p, p, true)
if (magicuse == 'mslow') {
this.reset_temp_magic()
for (var xrr = xr - 2; xrr <= xr + p; xrr++)
for (var yrr = yr - 2; yrr <= yr + p; yrr++) {
var i = mapobj[xrr + yrr * defxn]
if (
i > 0 &&
!this.obj[i].warmachine &&
!this.obj[i].islow &&
!this.obj[i].immunity &&
!this.obj[i].absolutepurity &&
!this.obj[i].enchantedarmor &&
!this.obj[i].hero &&
this.obj[i].side != this.obj[activeobj].getside() &&
this.obj[i].nownumber > 0
) {
setn_temp_magic(i, 'slw')
}
}
this.showatb()
}
res = 'mslow'
magicx = xr
magicy = yr
break
case 'mpoison':
set_cursor(6)
var p = 1
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(-1, -1, p, p, false)
}
}
if (xr > 0 && xr <= defxn - 2 && yr > 0 && yr <= defyn) {
} else {
return 0
}
lastshad = xr + yr * defxn
setshad(-1, -1, p, p, true)
res = 'mfast'
magicx = xr
magicy = yr
this.calcmagic(activeobj, xr, yr, magicuse)
break
case 'phantom_forces':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
!this.obj[i].hero &&
!this.obj[i].warmachine &&
i == mapobj[xr + yr * defxn] &&
this.obj[i].owner == this.obj[activeobj].owner &&
this.obj[i].nownumber > 0 &&
!magic[i]['sum'] &&
!magic[i]['phm'] &&
!magic[i]['whp'] &&
this.obj[i].level <= this.obj[activeobj]['phantom_forceseffmain']
) {
j = i
ok = true
break
}
}
if (!ok) {
res = 0
break
}
xo = this.obj[j].x
yo = this.obj[j].y
b = 0
var bigx = this.obj[j]['big']
var bigy = this.obj[j]['big']
if (this.obj[j]['bigx']) bigx = 1
if (this.obj[j]['bigy']) bigy = 1
ok = false
i = activeobj
setmap(this.obj[i].x, this.obj[i].y, 210, i)
if (this.obj[i].big) {
setmap(this.obj[i].x, this.obj[i].y + 1, 210, i)
setmap(this.obj[i].x + 1, this.obj[i].y + 1, 210, i)
setmap(this.obj[i].x + 1, this.obj[i].y, 210, i)
}
if (this.obj[i].bigx) {
setmap(this.obj[i].x + 1, this.obj[i].y, 210, i)
}
if (this.obj[i].bigy) {
setmap(this.obj[i].x, this.obj[i].y + 1, 210, i)
}
for (x = xo - 1 - bigx; x <= xo + 1 + bigx; x++) {
for (y = yo - 1 - bigy; y <= yo + 1 + bigy; y++) {
ok2 = true
for (xz = x; xz <= x + bigx; xz++) {
for (yz = y; yz <= y + bigy; yz++) {
if (xz < 1 || yz < 1 || yz > defyn || xz > defxn - 2 || getmap(xz, yz) == 210 || getmap(xz, yz) == 211) {
ok2 = false
}
}
}
if (ok2) {
ok = true
}
}
}
i = activeobj
setmap(this.obj[i].x, this.obj[i].y, 0, i)
if (this.obj[i].big) {
setmap(this.obj[i].x, this.obj[i].y + 1, 0, i)
setmap(this.obj[i].x + 1, this.obj[i].y + 1, 0, i)
setmap(this.obj[i].x + 1, this.obj[i].y, 0, i)
}
if (this.obj[i].bigx) {
setmap(this.obj[i].x + 1, this.obj[i].y, 0, i)
}
if (this.obj[i].bigy) {
setmap(this.obj[i].x, this.obj[i].y + 1, 0, i)
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'phantom_forces'
magicx = xr
magicy = yr
break
case 'bless':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
!this.obj[i].hero &&
!this.obj[i].warmachine &&
i == mapobj[xr + yr * defxn] &&
this.obj[i].side == this.obj[activeobj].getside() &&
this.obj[i].nownumber > 0
) {
ok = true
break
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'bless'
magicx = xr
magicy = yr
break
case 'divine_guidance':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
!this.obj[i].hero &&
!this.obj[i].warmachine &&
i == mapobj[xr + yr * defxn] &&
this.obj[i].side == this.obj[activeobj].getside() &&
this.obj[i].nownumber > 0
) {
ok = true
objset = i
break
}
}
if (!ok) {
res = 0
this.reset_temp_magic()
this.showatb()
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'divine_guidance'
magicx = xr
magicy = yr
this.reset_temp_magic()
var init = this.obj[activeobj]['divine_guidanceeffmain']
var init = 33
var j = mapobj[yr * defxn + xr]
if (this.obj[j]['nowinit'] - init < this.obj[activeobj]['nowinit']) {
init = Math.floor(this.obj[j]['nowinit'] - this.obj[activeobj]['nowinit'])
}
this.obj[j]['reset_init'] = -init
this.showatb()
break
case 'stoneskin':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
!this.obj[i].warmachine &&
!this.obj[i].hero &&
i == mapobj[xr + yr * defxn] &&
this.obj[i].side == this.obj[activeobj].getside() &&
this.obj[i].nownumber > 0
) {
ok = true
break
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'stoneskin'
magicx = xr
magicy = yr
break
case 'blind':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
this.reset_temp_magic()
this.showatb()
if (getmap(xr, yr) != 210) {
res = 0
break
}
ok = true
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
(this.obj[i].hero ||
this.obj[i].warmachine ||
!this.obj[i].alive ||
this.obj[i].iblind ||
this.obj[i].imind ||
this.obj[i].twistedmind ||
(magic[i]['wfr'] && magic[i]['wfr']['effect'] == 1) ||
this.obj[i].absolutepurity ||
this.obj[i].immunity ||
this.obj[i].enchantedarmor) &&
i == mapobj[xr + yr * defxn] &&
this.obj[i].nownumber > 0
) {
ok = false
break
}
}
if (ok && btype == _PVP_DIAGONAL_EVENT && checkwall2(this.obj[activeobj]['x'], this.obj[activeobj]['y'], xr, yr, activeobj)) {
ok = false
break
}
if (!ok) {
res = 0
break
}
this.reset_temp_magic()
var uo = mapobj[lastshad]
setn_temp_magic(uo, 'bld')
this.showatb()
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'blind'
magicx = xr
magicy = yr
break
case 'seduction':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
ok = true
if (
(this.obj[mapobj[yr * defxn + xr]].hero ||
this.obj[mapobj[yr * defxn + xr]].immunetohypnos ||
this.obj[mapobj[yr * defxn + xr]].immunity ||
this.obj[mapobj[yr * defxn + xr]].warmachine ||
!this.obj[mapobj[yr * defxn + xr]].alive ||
this.obj[mapobj[yr * defxn + xr]].imind ||
this.obj[mapobj[yr * defxn + xr]].twistedmind ||
(magic[mapobj[yr * defxn + xr]]['wfr'] && magic[mapobj[yr * defxn + xr]]['wfr']['effect'] == 1) ||
this.obj[mapobj[yr * defxn + xr]].absolutepurity) &&
this.obj[mapobj[yr * defxn + xr]].nownumber > 0
) {
ok = false
break
}
var s = 'seduction'
hpa =
((this.obj[activeobj].nownumber - 1) * this.obj[activeobj].maxhealth + this.obj[activeobj].nowhealth) /
((this.obj[mapobj[yr * defxn + xr]].nownumber - 1) * this.obj[mapobj[yr * defxn + xr]].maxhealth + this.obj[mapobj[yr * defxn + xr]].nowhealth)
if (hpa <= 0.25 || Math.floor((2 + Math.log(hpa) / Math.log(2)) * 100) <= 0) {
ok = false
break
}
if (ok && btype == _PVP_DIAGONAL_EVENT && checkwall2(this.obj[activeobj]['x'], this.obj[activeobj]['y'], xr, yr, activeobj)) {
ok = false
break
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'seduction'
magicx = xr
magicy = yr
showuron(1, Math.min((2 + Math.log(hpa) / Math.log(2)).toFixed(2), 4))
break
case 'randl':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (!this.obj[i].hero && !this.obj[i].warmachine && !this.obj[i].rock && i == mapobj[xr + yr * defxn] && this.obj[i].nownumber > 0) {
ok = true
break
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'randl'
magicx = xr
magicy = yr
break
case 'flamestrike':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
ok = true
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (this.obj[i].hero && i == mapobj[xr + yr * defxn]) {
ok = false
break
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'stormbolt'
magicx = xr
magicy = yr
this.calcflamestrike(activeobj, xr, yr, 'flamestrike', 1.2)
break
case 'stormbolt':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
ok = true
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (this.obj[i].hero && i == mapobj[xr + yr * defxn]) {
ok = false
break
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'stormbolt'
magicx = xr
magicy = yr
this.calcflamestrike(activeobj, xr, yr, 'stormbolt', 0.5)
break
case 'randd':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
ok = true
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if ((this.obj[i].hero || this.obj[i].warmachine || this.obj[i].absolutepurity) && i == mapobj[xr + yr * defxn] && this.obj[i].nownumber > 0) {
ok = false
break
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'randd'
magicx = xr
magicy = yr
break
case 'poison':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
ok = true
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (i == mapobj[xr + yr * defxn] && this.obj[i].absolutepurity && this.obj[i].nownumber > 0) {
ok = false
break
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'poison'
magicx = xr
magicy = yr
this.calcmagic(activeobj, xr, yr, magicuse)
break
case 'magicarrow':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'magicarrow'
magicx = xr
magicy = yr
this.calcmagic(activeobj, xr, yr, magicuse)
break
case 'firearrow':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'firearrow'
magicx = xr
magicy = yr
this.calcmagic(activeobj, xr, yr, magicuse)
break
case 'icebolt':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'icebolt'
magicx = xr
magicy = yr
this.calcmagic(activeobj, xr, yr, magicuse)
break
case 'dray':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
break
}
ok = true
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
(((this.obj[i].hero || this.obj[i].warmachine || this.obj[i].absolutepurity) && this.obj[i].nownumber > 0) ||
(mapobj[yr * defxn + xr] > 0 && (this.obj[mapobj[yr * defxn + xr]].armoured || this.obj[mapobj[yr * defxn + xr]].organicarmor))) &&
i == mapobj[xr + yr * defxn]
) {
ok = false
break
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'dray'
magicx = xr
magicy = yr
break
case 'raisedead':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
big = false
bigf = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
(this.obj[i].undead || this.obj[i].alive) &&
!magic[i]['phm'] &&
!magic[i]['sum'] &&
xr >= this.obj[i].x &&
xr <= this.obj[i].x + this.obj[i].big &&
yr >= this.obj[i].y &&
yr <= this.obj[i].y + this.obj[i].big &&
this.obj[i].owner == this.obj[activeobj].owner &&
!this.obj[i].hero &&
(this.obj[i].nownumber < this.obj[i].maxnumber || this.obj[i].nowhealth < this.obj[i].maxhealth) &&
getmap(xr, yr) != 210 &&
(mapobj[yr * defxn + xr] == undefined || mapobj[yr * defxn + xr] <= 0 || this.obj[mapobj[yr * defxn + xr]].owner == this.obj[activeobj].owner)
) {
big = false
if (this.obj[i].big && this.obj[i].nownumber == 0) {
big = true
}
bigf = false
if (this.obj[i].nownumber) {
bigf = true
}
ok2 = true
if (big && !bigf) {
var x1 = this.obj[i].x
var y1 = this.obj[i].y
if (
(mapobj[x1 + y1 * defxn] > 0 && mapobj[x1 + y1 * defxn] != i) ||
(mapobj[x1 + y1 * defxn + 1] > 0 && mapobj[x1 + y1 * defxn + 1] != i) ||
(mapobj[x1 + (y1 + 1) * defxn + 1] > 0 && mapobj[x1 + (y1 + 1) * defxn + 1] != i) ||
(mapobj[x1 + (y1 + 1) * defxn] > 0 && mapobj[x1 + (y1 + 1) * defxn] != i)
) {
ok2 = false
}
}
if (this.obj[i].bigx && this.obj[i].nownumber == 0 && !bigf) {
if (getmap(xr + 1, yr) == 211 || getmap(xr + 1, yr) == 210) {
ok2 = false
}
}
if (this.obj[i].bigy && this.obj[i].nownumber == 0 && !bigf) {
if (getmap(xr, yr + 1) == 211 || getmap(xr, yr + 1) == 210) {
ok2 = false
}
}
if (!ok) {
ok = ok2
}
big = false
bigf = false
}
}
if (!ok) {
if (xr + yr * defxn != lastshad) this.showatb()
res = 0
break
}
lastshad = xr + yr * defxn
this.show_atb_raisedead(xr, yr)
setshad(0, 0, 0, 0, true)
res = 'raisedead'
magicx = xr
magicy = yr
break
case 'heal':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
big = false
bigf = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
this.obj[i].alive &&
!magic[i]['phm'] &&
i == mapobj[xr + yr * defxn] &&
this.obj[i].owner == this.obj[activeobj].owner &&
!this.obj[i].hero &&
this.obj[i].nownumber > 0 &&
(this.obj[i].nownumber < this.obj[i].maxnumber || this.obj[i].nowhealth < this.obj[i].maxhealth) &&
getmap(xr, yr) != 210 &&
(mapobj[yr * defxn + xr] == undefined || mapobj[yr * defxn + xr] <= 0 || this.obj[mapobj[yr * defxn + xr]].owner == this.obj[activeobj].owner)
) {
if (this.obj[i].big && this.obj[i].nownumber == 0) {
big = true
}
if (this.obj[i].nownumber) {
bigf = true
}
ok2 = true
if (big && !bigf) {
if (
getmap(xr + 1, yr + 1) == 211 ||
getmap(xr + 1, yr + 1) == 210 ||
getmap(xr, yr + 1) == 211 ||
getmap(xr, yr + 1) == 210 ||
getmap(xr + 1, yr) == 211 ||
getmap(xr + 1, yr) == 210
) {
ok2 = false
}
}
if (this.obj[i].bigx && this.obj[i].nownumber == 0 && !bigf) {
if (getmap(xr + 1, yr) == 211 || getmap(xr + 1, yr) == 210) {
ok2 = false
}
}
if (this.obj[i].bigy && this.obj[i].nownumber == 0 && !bigf) {
if (getmap(xr, yr + 1) == 211 || getmap(xr, yr + 1) == 210) {
ok2 = false
}
}
if (!ok) {
ok = ok2
}
big = false
bigf = false
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'heal'
magicx = xr
magicy = yr
break
case 'summonpit':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
big = false
bigf = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
this.obj[i].alive &&
!magic[i]['phm'] &&
!magic[i]['sum'] &&
this.obj[i].x == xr &&
this.obj[i].y == yr &&
this.obj[i].owner == this.obj[activeobj].owner &&
!this.obj[i].hero &&
this.obj[i].nownumber <= 0 &&
getmap(xr, yr) != 210 &&
(mapobj[yr * defxn + xr] == undefined || mapobj[yr * defxn + xr] <= 0 || this.obj[mapobj[yr * defxn + xr]].owner == this.obj[activeobj].owner)
) {
if (this.obj[i].big && this.obj[i].nownumber == 0) {
big = true
}
ok2 = true
if (big && !bigf) {
if (
getmap(xr + 1, yr + 1) == 211 ||
getmap(xr + 1, yr + 1) == 210 ||
getmap(xr, yr + 1) == 211 ||
getmap(xr, yr + 1) == 210 ||
getmap(xr + 1, yr) == 211 ||
getmap(xr + 1, yr) == 210
) {
ok2 = false
}
}
if (this.obj[i].bigx && this.obj[i].nownumber == 0 && !bigf) {
if (getmap(xr + 1, yr) == 211 || getmap(xr + 1, yr) == 210) {
ok2 = false
}
}
if (this.obj[i].bigy && this.obj[i].nownumber == 0 && !bigf) {
if (getmap(xr, yr + 1) == 211 || getmap(xr, yr + 1) == 210) {
ok2 = false
}
}
if (Math.min(this.obj[i]['maxhealth'], 120) * this.obj[i]['maxnumber'] < 120) ok2 = false
if (!ok) {
ok = ok2
}
big = false
bigf = false
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'summonpit'
magicx = xr
magicy = yr
break
case 'gating':
set_cursor(6)
var bigx = this.obj[activeobj]['big']
var bigy = this.obj[activeobj]['big']
if (this.obj[activeobj]['bigx']) bigx = 1
if (this.obj[activeobj]['bigy']) bigy = 1
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, bigx, bigy, false)
}
}
ok = false
ok = true
for (x = 0; x <= bigx; x++) {
for (y = 0; y <= bigy; y++) {
if (mapg[xr + x + (yr + y) * defxn] != 0) {
ok = false
}
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, bigx, bigy, true)
res = 'gating'
magicx = xr
magicy = yr
break
case 'repair':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
this.obj[i].mechanical &&
this.obj[i].x == xr &&
this.obj[i].y == yr &&
this.obj[i].side == this.obj[activeobj].getside() &&
!this.obj[i].hero &&
(this.obj[i].nownumber < this.obj[i].maxnumber || this.obj[i].nowhealth < this.obj[i].maxhealth) &&
getmap(xr, yr) != 210 &&
((this.obj[i].nownumber == 0 && getmap(xr, yr) != 211) || (this.obj[i].nownumber > 0 && getmap(xr, yr) == 211))
) {
ok = true
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'repair'
magicx = xr
magicy = yr
break
case 'firstaid':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
!this.obj[i].warmachine &&
i == mapobj[xr + yr * defxn] &&
this.obj[i].owner == this.obj[activeobj].owner &&
!this.obj[i].hero &&
(this.obj[i].nownumber < this.obj[i].maxnumber || this.obj[i].nowhealth < this.obj[i].maxhealth) &&
getmap(xr, yr) != 210 &&
this.obj[i].nownumber > 0 &&
getmap(xr, yr) == 211
) {
ok = true
}
}
if (!ok) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'firstaid'
magicx = xr
magicy = yr
break
case 'teleport':
if (carryo == -1) {
var s = 'teleport'
if (xr <= 0 || yr <= 0 || xr > defxn - 2 || yr > defyn) {
res = 0
break
}
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
!this.obj[i].warmachine &&
!magic[i]['ent'] &&
i == mapobj[xr + yr * defxn] &&
!this.obj[i].hero &&
this.obj[i]['nownumber'] > 0 &&
this.obj[i].side == this.obj[activeobj].getside() &&
Math.floor(
(10 * (this.obj[activeobj][s + 'effmain'] + this.obj[activeobj].maxnumber * this.obj[activeobj][s + 'effmult'])) /
((this.obj[i].nownumber - 1) * this.obj[i].maxhealth + this.obj[i].nowhealth)
) > 0
) {
set_cursor(6)
res = 'teleport'
}
}
} else {
var b = 0
if (carryo > 0) {
if (this.obj[carryo].big) {
setmap(this.obj[carryo].x + 1, this.obj[carryo].y + 1, 0)
setmap(this.obj[carryo].x + 1, this.obj[carryo].y, 0)
setmap(this.obj[carryo].x, this.obj[carryo].y + 1, 0)
}
if (this.obj[carryo].bigx) {
setmap(this.obj[carryo].x + 1, this.obj[carryo].y, 0)
}
if (this.obj[carryo].bigy) {
setmap(this.obj[carryo].x, this.obj[carryo].y + 1, 0)
}
}
var bigx = this.obj[carryo]['big']
var bigy = this.obj[carryo]['big']
if (this.obj[carryo]['bigx']) bigx = 1
if (this.obj[carryo]['bigy']) bigy = 1
ok = true
for (var xrr = xr; xrr <= xr + bigx; xrr++) {
for (var yrr = yr; yrr <= yr + bigy; yrr++) {
if (
carryo > 0 &&
(xr != this.obj[carryo].x || yr != this.obj[carryo].y) &&
getmap(xrr, yrr) != 200 &&
getmap(xrr, yrr) != 210 &&
(getmap(xrr, yrr) != 211 || mapobj[xrr + yrr * defxn] == carryo) &&
xr > 0 &&
yr > 0 &&
xr <= defxn - 2 - bigx &&
yr <= defyn - bigy
) {
} else {
ok = false
break
}
}
}
var s = 'teleport'
if (carryo <= 0) {
var r = 0
var r1 = 1
} else {
var r = Math.floor(
(10 *
(this.obj[activeobj][s + 'effmain'] +
(this.getspellpower(activeobj, s) + isperk(activeobj, 89) * 3) * this.obj[activeobj][s + 'effmult'])) /
((this.obj[carryo].nownumber - 1) * this.obj[carryo].maxhealth + this.obj[carryo].nowhealth)
)
var r1 = (xr - this.obj[carryo].x) * (xr - this.obj[carryo].x) + (yr - this.obj[carryo].y) * (yr - this.obj[carryo].y)
}
if (r1 > r * r) {
ok = false
}
if (ok) {
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, bigx, bigy, false)
}
lastshad = xr + yr * defxn
setshad(0, 0, bigx, bigy, true)
}
magicx = xr
magicy = yr
res = 'teleport'
} else {
res = 0
if (lastshad > 0) {
setshad(0, 0, bigx, bigy, false)
}
lastshad = -1
}
var lastshadt = lastshad
if (carryo > 0) {
lastshad = this.obj[carryo].x + this.obj[carryo].y * defxn
setshad(0, 0, bigx, bigy, true)
lastshad = lastshadt
if (bigx == 1 && bigy == 1) {
setmap(this.obj[carryo].x + 1, this.obj[carryo].y + 1, 211)
setmap(this.obj[carryo].x + 1, this.obj[carryo].y, 211)
setmap(this.obj[carryo].x, this.obj[carryo].y + 1, 211)
}
if (bigx == 1) {
setmap(this.obj[carryo].x + 1, this.obj[carryo].y, 211)
}
if (bigy == 1) {
setmap(this.obj[carryo].x, this.obj[carryo].y + 1, 211)
}
}
}
break
case 'carry':
spd = Math.max(
0,
Math.round((this.obj[activeobj].speed + this.obj[activeobj]['ragespeed'] + this.obj[activeobj]['speedaddon']) * this.obj[activeobj].speedmodifier)
)
if (magic[activeobj]['ent']) {
spd = 0
}
xr1 = xr
yr1 = yr
if (xr1 > this.obj[activeobj]['x']) {
xr1--
}
if (yr1 > this.obj[activeobj]['y']) {
yr1--
}
if (
Math.abs(Math.abs(this.obj[activeobj]['x'] - xr1) - Math.abs(this.obj[activeobj]['y'] - yr1)) +
1.5 *
(Math.max(Math.abs(this.obj[activeobj]['x'] - xr1), Math.abs(this.obj[activeobj]['y'] - yr1)) -
Math.abs(Math.abs(this.obj[activeobj]['x'] - xr1) - Math.abs(this.obj[activeobj]['y'] - yr1))) <=
spd
) {
} else {
res = 0
break
}
if (carryo == -1) {
if (xr <= 0 || yr <= 0 || xr > defxn - 2 || yr > defyn) {
res = 0
break
}
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
!this.obj[i].warmachine &&
(!magic[i]['inv'] || magic[i]['inv']['effect'] != 1) &&
!magic[i]['ent'] &&
i == mapobj[xr + yr * defxn] &&
!this.obj[i].big &&
!this.obj[i].bigx &&
!this.obj[i].bigy &&
!this.obj[i].hero &&
this.obj[activeobj]['nownumber'] * 2 >= this.obj[i]['nownumber'] &&
this.obj[i]['nownumber'] > 0 &&
this.obj[i].side == this.obj[activeobj].getside()
) {
set_cursor(6)
res = 'carry'
}
}
} else {
if (getmap(xr, yr) != 200 && getmap(xr, yr) != 210 && getmap(xr, yr) != 211) {
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
}
magicx = xr
magicy = yr
res = 'carry'
}
}
break
case 'fireball':
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(-1, -1, 1, 1, false)
}
if (xr <= 0 || yr <= 0 || xr > defxn - 2 || yr > defyn) {
res = 0
break
}
lastshad = xr + yr * defxn
setshad(-1, -1, 1, 1, true)
}
magicx = xr
magicy = yr
res = 'fireball'
this.calcmagic(activeobj, xr, yr, magicuse)
break
}
if (k == 250) {
ok = true
if (
activeobj > 0 &&
this.obj[activeobj].x == xr &&
this.obj[activeobj].y == yr &&
(!android || !android_submit || this.obj[activeobj].hero || this.obj[activeobj].warmachine)
) {
ok = false
} else {
xrr = -1
yrr = -1
len = 100
movex = xr
movey = yr
if (activeobj > 0 && this.obj[activeobj].big) {
if (wmap2[xr + yr * defxn] >= 0 && !this.obj[activeobj].flyer) {
} else {
if (this.obj[activeobj].flyer) {
i = activeobj
setmap(this.obj[i].x, this.obj[i].y, 250)
setmap(this.obj[i].x, this.obj[i].y + 1, 250)
setmap(this.obj[i].x + 1, this.obj[i].y + 1, 250)
setmap(this.obj[i].x + 1, this.obj[i].y, 250)
}
for (xk = xr - 1; xk <= xr; xk++) {
for (yk = yr - 1; yk <= yr; yk++) {
if (wmap2[xk + yk * defxn] >= 0) {
if ((xr - xk) * (xr - xk) + (yr - yk) * (yr - yk) < len) {
xrr = xk
yrr = yk
len = (xr - xk) * (xr - xk) + (yr - yk) * (yr - yk)
}
}
}
}
if (xrr != -1) {
xr = xrr
yr = yrr
xr_last = xr
yr_last = yr
movex = xr
movey = yr
if (this.obj[activeobj].x == xr && this.obj[activeobj].y == yr && !android) {
movex = 0
movey = 0
res = 0
ok = false
}
} else {
movex = 0
movey = 0
res = 0
ok = false
}
}
}
if (activeobj > 0 && this.obj[activeobj].bigx && ok) {
if (wmap2[xr + yr * defxn] >= 0 && !this.obj[activeobj].flyer) {
} else {
if (this.obj[activeobj].flyer) {
i = activeobj
setmap(this.obj[i].x, this.obj[i].y, 250)
setmap(this.obj[i].x + 1, this.obj[i].y, 250)
}
for (xk = xr - 1; xk <= xr + 1; xk++) {
for (yk = yr - 1; yk <= yr + 1; yk++) {
if (wmap2[xk + yk * defxn] >= 0) {
if ((xr - xk) * (xr - xk) + (yr - yk) * (yr - yk) < len) {
if (this.obj[activeobj].flyer) {
if (getmap(xk, yk) != 250 || getmap(xk + 1, yk) != 250) {
continue
}
xrr = xk
yrr = yk
len = (xr - xk) * (xr - xk) + (yr - yk) * (yr - yk)
}
}
}
}
}
if (xrr != -1) {
xr = xrr
yr = yrr
xr_last = xr
yr_last = yr
movex = xr
movey = yr
if (this.obj[activeobj].x == xr && this.obj[activeobj].y == yr) {
movex = 0
movey = 0
res = 0
ok = false
}
} else {
movex = 0
movey = 0
res = 0
ok = false
}
}
}
if (activeobj > 0 && this.obj[activeobj].bigy && ok) {
if (wmap2[xr + yr * defxn] >= 0 && !this.obj[activeobj].flyer) {
} else {
if (this.obj[activeobj].flyer) {
i = activeobj
setmap(this.obj[i].x, this.obj[i].y, 250)
setmap(this.obj[i].x, this.obj[i].y + 1, 250)
}
for (xk = xr - 1; xk <= xr + 1; xk++) {
for (yk = yr - 1; yk <= yr + 1; yk++) {
if (wmap2[xk + yk * defxn] >= 0) {
if ((xr - xk) * (xr - xk) + (yr - yk) * (yr - yk) < len) {
if (this.obj[activeobj].flyer) {
if (getmap(xk, yk) != 250 || getmap(xk, yk + 1) != 250) {
continue
}
xrr = xk
yrr = yk
len = (xr - xk) * (xr - xk) + (yr - yk) * (yr - yk)
}
}
}
}
}
if (xrr != -1) {
xr = xrr
yr = yrr
xr_last = xr
yr_last = yr
movex = xr
movey = yr
if (this.obj[activeobj].x == xr && this.obj[activeobj].y == yr) {
movex = 0
movey = 0
res = 0
ok = false
}
} else {
movex = 0
movey = 0
res = 0
ok = false
}
}
}
}
if (ok && activeobj > 0) {
if (magicuse == 'leap' || magicuse == 'leap6') {
res = 0
ok = false
}
if (ok) {
set_cursor(1)
xr_go = xr
yr_go = yr
if (xr + yr * defxn != lastshad) {
if (lastshad > 0 && shado[lastshad]) {
set_visible(shado[lastshad], 0)
if (this.obj[activeobj].big) {
if (shado[lastshad + 1 + defxn]) {
set_visible(shado[lastshad + 1], 0)
set_visible(shado[lastshad + 1 + defxn], 0)
set_visible(shado[lastshad + defxn], 0)
}
}
if (this.obj[activeobj].bigx) {
set_visible(shado[lastshad + 1], 0)
}
if (this.obj[activeobj].bigy) {
set_visible(shado[lastshad + defxn], 0)
}
}
lastshad = xr + yr * defxn
set_visible(shado[xr + yr * defxn], 1)
if (this.obj[activeobj].big) {
set_visible(shado[xr + yr * defxn + 1], 1)
set_visible(shado[xr + yr * defxn + 1 + defxn], 1)
set_visible(shado[xr + yr * defxn + defxn], 1)
}
if (this.obj[activeobj].bigx) {
set_visible(shado[xr + yr * defxn + 1], 1)
}
if (this.obj[activeobj].bigy) {
set_visible(shado[xr + yr * defxn + defxn], 1)
}
}
res = 250
}
}
}
resa = this.in_mousemove(xr, yr, k, magicuse)
if (resa['res'] != 0) {
res = resa['res']
magicx = resa['magicx']
magicy = resa['magicy']
}
if (k == 'frenzy') {
ok = true
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
ok = false
}
if (ok) {
if (
(this.obj[mapobj[yr * defxn + xr]].hero ||
this.obj[mapobj[yr * defxn + xr]].warmachine ||
!this.obj[mapobj[yr * defxn + xr]].alive ||
this.obj[mapobj[yr * defxn + xr]].imind ||
this.obj[mapobj[yr * defxn + xr]].twistedmind ||
(magic[mapobj[yr * defxn + xr]]['wfr'] && magic[mapobj[yr * defxn + xr]]['wfr']['effect'] == 1) ||
this.obj[mapobj[yr * defxn + xr]].absolutepurity ||
this.obj[mapobj[yr * defxn + xr]].ifrenzy) &&
this.obj[mapobj[yr * defxn + xr]].nownumber > 0
) {
ok = false
}
if (ok && btype == _PVP_DIAGONAL_EVENT && checkwall2(this.obj[activeobj]['x'], this.obj[activeobj]['y'], xr, yr, activeobj)) {
ok = false
}
if (ok) {
var s = 'frenzy'
var addeff = 0
if (this.obj[activeobj].hero) {
if (isperk(activeobj, 78)) {
addeff += 5
}
if (isperk(activeobj, 89)) {
addeff += 3
}
}
var th =
(this.obj[mapobj[yr * defxn + xr]].nownumber - 1) * this.obj[mapobj[yr * defxn + xr]].maxhealth + this.obj[mapobj[yr * defxn + xr]].nowhealth
var pff =
getimmune2(activeobj, mapobj[yr * defxn + xr]) *
(this.obj[activeobj][s + 'effmain'] + (this.getspellpower(activeobj, magicuse) + addeff) * this.obj[activeobj][s + 'effmult'])
if (th > pff) ok = false
if (!ok) {
res = 0
} else {
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'frenzy'
magicx = xr
magicy = yr
}
}
}
if (!ok) res = 0
}
if (k == 'battledive') {
set_cursor(8)
ok = true
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
if (xr <= 0 || yr <= 0 || xr > defxn - 2 || yr > defyn) {
res = 0
ok = false
}
if (ok) {
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
}
}
if (ok) {
magicx = xr
magicy = yr
res = 'battledive'
defender = mapobj[yr * defxn + xr]
if (defender > 0 && defender < 1000) this.attackmonster(activeobj, xr, yr, xr, yr, defender)
}
}
if (k == 'circle_of_winter') {
set_cursor(6)
ok = true
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(-1, -1, 1, 1, false)
}
if (xr <= 0 || yr <= 0 || xr > defxn - 2 || yr > defyn) {
res = 0
ok = false
}
if (ok) {
lastshad = xr + yr * defxn
setshad(-1, -1, 1, 1, true)
setshad(0, 0, 0, 0, false)
}
}
if (ok) {
magicx = xr
magicy = yr
res = 'circle_of_winter'
this.calcmagic(activeobj, xr, yr, magicuse)
}
}
if (k == 'stonespikes') {
set_cursor(6)
ok = true
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
lastshad--
setshad(0, 0, 0, 0, false)
lastshad += 2
setshad(0, 0, 0, 0, false)
lastshad--
lastshad -= defxn
setshad(0, 0, 0, 0, false)
lastshad += 2 * defxn
setshad(0, 0, 0, 0, false)
lastshad -= defxn
}
if (xr <= 0 || yr <= 0 || xr > defxn - 2 || yr > defyn) {
res = 0
ok = false
}
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
lastshad--
setshad(0, 0, 0, 0, true)
lastshad += 2
setshad(0, 0, 0, 0, true)
lastshad--
lastshad -= defxn
setshad(0, 0, 0, 0, true)
lastshad += 2 * defxn
setshad(0, 0, 0, 0, true)
lastshad -= defxn
}
if (ok) {
magicx = xr
magicy = yr
res = 'stonespikes'
this.calcmagic(activeobj, xr, yr, magicuse)
}
}
if (k == 'wordofchief') {
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
!this.obj[i].warmachine &&
!this.obj[i].hero &&
i == mapobj[xr + yr * defxn] &&
this.obj[i].side == this.obj[activeobj].getside() &&
this.obj[i].nownumber > 0
) {
ok = true
break
}
}
if (!ok) {
res = 0
this.reset_temp_magic()
this.showatb()
} else {
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'wordofchief'
magicx = xr
magicy = yr
var eff = this.obj[activeobj][magicuse + 'effmain']
var init = eff * 100
var j = mapobj[lastshad]
if (this.obj[j]['nowinit'] - init < this.obj[activeobj]['nowinit']) {
init = Math.floor(this.obj[j]['nowinit'] - this.obj[activeobj]['nowinit'])
}
this.reset_temp_magic()
this.obj[mapobj[yr * defxn + xr]]['reset_init'] = -init
this.showatb()
}
}
if (k == 'wheeloffortune') {
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (i == mapobj[xr + yr * defxn] && this.obj[i].nownumber > 0 && !this.obj[i].hero && i != activeobj) {
ok = true
}
}
if (!ok) {
res = 0
} else {
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'wheeloffortune'
magicx = xr
magicy = yr
}
}
if (k == 'corpseeater') {
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
var maxh = this.obj[activeobj]['maxnumber'] * this.obj[activeobj]['maxhealth']
var nowh = (this.obj[activeobj]['nownumber'] - 1) * this.obj[activeobj]['maxhealth'] + this.obj[activeobj]['nowhealth']
big2 = 0
if (this.obj[activeobj].big) big2 = 1
var ok1 = false
if (nowh < maxh) {
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
var k = this.obj_array[k1]
var big = 0
if (this.obj[k]['big']) big = 1
if (
this.obj[k]['nownumber'] == 0 &&
this.obj[k]['alive'] &&
!this.obj[k]['warmachine'] &&
!this.obj[k]['hsm'] &&
this.obj[k].x >= xr &&
this.obj[k].x <= xr + big &&
this.obj[k].y >= yr &&
this.obj[k].y <= yr + big
) {
var ok = false
for (var x1 = this.obj[k]['x'] - 1 - big2; x1 <= this.obj[k]['x'] + 1 + big; x1++) {
for (var y1 = this.obj[k]['y'] - 1 - big2; y1 <= this.obj[k]['y'] + 1 + big; y1++) {
if (wmap2[x1 + y1 * defxn] >= 0) {
ok = true
break
}
}
if (ok) break
}
if (!ok) continue
var ok1 = true
for (var x1 = this.obj[k]['x']; x1 <= this.obj[k]['x'] + big; x1++) {
for (var y1 = this.obj[k]['y']; y1 <= this.obj[k]['y'] + big; y1++) {
if (mapobj[yr * defxn + xr] > 0) ok1 = false
}
}
if (ok1) break
}
}
}
if (!ok1) {
res = 0
} else {
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'corpseeater'
magicx = xr
magicy = yr
}
}
if (k == 'wavesofrenewal') {
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (i == mapobj[xr + yr * defxn] && this.obj[i].nownumber > 0 && !this.obj[i].hero && this.obj[i].side == this.obj[activeobj].getside()) {
ok = true
}
}
if (!ok) {
res = 0
} else {
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'wavesofrenewal'
magicx = xr
magicy = yr
}
}
if (k == 'angerofhorde') {
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
if (getmap(xr, yr) != 210) {
res = 0
} else {
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'angerofhorde'
magicx = xr
magicy = yr
if (stage.pole.obj[activeobj]['divinev']) {
this.calcdivinev(activeobj, xr, yr)
} else {
this.calcmagic(activeobj, xr, yr, magicuse)
}
}
}
if (k == 'spiritlink') {
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
ok = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
!this.obj[i].warmachine &&
!this.obj[i].immunity &&
!this.obj[i].enchantedarmor &&
!this.obj[i].hero &&
i == mapobj[xr + yr * defxn] &&
i != activeobj &&
this.obj[i].side == this.obj[activeobj].getside() &&
this.obj[i].nownumber > 0
) {
ok = true
break
}
}
if (!ok) {
res = 0
} else {
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
res = 'spiritlink'
magicx = xr
magicy = yr
}
}
if (k == 'setsnares') {
set_cursor(6)
ok = true
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
if (xr <= 0 || yr <= 0 || xr > defxn - 2 || yr > defyn || (getmap(xr, yr) != 250 && getmap(xr, yr) != 0)) {
res = 0
ok = false
if (getmap(xr, yr) == 210) {
showuron(1, snaresPossible(this.obj[activeobj], this.obj[mapobj[yr * defxn + xr]]))
}
} else {
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
}
}
if (ok) {
magicx = xr
magicy = yr
res = 'setsnares'
}
}
if (k == 'setmagicmine') {
set_cursor(6)
ok = true
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
if (xr <= 0 || yr <= 0 || xr > defxn - 2 || yr > defyn || (getmap(xr, yr) != 250 && getmap(xr, yr) != 0)) {
res = 0
ok = false
} else {
lastshad = xr + yr * defxn
setshad(0, 0, 0, 0, true)
}
}
if (ok) {
magicx = xr
magicy = yr
res = 'setmagicmine'
}
}
if (k == 'fearmyroar') {
set_cursor(6)
if (xr + yr * defxn != lastshad) {
if (lastshad > 0) {
setshad(0, 0, 0, 0, false)
}
}
this.reset_temp_magic()
this.showatb()
if (getmap(xr, yr) != 210) {
res = 0
} else {
ok = true
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (
(this.obj[i].hero ||
this.obj[i].warmachine ||
this.obj[i].absolutepurity ||
!this.obj[i].alive ||
this.obj[i].imind ||
this.obj[i].twistedmind ||
(magic[i]['wfr'] && magic[i]['wfr']['effect'] == 1)) &&
mapobj[yr * defxn + xr] == i &&
this.obj[i].nownumber > 0
) {
ok = false
break
}
if (
(this.obj[i].nownumber - 1) * this.obj[i].maxhealth + this.obj[i].nowhealth > this.obj[activeobj]['fearmyroar' + 'effmain'] &&
this.obj[i].nownumber > 0 &&
mapobj[yr * defxn + xr] == i
) {
ok = false
break
}
}
if (!ok) {
res = 0
} else {
lastshad = xr + yr * defxn
var defender = mapobj[lastshad]
if (this.obj[defender]['nowinit'] < 100) {
var init = 100
if (this.obj[defender]['nowinit'] - this.obj[activeobj]['nowinit'] + init > 100) {
init = Math.max(0, Math.floor(100 + this.obj[activeobj]['nowinit'] - this.obj[defender]['nowinit']))
}
this.reset_temp_magic()
this.obj[defender]['reset_init'] = init
this.showatb()
}
setshad(0, 0, 0, 0, true)
res = 'curse'
magicx = xr
magicy = yr
}
}
}
tUronkills = 0
tUronkills2 = 0
tPhysicalDamage = 0
tPhysicalDamage2 = 0
res = this.checkcast(k, res, xr, yr)
if (magicuse != '' && this.obj[activeobj]['hero'] && magicuse != 'raisedead' && magicuse != 'resurrection') {
var plus = 100
if (isperk(activeobj, 105)) plus = 90
if (isperk(activeobj, 106)) plus = 80
if (isperk(activeobj, 107)) plus = 70
if (isperk(activeobj, 85) && (magicuse == 'mbless' || magicuse == 'mdispel')) {
plus = 50
}
if (isperk(activeobj, 84) && (magicuse == 'mstoneskin' || magicuse == 'mdeflect_missile')) {
plus = 50
}
if (isperk(activeobj, 86) && (magicuse == 'mfast' || magicuse == 'mrighteous_might')) {
plus = 50
}
if (isperk(activeobj, 75) && (magicuse == 'mcurse' || magicuse == 'msuffering')) {
plus = 50
}
if (isperk(activeobj, 76) && (magicuse == 'mslow' || magicuse == 'mconfusion')) {
plus = 50
}
if (isperk(activeobj, 77) && magicuse == 'mdray') {
plus = 50
}
if (
magicuse == 'raisedead' &&
umelka[this.obj[activeobj]['owner']][0] == 2 &&
!magic[activeobj]['nps'] &&
this.obj[activeobj]['hero'] &&
magic[activeobj]['cls'] &&
magic[activeobj]['cls']['effect'] == 1
) {
kk = 1 - 0.03 * umelka[this.obj[activeobj]['owner']][2]
plus = Math.round(plus * kk)
}
if (plus != 100) {
this.obj[activeobj]['reset_init'] = 0
this.obj[activeobj]['plus_init'] = plus
this.showatb(activeobj)
this.obj[activeobj]['was_atb'] = 1
}
}
var a = 1
switch (a) {
case 1:
if (k == enemy) {
if (activeobj > 0 && magic[activeobj]['noa'] && magic[activeobj]['noa']['nowinit'] > 0) {
clearshadway()
set_visible(csword, 0)
set_cursor(5)
res = 200
return 0
}
if (
activeobj > 0 &&
this.obj[activeobj].shooter &&
this.obj[activeobj].shots > 0 &&
((!shiftdown && likeshift <= shiftcount) || this.obj[activeobj].hero)
) {
xaa = this.obj[activeobj].x
yaa = this.obj[activeobj].y
xaa1 = xaa
yaa1 = yaa
b = 0
if (this.obj[activeobj].big) {
if (xaa < xr) {
xaa++
}
if (yaa < yr) {
yaa++
}
}
if (this.obj[activeobj].bigx) {
if (xaa < xr) {
xaa++
}
}
if (this.obj[activeobj].bigy) {
if (yaa < yr) {
yaa++
}
}
var bigx = this.obj[activeobj]['big']
var bigy = this.obj[activeobj]['big']
if (this.obj[activeobj]['bigx']) bigx = 1
if (this.obj[activeobj]['bigy']) bigy = 1
range = (xaa - xr) * (xaa - xr) + (yaa - yr) * (yaa - yr)
ok = true
for (xb = -1; xb <= 1 + bigx; xb++) {
for (yb = -1; yb <= 1 + bigy; yb++) {
if (
yb + yaa1 >= 1 &&
yb + yaa1 <= defyn &&
xaa1 + xb >= 0 &&
xaa1 + xb <= defxn - 1 &&
getmap(xaa1 + xb, yaa1 + yb) == 210 &&
mapobj[xaa1 + xb + (yaa1 + yb) * defxn] > 0 &&
this.obj[mapobj[xaa1 + xb + (yaa1 + yb) * defxn]].statix != 1
) {
ok = false
}
}
}
if ((range > 2 && ok) || this.obj[activeobj].hero || this.obj[activeobj].ballista || this.obj[activeobj].warmachine) {
if (!this.obj[activeobj].hero) {
if (
(Math.sqrt(range) > this.obj[activeobj].range && !this.obj[activeobj].shadowattack) ||
(iswalls && !this.obj[activeobj].hero && checkwall(xaa, yaa, xr, yr)) ||
((!this.obj[activeobj].siegewalls || btype == 118 || !this.obj[mapobj[yr * defxn + xr]].stone) &&
iswalls2 &&
!this.obj[activeobj].hero &&
checkwall2(xaa, yaa, xr, yr, activeobj))
) {
set_cursor(4)
} else {
set_cursor(3)
}
}
if (this.obj[activeobj].hero) {
set_cursor(2)
if (this.obj[activeobj].id == 59 || this.obj[activeobj].id == 54 || this.obj[activeobj].id == 48) {
set_cursor(3)
}
}
if (this.obj[activeobj].magicattack || this.obj[activeobj].piercingbolt) {
lastmag = xr + yr * defxn
lastshad = -2
this.magshot(xr, yr)
}
attackx = xaa1
attacky = yaa1
res = 210.5
if (magicuse == 'harpoonstrike') {
set_cursor(8)
magicx = attackx
magicy = attacky
}
if (cur_cursor == 2 || cur_cursor == 4 || cur_cursor == 3) {
if (this.obj[activeobj]['hero'] && magic[activeobj]['brb']) {
var init = 20
var defender = mapobj[xr + yr * defxn]
if (this.obj[defender]['nowinit'] - this.obj[activeobj]['nowinit'] + init > 100) {
init = Math.max(0, Math.floor(100 + this.obj[activeobj]['nowinit'] - this.obj[defender]['nowinit']))
}
this.reset_temp_magic()
this.obj[defender]['reset_init'] = init
this.showatb()
this.obj[activeobj]['was_atb'] = 1
}
this.check_shoot_abilities(activeobj, this.obj[activeobj].x, this.obj[activeobj].y, xr, yr)
this.attackmonster(activeobj, xr, yr, this.obj[activeobj].x, this.obj[activeobj].y, mapobj[yr * defxn + xr], 1)
this.checkProbabilitySkill(activeobj, attackx, attacky, xr, yr, 1)
showuron()
}
break
}
}
var def = mapobj[yr * defxn + xr]
if (range <= 2 && magicuse == 'harpoonstrike') return 0
if (def <= 0 || !this.obj[def]) return 0
if (activeobj > 0 && this.obj[activeobj].shootonly) {
set_visible(csword, 0)
set_cursor(5)
res = 200
return 0
}
if (
(magicuse == 'harmtouch' && (this.obj[def].warmachine || this.obj[def].stone || this.obj[def].portal || this.obj[def].maxhealth >= 400)) ||
(magicuse == 'layhands' && (!this.obj[def].alive || def == activeobj)) ||
(magicuse == 'orderofchief' && def == activeobj)
) {
set_cursor(0)
crun_visible2 = false
clearshadway()
return 0
}
set_cursor(2)
if (activeobj > 0 && this.obj[activeobj].strikeandreturn && (shiftdown || likeshift > shiftcount)) {
set_cursor(7)
}
var xo = this.obj[def].x
var yo = this.obj[def].y
var xp = 0,
yp = 0,
xpp = 0,
ypp = 0,
dd = 0,
bdd = 100000,
bxp = 0,
byp = 0
var bigx = 0,
bigy = 0,
bxr = 0,
byr = 0
if (this.obj[def].bigx || this.obj[def].big) bigx = 1
if (this.obj[def].bigy || this.obj[def].big) bigy = 1
var one_place = 0
if (xr_go > 0) {
for (var xt = xo; xt <= xo + bigx; xt++)
for (var yt = yo; yt <= yo + bigy; yt++)
for (xp = -1 - this.obj[activeobj].big + xt; xp <= xt + 1; xp++)
for (yp = -1 - this.obj[activeobj].big + yt; yp <= yt + 1; yp++) if (xr_go == xp && yr_go == yp) one_place = 1
}
if (one_place == 0) {
xr_go = -1
yr_go = -1
}
if (activeobj > 0) {
for (var xt = xo; xt <= xo + bigx; xt++)
for (var yt = yo; yt <= yo + bigy; yt++)
for (xp = -1 - this.obj[activeobj].big + xt; xp <= xt + 1; xp++)
for (yp = -1 - this.obj[activeobj].big + yt; yp <= yt + 1; yp++) {
if (wmap_a[yp * defxn + xp] >= 0) {
if (magicuse == 'incinerate' && (xp != this.obj[activeobj].x || yp != this.obj[activeobj].y)) continue
xpp = (xp - xt + 1 + this.obj[activeobj].big + 0.5) / (3 + this.obj[activeobj].big)
ypp = (yp - yt + 1 + this.obj[activeobj].big + 0.5) / (3 + this.obj[activeobj].big)
dd = (xt - 1 + xpp - r.x) * (xt - 1 + xpp - r.x) + (yt - 1 + ypp - r.y) * (yt - 1 + ypp - r.y)
if (android && one_place && (xr_go != xp || yr_go != yp)) continue
if (dd < bdd) {
bdd = dd
bxp = xp
byp = yp
bxr = xt + xpp
byr = yt + ypp
}
}
}
} else {
break
}
ac = 200
set_visible(csword, 1)
if (bdd < 100000) {
ac = 0
xr = Math.floor(bxr)
yr = Math.floor(byr)
xr_last = xr
yr_last = yr
xb = bxp - xr
yb = byp - yr
xt = xr
yt = yr
xt2 = r.x + 1
yt2 = r.y + 1
xt2 = bxr
yt2 = byr
ac = (Math.atan((yt + 0.5 - yt2) / (xt + 0.5 - xt2)) * 180) / Math.PI
if (xt + 0.5 - xt2 >= 0) ac = 180 + ac
}
if (ac == 200) {
set_visible(csword, 0)
set_cursor(5)
res = 200
break
}
a = ac
if (xr + xb + (yr + yb) * defxn != lastshad) {
if (lastshad > 0) {
set_visible(shado[lastshad], 0)
if (this.obj[activeobj].big) {
if (shado[lastshad + 1]) set_visible(shado[lastshad + 1], 0)
if (shado[lastshad + 1 + defxn]) set_visible(shado[lastshad + 1 + defxn], 0)
if (shado[lastshad + defxn]) set_visible(shado[lastshad + defxn], 0)
}
if (this.obj[activeobj].bigx) {
set_visible(shado[lastshad + 1], 0)
}
if (this.obj[activeobj].bigy) {
set_visible(shado[lastshad + defxn], 0)
}
}
lastshad = xr + xb + (yr + yb) * defxn
set_visible(shado[xr + xb + (yr + yb) * defxn], 1)
if (this.obj[activeobj].big) {
set_visible(shado[xr + xb + (yr + yb) * defxn + 1], 1)
set_visible(shado[xr + xb + (yr + yb) * defxn + 1 + defxn], 1)
set_visible(shado[xr + xb + (yr + yb) * defxn + defxn], 1)
}
if (this.obj[activeobj].bigx) {
set_visible(shado[xr + xb + (yr + yb) * defxn + 1], 1)
}
if (this.obj[activeobj].bigy) {
set_visible(shado[xr + xb + (yr + yb) * defxn + defxn], 1)
}
}
attack_xr = xr
attack_yr = yr
xr_last = xr
yr_last = yr
attackx = xr + xb
attacky = yr + yb
if (
magicuse == 'harmtouch' ||
magicuse == 'feralcharge' ||
magicuse == 'unstoppablecharge' ||
magicuse == 'allaroundslash' ||
magicuse == 'slam' ||
magicuse == 'mightyslam' ||
magicuse == 'layhands' ||
magicuse == 'orderofchief' ||
magicuse == 'leap' ||
magicuse == 'leap6' ||
magicuse == 'incinerate'
) {
if (
magicuse == 'leap' ||
magicuse == 'leap6' ||
magicuse == 'feralcharge' ||
magicuse == 'unstoppablecharge' ||
magicuse == 'allaroundslash' ||
magicuse == 'slam' ||
magicuse == 'mightyslam' ||
magicuse == 'harpoonstrike' ||
magicuse == 'incinerate'
) {
set_cursor(8)
} else {
set_cursor(6)
}
magicx = attackx
magicy = attacky
set_visible(csword, 0)
}
if (magicuse == 'hailstorm') {
magicx = attackx
magicy = attacky
}
this.check_abilities(activeobj, attackx, attacky, xr, yr)
if (cur_cursor == 2 || cur_cursor == 7) {
this.attackmonster(activeobj, xr, yr, attackx, attacky, def, 0)
this.checkProbabilitySkill(activeobj, attackx, attacky, xr, yr)
showuron()
}
if (magicuse == 'leap') {
tUronkills = 0
tUronkills2 = 0
tPhysicalDamage = 0
tPhysicalDamage2 = 0
var dx = Math.abs(this.obj[activeobj]['x'] - attackx)
var dy = Math.abs(this.obj[activeobj]['y'] - attacky)
var diag = Math.abs(dx - dy) + 1.5 * (Math.max(dx, dy) - Math.abs(dx - dy))
var monatt = Math.floor((this.obj[activeobj]['attack'] + this.obj[activeobj]['attackaddon'] + this.obj[activeobj]['rageattack']) * diag * 0.1)
this.obj[activeobj]['attackaddon'] += monatt
setmap(this.obj[activeobj].x, this.obj[activeobj].y, 1, false)
this.attackmonster(activeobj, xr, yr, attackx, attacky, def, 0)
this.obj[activeobj]['attackaddon'] -= monatt
showuron()
}
if (magicuse == 'leap6') {
tUronkills = 0
tUronkills2 = 0
tPhysicalDamage = 0
tPhysicalDamage2 = 0
var dx = Math.abs(this.obj[activeobj]['x'] - attackx)
var dy = Math.abs(this.obj[activeobj]['y'] - attacky)
var diag = Math.abs(dx - dy) + 1.5 * (Math.max(dx, dy) - Math.abs(dx - dy))
var koef = 1 + diag * 0.05
setmap(this.obj[activeobj].x, this.obj[activeobj].y, 1, false)
this.attackmonster(activeobj, xr, yr, attackx, attacky, def, 0, koef, 'lep')
showuron()
}
set_angle(csword, Math.round(a))
var b = getxa(xr, yr)
xsize2 = b.x[2] - b.x[3]
var scale = this.scaling
set_scaleX(csword, scale)
set_scaleY(csword, scale)
set_X(csword, (b.x[3] + b.x[2]) / 2 + (Math.cos((a / 180) * Math.PI) * xsize2) / 2)
set_Y(csword, (b.y[3] + b.y[1]) / 2 + (Math.sin((a / 180) * Math.PI) * (b.y[1] - b.y[3])) / 2)
res = 210
}
break
}
if (res == 0) {
crun_visible2 = false
xr_go = -1
yr_go = -1
set_cursor(0)
}
if (res != 210) {
set_visible(csword, 0)
}
if (res == 0 || res == 210.5 || res == 200) {
clearshadway()
}
if (res == 200 && cancelway) {
this.getnearpos(xr, yr)
}
this.check_uron_abil(res, xr, yr)
if (crun_visible2) {
} else {
set_cursor(0)
}
draw_ground()
}
stage.pole.commandsproc = unsafeWindow.commandsproc = function () {
ccounter++
if (!android && inserted && ccounter % 4 == 0) {
ccounter = 0
if (KeyisDown(16)) shiftdown = true
else shiftdown = false
if (KeyisDown(17)) {
ctrldown = true
this.onMouseMoveFlash(false, mousePos.x, mousePos.y, 1)
} else {
ctrldown = false
}
if (lastshiftdown != shiftdown) {
lastshiftdown = shiftdown
movecounter = 0
}
}
movecounter++
if (activeobj && this.obj[activeobj] && this.obj[activeobj].firstaid) {
magicuse = 'firstaid'
}
if (!loading) {
if (btype == 86 || btype == 87) {
soundon = false
}
if (soundeff == -1 && btype != 86 && btype != 87 && btype != 82) {
mousevisible = true
}
}
if (!initialized) {
return 0
}
if (soundeff == -1 && btype != 86 && btype != 87 && btype != 82) {
if (typeof unsafeWindow.cordova_client != 'undefined' && cordova_client) {
soundeff = 1
} else {
show_sound_dialog()
}
}
if (firstbattle && !buttons_visible['win_dialog']) {
if (firstbattle == 2 && btype == 87) {
if (!buttons_visible['win_Mission'] && !finished && showed_hint[2] == 0 && activeobj > 0 && inserted) {
fastloadmy('battle.php?reg_loaded=2&pl_id=' + player + '&warid=' + warid + '&rand=' + mathrandom())
showed_hint[2] = 1
hide_button('info_on')
hide_war_buttons(1)
show_button('win_Mission')
if (lang == 0) {
document.getElementById('mission_header').innerHTML = 'Задание: захватить шахту'
document.getElementById('win_Mission_txt').innerHTML =
'Теперь в вашем распоряжении целая армия, состоящая из различных отрядов. Текущая задача - разгромить пограничников и захватить шахту. \n\nВы можете сами наносить удары на расстоянии, а так же давать любые указания своим отрядам.\nВаш союзник-эльфийка поможет победить!'
}
if (lang == 1) {
document.getElementById('mission_header').innerHTML = 'Mission: Break through the security'
document.getElementById('win_Mission_txt').innerHTML =
'You have an army of several different units at your disposal.\n\nCurrent mission - Defeat the Imperial border guards and occupy the sawmill. Your hero can strike them from a safe distance and order the units under your command. Your partner, the she-elf, will help you in your mission.'
}
}
} else if (firstbattle == 2) {
if (!buttons_visible['win_Mission'] && !finished && showed_hint[2] == 0 && activeobj > 0 && inserted) {
if (!no_reg_stat) {
fastloadmy('battle.php?reg_anim_finish=1&pl_id=' + player + '&warid=' + warid + '&rand=' + mathrandom())
}
showed_hint[2] = 1
hide_button('info_on')
hide_war_buttons(1)
show_button('win_Mission')
if (lang == 0) {
document.getElementById('mission_header').innerHTML = 'Добро пожаловать в мир Героев!'
var txts =
'Это увлекательная игра с разнообразными боями, гильдиями, квестами и кампаниями. В неё можно играть на любом устройстве - компьютере и телефоне.<br><br><b>Преимущество перед другими онлайн-играми:<br>1. Регулярно проходят боевые ивенты;<br>2. Не нужно быть топ-игроком или высоким уровнем, чтобы показывать отличные результаты в ивенте;<br>3. Разнообразный игровой мир (бои, квесты, карты, рулетка, экономика и т.п.)<br>4. Не требует реальных денег.</b><br><br>А пока вам необходимо подойти и разгромить вражескую нежить.'
document.getElementById('win_Mission_txt').innerHTML = txts
}
if (lang == 1) {
document.getElementById('mission_header').innerHTML = 'Welcome to the world of heroes!'
var txts =
'This is a fascinating game with various battles, guilds, quests and campaigns. You may enjoy it on your phone or computer. Whichever suits you best.<br><br><b>Advantages over other online games:<br>1. Scheduled regular combat events;<br>2. No need to be among the top players to demonstrate great results in event battles;<br>3. Diverse gaming experience (PVP battles, quests, campaigns, card game, economy and many more);<br>4) Free to play. You can be top player without donations!</b><br><br>Will you join now and annihilate this army of the undead?'
document.getElementById('win_Mission_txt').innerHTML = txts
}
if (document.getElementById('win_Mission_txt').offsetHeight > document.getElementById('MissionItem_txt').offsetHeight * 1.22) {
document.getElementById('win_Mission_txt').style['font-size'] = '65%'
}
}
} else {
if (initialized && showed_hint[1] == 0 && !inserted) {
showhint(1)
} else if (!buttons_visible['win_Mission'] && showed_hint[2] == 0 && activeobj > 0 && inserted) {
if (demomode && lang == 0) {
document.getElementById('mission_header').innerHTML = 'Пробный бой'
texts[2] =
'Вы находитесь в новой игре Герои Войны и Денег. Это тактическая стратегия с элементами RPG и экономики. Здесь вы сможете реализовать все свои способности, постоянно развиваясь и улучшая свои навыки. � егулярные обновления сохранят ваш интерес к игре надолго.\n\nПобеди в бою и начинай играть!'
}
if (demomode && lang == 1) {
document.getElementById('mission_header').innerHTML = 'Demo combat'
texts[2] =
'You have embarked on a new journey with this game - Lords of War and Money. This is a tactical strategy game with RPG elements and a world with well-developed self-sustaining economy. Here, you can realize all your fantasies, constantly developing and improving your skills. Regular updates will keep you interested forever. Wait no longer and into battle!'
}
showhint(2)
} else if (!buttons_visible['win_Mission'] && demomode != 1 && showed_hint[3] == 0 && showed_hint[2] == 1 && activeobj > 0 && inserted) {
showhint(3)
} else if (
!buttons_visible['win_Mission'] &&
demomode != 1 &&
showed_hint[4] == 0 &&
showed_hint[3] == 1 &&
activeobj > 0 &&
inserted &&
this.obj[activeobj].hero != 1 &&
this.obj[activeobj].shooter != 1
) {
showhint(4)
} else if (
!buttons_visible['win_Mission'] &&
showed_hint[5] == 0 &&
(showed_hint[3] == 1 || demomode) &&
activeobj > 0 &&
inserted &&
this.obj[activeobj].hero == 1
) {
showhint(5)
} else if (
!buttons_visible['win_Mission'] &&
showed_hint[6] == 0 &&
(showed_hint[3] == 1 || demomode) &&
activeobj > 0 &&
inserted &&
this.obj[activeobj].hero != 1 &&
this.obj[activeobj].shooter == 1
) {
showhint(6)
}
}
}
if (gpause) {
return 0
}
if (someactive) {
ok = false
for (i = 1; i <= magicscount; i++) {
if (((magics[i].doing != '' && magics[i].doing != undefined) || (magics[i].cmd != '' && magics[i].cmd != undefined)) && magics[i] != undefined) {
ok = true
break
}
}
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (this.obj[i].active || (this.obj[i].doing != '' && this.obj[i].doing != undefined) || this.obj[i].donow2 == 1) {
if (this.obj[i].bomb) continue
ok = true
break
}
}
someactive = ok
}
if (!someactive) {
this['nowhit'] = -1
}
if (command != '') {
k = tointeger(command.substr(1, 3))
current = k
cmd = command.substr(0, 1)
if (cmd == 'S' && !someactive) {
tmp = command.substr(1, 18)
curAbil = tmp
}
}
let command_copy = command
if (command_copy.indexOf('psc') != -1 && !someactive) {
let phmCommand = command_copy.substr(command_copy.indexOf('psc'), 18)
let a = tointeger(phmCommand.substr(3, 3))
let d = tointeger(phmCommand.substr(6, 3))
psc[d] = a
}
if (command_copy.indexOf('psa') != -1 && !someactive) {
let phmCommand = command_copy.substr(command_copy.indexOf('psa'), 18)
let a = tointeger(phmCommand.substr(3, 3))
let d = tointeger(phmCommand.substr(6, 3))
psa[d] = a
}
if (command_copy.indexOf('Sphm') != -1 && !someactive) {
let phmCommand = command_copy.substr(command_copy.indexOf('Sphm'), 18)
let source = Number(phmCommand.substr(12, 3))
let phantom = Number(phmCommand.substr(7, 3))
if (phm[phantom] === undefined) {
phm[phantom] = source
}
}
while (command_copy.substr(0, 1) == 'S' && !someactive) {
if (command_copy.substr(1, 3) == 'lzb') {
stage.pole.incrementParam(Number(command_copy.substr(4, 3)), 'hitcount', -1)
}
command_copy = command_copy.substr(19)
}
for (i in this.obj) {
if (
this.obj[phm[i]] !== undefined &&
this.obj[i].data_string !== undefined &&
this.obj[i].data_string.indexOf('phm100000000001') != -1 &&
this.obj[i]['phm'] === undefined
) {
this.obj[i]['luckcount'] = this.obj[phm[i]]['luckcount'] === undefined ? 0 : this.obj[phm[i]]['luckcount']
this.obj[i]['hitcount'] = this.obj[phm[i]]['hitcount'] === undefined ? 0 : this.obj[phm[i]]['hitcount']
this.obj[i]['turnCount'] = this.obj[phm[i]]['turnCount'] === undefined ? 0 : this.obj[phm[i]]['turnCount']
this.obj[i]['moraleCount'] = this.obj[phm[i]]['moraleCount'] === undefined ? 0 : this.obj[phm[i]]['moraleCount']
this.obj[i]['phm'] = 1
}
// if ((this.obj[gate[i]] !== undefined) && (magic[i]) && (magic[i]['sum']) && (magic[i]['sum']['effect'] == 2) && (this.obj[i]["gate"] === undefined)) {
// this.obj[i]["luckcount"] = this.obj[gate[i]]["luckcount"] === undefined ? 0 : this.obj[gate[i]]["luckcount"];
// this.obj[i]["hitcount"] = this.obj[gate[i]]["hitcount"] === undefined ? 0 : this.obj[gate[i]]["hitcount"];
// this.obj[i]["gate"] = 1;
// }
}
this.calcComs_new()
this.calcComs()
if (srcafterload != undefined && srcafterload != '') {
srcafterload = ''
}
}
stage.pole.addself = unsafeWindow.addself = function (i, mname, init, eff, caster) {
if (mname == 'lcr' || mname == 'wof') {
let cre = stage.pole.obj[i]
cre['hitcount'] = 0
cre['luckcount'] = 0
}
if (mname == 'mrl') {
stage.pole.clearPar(i, 'morale')
if (stage.pole.obj[i]['checkMrl'] === undefined || stage.pole.obj[i]['checkMrl'] == 0) {
stage.pole.obj[i]['checkMrl'] = 1
}
}
if (mname == 'usd' && stage.pole.obj[i].id != 579) {
//djinn_vizier ?
console.log('1')
stage.pole.incrementParam(i, 'turnCount', -1)
}
var s = '',
mn = '',
meffect = ''
if (!magic[i]) return false
if (magic[i][mname]) {
if (mname != 'brf') {
stage[war_scr].dispelmagic(i, mname, magic[i][mname]['effect'])
}
}
magic[i][mname] = Array()
magic[i][mname]['nowinit'] = init
magic[i][mname]['effect'] = eff
if (caster) {
magic[i][mname]['caster'] = caster
}
if (init <= 0) {
magic[i][mname] = 0
}
stage[war_scr].convertfromselfmagic(i, 1)
}
stage.pole.showmagicinfo = unsafeWindow.showmagicinfo = function (i, t = 0) {
var k = 0,
bit = 0
mcount = -1
;(mname = []), (minit = []), (meffect = []), (mcast = []), (mdo = []), (mtype = []), (mperc = []), (out = '')
var showeff = 1
mcount = -1
var tmp = i
convertfromselfmagic2(i)
var len = this.obj_array.length
if (!this.obj[i].hero)
for (var k1 = 0; k1 < len; k1++) {
k = this.obj_array[k1]
if (this.obj[k].owner == this.obj[i].owner && this.obj[k].hero) {
i = k
convertfromselfmagic2(i)
break
}
}
var plus = '',
color = 0
var dat = '<table>'
i = tmp
var enter = false
if (!enter) {
if (lang == 0) {
dat += '<tr><td>Тип</td><td width=10></td><td>Эффект</td><td width=10></td><td>Время</td></tr>'
}
if (lang == 1) {
dat += '<tr><td>Type</td><td width=10></td><td>Effect</td><td width=10></td><td>Time</td></tr>'
}
}
if (this.obj[tmp].hero) {
make_perks_html(this.obj[i].owner, stage[war_scr].subpath)
} else {
if (document.getElementById('hero_info_perks')) {
document.getElementById('hero_info_perks').innerHTML = ''
document.getElementById('hero_info_perks').style.display = 'none'
}
}
combat_was_vrag = Array()
for (k = 0; k <= mcount; k++) {
this.detectmagic(mname[k], k, tmp)
if (minit[k] == 100000 && t == 1) {
continue
}
if (minit[k] > 0 && mdo[k] != '' && (meffect[k] > 0 || meffect[k] == ' ' || mname[k] == 'hyp')) {
enter = true
plus = ''
if (mtype[k] == 0) {
color = '#0105b4'
}
if (mtype[k] == -1) {
color = t ? '#ef312c' : '#b40501'
}
if (mtype[k] == 1) {
color = t ? '#649615' : '#3f5b13'
}
if (mtype[k] == 1) {
plus = '+'
}
if (mtype[k] == -1 && mname[k] != 'mmn') {
plus = '-'
}
if (mname[k] == 'frd') {
mcast[k] = lang ? 'Defense' : 'Защита'
}
dat += '<tr style="color: ' + color + ';"><td>' + mcast[k] + '</td><td></td>'
dat += '<td>'
if (mtype[k] == 0) {
} else {
if (meffect[k] == ' ') {
meffect[k] = ''
plus = ''
mperc[k] = ''
}
let d = t
if (mname[k] == 'wof') {
d = 0
}
dat += (d != 1 ? mdo[k] : '') + ' ' + plus + meffect[k] + mperc[k]
}
dat += '</td><td> </td>'
if (minit[k] == 100000) {
dat += '<td>-</td></tr>'
} else {
dat += '<td>' + (minit[k] / 100).toFixed(2) + '</td></tr>'
}
}
}
if (!enter) {
if (lang == 0) {
dat = '<tr><td>Эффекты отсутствуют</td></tr>'
}
if (lang == 1) {
dat = '<tr><td>No effects</td></tr>'
}
}
dat += '</table>'
document.getElementById('effects_list').innerHTML = dat
document.getElementById('effects_info_head').innerHTML = this.get_name_html(i)
return dat
}
stage.pole.calcdivinev = unsafeWindow.calcdivinev = function (i, xr, yr) {
Totalmagicdamage = 0
Totalmagickills = 0
var ok = false
var xx = 0,
yy = 0,
xp = 0,
yp = 0
mul = 1
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
var j = this.obj_array[k1]
this.obj[j]['attacked'] = 1
this.obj[j]['attacked2'] = 1
}
var separhsum = this.obj[mapobj[xr + yr * defxn]].separhsum ?? 0
var eff = (this.obj[i]['divineveffmain'] + Math.round(this.obj[i]['divineveffmult'] * Math.pow(this.obj[i]['nownumber'], 0.7))) * Math.sqrt(separhsum)
this.attackmagic(i, mapobj[xr + yr * defxn], eff, 'other', 'divinev', 0, 0, 0)
showuron(1)
}
stage.pole.calcflamestrike = unsafeWindow.calcflamestrike = function (i, xr, yr, magicuse, koef) {
Totalmagicdamage = 0
Totalmagickills = 0
var ok = false
var xx = 0,
yy = 0,
xp = 0,
yp = 0
mul = 1
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
var j = this.obj_array[k1]
this.obj[j]['attacked'] = 1
this.obj[j]['attacked2'] = 1
}
var herd = 0
var hera = 0
for (var k1 = 0; k1 < len; k1++) {
k = this.obj_array[k1]
if (this.obj[k].hero && this.obj[k].owner == this.obj[mapobj[xr + yr * defxn]].owner) herd = k
if (this.obj[k].hero && this.obj[k].owner == this.obj[i].owner) hera = k
}
let b = 0
if (magic[hera] && magic[hera]['mle']) {
b = magic[hera]['mle']['effect']
magic[hera]['mle']['effect'] = 0
}
if (magic[herd] && magic[herd]['msk']) {
if (magic[herd]['mld']) {
let b = magic[herd]['mld']['effect']
magic[herd]['mld']['effect'] = magic[herd]['msk']['effect']
this.attackmonster(i, xr, yr, xr, yr, mapobj[xr + yr * defxn], 0, koef)
magic[herd]['mld']['effect'] = b
} else {
magic[herd]['mld'] = []
magic[herd]['mld']['effect'] = magic[herd]['msk']['effect']
this.attackmonster(i, xr, yr, xr, yr, mapobj[xr + yr * defxn], 0, koef)
delete magic[herd]['mld']
}
} else {
this.attackmonster(i, xr, yr, xr, yr, mapobj[xr + yr * defxn], 0, koef)
}
if (b != 0) {
magic[hera]['mle']['effect'] = b
}
showuron()
}
stage.pole.walk = unsafeWindow.walk = function (x, y) {
loadmy(
'battle.php?warid=' +
warid +
'&move=1&pl_id=' +
player +
'&my_monster=' +
activeobj +
'&x=' +
x +
'&y=' +
y +
'&lastturn=' +
lastturn +
'&lastmess=' +
lastmess +
'&lastmess2=' +
lastmess2 +
'&rand=' +
mathrandom()
)
}
stage.pole.calcchainlighting = unsafeWindow.calcchainlighting = function (i, xr, yr, magicuse) {
Totalmagicdamage = 0
Totalmagickills = 0
var ok = false
var xx = 0,
yy = 0,
xp = 0,
yp = 0
mul = 1
if (magicpower == true) mul = 1.5
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
var j = this.obj_array[k1]
this.obj[j]['attacked'] = 1
this.obj[j]['attacked2'] = 1
}
var xx = 0,
yy = 0,
xp = 0,
yp = 0
if (magicuse == 'chainlighting') {
var lasto = mapobj[xr + yr * defxn]
var j = lasto
this.obj[j]['attacked2'] = 0
var eff = this.obj[activeobj][magicuse + '_magiceff']
if (this.obj[activeobj]['spmult'] > 1) {
eff = Math.round(
this.obj[activeobj]['spmult'] *
(this.obj[activeobj]['chainlightingeffmain'] + this.obj[activeobj]['chainlightingeffmult'] * Math.pow(this.obj[activeobj]['nownumber'], 0.7))
)
}
this.attackmagic(i, mapobj[xr + yr * defxn], Math.round(eff * mul), 'air', 'lighting', 0, 0, 0)
let b = this.obj[j]['nownumber']
this.obj[j]['nownumber'] = this.obj[j]['nownumber'] + '\n#' + 1
this.obj[j].set_number()
this.obj[j]['nownumber'] = b
let bDamage = Totalmagicdamage
targetMagicdamage = Totalmagicdamage
let totalh = (this.obj[j]['nownumber'] - 1) * this.obj[j]['maxhealth'] + this.obj[j]['nowhealth']
targetMagickills = Math.floor(Math.min(targetMagicdamage, totalh) / this.obj[j]['maxhealth'])
let nowhealth = this.obj[j]['nowhealth'] - (Math.min(targetMagicdamage, totalh) - targetMagickills * this.obj[j]['maxhealth'])
if (nowhealth <= 0) targetMagickills++
this.obj[j]['nownumber'] = b
var penalty = Array(1, 0.5, 0.25, 0.125)
let ambiguity = []
let f = true
for (var zz = 1; zz <= 3; zz++) {
this.obj[lasto]['attacked'] = 0
br = 0
bj = 0
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
j = this.obj_array[k1]
rr =
(this.obj[lasto]['x'] - this.obj[j]['x']) * (this.obj[lasto]['x'] - this.obj[j]['x']) +
(this.obj[lasto]['y'] - this.obj[j]['y']) * (this.obj[lasto]['y'] - this.obj[j]['y'])
if (
(rr <= br || br == 0) &&
this.obj[j]['nownumber'] > 0 &&
this.obj[j]['x'] < 20 &&
!this.obj[j]['hero'] &&
!this.obj[j]['stone'] &&
this.obj[j]['y'] >= 0 &&
!this.obj[j]['rock'] &&
this.obj[j]['attacked2'] == 1
) {
if (rr == br) {
ambiguity.push(j)
} else {
ambiguity = [j]
}
br = rr
bj = j
}
}
if (zz == 1) {
console.log(ambiguity)
console.log(br)
}
if (bj > 0) {
lasto = bj
x1 = this.obj[bj]['x']
y1 = this.obj[bj]['y']
j = bj
this.obj[j]['attacked2'] = 0
this.attackmagic(i, j, Math.floor(Math.round(eff * mul) * penalty[zz]), 'air', 'lighting', 0, 0, 0)
let b = this.obj[j]['nownumber']
bDamage = Totalmagicdamage
if (!f) {
continue
}
if (ambiguity.length > 1) {
f = false
for (let i in ambiguity) {
let b1 = this.obj[ambiguity[i]]['nownumber']
this.obj[ambiguity[i]]['nownumber'] = this.obj[ambiguity[i]]['nownumber'] + '\n#' + (zz + 1) + ' ???'
this.obj[ambiguity[i]].set_number()
this.obj[ambiguity[i]]['nownumber'] = b1
setshadAbs(this.obj[ambiguity[i]]['x'], this.obj[ambiguity[i]]['y'], 1)
this.obj[ambiguity[i]]['needSetNumber'] = 1
}
} else {
this.obj[j]['nownumber'] = this.obj[j]['nownumber'] + '\n#' + (zz + 1)
setshadAbs(x1, y1, 1)
this.obj[j].set_number()
this.obj[j]['nownumber'] = b
}
}
}
ok = true
}
if (
ok &&
magicuse != '' &&
(magicuse == 'circle_of_winter' || magicuse == 'icebolt') &&
((this.obj[activeobj]['hero'] && isperk(activeobj, 99)) || this.obj[activeobj]['master_of_ice'])
) {
this.showatb()
}
if (
ok &&
magicuse != '' &&
this.obj[activeobj][magicuse + 'elem'] == 'air' &&
((this.obj[activeobj]['hero'] && isperk(activeobj, 100)) || this.obj[activeobj]['master_of_storms'])
) {
this.showatb()
}
if (ok) showuron(1)
}
unsafeWindow.setshadAbs = function (x, y, vis) {
if (!initialized) return 0
if (shado[y * defxn + x]) {
set_visible(shado[y * defxn + x], vis)
}
}
unsafeWindow.oneskill_button_release_test = function () {
if (is_visible_element('magic_book') || buttons_visible['scroll_runes']) {
return 0
}
if (someactive || !inserted) {
return 0
}
if (activeobj == 0) {
return 0
}
if (activeobj > 0 && stage.pole.obj[activeobj]['dash'] && (magic[activeobj]['dsh'] === 'undefined' || magic[activeobj]['dsh'] === 0)) {
stage.pole.obj[activeobj].maxinit *= 2
stage[war_scr].showatb(activeobj, 100)
stage.pole.obj[activeobj].maxinit /= 2
}
}
stage.pole.calcComs_new = function () {
command_new = command
var b = 0,
i = 0,
j = 0,
x = 0,
y = 0,
k = 0,
ok = false,
time = 0,
ii = false
var cmd = ''
if (Date.now() < waittimer && !finished) return 0
if (!initialized) return 0
if (someactive) {
ok = false
for (i = 1; i <= magicscount; i++) {
if (((magics[i].doing != '' && magics[i].doing != undefined) || (magics[i].cmd != '' && magics[i].cmd != undefined)) && magics[i] != undefined) {
ok = true
break
}
}
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
i = this.obj_array[k1]
if (this.obj[i].active || (this.obj[i].doing != '' && this.obj[i].doing != undefined) || this.obj[i].donow2 == 1) {
if (this.obj[i].donow2 == 1) {
this.obj[i].donow2c++
if (this.obj[i].donow2 == 1 && this.obj[i].donow2c > 30) {
this.obj[i].x = Math.round(this.obj[i].destxx)
this.obj[i].y = Math.round(this.obj[i].destyy)
this.obj[i].donow2 = 0
this.obj[i].donow2c = 0
this.obj[i].set_pole_pos(this.obj[i].x, this.obj[i].y)
}
}
if (this.obj[i].bomb) continue
ok = true
break
}
}
someactive = ok
}
if (command_new == '') return 0
k = tointeger(command_new.substr(1, 3))
current = k
cmd = command_new.substr(0, 1)
if (loading) return 0
while (
cmd == 'S' &&
(command_new.substr(1, 3) == 'at3' ||
command_new.substr(1, 4) == 'dsp-' ||
command_new.substr(1, 4) == 'ds2-' ||
((lastmagic == 'rag' || lastmagic == 'ral' || lastmagic == 'raa' || lastmagic == 'ra2') &&
command_new.substr(1, 3) == prelastmagic &&
prelastmagic != 'rgl') ||
command_new.substr(1, 3) == 'sld' ||
command_new.substr(1, 3) == 'aci' ||
command_new.substr(1, 3) == 'prt' ||
command_new.substr(1, 3) == 'scd' ||
command_new.substr(1, 3) == 'rnm' ||
command_new.substr(1, 3) == 'spc' ||
command_new.substr(1, 3) == 'wnd' ||
command_new.substr(1, 3) == 'bsh' ||
command_new.substr(1, 3) == 'net' ||
command_new.substr(1, 3) == 'rn4' ||
command_new.substr(1, 3) == 'enr' ||
command_new.substr(1, 3) == 'ass' ||
command_new.substr(1, 3) == 'btt' ||
command_new.substr(1, 3) == 'aim' ||
command_new.substr(1, 3) == 'mfc' ||
command_new.substr(1, 3) == 'zat' ||
command_new.substr(1, 3) == 'prp' ||
command_new.substr(1, 3) == 'eye' ||
command_new.substr(1, 3) == 'raa' ||
command_new.substr(1, 3) == 'fbd' ||
command_new.substr(1, 3) == 'wfr' ||
command_new.substr(1, 3) == 'rag' ||
command_new.substr(1, 3) == 'ral' ||
command_new.substr(1, 3) == 'ra2' ||
command_new.substr(1, 3) == 'mga' ||
command_new.substr(1, 3) == 'enc' ||
command_new.substr(1, 3) == 'rg2' ||
command_new.substr(1, 3) == 'mof' ||
command_new.substr(1, 3) == 'blt' ||
command_new.substr(1, 3) == 'ent' ||
command_new.substr(1, 3) == 'nmc' ||
command_new.substr(1, 3) == 'hfr' ||
command_new.substr(1, 3) == 'tob' ||
command_new.substr(1, 3) == 'cha' ||
command_new.substr(1, 3) == 'frz' ||
command_new.substr(1, 3) == 'wfr' ||
command_new.substr(1, 3) == 'blb' ||
command_new.substr(1, 3) == 'msl' ||
command_new.substr(1, 3) == 'slm' ||
command_new.substr(1, 3) == 'hsa' ||
command_new.substr(1, 3) == 'mlg' ||
command_new.substr(1, 3) == 'mvd' ||
command_new.substr(1, 3) == 'spi' ||
command_new.substr(1, 3) == 'mnl' ||
command_new.substr(1, 3) == 'eod' ||
command_new.substr(1, 3) == 'fod' ||
command_new.substr(1, 3) == 'fo2' ||
command_new.substr(1, 3) == 'wss' ||
command_new.substr(1, 3) == 'dtd' ||
command_new.substr(1, 3) == 'inv' ||
command_new.substr(1, 3) == 'irr' ||
command_new.substr(1, 3) == 'btr' ||
command_new.substr(1, 3) == 'flw' ||
command_new.substr(1, 3) == 'brf' ||
command_new.substr(1, 3) == 'chm' ||
command_new.substr(1, 3) == 'ard' ||
command_new.substr(1, 3) == 'rn9' ||
command_new.substr(1, 3) == 'def' ||
command_new.substr(1, 3) == 'dat' ||
command_new.substr(1, 3) == 'mrb' ||
command_new.substr(1, 3) == 'abs' ||
command_new.substr(1, 3) == 'cut' ||
command_new.substr(1, 3) == 'add' ||
(lastmagic != 'rgl' &&
(lastmagic == command_new.substr(1, 3) || (lastmagic.substr(0, 2) == 'ds' && command_new.substr(1, 2) == 'ds')) &&
lastcaster == command_new.substr(4, 3) &&
command_new.substr(1, 3) != 'pss' &&
command_new.substr(1, 3) != 'paa'))
) {
var obj_id = tointeger(command_new.substr(4, 3))
if (command_new.substr(1, 3) == 'def') {
console.log('2')
this.incrementParam(obj_id, 'turnCount', -1)
}
command_new = command_new.substr(19)
cmd = command_new.substr(0, 1)
k = tointeger(command_new.substr(1, 3))
current = k
}
if (
(!someactive || cmd == 'P') &&
(!spellactive || flamewave_active) &&
command_new.length > 1 &&
loadcommand == '' &&
(!loading || cmd == 'P') &&
initialized &&
waitingcounter > 10
) {
if (cmd == 'S') {
if (command_new.substr(1, 3) == 'sac' && tointeger(command_new.substr(13, 1)) == 1) {
let objId = tointeger(command_new.substr(4, 3))
if (stage.pole.obj[objId]['checkTurn'] === undefined || stage.pole.obj[objId]['checkTurn'] == 0) {
//stage.pole.obj[objId]["checkTurn"] = 1;
}
}
}
if (cmd == 'r') {
if (lastRaidsCount != stage.pole.obj[current]['nownumber']) {
raidsCurrentWave++
stage.pole.showmitnv(1)
lastRaidsCount = stage.pole.obj[current]['nownumber']
}
}
if (cmd == 'w') {
this.incrementParam(current, 'turnCount', -1)
}
if (cmd == 'u' && !stage.pole.obj[current]['endurance']) {
let u = new Date(Date.now())
let time = u.getHours() + ':' + ('0' + u.getMinutes()).substr(-2) + ':' + ('0' + u.getSeconds()).substr(-2)
let new_content = '[' + time + '] Скорость мобов +1'
let chat_id = classic_chat ? 'chat_classic_inside' : 'chat_inside'
if (addSpeedLastTurn != nowturn) {
add_newtext(chat_id, new_content)
addSpeedLastTurn = nowturn
}
}
if (command_new.substr(0, 4) == 'Sini') {
let u = new Date(Date.now())
let time = u.getHours() + ':' + ('0' + u.getMinutes()).substr(-2) + ':' + ('0' + u.getSeconds()).substr(-2)
let new_content = '[' + time + '] Иня мобов +1'
let chat_id = classic_chat ? 'chat_classic_inside' : 'chat_inside'
if (addIniLastTurn != nowturn) {
add_newtext(chat_id, new_content)
addIniLastTurn = nowturn
}
}
if (cmd == 'i') {
j = tointeger(command_new.substr(4, 4))
if (current != -1 && current > 0) {
if (this.obj[current].nowinit <= 0 && this.obj[current].nowinit + j > 0) {
if (magic[current] && magic[current]['hyp'] && magic[current]['hyp']['nowinit'] > 0) {
return 0
}
this.incrementParam(current, 'turnCount')
}
}
}
if (cmd == 's' && !someactive && !loading) {
//gating
if (this.obj[current].x >= 100) {
//gate[current] = activeobj;
this.incrementParam(activeobj, 'turnCount', -1)
} else {
k = tointeger(command_new.substr(8, 5))
if (this.obj[current].id != 347 && this.obj[current].id != 349 && !this.obj[current].bonus) {
if (k == 0) {
this.incrementParam(activeobj, 'turnCount', -1)
return 0
}
this.incrementParam(current, 'turnCount', -1)
}
}
}
}
}
stage.pole.incrementParam = function (i, name, value = 1) {
let cre = this.obj[i]
if (cre === undefined) {
return 0
}
if (cre[name] === undefined) {
cre[name] = 0
}
cre[name] += value
}
stage.pole.setParam = function (i, name, value = 0) {
let cre = this.obj[i]
if (cre === undefined) {
return 0
}
cre[name] = value
}
stage.pole.atb_scale = function (anyway) {
document.getElementById('effectsDisplay').style.display = chatMode() == 'V' ? 'none' : ''
cur_scaling = 1
atby = Math.round(scr_top + pole_top_now + pole_height + atb_top * this.scaling)
atbx = Math.round((stage_width - scr_left - scr_right) / 2 + scr_left - ((atb_width * atb_scaling * atb_count) / 2) * this.scaling)
if (!this.setted_atb) return 0
if (!this.showed_atb) return 0
this.atbg.x1 = Math.floor(atbx)
this.atbg.y1 = Math.floor(atby)
var sc = atb_cnt
if (!inserted) {
sc = stackcount - 1
atb_n_x = atbx + (((atb_count - stackcount) * atb_width * atb_scaling) / 2) * cur_scaling * this.scaling
this.atbg.x1 = Math.floor(atb_n_x)
}
set_scaleX(this.atbg2, this.scaling)
set_scaleY(this.atbg2, this.scaling)
set_X(this.atbg, Math.floor(this.atbg.x1))
set_Y(this.atbg, Math.floor(this.atbg.y1))
var k = cur_scaling * 90
if (k < 20) {
k = 20
}
if (atbsd > 0) {
set_fontSize(this.ochered, k * atb_scaling)
set_strokeThickness(this.ochered, (k / atb_font_size) * atb_stroke_width * atb_scaling)
set_X(this.ochered, Math.floor(10 * cur_scaling * atb_scaling) + Math.round(atb_scroll_x * cur_scaling))
set_Y(this.ochered, Math.round(1 * cur_scaling))
}
let flag = true
let dop = 40
for (var j = 0; j <= atb_count; j++) {
i = this.p_array[j]
if (j > sc) {
set_visible(this.ntext[j], 0)
set_visible(this.portraits[j], 0)
continue
} else {
set_visible(this.portraits[j], 1)
}
if (this.ntext[i]) {
var ntext_vis = get_visible(this.ntext[i])
if (ntext_vis) {
var k = cur_scaling * 50 * atb_scaling
if (k < 14) {
k = 14
}
set_fontSize(this.ntext[i], k)
while (get_width(this.ntext[i]) > (atb_width * atb_scaling - 16) * cur_scaling && k > 5) {
k--
set_fontSize(this.ntext[i], k)
}
set_strokeThickness(this.ntext[i], (k / atb_font_size) * atb_stroke_width)
if (this.ntext[i].need_cache || anyway) {
this.ntext[i].need_cache = 0
}
set_X(this.ntext[i], Math.round(atb_width * atb_scaling * (j + 1) * cur_scaling - get_width(this.ntext[i]) - 8 * cur_scaling * atb_scaling))
set_Y(this.ntext[i], Math.round(atb_height * atb_scaling * cur_scaling - get_height(this.ntext[i]) * 0.98))
if (flag === true) {
flag = false
//dop = Math.round(atb_width * atb_scaling * cur_scaling - get_width(this.ntext[i]) - 8 * cur_scaling * atb_scaling)/2;
}
}
}
if (!this.portraits[i]) {
continue
}
set_X(this.portraits[i], Math.round(j * atb_width * atb_scaling * cur_scaling))
set_visible(this.portraits[i], 1)
if (this.portraits[i].img.show_it) set_visible(this.portraits[i].img, 1)
}
document.getElementById('dop-info').style.top = this.atbg.y1 * (1 / MainPixelRatio) + 'px'
document.getElementById('dop-info').style.width = stage.pole.atbg.x1 * (1 / MainPixelRatio) + 'px'
document.getElementById('dop-info').style.fontSize = Math.round((atb_scaling * atb_height * stage.pole.scaling * (1 / MainPixelRatio)) / 3 + 1) + 'px'
document.getElementById('dop-info').style.left = '0px'
re_cache_atb()
}
stage.pole.getMoraleN = function (i) {
if (!this.obj[i].hasOwnProperty('nametxt')) return 0
var festering = false
var deathstare = false
let mimmune = false
if (inserted) {
mimmune = false
if (magic[i] && magic[i]['wfr'] && magic[i]['wfr']['effect'] == 1) mimmune = true
if (this.obj[i]['twistedmind'] == 1) mimmune = true
var k = 0
var x = 0,
y = 0,
b = 0,
x2 = 0,
y2 = 0,
b2 = 0
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
k = this.obj_array[k1]
if (this.obj[k].festeringaura && !this.obj[i].undead && this.obj[k].nownumber > 0 && this.obj[i].side != this.obj[k].side) {
var bigx = this.obj[i]['big']
var bigy = this.obj[i]['big']
if (this.obj[i]['bigx']) bigx = 1
if (this.obj[i]['bigy']) bigy = 1
var bigkx = this.obj[k]['big']
var bigky = this.obj[k]['big']
if (this.obj[k]['bigx']) bigkx = 1
if (this.obj[k]['bigy']) bigky = 1
for (x = this.obj[i].x; x <= this.obj[i].x + bigx; x++) {
for (y = this.obj[i].y; y <= this.obj[i].y + bigy; y++) {
for (x2 = this.obj[k].x; x2 <= this.obj[k].x + bigkx; x2++) {
for (y2 = this.obj[k].y; y2 <= this.obj[k].y + bigky; y2++) {
if (Math.abs(x - x2) <= 1 && Math.abs(y - y2) <= 1) {
festering = true
}
}
}
}
}
}
}
}
if (inserted) {
mimmune = false
if (magic[i] && magic[i]['wfr'] && magic[i]['wfr']['effect'] == 1) mimmune = true
if (this.obj[i]['twistedmind'] == 1) mimmune = true
}
var morale = 0
var day = 0
if (heroes[this.obj[i].owner] && magic[heroes[this.obj[i].owner]]['day']) {
day = magic[heroes[this.obj[i].owner]]['day']['effect']
}
if (
this.obj[i].stone ||
this.obj[i].statix ||
this.obj[i].portal ||
(day != 1 && (this.obj[i].undead || this.obj[i].elemental || this.obj[i].mechanical || this.obj[i].warmachine || magic[i]['und']))
) {
morale = 0
} else {
ma = 0
if (this.obj[i].moraleaddon) ma = this.obj[i].moraleaddon
var m = ma
if (this.obj[i].packpower) {
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
k = this.obj_array[k1]
if (k != i && this.obj[k].packpower && this.obj[k].nownumber > 0 && this.obj[k].side == this.obj[i].side && this.obj[k].x <= defxn) {
m++
if (this.obj[k].packboss) m++
}
}
}
if (inserted) {
var k = 0
var x = 0,
y = 0,
b = 0,
x2 = 0,
y2 = 0,
b2 = 0
var frig = false
var brave = false
var deathstare = false
var set_zero_morale = false
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
k = this.obj_array[k1]
if (this.obj[k].deathstare && this.obj[k].side != this.obj[i].side && this.obj[k].nownumber > 0 && !mimmune) deathstare = true
if (this.obj[k].frightful_aura && this.obj[k].side != this.obj[i].side && this.obj[k].nownumber > 0 && !mimmune) {
var bigx = this.obj[i]['big']
var bigy = this.obj[i]['big']
if (this.obj[i]['bigx']) bigx = 1
if (this.obj[i]['bigy']) bigy = 1
var bigkx = this.obj[k]['big']
var bigky = this.obj[k]['big']
if (this.obj[k]['bigx']) bigkx = 1
if (this.obj[k]['bigy']) bigky = 1
for (x = this.obj[i].x; x <= this.obj[i].x + bigx; x++) {
for (y = this.obj[i].y; y <= this.obj[i].y + bigy; y++) {
for (x2 = this.obj[k].x; x2 <= this.obj[k].x + bigkx; x2++) {
for (y2 = this.obj[k].y; y2 <= this.obj[k].y + bigky; y2++) {
if (Math.abs(x - x2) <= 1 && Math.abs(y - y2) <= 1) {
frig = true
}
}
}
}
}
}
if (this.obj[k].auraofbravery && this.obj[k].side == this.obj[i].side && this.obj[k].nownumber > 0) {
var bigx = this.obj[i]['big']
var bigy = this.obj[i]['big']
if (this.obj[i]['bigx']) bigx = 1
if (this.obj[i]['bigy']) bigy = 1
var bigkx = this.obj[k]['big']
var bigky = this.obj[k]['big']
if (this.obj[k]['bigx']) bigkx = 1
if (this.obj[k]['bigy']) bigky = 1
for (x = this.obj[i].x; x <= this.obj[i].x + bigx; x++) {
for (y = this.obj[i].y; y <= this.obj[i].y + bigy; y++) {
for (x2 = this.obj[k].x; x2 <= this.obj[k].x + bigkx; x2++) {
for (y2 = this.obj[k].y; y2 <= this.obj[k].y + bigky; y2++) {
if (Math.abs(x - x2) <= 1 && Math.abs(y - y2) <= 1) {
brave = true
}
}
}
}
}
}
if (
(this.obj[i].morale > 0 || m > 0) &&
!this.obj[i].bravery &&
!mimmune &&
this.obj[k].menacinglook &&
this.obj[k].side != this.obj[i].side &&
this.obj[k].nownumber > 0
) {
var bigx = this.obj[i]['big']
var bigy = this.obj[i]['big']
if (this.obj[i]['bigx']) bigx = 1
if (this.obj[i]['bigy']) bigy = 1
var bigkx = this.obj[k]['big']
var bigky = this.obj[k]['big']
if (this.obj[k]['bigx']) bigkx = 1
if (this.obj[k]['bigy']) bigky = 1
for (x = this.obj[i].x; x <= this.obj[i].x + bigx; x++) {
for (y = this.obj[i].y; y <= this.obj[i].y + bigy; y++) {
for (x2 = this.obj[k].x; x2 <= this.obj[k].x + bigkx; x2++) {
for (y2 = this.obj[k].y; y2 <= this.obj[k].y + bigky; y2++) {
if (Math.abs(x - x2) <= 1 && Math.abs(y - y2) <= 1) {
m = 0
set_zero_morale = true
}
}
}
}
}
}
}
if (frig) {
m -= 3
this.clearPar(i, 'morale')
}
}
if (!mimmune && festering) {
//+
m -= 2
this.clearPar(i, 'morale')
}
if (!mimmune && deathstare) {
m -= 1
}
morale = this.obj[i].morale + m
if (set_zero_morale) {
morale = 0
brave = false
}
if (this.obj[i].morale + m < 3 && this.obj[i].bravery) {
morale = 3
}
if (this.obj[i].morale + m < 3 && brave) {
if (!this.obj[i].bravery && !this.obj[i].auraofbravery) {
this.clearPar(i, 'morale')
}
morale = 3
}
}
if (magic[i] && magic[i]['hyp'] && magic[i]['hyp']['nowinit'] > 0) {
morale = Math.min(0, morale)
}
return morale
}
stage.pole.clearPar = function (i, name) {
if (this.obj[i] === 'undefined') {
return 0
}
if (name == 'morale') {
this.obj[i].moraleCount = 0
this.obj[i].turnCount = 0
}
if (name == 'luck') {
this.obj[i].luckcount = 0
this.obj[i].hitcount = 0
}
}
stage.pole.showmi = unsafeWindow.showmi = function (i) {
if (typeof unsafeWindow.mini_info_panel === 'undefined') return 0
if (i > 0) {
testBlock(i)
infoBlock(i)
} else {
testBlock()
infoBlock()
}
if (i == -1) {
return 0
}
if (typeof unsafeWindow.mini_info_panel.miss === 'undefined') {
var stat = 'miss'
var temp = Make_Sprite()
temp.inited_show = true
temp.r = 0
temp.aaa = 'miss'
set_visible(temp, 0)
var img_temp = My_Image({
offsetX: -razmetka['war_images'][17][mqc['sdx']],
offsetY: -razmetka['war_images'][17][mqc['sdy']],
image: stage.pole.ground['war_images'],
width: razmetka['war_images'][19][mqc['xs']],
height: razmetka['war_images'][19][mqc['ys']] / 2,
crop: {
x: razmetka['war_images'][19][mqc['x']],
y: razmetka['war_images'][19][mqc['y']] + razmetka['war_images'][19][mqc['ys']] / 2,
width: razmetka['war_images'][19][mqc['xs']],
height: razmetka['war_images'][19][mqc['ys']] / 2,
visible: 1,
},
listening: false,
})
Make_addChild(temp, img_temp)
mini_info_panel[stat] = temp
var ttext = Make_Text('', {
x: 55,
y: 0,
fontFamily: 'Arial',
fontStyle_konva: 'Bold',
fontSize: mini_info_font_size,
fill: 0xffffff,
stroke: 0x000000,
strokeThickness: miniinfo_stroke_width,
// strokeThickness: 0.5,
shadowForStrokeEnabled: false,
// textBaseline: 'middle',
dropShadowColor: 0x000000,
dropShadowAlpha: 1,
dropShadowBlur: 2,
dropShadow: true,
dropShadowDistance: 0,
dropShadowAngle: 0,
})
set_X(ttext, 55)
set_Y(ttext, 0)
temp.line = ttext
Make_addChild(temp, ttext)
Make_addChild(mini_info_panel, temp)
}
var y = Array(-7.45, 0.5, 9.05, 18.5)
var k = 0
if (!this.obj[i].mvisible || this.obj[i].nownumber <= 0 /*||(this.obj[i]._x<0)*/) return 0
var stats = ['tnv', 'wave', 'health', 'blood', 'mana', 'arrow', 'miss']
this.mini_info_panel_scale()
var s_stats = Array()
for (var j = 0; j < stats.length; j++) {
if (mini_info_panel[stats[j]]) {
set_visible(mini_info_panel[stats[j]], 0)
}
s_stats[stats[j]] = ''
}
set_visible(mini_info_panel, 1)
var ntxt = ''
if (this.obj[i].hero) {
switch (lang) {
case 0:
ntxt = this.obj[i].nametxt + ' [' + this.obj[i].maxhealth + ' ур.]'
break
case 1:
ntxt = this.obj[i].nametxt + ' [' + this.obj[i].maxhealth + ' lev.]'
break
}
if (this.obj[i].maxmanna > 0 || this.obj[i].nowmanna > 0) {
s_stats['mana'] = this.obj[i].nowmanna + '/' + this.obj[i].maxmanna
}
if (magic[i]['tur']) {
s_stats['tnv'] = magic[i]['tur']['effect'] + '%'
}
} else {
if (this.obj[i].boss > 0) {
switch (lang) {
case 0:
ntxt = this.obj[i].nametxt + ' [' + this.obj[i].boss + ' ур.]'
break
case 1:
ntxt = this.obj[i].nametxt + ' [' + this.obj[i].boss + ' lev.]'
break
}
} else {
ntxt = this.obj[i].nametxt
if (this.obj[i].nownumber > 0) {
var addinf = ' [' + this.obj[i].nownumber + ']'
if (this.obj[i].stone || this.obj[i].statix || this.obj[i].warmachine || this.obj[i].portal || magic[i]['nnm'] || magic[i]['BLD']) {
addinf = ''
}
ntxt = this.obj[i].nametxt + addinf
} else {
ntxt = this.obj[i].nametxt + ' [' + this.obj[i].maxnumber + ']'
}
if (magic[i]['lev']) {
switch (lang) {
case 0:
ntxt += '(' + magic[i]['lev']['effect'] + ' ур)'
break
case 1:
ntxt += '(' + magic[i]['lev']['effect'] + ' lev)'
break
}
}
}
s_stats['health'] = this.obj[i].nowhealth + '/' + this.obj[i].maxhealth
if (this.obj[i].shooter && !this.obj[i].shadowattack) {
s_stats['arrow'] = this.obj[i].shots
}
if (this.obj[i].caster && this.obj[i].caster != '' && !this.obj[i].randomcasterd && !this.obj[i].crystal) {
s_stats['mana'] = this.obj[i].nowmanna + '/' + this.obj[i].maxmanna
}
if (magic[i]['rag'] && this.obj[i]['ragingblood']) {
var rlevel = Array(-10000, 200, 500, 1000)
var lev = 1
for (var z = 1; z <= 2; z++) {
if (rlevel[z] <= magic[i]['rag']['effect']) lev = z + 1
}
var her = 0,
herolevel = 0
var len = this.obj_array.length
for (var k1 = 0; k1 < len; k1++) {
var z = this.obj_array[k1]
if (this.obj[z].hero && this.obj[z].owner == this.obj[i].owner) her = z
}
if (her > 0) herolevel = this.obj[her].maxhealth
s_stats['blood'] = magic[i]['rag']['effect'] + ' / ' + rlevel[lev]
k++
}
s_stats['miss'] = ''
if (this.obj[i].incorporeal) {
if (this.obj[i].misscount == 1) {
s_stats['miss'] = '50% +'
} else if (this.obj[i].misscount == 2) {
s_stats['miss'] = '0%'
} else if (this.obj[i].misscount == -1) {
s_stats['miss'] = '50% -'
} else if (this.obj[i].misscount == -2) {
s_stats['miss'] = '100%'
} else {
s_stats['miss'] = '50%'
}
}
}
ntxt = ''
set_text(mini_info_panel.name_text, ntxt)
var y = 0
for (var j = 0; j < stats.length; j++) {
if (s_stats[stats[j]] != '') {
set_visible(mini_info_panel[stats[j]], 1)
set_Y(mini_info_panel[stats[j]], y - 5)
set_Y(mini_info_panel[stats[j]].line, 5)
set_text(mini_info_panel[stats[j]].line, s_stats[stats[j]])
set_fontSize(mini_info_panel[stats[j]].line, mini_info_font_size)
var k = mini_info_font_size
var p_height = get_height(mini_info_panel[stats[j]].line)
while (get_width(mini_info_panel[stats[j]].line) > 180 && k > 3) {
k--
set_fontSize(mini_info_panel[stats[j]].line, k)
}
p_height -= get_height(mini_info_panel[stats[j]].line)
set_Y(mini_info_panel[stats[j]].line, 5 + Math.floor(p_height / 2))
set_strokeThickness(mini_info_panel[stats[j]].line, (k / mini_info_font_size) * miniinfo_stroke_width)
yplus = 40
y += yplus
if (y >= yplus * 3) break
}
}
}
unsafeWindow.raidsCountWaves = 0
if (btype == 8) {
let lastCount = 0
for (i in stage.pole.obj) {
if (stage.pole.obj[i].owner == 2 && lastCount != stage.pole.obj[i].nownumber) {
raidsCountWaves++
lastCount = stage.pole.obj[i].nownumber
}
}
}
stage.pole.showmitnv = function (raids = 0) {
if (typeof unsafeWindow.mini_info_panel === 'undefined') return 0
if (tnvscore == 0 && raids == 0) return 0
var y = Array(-7.45, 0.5, 9.05, 18.5)
var k = 0
this.mini_info_panel_scale()
var s_stats = Array()
var stats = ['tnv', 'health', 'blood', 'mana', 'arrow']
for (var j = 0; j < stats.length; j++) {
set_visible(mini_info_panel[stats[j]], 0)
s_stats[stats[j]] = ''
}
set_visible(mini_info_panel, 1)
var stats = ['tnv', 'wave']
var y = 10
var txt = Array()
txt[0] = tnvscore
if (raids == 1) {
txt[1] = raidsCurrentWave + '/' + raidsCountWaves
} else if (raids == 2) {
txt[1] = global_init / 100 + ' time'
} else {
txt[1] = tnvwave
}
set_text(mini_info_panel.name_text, '')
for (var j = Math.ceil(raids / 10); j <= 1; j++) {
set_visible(mini_info_panel[stats[j]], 1)
set_X(mini_info_panel[stats[j]], 5)
set_Y(mini_info_panel[stats[j]], y - 5)
set_Y(mini_info_panel[stats[j]].line, 5)
set_text(mini_info_panel[stats[j]].line, ' ' + txt[j])
set_fontSize(mini_info_panel[stats[j]].line, mini_info_font_size)
var k = mini_info_font_size
while (get_width(mini_info_panel[stats[j]].line) > 175 && k > 3) {
k--
set_fontSize(mini_info_panel[stats[j]].line, k)
}
set_strokeThickness(mini_info_panel[stats[j]].line, (k / mini_info_font_size) * miniinfo_stroke_width)
yplus = 60
y += yplus
}
}
document.getElementById('oneskill_button').addEventListener('mouseover', oneskill_button_release_test)
document.getElementById('oneskill_button').addEventListener('mouseout', waitbutton_onRollOut)
document.getElementById('oneskill_button2').addEventListener('mouseover', oneskill_button_release_test)
document.getElementById('oneskill_button2').addEventListener('mouseout', waitbutton_onRollOut)
stage.pole.atb_scale()
unsafeWindow.timer_show_army = function () {
nframe++
var time_now = Date.now()
if (last_timer_in == 0) last_timer_in = time_now
var skip_frame = Math.min(1, Math.max(0, Math.floor((time_now - last_timer_in) / timer_interval) - 1))
var fps_l = 1000 / (time_now - last_timer_in)
if (fps_long == 0) {
fps_long = fps_l
} else {
fps_long = Math.min(fps_l, fps_long)
}
if (war_scr == '') return 0
if (!was_benchmark) return 0
if (animspeed_def < 1 && nframe % 2 == 0 && skip_frame == 0) {
next_timer()
return 0
}
animspeed = Math.max(1, animspeed_def) * (skip_frame + 1)
last_timer_in = time_now
if (skip_frame) {
total_skips++
total_skips2++
} else {
total_skips = 0
}
if (total_skips > 1) {
skip_frame = 0
total_skips = 0
}
was_skip_frame = skip_frame
try {
if (typeof unsafeWindow.stage[war_scr].animate_army === 'function') {
stage[war_scr].animate_army(nframe, skip_frame)
updateBar(btype == 145 ? 6 : 2)
if (typeof unsafeWindow.mini_info_panel !== 'undefined' && !mini_info_panel.visible) {
testBlock()
infoBlock()
}
for (k in stage.pole.obj) {
if (stage.pole.obj[k].hero != undefined) continue
stage.pole.luckMoraleProbability(k, 'morale')
if (
((stage.pole.obj[k].nownumber == 0 && stage.pole.obj[k].gate != 1) ||
(stage.pole.obj[k].nowhealth == 0 && stage.pole.obj[k].last_dead != 1 && stage.pole.obj[k].gate == 1)) &&
(inserted || stage.pole.obj[k].owner == 2 || btype == _QUESTWAR || btype == _VILLAGE_EVENT) &&
!stage.pole.obj[k].rock
) {
if (magic[k].def !== undefined) {
delete magic[k].def
}
}
}
if (magicuse != 'chainlighting') {
for (let i in stage.pole.obj) {
if (
lastChain != 0 &&
stage.pole.obj[lastChain].chain &&
stage.pole.obj[i].needSetNumber == 1 &&
stage.pole.obj[lastChain].chain.indexOf(parseInt(i)) == -1
) {
stage.pole.obj[i].set_number()
stage.pole.obj[i].needSetNumber = 0
}
}
}
if (btime != global_init && btype == 119) {
// stage.pole.showmitnv(2);
btime = global_init
}
}
} catch (e) {
my_alert(e.stack + ' ' + war_scr)
}
}
stage.pole.getmorale = stage.pole.getMoraleN
}
}
if (location.pathname.indexOf('inventory.php') >= 0) {
var inp = ''
var bt = ''
function inv_art_search_show() {
let info = document.getElementById('inv_art_amount')
for (let i = 0; i < info.children.length; i++) {
info.children[i].style.display = 'none'
}
if (inp == '') {
inp = document.createElement('input')
inp.setAttribute('placeholder', 'Поиск по названию')
inp.setAttribute('type', 'text')
inp.setAttribute('id', 'inp_search')
info.append(inp)
inp.addEventListener('input', search)
inp.style.display = 'inline-block'
bt = document.createElement('button')
bt.innerHTML = 'Скрыть поиск'
bt.setAttribute('id', 'bt_search')
info.append(bt)
bt.addEventListener('click', hide_search)
bt.style.display = 'inline-block'
} else {
bt.style.display = 'inline-block'
inp.style.display = 'inline-block'
}
start_hide_hwm_hint()
}
function hide_search() {
let info = document.getElementById('inv_art_amount')
for (let i = 0; i < info.children.length; i++) {
info.children[i].style.display = info.children[i].tagName == 'DIV' ? 'inline-block' : 'none'
}
}
function search() {
let s = document.getElementById('inp_search').value
let el = document.getElementById('inventory_block')
for (let i = 0; i < el.children.length; i++) {
let id = el.children[i].getAttribute('art_idx')
if (id == null) {
continue
}
el.children[i].style.display = arts[id].name.toLowerCase().includes(s.toLowerCase()) ? 'block' : 'none'
}
}
let sDiv = document.createElement('div')
let sImg = document.createElement('img')
sImg.setAttribute('src', 'https://daily.heroeswm.ru/i/search_logo.png')
sImg.setAttribute('class', 'inv_100mwmh')
sDiv.append(sImg)
sDiv.classList.add('divs_inline_right_24')
sDiv.classList.add('btn_hover')
sDiv.classList.add('show_hint')
sDiv.style.right = '28px'
document.getElementById('inv_art_amount').append(sDiv)
sDiv.setAttribute('hint', 'Поиск по названию')
sDiv.setAttribute('hwm_hint_added', 1)
sDiv.addEventListener('mousemove', show_hwm_hint)
sDiv.addEventListener('touchstart', show_hwm_hint)
sDiv.addEventListener('mouseout', hide_hwm_hint)
sDiv.addEventListener('touchend', hide_hwm_hint)
sDiv.addEventListener('click', inv_art_search_show)
}
if (location.pathname.indexOf('war.php') >= 0 || location.pathname.indexOf('warlog.php') >= 0) {
let timer = setInterval(check_start, 10)
function check_start() {
if (unsafeWindow.gpause == false) {
unsafeWindow.gpause = true
clearInterval(timer)
}
}
var warid = location.search.match(/warid=([0-9]+)/)[1]
var key = ''
if (location.search.match(/show_for_all=([0-9a-zA-Z]+)/)) {
key = location.search.match(/show_for_all=([0-9a-zA-Z]+)/)[1]
}
var att = 0
var unit = ['', '', '', '', '', '', '', '']
getAtb(0)
document.getElementById('confirm_ins').addEventListener(
'click',
function () {
setTimeout(getAtb(1), 4000)
},
false
)
function getAtb(r) {
GM_xmlhttpRequest({
method: 'GET',
url: '/battle.php?lastturn=-3&warid=' + warid + '&show_for_all=' + key,
onload: function (res) {
let info =
'<style>.cont{position:relative;display:inline-block}.count {position: absolute;right: 0;bottom: 0;color: #f5c140;text-shadow: 0px 0px 3px #000, 0px 0px 3px #000, 0px 0px 3px #000, 0px 0px 3px #000;font-size: 1rem;font-weight: bold;}</style>'
info += '<b>Стартовый бонус АТБ</b><BR>'
if (res.responseText == 't=950turns=') {
if (r == 1) {
info += 'Ошибка загрузки, начните бой и обновите страницу!'
} else {
return false
}
}
let data = res.responseText.substring(res.responseText.indexOf(';/') + 2).split(';')
for (let i = 0; i < data.length - 1; i++) {
if (data[i].indexOf('|rock|') != -1) {
continue
}
let unitNum = Number(data[i].substring(1, 3))
let armyNum = Number(data[i].substring(5 + 0 * 6, 5 + 1 * 6)) - 1
let count = Number(data[i].substring(5 + 12 * 6, 5 + 13 * 6))
let startAtb = 100 - Number(data[i].substring(5 + 9 * 6, 5 + 10 * 6))
let img
if (data[i].indexOf('|hero|') == -1) {
img = data[i].substring(5 + 24 * 6, data[i].indexOf('|'))
} else {
img = data[i].split('|')[8].substring(1)
}
img = img.substring(0, img.length - 3)
unit[armyNum] +=
"<div class = 'cont'><img width = '40px' src='/i/portraits/" + img + "anip40.png'><div class = 'count'>" + startAtb + '</div></div>'
}
for (let i = 0; i < unit.length; i++) {
if (unit[i] != '') {
info += 'Команда №' + (i + 1) + '<BR>' + unit[i] + '<BR>'
}
}
let elem = []
elem[0] = document.querySelector('#chat_format')
elem[1] = document.querySelector('#chat_format_classic')
//elem[0].innerHTML = info + elem[0].innerHTML;
//elem[1].innerHTML = info + elem[1].innerHTML;
elem[0].innerHTML = "<div class = 'atb-info' style = 'display:none'>" + info + '</div>' + elem[0].innerHTML
elem[1].innerHTML = "<div class = 'atb-info' style = 'display:none'>" + info + '</div>' + elem[1].innerHTML
},
})
}
}
})()