2022-12-19 20:22:19 +00:00
//update 11.01.09 by gram
// JavaScript Document
var baseImgPath = 'http://img.combats.com/i/' ;
var itemImgPath = 'http://img.combats.com/i/items/' ;
var hereItemImgPath = '/images/' ;
var charImgPath = 'http://img.combats.com/i/chars/' ;
var clanImgPath = 'http://img.combats.com/i/klan/' ;
var zodiacImgPath = '/images/dress/z/' ;
var brandImgPath = 'http://img.combats.com/i/city/brand/' ;
var brand2ImgPath = 'http://img.combats.com/i/misc/' ;
var trickResourceImgPath = 'http://img.combats.com/i/misc/micro/' ;
var hpMeterGreenImg = 'http://img.combats.com/i/misc/bk_life_green.gif' ;
var manaMeterImg = 'http://img.combats.com/i/misc/bk_life_beg_33.gif' ;
var trickImgPath = 'http://img.combats.com/i/misc/icons/' ;
var iconImgPath = 'http://img.combats.com/i/misc/icons/icon_' ;
var infospaceImgPath = '/images/infospace/' ;
var dressImgPath = '/images/dress/' ;
var blankImgPath = '/images/blank.gif' ;
var toothImgPath = 'http://img.combats.com/i/misc/' ;
var charInfoUrlFormat = 'http://capitalcity.combats.com/inf.pl?login=' ;
var shortVip = "vip=1" ;
var maxPersImageNumber = [ 51 , 65 ] ;
var excludePersImageNumbers = [ [ 52 , 53 ] , [ 39 , 40 , 41 , 66 , 67 , 68 ] ] ;
var uniquePersImageNumbers = [
[ '52_orbvsqq' , '53_otnmdih' , '400' , '500' , '501' , '502' , '503' , '504' , '505' , '506' , '507' , '508' , '509' , '510' , '511' , '512' , '513' , '514' , '515' , '516' , '10001' , '10002' , '10003' , '10015' , '10016' , '10017' , '10018' , '10019' , '2000_1_kbns5gu' , '2000_3_askgl' , '2000_2_zk39s' , '1092_mfogweobwg' , '1144_fzmyvqf' , 'mocker' , 'piper' ] ,
[ '66_mmtvgec' , '67_esevjzd' , '68_sqsbxnc' , '500' , '501' , '502' , '10012' , '10015' , '10019' , '2007_1_onsd23' , '2003_1_348723483' , '2003_2_854736478' , '2003_3_777376934' , '2001_1_758375928' , '2001_2_387429837' , '2001_3_458791823' , '2002_1_239847283' , '2002_2_238947983' , '2002_3_857378582' , '2006_1_868276432' , '2006_2_394356775' , '2006_3_100402842' , '2004_1_329847534' , '2004_2_465762309' , '2004_3_636502175' , '2005_1_398365734' , '2005_2_546276573' , '2005_3_573654968' , '1089_gr8562789476' , '1093_bninwidpqd' ]
] ;
var localizer =
{
2023-01-10 16:29:32 +00:00
cancel : 'Отмена' ,
apply : 'Применить' ,
help : 'Справка' ,
helpHint : 'Открыть раздел Справки' ,
closeMenu : 'Закрыть меню' ,
dropItem : 'Снять предмет' ,
dropAll : 'Снять все предметы' ,
clearAllStats : 'Сбросить статы и умения' ,
fitStats : 'Подогнать статы и умения под комплект' ,
itemComsumesGroup : 'Потребление' ,
itemRequiredGroup : 'Требования' ,
itemModifyGroup : 'Действует на' ,
itemPropertiesGroup : 'Свойства предмета' ,
itemAddInfoGroup : 'Дополнительная информация' ,
itemAttackGroup : 'Особенности (атаки)' ,
itemDefenceGroup : 'Особенности (защиты)' ,
partOfSet : 'Часть комплекта: <u>{0}</u> <b>({1}/{2})</b>.' ,
strikeGroup : 'Удар с помощью' ,
fitArmor : 'Подогнать броню' ,
unfitArmor : 'Убрать подгонку брони' ,
fitObject : 'Подогнать под комплект' ,
unfitObject : 'Убрать подгонку под комплект' ,
sharpening : 'Заточка' ,
noSharpening : 'Без заточки' ,
twohandledWeapon : '<font color="brown">Двуручное оружие.</font>' ,
secondaryWeapon : '<font color="darkgreen">Второе оружие.</font>' ,
blockZones : 'Зоны блокирования' ,
aboutSetCount : 'В комплект входит {0} предметов.' ,
set : 'Комплект' ,
strengthening : 'Усиление' ,
fists : 'Кулак' ,
dressCombatsSet : 'Надеть комплект БК' ,
dressFromCombats : 'По персонажу БК' ,
dressFromCombatsHint : 'Загрузить манекен по персонажу Бойцовского Клуба' ,
zoneVariable : 'Показатель' ,
zonehead : 'Голова' ,
zonebody : 'Корпус' ,
zonewaist : 'Пояс' ,
zoneleg : 'Ноги' ,
zoneavg : 'Среднее' ,
pleaseWait : 'Пожалуйста, подождите...' ,
2022-12-19 20:22:19 +00:00
setEtc : '...' ,
2023-01-10 16:29:32 +00:00
armorWasFit : '[подгонка брони]' ,
wasFit : '[под комплект]' ,
wasUpgrade : '[улучшено]' ,
wasCharmed : '[зачаровано]' ,
2022-12-19 20:22:19 +00:00
wasAdded : ' ' ,
2023-01-10 16:29:32 +00:00
upgradeObject : 'Улучшить' ,
noUpgrade : 'Н е улучшать' ,
charmObject : 'Зачаровать' ,
addstatsObject : 'Применить' ,
uncharmObject : 'Снять зачарование' ,
charmHint : '<img src="{0}DarkClan.gif" width="24" height="15" border="0" align="right" /><b>Зачарование</b><br />' ,
addstatsHint : '<img src="{0}DarkClan.gif" width="24" height="15" border="0" align="right" /><b>Распределяем Статы</b><br />' ,
useMagic : 'Встроена магия' ,
hasMagic : 'Встроена магия' ,
saveSet : 'Сохранить комплект' ,
loadSet : 'Загрузить комплект' ,
saveSetHint : '<img src="{0}DarkClan.gif" width="24" height="15" border="0" align="right" /><b>Сохранение комплекта</b><br />Скопируйте этот текст через буфер обмена и сохраните где-нибудь.<br />В любой момент Вы сможете загрузить комплект, описанный этим текстом.<br />Также Вы можете сохранить этот комплект на сервере, получив возможность открывать е г о по ссылке краткого вида.' ,
loadSetHint : '<img src="{0}DarkClan.gif" width="24" height="15" border="0" align="right" /><b>Загрузка комплекта</b><br />Пожалуйста, скопируйте сюда тот текст, который Вы получили при сохранении комплекта, и затем нажмите кнопку "Загрузить".<br />Также Вы можете загружать комплекты, введя сюда прямую ссылку на комплект , переданную Вам другом.' ,
saveSetOnServer : 'Сохранить на сервере' ,
infoPaneHeader : 'Расчётные данные' ,
viewOptionsPaneHeader : 'Показатели' ,
petPaneHeader : 'Зверь' ,
listPaneHeader : 'Список' ,
damagePaneHeader : 'Урон' ,
componentsPaneHeader : 'Рецепты' ,
optionsMenu : 'Настройки' ,
optionsShowImages : 'Показывать изображения в списке предметов' ,
optionsHideImages : 'Н е показывать изображения в списке предметов' ,
optionsUseAlphaForMenuAndTip : 'Полупрозрачные меню и справочная информация' ,
optionsDontUseAlphaForMenuAndTip : 'Непрозрачные меню и справочная информация' ,
optionsUseTransitionEffects : 'Использовать анимацию' ,
optionsDontUseTransitionEffects : "Н е использовать анимацию" ,
optionsPreloadImages : 'Заранее загружать изображения Энциклопедии' ,
optionsDontPreloadImages : "Н е загружать заранее изображения Энциклопедии" ,
optionsCaptureMouse : 'Захватывать события мыши при открытии меню' ,
optionsDontCaptureMouse : "Н е захватывать события мыши при открытии меню" ,
startPreloadImages : 'Начата загрузка изображений Энциклопедии.' ,
completePreloadImages : 'Загрузка изображений Энциклопедии завершена.' ,
elixMenu : 'Эликсиры' ,
noElix : 'Без статового эликсира' ,
spellMenu : 'Заклинания' ,
petMenu : '<font color="#660000">Звери</font>' ,
petMenu2 : 'Звери' ,
dropPet : 'Прогнать зверя' ,
noSpell : 'Без наложенного заклинания' ,
statWeakness : 'Эликсир' ,
appliedSpell : 'Заклинание' ,
appliedPetSkill : 'Усиление зверя' ,
dropElix : 'Снять эликсир' ,
dropSpell : 'Снять наложенное заклинание' ,
canUpgrade : '<font color="darkgreen">Доступно <b>улучшение</b> (после одевания).</font>' ,
canFit : '<font color="darkgreen">Доступна <b>подгонка</b> (после одевания).</font>' ,
friendLink : 'Передать ссылку на этот комплект другу' ,
friendLinkHint : '<img src="{0}DarkClan.gif" width="24" height="15" border="0" align="right" /><b>Ссылка на комплект</b><br />Скопируйте эту ссылку и пошлите другу.<br />По этой ссылке он увидит собранный Вами комплект.' ,
evaluatedHint : 'Эти числа описывают текущее значение: всего (родные + одежда)' ,
requiredHint : 'Числа в квадратных скобках описывают минимально требуемое значение: [необходимо (родные + одежда)]' ,
filter : '<img src="{0}DarkClan.gif" width="24" height="15" border="0" align="right" /><b>Фильтр</b>' ,
setFilter : 'Наложить фильтр...' ,
resetFilter : 'Снять фильтр' ,
fminlevel : 'От уровня' ,
fmaxlevel : 'До уровня' ,
fshowold : 'Устаревшие' ,
fshow _com : 'Импорт' ,
fshow _ru : 'Наши' ,
fshow _artefacts : 'Артефакты' ,
ffiltermf : 'Показатель для отбора' ,
ffiltermfHint : 'Показываются только те предметы, у которых данный показатель больше нуля.' ,
frewardonly : 'Только Канализация' ,
copyCab : 'Скопировать кабинку' ,
impitem : '[импорт]' ,
fixless : '<font color="red">Предмет не подлежит ремонту в ремонтных мастерских.</font>' ,
charmless : '<font color="red">Предмет не подлежит зачаровыванию.</font>' ,
changeName : 'Изменить имя' ,
changeGender : 'Изменить пол' ,
changeSign : 'Изменить знак зодиака' ,
changeImage : 'Изменить образ' ,
changeAlign : 'Изменить склонность' ,
changeClan : 'Изменить название клана' ,
zodiac0 : 'Знак Зодиака неизвестен' ,
zodiac1 : '<b>Овен</b> (стихия Огня, 21.03-20.04)' ,
zodiac2 : '<b>Телец</b> (стихия Земли, 21.04-20.05)' ,
zodiac3 : '<b>Близнецы</b> (стихия Воздуха, 21.05-21.06)' ,
zodiac4 : '<b>Рак</b> (стихия Воды, 22.06-22.07)' ,
zodiac5 : '<b>Лев</b> (стихия Огня, 23.07-23.08)' ,
zodiac6 : '<b>Дева</b> (стихия Земли, 24.08-23.09)' ,
zodiac7 : '<b>Весы</b> (стихия Воздуха, 24.09-23.10)' ,
zodiac8 : '<b>Скорпион</b> (стихия Воды, 24.10-22.11)' ,
zodiac9 : '<b>Стрелец</b> (стихия Огня, 23.11-21.12)' ,
zodiac10 : '<b>Козерог</b> (стихия Земли, 22.12-20.01)' ,
zodiac11 : '<b>Водолей</b> (стихия Воздуха, 21.01-20.02)' ,
zodiac12 : '<b>Рыбы</b> (стихия Воды, 21.02-20.03)' ,
attacktfire : 'огненные атаки' ,
attacktair : 'электрические атаки' ,
attacktwater : 'ледяные атаки' ,
attacktearth : 'земляные атаки' ,
attacktlight : 'атаки Света' ,
attacktdark : 'атаки Тьмы' ,
attacktthrust : 'колющие атаки' ,
attacktsabre : 'рубящие атаки' ,
attacktcrush : 'дробящие атаки' ,
attacktcut : 'режущие атаки' ,
attackqnone : 'нет' , // типы уронов.
// attackqpermanent: 'постоянные', // на 1 шмотке всеголишь ?
attackqalways : 'всегда' , //
attackqroutinely : 'регулярны' , //
// attackqregular: 'регулярны', // в 5-6 местах
attackqoften : 'часты' , //
// attackqfrequent: 'часты', // в 4х местах на 1 пушке
attackqsometimes : 'временами' , //
attackqsmall : 'малы' , //
// attackqfew: 'малы', // в 9-10 местах
attackqrare : 'редки' , //
// attackqseldom: 'редки', //
attackqinsignificant : 'ничтожно редки' , //
defencetthrust : 'Защита от колющего урона' ,
defencetsabre : 'Защита от рубящего урона' ,
defencetcrush : 'Защита от дробящего урона' ,
defencetcut : 'Защита от режущего урона' ,
defenceqnone : 'нет' ,
defenceqnormal : 'нормальная' ,
defenceqfair : 'нормальная' ,
defenceqgood : 'хорошая' ,
defenceqweak : 'слабая' ,
defenceqmagnificent : 'великолепная' ,
defenceqexcellent : 'великолепная' ,
defenceqmediocre : 'посредственная' ,
informAboutCharLoading : '<p>Загрузка информации о персонаже происходит, только если сервер БК не заблокировал сервер DarkClan на чтение информации о персонажах (при блокировании необходимо подождать несколько минут).</p><p>Примерочная автоматически определяет большую часть улучшений и модификаций предметов.</p>' ,
armor : 'Броня' ,
badPetLevel : 'Н а [{0}] уровне Вы не сможете раскачать Вашего зверя на <font color="red"><b>[{1}]</b></font> уровень. Пожалуйста, проверьте уровень Вашего зверя.' ,
badSkillCount : 'Н а [{0}] уровне {1} Вам доступно <b>{2}</b> родных владений, а в Вашем комплекте используется <font color="red"><b>{3}</b></font> родных владений. Пожалуйста, проверьте Ваши родные владения.' ,
badSkillRewardedCount : 'с учётом {0} наградных владений ' ,
badRewardedSkillCount : 'Вам доступно 5 владений за награду, а в Вашем комплекте используется <font color="red"><b>{0}</b></font> владений за награду. Пожалуйста, проверьте Ваши владения за награду.' ,
badRewardedStatCount : 'Вам доступно 25 статов за награду, а в Вашем комплекте используется <font color="red"><b>{0}</b></font> статов за награду. Пожалуйста, проверьте Ваши статы за награду.' ,
nativeStatsCount : 'Н а {1} апе [{0}] уровня {2}Вам доступно <b>{3}</b> родных статов. ' ,
rewardedStatsCount : 'с учётом {0} наградных статов ' ,
neqStatsCount : 'В Вашем комплекте используется <b>{0}</b> родных статов.' ,
gtStatsCount : ' Осталось {0} свободных статов.' ,
ltStatsCount : ' Н е хватает {0} статов.' ,
eqStatsCount : 'Свободных статов нет.' ,
upperCab : 'Кабинка' ,
newCab : 'Новая кабинка' ,
closeCab : 'Закрыть кабинку' ,
close : 'Закрыть' ,
describeNativeStats : 'родные ' ,
describeSetStats : ' от комплекта' ,
FCPlayerNick : 'Ник персонажа' ,
FCPlayerLoadIn : 'Загрузить из БК' ,
expTableDesc : 'Таблица опыта позволяет Вам определить возможное количество параметров для использования в кабинке Примерочной.' ,
dressSameItem : 'Надеть' ,
summaryTableCab : 'Сводная таблица' ,
summaryTableHint : 'Сводная таблица позволит сравнить результирующие показатели всех открытых кабинок между собой' ,
summaryTableDesc : 'Сводная таблица позволяет сравнить результирующие показатели всех открытых кабинок между собой' ,
newCabHint : 'Открыть новую кабинку для одновременной работы с несколькими комплектами и для дальнейшего их сравнения с помощью сводной таблицы' ,
expTableCab : 'Таблица опыта' ,
expTableHint : 'Таблица опыта' ,
summaryTableCab : 'Сводная таблица' ,
healerCab : 'Комната Знахаря' ,
battlesCab : 'Поединки' ,
designerCab : 'Конструктор' ,
expIncrement : 'Увеличение' ,
expTotal : 'Суммарно' ,
expStats : 'статов' ,
expSkills : 'умений' ,
expEndurance : 'выносливости' ,
expCredits : 'кредитов' ,
expExperience : 'опыта' ,
expBaseExperience : 'Базовый опыт' ,
expBody : 'Тело' ,
expDescription : 'Описание' ,
expNoInformation : 'Нет информации' ,
probabilityNever : '<font color="red">нет</font>' ,
probabilityReal : 'реально' ,
trick : 'Приём' ,
2022-12-19 20:22:19 +00:00
attackZone : [
2023-01-10 16:29:32 +00:00
'В голову' ,
'В корпус' ,
'В живот' ,
'В пояс' ,
'В ноги'
2022-12-19 20:22:19 +00:00
] ,
2023-01-10 16:29:32 +00:00
goStrike : 'Вперёд!' ,
averageDamage : 'Усреднённый по весу' ,
showDetails : 'Подробнее...' ,
sameWeapon : '<font color="#336699">Удар второй рукой идентичен удару первой рукой.</font>' ,
filterGeneralTab : 'Основные' ,
filterMfTab : 'По показателю' ,
filterSortTab : 'Сортировка' ,
noFilterMf : 'Н е фильтровать' ,
naturalStats : 'Родные статы' ,
resultStats : 'Итоговые статы' ,
wearedItems : 'Список одетых предметов<br /><small>Щёлкните по предмету в списке, чтобы получить торговую информацию online.</small>' ,
tip : 'Совет' ,
charHint : 'Нажмите здесь, чтобы изменить имя, знак зодиака и иные свойства персонажа.' ,
adjustHint : 'Нажмите {0}, чтобы подогнать статы и умения под одетый комплект.' ,
here : 'здесь' ,
badGender : 'Требуется другой пол.' ,
reqInfo : 'Требуется {0} {1} , из них родных {2}' ,
indicesPaneHeader : ' < b > Список показываемых показателей < /b><br / > < small > изменения действуют на списки редактируемых полей , расчётные данные , сводную таблицу и справочную информацию , только пока открыта Примерочная , предназначены для удобства выполнения снимков . < /small><br / > ' ,
appearances : 'Образы' ,
alignments : 'Склонности' ,
noTrick : 'Нет приёма' ,
noTrickHint : '<b>Пустой слот: Приём</b><br /><i>Дополнительная информация</i><br />Нажмите здесь, чтобы выбрать один из тактических приёмов.' ,
tricks : 'Приёмы' ,
dropTrick : 'Снять приём' ,
badHeavyArmor : '<tr><td colspan="2" class="hintview">Боевую магию невозможно использовать в тяжёлой броне. Нажмите {0}, чтобы снять тяжёлую броню.</td></tr>' ,
badGloves : '<tr><td colspan="2" class="hintview">Боевую магию невозможно использовать в перчатках не для мага. Нажмите {0}, чтобы снять перчатки.</td></tr>' ,
charmChooseMf : 'Выберите изменяемый показатель' ,
charmEnterV : 'Укажите значение, на которое чаруется показатель' ,
charmReplace : 'Замещать предыдущие чары' ,
showObjectData : 'Вывести параметры предмета' ,
waddMenu : 'Продукты' ,
waddInfo : 'Продукт/подарок' ,
noWAdd : 'Без продуктов/подарков' ,
ownedBy : 'Принадлежит: ' ,
doClean : 'Очистить всё' ,
doCleanHint : 'Очищает все сохранённые настройки и кабинки. Полезно, если Примерочная по каким-то причинам перестала у В а с работать.' ,
HideAllTricks : 'Снять все приемы' ,
dropAllSpells : 'Снять все свитки' ,
optionsColorizedDummyOff : 'Отказаться от цветовой раскраски манекена' ,
optionsColorizedDummyOn : 'Включить цветовую раскраску манекена' ,
setVariantsAvailable : 'Также доступны другие вариации усиления комплекта:' ,
bop : 'Этот предмет будет связан общей судьбой с первым, кто получит е г о . Никто другой не сможет е г о использовать.' ,
boe : 'Этот предмет будет связан общей судьбой с первым, кто оденет е г о . Никто другой не сможет е г о использовать.' ,
2022-12-19 20:22:19 +00:00
sentinel : '' ,
2023-01-10 16:29:32 +00:00
rune : 'Рунная магия' ,
addStats : 'Расставить статы' ,
unaddStats : 'Снять статы' ,
opt _choices : 'Варианты действия' ,
unRune : 'Снять руну' ,
wasRuned : 'Наложена руна'
2022-12-19 20:22:19 +00:00
} ;
// taken from analyzer3.js script.
var twoBlockZones = [
2023-01-10 16:29:32 +00:00
{ name : 'Голова и грудь' , zones : 0x03 } ,
{ name : 'Грудь и живот' , zones : 0x06 } ,
{ name : 'Живот и пояс' , zones : 0x0C } ,
{ name : 'Пояс и ноги' , zones : 0x18 } ,
{ name : 'Голова и ноги' , zones : 0x11 }
2022-12-19 20:22:19 +00:00
] ;
var threeBlockZones = [
2023-01-10 16:29:32 +00:00
{ name : 'Голова, грудь и живот' , zones : 0x07 } ,
{ name : 'Грудь, живот и пояс' , zones : 0x0E } ,
{ name : 'Живот, пояс и ноги' , zones : 0x1C } ,
{ name : 'Голова, пояс и ноги' , zones : 0x19 } ,
{ name : 'Голова, грудь и ноги' , zones : 0x13 }
2022-12-19 20:22:19 +00:00
] ;
var attackFreq = {
falways : 100 ,
// fpermanent: 100,
foften : 90 ,
// ffrequent: 85,
froutinely : 80 ,
// fregular: 80,
fsometimes : 60 ,
fsmall : 20 ,
// ffew: 25,
frare : 10 ,
// fseldom: 20,
finsignificant : 5 ,
fnone : 0
} ;
/* Character slots definition */
var slot _w1 = { // earings
id : 'w1' ,
zone : 'all' ,
index : 1 ,
canCharm : true ,
width : 60 ,
height : 20
} ;
var slot _w2 = { // amulet
id : 'w2' ,
zone : 'all' ,
index : 2 ,
canCharm : true ,
width : 60 ,
height : 20
} ;
var slot _w3 = { // weapon
id : 'w3' ,
zone : 'all' ,
index : 3 ,
canCharm : true ,
width : 60 ,
height : 60
} ;
var slot _w4 = { // armor
id : 'w4' ,
zone : 'body' ,
index : 4 ,
canCharm : true ,
width : 60 ,
height : 80
} ;
var slot _w5 = { // belt
id : 'w5' ,
zone : 'waist' ,
index : 5 ,
canCharm : true ,
width : 60 ,
height : 40
} ;
var slot _w6 = { // ring 1
id : 'w6' ,
zone : 'all' ,
index : 6 ,
canCharm : true ,
width : 20 ,
height : 20
} ;
var slot _w7 = { // ring 2
id : 'w7' ,
zone : 'all' ,
index : 7 ,
canCharm : true ,
width : 20 ,
height : 20
} ;
var slot _w8 = { // ring 3
id : 'w8' ,
zone : 'all' ,
index : 8 ,
canCharm : true ,
width : 20 ,
height : 20
} ;
var slot _w9 = { // helmet
id : 'w9' ,
zone : 'head' ,
index : 9 ,
canCharm : true ,
width : 60 ,
height : 60
} ;
var slot _w10 = { // shield
id : 'w10' ,
zone : 'all' ,
index : 10 ,
canCharm : true ,
width : 60 ,
height : 60
} ;
var slot _w11 = { // gloves
id : 'w11' ,
zone : 'all' ,
index : 11 ,
canCharm : true ,
width : 60 ,
height : 40
} ;
var slot _w12 = { // boots
id : 'w12' ,
zone : 'leg' ,
index : 12 ,
canCharm : true ,
width : 60 ,
height : 40
} ;
var slot _w13 = { // braslet
id : 'w13' ,
zone : 'all' ,
index : 13 ,
canCharm : true ,
width : 60 ,
height : 40
} ;
var slot _w14 = { // carman 1
id : 'w14' ,
zone : 'all' ,
index : 14 ,
width : 40 ,
height : 20
} ;
var slot _w15 = { // carman 2
id : 'w15' ,
zone : 'all' ,
index : 15 ,
width : 40 ,
height : 20
} ;
var slot _w16 = { // carman 3
id : 'w16' ,
zone : 'all' ,
index : 16 ,
width : 40 ,
height : 20
} ;
var slot _w0 = { // shirt
id : 'wshirt' ,
zone : 'body' ,
index : 0 ,
width : 60 ,
height : 80 ,
emptyImageHere : true
} ;
var slot _w17 = { // cape
id : 'wcape' ,
zone : 'all' ,
index : 17 ,
width : 60 ,
height : 80 ,
emptyImageHere : true
} ;
var slot _w18 = { // wreath
id : 'wwreath' ,
zone : 'all' ,
index : 18 ,
width : 60 ,
height : 60 ,
emptyImageHere : true
} ;
var slot _w19 = { // pants
id : 'w19' ,
zone : 'pants' ,
index : - 1 ,
canCharm : true ,
width : 60 ,
height : 80
} ;
var slot _wbook = { // book
id : 'wbook' ,
zone : 'all' ,
index : - 1 ,
width : 40 ,
height : 25 ,
emptyImageHere : true
} ;
var slot _wadd = { // adds
id : 'wadd' ,
zone : 'all' ,
index : - 1 ,
width : 1 ,
height : 1 ,
emptyImageHere : true
} ;
var slots = new Array (
slot _w1 , slot _w2 , slot _w3 , slot _w4 , slot _w5 , slot _w6 , slot _w7 , slot _w8 , slot _w9 , slot _w10 , slot _w11 , slot _w12 , slot _w13 , slot _w14 , slot _w15 , slot _w16 , slot _w0 , slot _w17 , slot _w18
) ;
function createSpellSlots ( )
{
for ( var i = 100 ; i <= 109 ; i ++ )
{
var spellSlot = { // spell
id : ( 'w' + i ) ,
zone : 'all' ,
index : slots . length ,
width : 40 ,
height : 25
} ;
slots . push ( spellSlot ) ;
}
}
createSpellSlots ( ) ;
slot _wbook . index = slots . length ;
slots . push ( slot _wbook ) ;
slot _wadd . index = slots . length ;
slots . push ( slot _wadd ) ;
slot _w19 . index = slots . length ;
slots . push ( slot _w19 ) ;
var aligns = new Array (
2023-01-10 16:29:32 +00:00
{ caption : 'Разное' } ,
{ id : '0' , caption : 'Без склонности' } ,
{ id : '7' , caption : 'Нейтральное братство' } ,
{ id : '9' , caption : 'Марка' } ,
{ id : '10' , caption : 'Отморозок' } ,
{ id : '23' , caption : 'ТемноСерая' } ,
{ id : '50' , caption : 'Алхимик' } ,
{ id : '100' , caption : 'Ангел' } ,
{ caption : 'Темное братство' } ,
{ id : '3' , caption : 'Темный' } ,
{ id : '3.01' , caption : 'Тарман-Служитель' } ,
{ id : '3.05' , caption : 'Тарман-Надсмотрщик' } ,
{ id : '3.06' , caption : 'Каратель' } ,
{ id : '3.07' , caption : 'Тарман-Убийца' } ,
{ id : '3.075' , caption : '13-я Гвардия' } ,
{ id : '3.09' , caption : 'Тарман-Палач' } ,
{ id : '3.091' , caption : 'Тарман-Владыка' } ,
{ id : '3.092' , caption : 'Тарман-Владыка на пенсии' } ,
{ id : '3.99' , caption : 'Верховный Тарман' } ,
{ id : '3.001' , caption : 'Гвардия Мусорщика' } ,
{ caption : 'Белое братство' } ,
{ id : '1' , caption : 'Светлый' } ,
{ id : '1.1' , caption : 'Паладин Поднебесья' } ,
{ id : '1.4' , caption : 'Таможенный Паладин' } ,
{ id : '1.5' , caption : 'Паладин Солнечной Улыбки' } ,
{ id : '1.6' , caption : 'Инквизитор' } ,
{ id : '1.7' , caption : 'Паладин Огненной Зари' } ,
{ id : '1.75' , caption : 'Хранитель Знаний' } ,
{ id : '1.9' , caption : 'Паладин Н е б а Белый' } ,
{ id : '1.91' , caption : 'Старший Паладин Н е б а ' } ,
{ id : '1.92' , caption : 'Кавалер Ордена Света' } ,
{ id : '1.99' , caption : 'Глава Ордена' } ,
{ id : '1.01' , caption : 'Гвардия Мироздателя' } ,
{ caption : 'Пределы Х а о с а ' } ,
{ id : '2' , caption : 'Х а о с ' } ,
{ id : '2.5' , caption : 'Служитель Х а о с а ' } ,
{ id : '2.9' , caption : 'Старший Служитель Х а о с а ' } ,
{ id : '2.99' , caption : 'Лорд Х а о с а ' }
2022-12-19 20:22:19 +00:00
) ;
var relativeSpiritConsumers = new Array (
{ id : 'cureHP15' , hp : 15 } ,
{ id : 'cureHP30' , hp : 30 } ,
{ id : 'cureHP45' , hp : 45 } ,
{ id : 'cureHP60' , hp : 60 } ,
{ id : 'cureHP120' , hp : 120 } ,
{ id : 'cureHP600' , hp : 600 } ,
{ id : 'cureHP900' , hp : 900 } ,
{ id : 'cureHP1200' , hp : 1200 } ,
{ id : 'cureHP1500' , hp : 1500 }
) ;
var absoluteSpiritConsumers = [
{ id : 'preservation' , spirit : 20 } ,
{ id : 'preservationD' , spirit : 20 } ,
{ id : 'reanimationL' , spirit : 30 } ,
{ id : 'reanimation' , spirit : 30 } ,
{ id : 'reanimation_olditem' , spirit : 30 } ,
{ id : 'mirror' , spirit : 5 } ,
{ id : 'elementalcrit' , spirit : 10 }
] ;
var alignImages = {
2023-01-10 16:29:32 +00:00
dark : '<img src="{0}align3.gif" width="12" height="15" border="0" alt="Темная склонность"/>' ,
light : '<img src="{0}align1.gif" width="12" height="15" border="0" alt="Светлая склонность"/>' ,
neutral : '<img src="{0}align7.gif" width="12" height="15" border="0" alt="Нейтральная склонность"/>' ,
haos : '<img src="{0}align2.gif" width="12" height="15" border="0" alt="Склонность х а о с а "/>' ,
greydark : '<img src="{0}align23.gif" width="12" height="15" border="0" alt="ТемноСерая склонность"/>' ,
2022-12-19 20:22:19 +00:00
sentinel : ''
} ;
var knownStats = [
'strength' ,
'dexterity' ,
'intuition' ,
'endurance' ,
'intellect' ,
'wisdom' ,
'spirituality'
] ;
var battleTurnParams = [
'hitpoints' ,
'mana' ,
'spiritlevel' ,
'parry' ,
'shieldblock' ,
'counterstroke' ,
'absolutecriticalhit' ,
'absolutejumpaway' ,
'firemagicdefence' ,
'airmagicdefence' ,
'watermagicdefence' ,
'earthmagicdefence' ,
'lightmagicdefence' ,
'darkmagicdefence' ,
'greymagicdefence' ,
'firemagicpower' ,
'airmagicpower' ,
'watermagicpower' ,
'earthmagicpower' ,
'lightmagicpower' ,
'darkmagicpower' ,
'magicdefencereduce' ,
'firemagicdefencereduce' ,
'airmagicdefencereduce' ,
'watermagicdefencereduce' ,
'earthmagicdefencereduce' ,
'lightmagicdefencereduce' ,
'darkmagicdefencereduce' ,
'greymagicdefencereduce' ,
'attackcount' ,
'blockcount' ,
'criticalpower' ,
'power' ,
'thrustpower' ,
'sabrepower' ,
'crushpower' ,
'cutpower' ,
'criticalhit' ,
'anticriticalhit' ,
'jumpaway' ,
'antijumpaway' ,
'piercearmor' ,
'absolutecriticalhit' ,
'absolutejumpaway'
] ;
var knownStatLimits = {
strength : 3 ,
dexterity : 3 ,
intuition : 3 ,
endurance : 3
} ;
var knownCleanModifiers = [
'level' ,
'-' ,
'strength' ,
'dexterity' ,
'intuition' ,
'endurance' ,
'intellect' ,
'wisdom' ,
'spirituality' ,
'totalstats' ,
'-' ,
'hitpoints' ,
'mana' ,
'spiritlevel' ,
'-' ,
'hpspeed' ,
'manaspeed' ,
'manaconsumption' ,
'-' ,
'weaponskill' ,
'knifeskill' ,
'axeskill' ,
'clubskill' ,
'swordskill' ,
'staffskill' ,
'-' ,
'magicskill' ,
'firemagicskill' ,
'airmagicskill' ,
'watermagicskill' ,
'earthmagicskill' ,
'lightmagicskill' ,
'darkmagicskill' ,
'greymagicskill' ,
'-' ,
'parry' ,
'shieldblock' ,
'counterstroke' ,
'absolutejumpaway' ,
'absolutecriticalhit' ,
'-' ,
'magicdefence' ,
'firemagicdefence' ,
'airmagicdefence' ,
'watermagicdefence' ,
'earthmagicdefence' ,
'lightmagicdefence' ,
'darkmagicdefence' ,
'greymagicdefence' ,
'-' ,
'magicpower' ,
'firemagicpower' ,
'airmagicpower' ,
'watermagicpower' ,
'earthmagicpower' ,
'lightmagicpower' ,
'darkmagicpower' ,
'-' ,
'magicdefencereduce' ,
'firemagicdefencereduce' ,
'airmagicdefencereduce' ,
'watermagicdefencereduce' ,
'earthmagicdefencereduce' ,
'lightmagicdefencereduce' ,
'darkmagicdefencereduce' ,
'greymagicdefencereduce' ,
'-' ,
'attackcount' ,
'blockcount' ,
'-' ,
'knapsack' ,
'-' ,
'totalprice' ,
'totaleprice' ,
'totalweight' ,
'consumed_reward' ,
'-' ,
'spell_powerup10_self' ,
'spell_powerup10_other' ,
'spell_protect10_self' ,
'spell_protect10_other' ,
'-' ,
'spell_powerup1_self' ,
'spell_powerup1_other' ,
'spell_powerup3_self' ,
'spell_powerup3_other' ,
'spell_powerup2_self' ,
'spell_powerup2_other' ,
'spell_powerup4_self' ,
'spell_powerup4_other' ,
'spell_protect1_self' ,
'spell_protect1_other' ,
'spell_protect3_self' ,
'spell_protect3_other' ,
'spell_protect2_self' ,
'spell_protect2_other' ,
'spell_protect4_self' ,
'spell_protect4_other'
] ;
var knownWeaponModifiers = [
'criticalpower' ,
'power' ,
'thrustpower' ,
'sabrepower' ,
'crushpower' ,
'cutpower' ,
'-' ,
'criticalhit' ,
'anticriticalhit' ,
'jumpaway' ,
'antijumpaway' ,
'-' ,
'piercearmor'
] ;
var knownWeaponModifiersHash = { } ;
for ( var wi = 0 ; wi < knownWeaponModifiers . length ; wi ++ )
{
if ( knownWeaponModifiers [ wi ] == '-' ) continue ;
knownWeaponModifiersHash [ knownWeaponModifiers [ wi ] ] = true ;
}
var knownAdvWeaponModifiers = {
damage : 0 ,
mfdamage : 0 ,
mfcdamage : 0 ,
postdamage : 0
} ;
var knownWeaponPowerModifiers = {
// value 'all' - always acts on minimal damage too.
power : 'all' ,
thrustpower : 'attack' ,
sabrepower : 'attack' ,
crushpower : 'attack' ,
cutpower : 'attack' ,
magicpower : 'allmagic' ,
firemagicpower : 'magic' ,
airmagicpower : 'magic' ,
watermagicpower : 'magic' ,
earthmagicpower : 'magic' ,
lightmagicpower : 'xmagic' ,
darkmagicpower : 'xmagic'
} ;
var knownZoneModifiers = {
defence : 0 ,
thrustdefence : 0 ,
sabredefence : 0 ,
crushdefence : 0 ,
cutdefence : 0
} ;
var knownArmorModifiers = {
headarmor : 0 ,
bodyarmor : 0 ,
waistarmor : 0 ,
legarmor : 0 ,
avgarmor : 0
} ;
var naturalElements = [
'fire' ,
'earth' ,
'air' ,
'water'
] ;
var allElements = [
'fire' ,
'earth' ,
'air' ,
'water' ,
'light' ,
'dark' ,
'grey'
] ;
var common _props = {
2023-01-10 16:29:32 +00:00
eprice : { lbl : 'Цена (екр.)' , fmt : '<font color="brown">{0} екр.</font>' , view : true } ,
price : { lbl : 'Цена' , fmt : '{0} кр.' , view : true } ,
weight : { lbl : 'В е с ' , view : true } ,
durability : { lbl : 'Долговечность' , fmt : '0/{0}' , view : true }
2022-12-19 20:22:19 +00:00
} ;
var item _props = {
2023-01-10 16:29:32 +00:00
sex : { lbl : 'Пол' , view : true , nocharm : true } ,
allstats : { lbl : 'В с е статы' , view : true , nocharm : true } ,
stats : { lbl : 'Количество увеличений' , view : true } ,
level : { lbl : 'Уровень' , required : true , view : true , nocharm : true } ,
levelup : { lbl : 'Ап' , view : true , nocharm : true } ,
pstat : { lbl : 'Статов за награду' , view : true , nocharm : true } ,
pskil : { lbl : 'Умений за награду' , view : true , nocharm : true } ,
strength : { lbl : 'Сила' , required : true , view : true , inmfg : true } ,
dexterity : { lbl : 'Ловкость' , required : true , view : true , inmfg : true } ,
intuition : { lbl : 'Интуиция' , required : true , view : true , inmfg : true } ,
endurance : { lbl : 'Выносливость' , required : true , view : true , nocharm : true } ,
intellect : { lbl : 'Интеллект' , required : true , view : true , inmfg : true } ,
wisdom : { lbl : 'Мудрость' , required : true , view : true , nocharm : true } ,
spirituality : { lbl : 'Духовность' , required : true , view : true , nocharm : true } ,
totalstats : { lbl : 'В с е г о статов' , view : true , nocharm : true } ,
spiritlevel : { lbl : 'Уровень духа' , view : true , nocharm : true } ,
totalprice : { lbl : 'Стоимость предметов' , fmt : '{0} кр.' , view : true , nocharm : true } ,
totaleprice : { lbl : 'Стоимость предметов (екр.)' , fmt : '{0} екр.' , view : true , nocharm : true } ,
totalweight : { lbl : 'В е с предметов' , view : true , nocharm : true } ,
mana : { lbl : 'Уровень маны' , required : true , view : true , inmfg : true } ,
weaponskill : { lbl : 'Владение оружием' , view : true , inmfg : true , inprpg : true } ,
knifeskill : { lbl : 'Владение ножами и кинжалами' , required : true , view : true , inmfg : true , inprpg : true } ,
axeskill : { lbl : 'Владение топорами и секирами' , required : true , view : true , inmfg : true , inprpg : true } ,
clubskill : { lbl : 'Владение молотами и дубинами' , required : true , view : true , inmfg : true , inprpg : true } ,
swordskill : { lbl : 'Владение мечами' , required : true , view : true , inmfg : true , inprpg : true } ,
staffskill : { lbl : 'Владение посохами' , required : true , view : true , inmfg : true , inprpg : true } ,
magicskill : { lbl : 'Владение магией Стихий' , view : true , inmfg : true } ,
firemagicskill : { lbl : 'Владение магией Огня' , required : true , view : true , inmfg : true } ,
airmagicskill : { lbl : 'Владение магией Воздуха' , required : true , view : true , inmfg : true } ,
watermagicskill : { lbl : 'Владение магией Воды' , required : true , view : true , inmfg : true } ,
earthmagicskill : { lbl : 'Владение магией Земли' , required : true , view : true , inmfg : true } ,
lightmagicskill : { lbl : 'Владение магией Света' , required : true , view : true , inmfg : true } ,
darkmagicskill : { lbl : 'Владение магией Тьмы' , required : true , view : true , inmfg : true } ,
greymagicskill : { lbl : 'Владение серой магией' , required : true , view : true , inmfg : true } ,
mindamage : { lbl : 'Минимальный урон' , view : true , inmfg : true , inprpg : true } ,
maxdamage : { lbl : 'Максимальный урон' , view : true , inmfg : true , inprpg : true } ,
damage : { lbl : 'Урон' , view : false , nocharm : true } ,
mfdamage : { lbl : 'Урон с учётом мф.' , view : true , nocharm : true } ,
nextdamage : { lbl : 'Отложенный урон' , view : true , nocharm : true } ,
nextturns : { lbl : 'Длительность отложенного урона' , fmt : '{0} ходов' , view : true , nocharm : true } ,
minhitpoints : { lbl : 'Минимальный уровень жизни' , view : true , nocharm : true } ,
maxhitpoints : { lbl : 'Максимальный уровень жизни' , view : true , nocharm : true } ,
nexthitpoints : { lbl : 'Отложенный уровень жизни' , view : true , nocharm : true } ,
mfdamage : { lbl : 'Урон с учётом мф.' , view : true , nocharm : true } ,
mfcdamage : { lbl : 'Критический урон с учётом мф.' , view : true , nocharm : true } ,
postdamage : { lbl : 'Дополнительный урон' , view : true , nocharm : true } ,
hitpoints : { lbl : 'Уровень жизни' , view : true , inmfg : true } ,
hpspeed : { lbl : 'Скорость восстановления жизни' , fmt : '{0}%' , view : true , inmfg : true } ,
manaspeed : { lbl : 'Скорость восстановления маны' , fmt : '{0}%' , view : true , inmfg : true } ,
manaconsumption : { lbl : 'Уменьшение расхода маны' , fmt : '{0}%' , maxvalue : 99 , view : true , inmfg : true } ,
criticalpower : { lbl : 'Мф. мощности критического удара' , fmt : '{0}%' , view : true , inmfg : true , inprpg : true } ,
absolutecriticalhit : { lbl : 'А б с . мф. крита' , view : true , inmfg : true , inprpg : true } ,
criticalhit : { lbl : 'Мф. критического удара' , fmt : '{0}%' , view : true , inmfg : true , inprpg : true } ,
anticriticalhit : { lbl : 'Мф. против критического удара' , fmt : '{0}%' , view : true , inmfg : true } ,
absolutejumpaway : { lbl : 'А б с . мф. уворота' , view : true , inmfg : true , inprpg : true } ,
jumpaway : { lbl : 'Мф. увёртывания' , fmt : '{0}%' , view : true , inmfg : true , inprpg : true } ,
antijumpaway : { lbl : 'Мф. против увёртывания' , fmt : '{0}%' , view : true , inmfg : true } ,
piercearmor : { lbl : 'Мф. пробоя брони' , fmt : '{0}%' , maxvalue : 100 , view : true , inmfg : true , inprpg : true } ,
parry : { lbl : 'Мф. парирования' , fmt : '{0}%' , maxvalue : 200 , view : true , inmfg : true } ,
counterstroke : { lbl : 'Мф. контрудара' , fmt : '{0}%' , maxvalue : 80 , view : true , inmfg : true } ,
shieldblock : { lbl : 'Мф. блока щитом' , fmt : '{0}%' , maxvalue : 80 , view : true , inmfg : true , inprpg : true } ,
power : { lbl : 'Мф. мощности удара' , fmt : '{0}%' , view : true , inmfg : true , inprpg : true } ,
thrustpower : { lbl : 'Мф. мощности колющего урона' , fmt : '{0}%' , view : true , inmfg : true , inprpg : true } ,
sabrepower : { lbl : 'Мф. мощности рубящего урона' , fmt : '{0}%' , view : true , inmfg : true , inprpg : true } ,
crushpower : { lbl : 'Мф. мощности дробящего урона' , fmt : '{0}%' , view : true , inmfg : true , inprpg : true } ,
cutpower : { lbl : 'Мф. мощности режущего урона' , fmt : '{0}%' , view : true , inmfg : true , inprpg : true } ,
defence : { lbl : 'Защита от урона' , maxvalue : 1000 , view : true , inmfg : true , inprpg : true } ,
edefence : { lbl : 'Защита от колющего, рубящего, дробящего и режущего урона' , maxvalue : 1000 , view : true , nocharm : true } ,
thrustdefence : { lbl : 'Защита от колющего урона' , maxvalue : 1000 , view : true , inmfg : true , inprpg : true } ,
sabredefence : { lbl : 'Защита от рубящего урона' , maxvalue : 1000 , view : true , inmfg : true , inprpg : true } ,
crushdefence : { lbl : 'Защита от дробящего урона' , maxvalue : 1000 , view : true , inmfg : true , inprpg : true } ,
cutdefence : { lbl : 'Защита от режущего урона' , maxvalue : 1000 , view : true , inmfg : true , inprpg : true } ,
magicdefence : { lbl : 'Защита от магии' , maxvalue : 1800 , view : true , inmfg : true } ,
emagicdefence : { lbl : 'Защита от магии Огня, Воздуха, Воды и Земли' , maxvalue : 800 , view : true , nocharm : true } ,
firemagicdefence : { lbl : 'Защита от магии Огня' , maxvalue : 800 , view : true , inmfg : true } ,
airmagicdefence : { lbl : 'Защита от магии Воздуха' , maxvalue : 800 , view : true , inmfg : true } ,
watermagicdefence : { lbl : 'Защита от магии Воды' , maxvalue : 800 , view : true , inmfg : true } ,
earthmagicdefence : { lbl : 'Защита от магии Земли' , maxvalue : 800 , view : true , inmfg : true } ,
lightmagicdefence : { lbl : 'Защита от магии Света' , maxvalue : 800 , view : true , inmfg : true } ,
darkmagicdefence : { lbl : 'Защита от магии Тьмы' , maxvalue : 800 , view : true , inmfg : true } ,
greymagicdefence : { lbl : 'Защита от серой магии' , maxvalue : 800 , view : true , inmfg : true } ,
magicpower : { lbl : 'Мф. мощности магии стихий' , fmt : '{0}%' , view : true , inmfg : true } ,
firemagicpower : { lbl : 'Мф. мощности магии Огня' , fmt : '{0}%' , view : true , inmfg : true } ,
airmagicpower : { lbl : 'Мф. мощности магии Воздуха' , fmt : '{0}%' , view : true , inmfg : true } ,
watermagicpower : { lbl : 'Мф. мощности магии Воды' , fmt : '{0}%' , view : true , inmfg : true } ,
earthmagicpower : { lbl : 'Мф. мощности магии Земли' , fmt : '{0}%' , view : true , inmfg : true } ,
lightmagicpower : { lbl : 'Мф. мощности магии Света' , fmt : '{0}%' , view : true , inmfg : true } ,
darkmagicpower : { lbl : 'Мф. мощности магии Тьмы' , fmt : '{0}%' , view : true , inmfg : true } ,
magicdefencereduce : { lbl : 'Понижение защиты от магии' , fmt : '{0}%' , maxvalue : 99 , view : true , inmfg : true } ,
firemagicdefencereduce : { lbl : 'Понижение защиты от магии Огня' , fmt : '{0}%' , maxvalue : 99 , view : true , inmfg : true } ,
airmagicdefencereduce : { lbl : 'Понижение защиты от магии Воздуха' , fmt : '{0}%' , maxvalue : 99 , view : true , inmfg : true } ,
watermagicdefencereduce : { lbl : 'Понижение защиты от магии Воды' , fmt : '{0}%' , maxvalue : 99 , view : true , inmfg : true } ,
earthmagicdefencereduce : { lbl : 'Понижение защиты от магии Земли' , fmt : '{0}%' , maxvalue : 99 , view : true , inmfg : true } ,
lightmagicdefencereduce : { lbl : 'Понижение защиты от магии Света' , fmt : '{0}%' , maxvalue : 99 , view : true , inmfg : true } ,
darkmagicdefencereduce : { lbl : 'Понижение защиты от магии Тьмы' , fmt : '{0}%' , maxvalue : 99 , view : true , inmfg : true } ,
greymagicdefencereduce : { lbl : 'Понижение защиты от серой магии' , fmt : '{0}%' , maxvalue : 99 , view : true , inmfg : true } ,
attackcount : { lbl : 'Точек удара за ход' , view : true , nocharm : true } ,
blockcount : { lbl : 'Зон блока за ход' , view : true , nocharm : true } ,
knapsack : { lbl : 'Ёмкость рюкзака' , view : true , nocharm : true } ,
headarmor : { lbl : 'Броня головы' , view : true , nocharm : true } ,
bodyarmor : { lbl : 'Броня корпуса' , view : true , nocharm : true } ,
waistarmor : { lbl : 'Броня пояса' , view : true , nocharm : true } ,
legarmor : { lbl : 'Броня ног' , view : true , nocharm : true } ,
avgarmor : { lbl : 'Броня в среднем' , view : true , nocharm : true } ,
probability : { lbl : 'Вероятность срабатывания' , fmt : '{0}%' , maxvalue : 99 , view : true , nocharm : true , inprpg : true } ,
spell _powerup10 _self : { lbl : 'Сокрушение на себя' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _powerup10 _other : { lbl : 'Сокрушение на других' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _powerup1 _self : { lbl : 'Огненное Усиление на себя' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _powerup1 _other : { lbl : 'Огненное Усиление на других' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _powerup3 _self : { lbl : 'Воздушное Усиление на себя' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _powerup3 _other : { lbl : 'Воздушное Усиление на других' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _powerup2 _self : { lbl : 'Водное Усиление на себя' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _powerup2 _other : { lbl : 'Водное Усиление на других' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _powerup4 _self : { lbl : 'Земное Усиление на себя' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _powerup4 _other : { lbl : 'Земное Усиление на других' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _protect10 _self : { lbl : 'Защита от Оружия на себя' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _protect10 _other : { lbl : 'Защита от Оружия на других' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _protect1 _self : { lbl : 'Защита от Огня на себя' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _protect1 _other : { lbl : 'Защита от Огня на других' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _protect3 _self : { lbl : 'Защита от Воздуха на себя' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _protect3 _other : { lbl : 'Защита от Воздуха на других' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _protect2 _self : { lbl : 'Защита от Воды на себя' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _protect2 _other : { lbl : 'Защита от Воды на других' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _protect4 _self : { lbl : 'Защита от Земли на себя' , fmt : '{0} ед.' , view : true , nocharm : true } ,
spell _protect4 _other : { lbl : 'Защита от Земли на других' , fmt : '{0} ед.' , view : true , nocharm : true } ,
magic _damage : { lbl : 'Магический урон' , view : true , nocharm : true } ,
magic _cdamage : { lbl : 'Магический критический урон' , view : true , nocharm : true } ,
consumed _reward : { lbl : 'Потрачено награды' , view : true , nocharm : true } ,
_power _v : { lbl : 'Общий мф. мощности урона' , fmt : '{0}%' , view : true , nocharm : true }
2022-12-19 20:22:19 +00:00
} ;
var knownWeaponSkills = [
'knifeskill' ,
'axeskill' ,
'clubskill' ,
'swordskill' ,
'staffskill'
] ;
var shortInfoMap = {
level : 'level' ,
str : 'strength' ,
dex : 'dexterity' ,
inst : 'intuition' ,
power : 'endurance' ,
intel : 'intellect' ,
wis : 'wisdom' ,
spirit : 'spirituality'
} ;
var shortInfoMap2 = {
_str : 'strength' ,
_dex : 'dexterity' ,
_inst : 'intuition' ,
_power : 'endurance' ,
_intel : 'intellect'
} ;
var knownPredefinedCharms = [
2023-01-10 16:29:32 +00:00
{ id : 'enhp_3_manabuff1' , caption : 'Увеличение Маны 1' , v : 'mana#20' , categories : [ 'staffs' ] } ,
{ id : 'enhp_3_manabuff2' , caption : 'Увеличение Маны 2' , v : 'mana#40' , categories : [ 'staffs' ] } ,
{ id : 'enhp_3_manabuff3' , caption : 'Увеличение Маны 3' , v : 'mana#60' , categories : [ 'staffs' ] } ,
// {id: 'enhp_3_moder_4', caption: 'Зачаровать оружие: Огонь', categories: ['knives','axes','clubs','swords']},
// {id: 'enhp_3_moder_5', caption: 'Зачаровать оружие: Лёд', categories: ['knives','axes','clubs','swords']},
{ id : 'enhp_6_bloodlinew1' , caption : 'Кровавая Мощь' , v : 'power#1#hitpoints#6' , categories : [ 'rings' ] } ,
{ id : 'enhp_6_bloodlinem1' , caption : 'Кровавая Мощь' , v : 'magicpower#1#hitpoints#6' , categories : [ 'rings' ] } ,
{ id : 'enhp_6_bloodlinew2' , caption : 'Кровавая Мощь [2]' , v : 'power#2#hitpoints#12' , categories : [ 'rings' ] } ,
{ id : 'enhp_6_bloodlinem2' , caption : 'Кровавая Мощь [2]' , v : 'magicpower#2#hitpoints#12' , categories : [ 'rings' ] } ,
{ id : 'enhp_2_maxHP10' , caption : 'Зачаровать амулет: Здоровье +100' , v : 'hitpoints#100' , categories : [ 'necklaces' ] } ,
{ id : 'enhp_13_pm_revard' , caption : 'Зачаровать наручи: Здоровье +12' , v : 'hitpoints#12' , categories : [ 'bracelets' ] } ,
{ id : 'enhp_3_moder_6_1' , caption : 'Зачаровать Посох: Урон' , v : 'magicpower#4' , categories : [ 'staffs' ] } ,
{ id : 'enhp_4_moder_2_1' , caption : 'Зачаровать броню: Жизнь' , v : 'hitpoints#33' , categories : [ 'heavyarmors' , 'lightarmors' ] } ,
{ id : 'enhp_4_4' , caption : 'Зачаровать броню: Адаптация' , v : 'antijumpaway#10#stats#2' , categories : [ 'heavyarmors' , 'lightarmors' ] } ,
{ id : 'enhp_2_4' , caption : 'Зачаровать амулет: Адаптация' , v : 'magicdefence#5#stats#2' , categories : [ 'necklaces' ] } ,
{ id : 'enhp_9_5' , caption : 'Зачаровать шлем: Адаптация' , v : 'defence#5#stats#2' , categories : [ 'helmets' ] } ,
{ id : 'enhp_12_4' , caption : 'Зачаровать сапоги: Адаптация' , v : 'anticriticalhit#10#stats#2' , categories : [ 'boots' ] } ,
{ id : 'enhp_19_1' , caption : 'Зачаровать поножи: Защита от урона' , v : 'defence#20' , categories : [ 'pants' ] } ,
{ id : 'enhp_19_2' , caption : 'Зачаровать поножи: Выживание' , v : 'hitpoints#40' , categories : [ 'pants' ] } ,
{ id : 'enhp_19_3' , caption : 'Зачаровать поножи: Защита от магии' , v : 'magicdefence#20' , categories : [ 'pants' ] } ,
{ id : 'enhp_19_4' , caption : 'Зачаровать поножи: Адаптация' , v : 'stats#3' , categories : [ 'pants' ] } ,
{ id : 'enhp_9_moder_1_1' , caption : 'Зачаровать шлем: Благословление Звезд' , v : 'dexterity#1#intuition#1#intellect#1#strength#1#hitpoints#6' , categories : [ 'helmets' ] } ,
{ id : 'enhp_11_moder_3' , caption : 'Зачаровать перчатки: Урон' , v : 'power#2#magicpower#2' , categories : [ 'gauntlets' ] } ,
{ id : 'enhp_2_tournir1chka_7_1' , caption : 'Зачаровать амулет: Характеристики +1' , v : 'dexterity#1#intuition#1#strength#1#hitpoints#6' , categories : [ 'necklaces' ] } ,
{ id : 'enhp_2_tournir1chka_7_2' , caption : 'Зачаровать амулет: Характеристики +2' , v : 'dexterity#2#intuition#2#strength#2#hitpoints#12' , categories : [ 'necklaces' ] } ,
{ id : 'enhp_2_tournir1chka_7_3' , caption : 'Зачаровать амулет: Характеристики +3' , v : 'dexterity#3#intuition#3#strength#3#hitpoints#18' , categories : [ 'necklaces' ] }
2022-12-19 20:22:19 +00:00
] ;
var knownNaturalEditors = new Array (
'level' ,
'levelup' ,
'-' ,
'strength' ,
'dexterity' ,
'intuition' ,
'endurance' ,
'intellect' ,
'wisdom' ,
'spirituality' ,
'-' ,
'knifeskill' ,
'axeskill' ,
'clubskill' ,
'swordskill' ,
'staffskill' ,
'-' ,
'firemagicskill' ,
'airmagicskill' ,
'watermagicskill' ,
'earthmagicskill' ,
'-' ,
'lightmagicskill' ,
'darkmagicskill' ,
'greymagicskill' ,
'-' ,
'pstat' ,
'pskil'
) ;
var knownElix = {
2023-01-10 16:29:32 +00:00
strength : { id : 'pot_base_50_str' , caption : 'Зелье Могущества' , makeUp : 'strength' , values : new Array ( 0 , 10 , 11 , 12 , 13 , 14 , 15 ) } ,
dexterity : { id : 'pot_base_50_dex' , caption : 'Зелье Стремительности' , makeUp : 'dexterity' , values : new Array ( 0 , 10 , 11 , 12 , 13 , 14 , 15 ) } ,
intuition : { id : 'pot_base_50_inst' , caption : 'Зелье Прозрения' , makeUp : 'intuition' , values : new Array ( 0 , 10 , 11 , 12 , 13 , 14 , 15 ) } ,
intellect : { id : 'pot_base_50_intel' , caption : 'Зелье Разума ' , makeUp : 'intellect' , values : new Array ( 0 , 10 , 11 , 12 , 13 , 14 , 15 ) } ,
intellect1 : { id : 'pot_base_200_bot4' , caption : 'Снадобье Разума' , makeUp : 'intellect' , values : new Array ( 0 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 ) } ,
2022-12-19 20:22:19 +00:00
separator0 : null ,
2023-01-10 16:29:32 +00:00
strength2 : { id : 'pot_base_200_bot3' , caption : 'Снадобье Великана' , makeUp : 'strength' , values : new Array ( 0 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 ) } ,
dexterity2 : { id : 'pot_base_200_bot2' , caption : 'Снадобье Змеи' , makeUp : 'dexterity' , values : new Array ( 0 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 ) } ,
intuition2 : { id : 'pot_base_200_bot1' , caption : 'Снадобье Предчувствия' , makeUp : 'intuition' , values : new Array ( 0 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 ) } ,
intellect2 : { id : 'pot_base_50_intel2' , caption : 'Нектар Разума' , makeUp : 'intellect' , values : new Array ( 0 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 ) } ,
2022-12-19 20:22:19 +00:00
separator0 : null ,
2023-01-10 16:29:32 +00:00
strength4 : { id : 'pot_base_200_bot_pm1' , caption : 'Эликсир Силы Предков' , makeUp : 'strength' , values : new Array ( 0 , 20 , 22 , 24 , 26 , 28 , 30 ) } ,
strength6 : { id : 'pot_base_1000_str' , caption : 'Топливо для Големов' , makeUp : 'strength' , values : new Array ( 0 , 12 , 18 ) } ,
dexterity3 : { id : 'pot_base_1000_dex' , caption : 'Смазка для Големов' , makeUp : 'dexterity' , values : new Array ( 0 , 12 , 18 ) } ,
intuition3 : { id : 'pot_base_1000_inst' , caption : 'Ускоритель для Големов' , makeUp : 'intuition' , values : new Array ( 0 , 12 , 18 ) }
2022-12-19 20:22:19 +00:00
} ;
var knownAdds = {
} ;
var knownDamageElix = {
2023-01-10 16:29:32 +00:00
pot _base _100 _master : { id : 'pot_base_100_master' , caption : 'Снадобье Забытых Мастеров' , modify : { power : 33 , magicpower : 33 , damage1 : 25 , damage2 : 50 } } ,
pot _base _0 _strup : { id : 'pot_base_0_strup' , caption : 'Новогодний Эликсир' , modify : { power : 33 , damage1 : 25 , damage2 : 50 } } ,
//НЕПАШЕТ а так же и на мастерах неработает +33 магии
// pot_base_0_strup_1: {id: 'pot_base_0_strup', caption: 'Новогодний Эликсир', modify: {magicpower: 50, magicdefencereduce: 10}},
pot _base _0 _ny3 : { id : 'pot_base_0_ny3' , caption : 'Эссенция Здоровья' , modify : { hitpoints : 300 } } ,
pot _base _0 _ny1 : { id : 'pot_base_0_ny1' , caption : 'Снадобье -Тарманка-' , modify : { power : 15 , hitpoints : 60 } }
2022-12-19 20:22:19 +00:00
} ;
var knownDefElix = {
2023-01-10 16:29:32 +00:00
pot _base _50 _kolproof : { places : new Array ( 'eweapon' ) , id : 'pot_base_50_kolproof' , caption : 'Зелье Пронзающих Игл' , makeUp : 'thrustdefence' , values : new Array ( 0 , 50 , 62 ) } ,
pot _base _50 _rubproof : { places : new Array ( 'eweapon' ) , id : 'pot_base_50_rubproof' , caption : 'Зелье Свистящих Секир' , makeUp : 'sabredefence' , values : new Array ( 0 , 50 , 62 ) } ,
pot _base _50 _drobproof : { places : new Array ( 'eweapon' ) , id : 'pot_base_50_drobproof' , caption : 'Зелье Тяжелых Молотов' , makeUp : 'crushdefence' , values : new Array ( 0 , 50 , 62 ) } ,
pot _base _50 _rezproof : { places : new Array ( 'eweapon' ) , id : 'pot_base_50_rezproof' , caption : 'Зелье Сверкающих Лезвий' , makeUp : 'cutdefence' , values : new Array ( 0 , 50 , 62 ) } ,
pot _base _50 _damageproof : { places : new Array ( 'eweapon' ) , id : 'pot_base_50_damageproof' , caption : 'Эликсир Неуязвимости' , makeUp : 'defence' , values : new Array ( 0 , 50 , 62 ) } ,
pot _base _200 _alldmg2 : { places : new Array ( 'eweapon' ) , id : 'pot_base_200_alldmg2' , caption : 'Великое зелье Стойкости' , makeUp : 'defence' , values : new Array ( 0 , 75 , 93 ) } ,
pot _base _200 _alldmg3 : { places : new Array ( 'eweapon' ) , id : 'pot_base_200_alldmg3' , caption : 'Нектар Неуязвимости' , makeUp : 'defence' , values : new Array ( 0 , 100 , 125 ) } ,
pot _base _200 _alldmg2 _p1k : { places : new Array ( 'eweapon' ) , id : 'pot_base_200_alldmg2_p1k' , caption : 'Зелье Каменной Стойкости' , makeUp : 'defence' , values : new Array ( 0 , 120 , 150 ) } ,
2022-12-19 20:22:19 +00:00
separator2 : null ,
2023-01-10 16:29:32 +00:00
pot _base _50 _fireproof : { places : new Array ( 'emagic' ) , id : 'pot_base_50_fireproof' , caption : 'Эликсир Пламени' , makeUp : 'firemagicdefence' , values : new Array ( 0 , 50 , 62 ) } ,
pot _base _50 _airproof : { places : new Array ( 'emagic' ) , id : 'pot_base_50_airproof' , caption : 'Эликсир Ветра' , makeUp : 'airmagicdefence' , values : new Array ( 0 , 50 , 62 ) } ,
pot _base _50 _waterproof : { places : new Array ( 'emagic' ) , id : 'pot_base_50_waterproof' , caption : 'Эликсир Морей' , makeUp : 'watermagicdefence' , values : new Array ( 0 , 50 , 62 ) } ,
pot _base _50 _earthproof : { places : new Array ( 'emagic' ) , id : 'pot_base_50_earthproof' , caption : 'Эликсир Песков' , makeUp : 'earthmagicdefence' , values : new Array ( 0 , 50 , 62 ) } ,
pot _base _50 _magicproof : { places : new Array ( 'emagic' ) , id : 'pot_base_50_magicproof' , caption : 'Эликсир Стихий' , makeUp : 'magicdefence' , values : new Array ( 0 , 50 , 62 ) } ,
pot _base _100 _allmag1 : { places : new Array ( 'emagic' ) , id : 'pot_base_100_allmag1' , caption : 'Малое зелье Отрицания' , makeUp : 'magicdefence' , values : new Array ( 0 , 33 , 41 ) } ,
2022-12-19 20:22:19 +00:00
separator3 : null ,
2023-01-10 16:29:32 +00:00
pot _base _150 _fireproof : { places : new Array ( 'emagic' ) , id : 'pot_base_150_fireproof' , caption : 'Эликсир Зарева' , makeUp : 'firemagicdefence' , values : new Array ( 0 , 75 , 93 ) } ,
pot _base _150 _airproof : { places : new Array ( 'emagic' ) , id : 'pot_base_150_airproof' , caption : 'Эликсир Урагана' , makeUp : 'airmagicdefence' , values : new Array ( 0 , 75 , 93 ) } ,
pot _base _150 _waterproof : { places : new Array ( 'emagic' ) , id : 'pot_base_150_waterproof' , caption : 'Эликсир Океанов' , makeUp : 'watermagicdefence' , values : new Array ( 0 , 75 , 93 ) } ,
pot _base _150 _earthproof : { places : new Array ( 'emagic' ) , id : 'pot_base_150_earthproof' , caption : 'Эликсир Недр' , makeUp : 'earthmagicdefence' , values : new Array ( 0 , 75 , 93 ) } ,
pot _base _200 _allmag2 : { places : new Array ( 'emagic' ) , id : 'pot_base_200_allmag2' , caption : 'Великое зелье Отрицания' , makeUp : 'magicdefence' , values : new Array ( 0 , 75 , 93 ) } ,
pot _base _200 _allmag3 : { places : new Array ( 'emagic' ) , id : 'pot_base_200_allmag3' , caption : 'Нектар Отрицания' , makeUp : 'magicdefence' , values : new Array ( 0 , 100 , 125 ) } ,
pot _base _200 _allmag2 _p1k : { places : new Array ( 'emagic' ) , id : 'pot_base_200_allmag2_p1k' , caption : 'Зелье Стража Магии' , makeUp : 'magicdefence' , values : new Array ( 0 , 120 , 150 ) }
2022-12-19 20:22:19 +00:00
} ;
var knownApplicableSpells = {
2023-01-10 16:29:32 +00:00
spellIntel : { id : 'spell_stat_intel' , caption : 'Холодный Разум' , makeUp : 'intellect' , values : new Array ( 0 , 10 ) , isSpell : true , check : 0 } ,
2022-12-19 20:22:19 +00:00
separator2 : null ,
2023-01-10 16:29:32 +00:00
spellHitpointsUp : { id : 'spell_powerHPup{0}' , caption : 'Жажда Жизни' , makeUp : 'hitpoints' , values : new Array ( 0 , 1 , 2 , 3 , 4 , 5 , 6 ) , isSpell : true , check : 0 } ,
spellHitpointsDown : { id : 'spell_powerHPdn{0}' , caption : 'Иссушение' , makeUp : 'hitpoints' , values : new Array ( 0 , - 1 , - 2 , - 3 , - 4 , - 5 ) , isSpell : true , check : 0 } ,
spellBD : { id : 'wis_fire_sign' , pic : 'wis_fire_sign' , caption : 'Благословение Звезд' , makeUp : 'allstats' , values : new Array ( 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 ) , isSpell : true , check : 1 }
2022-12-19 20:22:19 +00:00
} ;
var knownPowerUps = {
2023-01-10 16:29:32 +00:00
spell _powerup10 : { id : 'spell_powerup10:' , lbl : 'Сокрушение' , skill : 'greymagicskill' , found : false , damageup : true , value : 25 } ,
spell _powerup1 : { id : 'spell_powerup1' , lbl : 'Огненное Усиление' , skill : 'firemagicskill' , found : false , damageup : true , element : 'fire' , value : 25 , check : true } ,
spell _powerup2 : { id : 'spell_powerup2' , lbl : 'Водное Усиление' , skill : 'watermagicskill' , found : false , damageup : true , element : 'water' , value : 25 , check : true } ,
spell _powerup3 : { id : 'spell_powerup3' , lbl : 'Воздушное Усиление' , skill : 'airmagicskill' , found : false , damageup : true , element : 'air' , value : 25 , check : true } ,
spell _powerup4 : { id : 'spell_powerup4' , lbl : 'Земное Усиление' , skill : 'earthmagicskill' , found : false , damageup : true , element : 'earth' , value : 25 , check : true } ,
spell _protect10 : { id : 'spell_protect10' , lbl : 'Защита от Оружия' , skill : 'greymagicskill' , found : false , damageup : false , value : 100 } ,
spell _protect1 : { id : 'spell_protect1' , lbl : 'Защита от Огня' , skill : 'firemagicskill' , found : false , damageup : false , element : 'fire' , value : 100 } ,
spell _protect2 : { id : 'spell_protect2' , lbl : 'Защита от Воды' , skill : 'watermagicskill' , found : false , damageup : false , element : 'water' , value : 100 } ,
spell _protect3 : { id : 'spell_protect3' , lbl : 'Защита от Воздуха' , skill : 'airmagicskill' , found : false , damageup : false , element : 'air' , value : 100 } ,
spell _protect4 : { id : 'spell_protect4' , lbl : 'Защита от Земли' , skill : 'earthmagicskill' , found : false , damageup : false , element : 'earth' , value : 100 }
2022-12-19 20:22:19 +00:00
} ;
var knownECRPowerUps = {
spell _godstat _str : { modify : 'strength' , v : 100 } ,
spell _godstat _dex : { modify : 'dexterity' , v : 100 } ,
spell _godstat _inst : { modify : 'intuition' , v : 100 } ,
spell _godprotect10 : { modify : 'defence' , v : 500 } ,
spell _godprotect : { modify : 'magicdefence' , v : 500 } ,
invoke _spell _godintel100 : { modify : 'intellect' , v : 100 } ,
invoke _spell _godmana100 : { modify : 'mana' , v : 2000 } ,
spell _startenacity : { modify : 'hitpoints' , v : 300 } ,
2023-01-10 16:29:32 +00:00
// больше 1 параметра не хочет распознавать=(
2022-12-19 20:22:19 +00:00
//spell_starshine: {modify: 'strength', v: 10, 'dexterity', v: 10, 'intuition', v: 10},
//spell_starenergy: {modify: 'magicpower', v: 20, 'mana', v: 150}
2023-01-10 16:29:32 +00:00
// separator2: null, // статы от книг:
invoke _plain _1s _str10 : { modify : 'strength' , v : 10 } , //Зелёный Том Знаний
invoke _plain _1s _dex10 : { modify : 'dexterity' , v : 10 } , //Жёлтый Том Знаний
invoke _plain _1s _inst10 : { modify : 'intuition' , v : 10 } , //Красный Том Знаний
invoke _plain _1s _intel10 : { modify : 'intellect' , v : 10 } , //Синий Том Знаний
//invoke_plain_1s_all5: {modify: 'strength', v: 5, 'dexterity', v: 5, 'intuition', v: 5, 'intellect', v: 5}, //Белый том знаний
invoke _plain _1s _spirit10 : { modify : 'spirituality' , v : 10 } , // Черный Том Знаний
2022-12-19 20:22:19 +00:00
standart _effect : { modify : 'hitpoints' , v : 120 }
} ;
var reSharpness = /\+(\d{1,2})$/ ;
2023-01-10 16:29:32 +00:00
var reDamage = /^Удар: ([0-9]*) - ([0-9]*)$/ ;
var reHeadArmor = /^Броня головы: ([0-9]*)-([0-9]*) \([0-9]*\+d[0-9]*\)$/ ;
var reBodyArmor = /^Броня корпуса: ([0-9]*)-([0-9]*) \([0-9]*\+d[0-9]*\)$/ ;
var reWaistArmor = /^Броня пояса: ([0-9]*)-([0-9]*) \([0-9]*\+d[0-9]*\)$/ ;
var reLegArmor = /^Броня ног: ([0-9]*)-([0-9]*) \([0-9]*\+d[0-9]*\)$/ ;
var reHitPoints = /^Уровень жизни: \+([0-9]+)$/
2022-12-19 20:22:19 +00:00
var combatSpells = {
fireball : { id : 'fireball' , magic : 'fire' , critMultiplier : 3 , elemental : true , minzero : false } ,
lighting _bolt : { id : 'lighting_bolt' , magic : 'air' , critMultiplier : 1 , elemental : true , minzero : true } ,
showstorm : { id : 'showstorm' , magic : 'water' , critMultiplier : 1 , elemental : true , minzero : false } ,
stonerain : { id : 'stonerain' , magic : 'earth' , critMultiplier : 3 , elemental : true , minzero : false } ,
darkbolt : { id : 'darkbolt' , magic : 'dark' , critMultiplier : 3 , elemental : false , minzero : false }
} ;
var trickCategories = [
2023-01-10 16:29:32 +00:00
{ id : 'novice' , caption : 'Приёмы новичков' } ,
{ id : 'fight' , caption : 'Школа Оружия' } ,
{ id : 'fire' , caption : 'Стихия Огня' } ,
{ id : 'air' , caption : 'Стихия Воздуха' } ,
{ id : 'water' , caption : 'Стихия Воды' } ,
{ id : 'earth' , caption : 'Стихия Земли' } ,
{ id : 'light' , caption : 'Школа Света' } ,
{ id : 'dark' , caption : 'Школа Тьмы' } ,
{ id : 'grey' , caption : 'Серая школа' }
2022-12-19 20:22:19 +00:00
] ;
var helpChapterHtml = ''
2023-01-10 16:29:32 +00:00
+ '<h4>Как пользоваться</h4>'
+ '<p>Наша примерочная имеет простой интерфейс.</p>'
+ '<p>При нажатии (кнопкой мыши) на любой слот манекена появляется меню, благодаря которому Вы можете надеть предмет.</p>'
+ '<p>После того, как Вы одели предмет, с помощью этого меню Вы можете этот предмет заточить, улучшить до необходимого уровня, подогнать под комплект БК, '
+ 'снять или подогнать броню под Вашего персонажа.</p>'
+ '<p>Например, с помощью этого меню Вы можете надеть Меч Кромуса, затем улучшить е г о до 9 уровня, подогнать под комплект Кровавой Луны, и затем заточить на +10.</p>'
+ '<p>Одетые Вами манекены Вы всегда можете сохранить или загрузить в виде текста. Для того, чтобы показать получившийся вариант другу, '
+ 'достаточно передать ему адрес, который Вы увидите, выбрав команду "Передать ссылку на этот комплект другу". '
+ 'Кстати, при загрузке комплекта вместо текста можно указать дружескую ссылку на комплект.</p>'
+ '<p>Также Вы можете быстро надеть один из предопределённых комплектов игры "Бойцовский Клуб", выбрав пункт "Надеть комплект БК", расположенный выше манекена персонажа.</p>'
+ '<p>В примерочной предусмотрена возможность открывать несколько кабинок с помощью закладки "Новая кабинка", чтобы Вы могли одевать и сравнивать различные варианты комплектов.</p>'
+ '<p>Также Вы можете рассчитать стоимость переброса статов от одного комплекта к другому, открыв закладку "Комната Знахаря".</p>'
+ '<p>Встроенная таблица опыта доступна на закладке "Таблица опыта".</p>'
+ '<h4>Расчёт показателей</h4>'
+ '<p>Для получения правильных результатов необходимо не только одеть манекен персонажа БК, но и обязательно ввести родные показатели персонажа.</p>'
+ '<p>Примерочная ведёт расчёт показателей, исходя из данных Энциклопедии, а также учитывая эмпирическим путём выведенные нашим кланом формулы расчёта '
+ '"родных" показателей, а также скрытые усиления и иные модификаторы.</p>'
+ '<p>Естественно, результаты могут быть не совсем точными, к тому же необходимо учитывать то, что мир БК постоянно изменяется.</p>'
+ '<p>Сравнить результирующие показатели комплектов во всех открытых кабинках можно, открыв закладку "Сводная таблица".</p>'
+ '<p>В отличие от расчётного модуля Инвентаря БК, расчётный модуль нашей Примерочной рассчитывает большее количество показателей, включая скрытые.</p>'
+ '<p>Отличия расчётного модуля нашей Примерочной от расчётных модулей большинства известных Примерочных:</p>'
+ '<ul><li>Мы рассчитываем реальные значения показателей, а не только от предметов;</li>'
+ '<li>Мы правильно считаем показатели по зонам "голова", "корпус", "пояс", "ноги";</li>'
+ '<li>Мы рассчитываем мощность сокрушения, защиты от урона, стихийного усиления и защиты от стихии (если надеть соответствующий свиток);</li>'
+ '<li>Мы рассчитываем мощность урона от боевой магии, расходующей ману (если надеть соответствующий свиток).</li></ul>'
+ '<p>В кабинках показатели выводятся в формате: текущее значение (всплывающая подсказка показывает расшифровку: родное значение + значение от комплекта) [требуемое значение]. '
+ 'Если какое-либо значение является максимально возможным в БК, то оно выводится жирным текстом.</p>'
+ '<p>Если текущее значение равно максимальному для кабинок, оно выводится зелёным цветом, иначе коричневым цветом. Если текущее значение меньше требуемого, то требуемое значение выделяется красным цветом.</p>'
+ '<p><a href="#" class="TLink" onclick="hideMenu(); hideHelp(); return false">Скрыть справку</a>.</p>'
2022-12-19 20:22:19 +00:00
;
var dressHints = new Array (
2023-01-10 16:29:32 +00:00
'Вы легко можете узнать стоимость перекидки статов для перехода от одного комплекта к другому, открыв закладку "Комната Знахаря".' ,
'Если Вы оденете на манекен свиток сокрушения или иного стихийного усиления, то будет также рассчитана мощность накладываемого магом заклинания.' ,
'Если Вы оденете на манекен свиток боевой магии, требующий ману, то будет также рассчитан урон боевого заклинания (для цели с нулевой защитой от магии).' ,
'Для того, чтобы надеть артефакт, предположим, девятого уровня, просто оденьте артефакт, а затем нажмите на одетый артефакт, и выберите в меню пункт "Улучшить".' ,
'Для того, чтобы подогнать броню, нажмите на одетую броню, и выберите в меню пункт "Подогнать броню".' ,
'Для того, чтобы подогнать предмет под комплект БК, нажмите на одетый предмет, и выберите в меню пункт "Подогнать под комплект".' ,
'Примерочная долго грузится? Проверьте настройки Internet Explorer: Сервис | Свойства обозревателя, Дополнительно, Настройка HTTP 1.1 - галочки должны быть проставлены для обоих подпунктов.' ,
'Для того, чтобы заточить оружие, нажмите на одетое оружие, и выберите в меню пункт "Заточка на +X".' ,
'По умолчанию устаревшие предметы типа Робы Торговца недоступны в меню выбора предмета. Н о Вы всегда можете сделать их доступными, используя "Фильтр".' ,
'Если Вы хотите отключить визуальные эффекты, такие, как полупрозрачность, анимация или изображения предметов в списках, достаточно открыть "Настройки".' ,
'Начать примерку часто удобно, взяв за основу реально существующего персонажа БК, введя е г о ник: "По персонажу БК".' ,
'Если Вы хотите примерить один из комплектов БК, удобно выбрать комплект целиком из меню "Надеть комплект БК".' ,
'Чтобы увидеть реальные расчётные данные, необходимо одеть манекен и обязательно ввести статы и умения персонажа.' ,
'Вы можете одновременно работать с несколькими вариантами экипировки, используя произвольное количество кабинок, нажав на закладку "Новая кабинка".' ,
'Вы можете легко сравнить разные варианты экипировки в открытых кабинках, открыв закладку "Сводная таблица".'
2022-12-19 20:22:19 +00:00
) ;
function setItemPropLabel ( propName , newLabel )
{
item _props [ propName ] . lbl = newLabel ;
}
function getItemPropLabel ( propName )
{
return item _props [ propName ] . lbl ;
}
function getItemPropFormattedValue ( propName , value , maxvalue )
{
var itemProp = item _props [ propName ] ;
var actualValue = value ;
if ( ( 'maxvalue' in itemProp ) && ( value >= itemProp . maxvalue ) )
{
actualValue = itemProp . maxvalue . toString ( ) . bold ( ) ;
}
var fmt = ( 'fmt' in itemProp ) ? itemProp . fmt : '{0}' ;
r = format ( fmt , actualValue ) ;
if ( maxvalue == null )
{
return r ;
}
if ( value !== maxvalue && value < maxvalue )
{
return r . fontcolor ( "brown" ) ;
}
return r . fontcolor ( "darkgreen" ) ;
}
function testStateProp ( state , propName , value )
{
var v = parseInt ( value ) ;
var r = true
&& ( state != null )
&& ! isNaN ( v )
;
if ( r && ( propName in state . results ) )
{
var sv = state . results [ propName ] ;
if ( propName in state . battlemf )
{
sv -= state . battlemf [ propName ] ;
}
r = ( sv < v ) ;
}
return r ;
}
function getHtmlOfProp ( state , obj , propDesc , propName , extension )
{
if ( obj == null || propDesc == null || ! ( propName in obj ) )
{
return '' ;
}
var fmt = ( 'fmt' in propDesc ) ? propDesc . fmt : '{0}' ;
var v = format ( fmt , obj [ propName ] ) ;
var red = false ;
if ( state != null )
{
red |= testStateProp ( state , propName , obj [ propName ] ) ;
}
if ( red )
{
v = format ( '<font color="red">{0}</font>' , v ) ;
}
var r = propDesc . lbl + ': ' + v ;
if ( extension != null )
{
r += extension ;
}
return r + '<br />' ;
}
function getHtmlOfSignedProp ( obj , propDesc , propName , charm , rune , runeOpt )
{
if ( obj == null || propDesc == null || ! ( propName in obj ) )
{
return '' ;
}
var runeMods = null ;
if ( ( rune != null ) && ( runeOpt != null ) )
{
var appRune = getObjectById ( rune ) ;
if ( 'modify' in appRune )
{
if ( 'opts' in appRune . modify )
{
if ( appRune . modify . opts [ runeOpt ] != null )
{
runeMods = appRune . modify . opts [ runeOpt ] ;
}
}
}
}
var fmt = ( 'fmt' in propDesc ) ? propDesc . fmt : '{0}' ;
var v = parseInt ( obj [ propName ] ) ;
if ( isNaN ( v ) )
{
v = obj [ propName ] ;
}
else
{
var hasCharm = false ;
if ( ( charm != null ) && ( propName in charm ) )
{
v -= charm [ propName ] ;
hasCharm = true ;
}
var hasRune = false ;
if ( ( runeMods != null ) && ( propName in runeMods ) )
{
v -= runeMods [ propName ] ;
hasRune = true ;
}
if ( v > 0 )
{
v = '+' + v ;
}
if ( hasCharm )
{
v = '' + v + '<b>' ;
if ( charm [ propName ] > 0 )
{
v += '+' ;
}
v += '' + charm [ propName ] + '</b>' ;
}
if ( hasRune )
{
v = '' + v + '<i>' ;
if ( runeMods [ propName ] > 0 )
{
v += '+' ;
}
v += '' + runeMods [ propName ] + '</i>' ;
}
}
return propDesc . lbl + ': ' + format ( fmt , v ) + '<br />' ;
}
function getHtmlOfArmorProp ( obj , basePropName , caption )
{
var amin = null ;
var amax = null ;
if ( obj == null )
{
return '' ;
}
if ( basePropName in obj )
{
amax = amin = obj [ basePropName ] ;
}
else if ( ( basePropName + '1' ) in obj )
{
amin = obj [ basePropName + '1' ] ;
amax = obj [ basePropName + '2' ] ;
}
if ( amin == null )
{
return '' ;
}
return format ( '{0}: {1}-{2}<br />' , caption , amin , amax ) ;
}
function getDefAttackFreqFor ( atype )
{
return { id : atype , ideal : 25 , real : 25 , freal : 25 , elemental : false } ;
}
function getAttackFreq ( obj )
{
if ( obj == null || ! ( 'attacks' in obj ) )
{
return {
thrust : getDefAttackFreqFor ( 'thrust' ) ,
sabre : getDefAttackFreqFor ( 'sabre' ) ,
crush : getDefAttackFreqFor ( 'crush' ) ,
cut : getDefAttackFreqFor ( 'cut' )
} ;
}
var totalv = 0 ;
var r = new Object ( ) ;
for ( var attackn in obj . attacks )
{
var iv = attackFreq [ 'f' + obj . attacks [ attackn ] ] ;
var elemental = false ;
for ( var nei = 0 ; nei < naturalElements . length ; nei ++ )
{
if ( naturalElements [ nei ] == attackn )
{
elemental = true ;
break ;
}
}
r [ attackn ] = { id : attackn , ideal : iv , elemental : elemental } ;
totalv += iv ;
}
for ( var rn in r )
{
r [ rn ] . real = ( r [ rn ] . ideal * 100.0 ) / totalv ;
r [ rn ] . freal = Math . floor ( r [ rn ] . real * 100.0 + 0.5 ) / 100.0 ;
}
return r ;
}
function areNotMagicGloves ( o )
{
return ( ( o != null ) && ( o . slot == 'w11' ) && ( ! ( 'required' in o ) || ! ( 'wisdom' in o . required ) || ( o . required . wisdom == 0 ) ) ) ;
}
function isHeavyArmor ( o )
{
return ( ( o != null ) && ( o . slot == 'w4' ) && ( o . category == 'heavyarmors' ) ) ;
}
function isSecondaryWeapon ( o )
{
return ( ( o != null ) && ( 'properties' in o ) && ( 'secondweapon' in o . properties ) && ( o . properties . secondweapon == 'yes' ) ) ;
}
function isTwohandledWeapon ( o )
{
return ( ( o != null ) && ( 'properties' in o ) && ( 'twohandled' in o . properties ) && ( o . properties . twohandled == 'yes' ) ) ;
}
function getJSName ( id )
{
if ( id == null )
{
return null ;
}
if ( id . length > 0 )
{
if ( id . charAt ( 0 ) >= '0' && id . charAt ( 0 ) <= '9' )
{
id = '_' + id ;
}
}
return replacestr ( replacestr ( id , '.' , '_' ) , '-' , '_' ) ;
}
function getObjectById ( objid )
{
if ( objid == null )
{
return null ;
}
return dressItems [ getJSName ( objid ) ] ;
}
function getSetById ( setid )
{
return dressSets [ getJSName ( setid ) ] ;
}
function getSetAndCountById ( setCountId )
{
for ( var setn in dressSets )
{
var set = dressSets [ setn ] ;
if ( ! ( 'details' in set ) )
{
continue ;
}
for ( var scn in set . details )
{
if ( scn == setCountId )
{
return { set : set , count : set . details [ scn ] } ;
}
}
}
return { set : null , count : null } ;
}
function getSetCountById ( setCountId )
{
var r = getSetAndCountById ( setCountId ) ;
return r . count ;
}
function getCountForSet ( state , setid )
{
if ( state == null )
{
return 0 ;
}
var countFound = 0 ;
var set = getSetById ( setid ) ;
for ( var sloti = 0 ; sloti < slots . length ; sloti ++ )
{
var slot = slots [ sloti ] ;
var o = getObjectByStateSlot ( state , slot ) ;
if ( o == null || ! ( 'setlink' in o ) || ( o . setlink . name != set . id ) )
{
continue ;
}
countFound ++ ;
if ( isTwohandledWeapon ( o ) )
{
countFound ++ ;
}
}
return countFound ;
}
function getStrengtheningById ( strengtheningid )
{
return dressStrengthenings [ strengtheningid ] ;
}
function getObjectDescHtml ( state , obj )
{
var i ;
var html = '' ;
var addinfo = '' ;
var level = 0 ;
if ( ( 'required' in obj ) && ( 'level' in obj . required ) )
{
level = obj . required . level ;
}
var artefact = ( ( 'artefact' in obj ) && obj . artefact ) ;
var old = ( ( 'old' in obj ) && obj . old ) ;
var imp1 = ( ( 'imp1' in obj ) && obj . imp1 ) ;
var showTeeth = ( level < 8 ) && ! artefact && ! old && ! imp1 ;
html += obj . caption . bold ( ) ;
if ( ( 'showlevel' in obj ) && obj . showlevel && ( 'level' in obj ) )
{
html += ' <b>[' + obj . level + ']</b>' ;
}
if ( artefact )
{
html += format ( ' <img src="{0}artefact.gif" width="18" height="16" border="0" alt="Artefact" />' , baseImgPath ) ;
}
if ( 'alignment' in obj )
{
html += format ( ' ' + alignImages [ obj . alignment ] , baseImgPath ) ;
}
if ( 'binding' in obj )
{
switch ( obj . binding )
{
case 'bop' :
html += ' <img src="' + baseImgPath + 'destiny.gif" style="filter: invert()" border="0" width="16" height="18" alt="' + localizer . bop + '" />' ;
break ;
case 'boe' :
html += ' <img src="' + baseImgPath + 'destiny.gif" style="filter: gray()" border="0" width="16" height="18" alt="' + localizer . boe + '" />' ;
break ;
}
}
else if ( 'destiny' in obj )
{
html += ' <img src="' + baseImgPath + 'destiny.gif" border="0" width="16" height="18" alt="' + obj . destiny + '" />' ;
}
if ( ( 'wasFit' in obj ) && obj . wasFit )
{
html += ' ' + localizer . wasFit ;
}
if ( ( 'wasUpgrade' in obj ) && obj . wasUpgrade )
{
html += ' ' + localizer . wasUpgrade ;
}
if ( old )
{
html += ' [old]' ;
}
if ( imp1 )
{
html += ' ' + localizer . impitem ;
}
if ( ( 'wasCharmed' in obj ) && obj . wasCharmed )
{
html += ' ' + localizer . wasCharmed ;
}
if ( ( 'wasAdded' in obj ) && obj . wasAdded )
{
html += ' ' + localizer . wasAdded ;
}
html += '<br />' ;
if ( ( 'wasRuned' in obj ) && ( 'rune' in obj ) )
{
var appRune = getObjectById ( obj . rune ) ;
if ( 'caption' in appRune )
{
html += '<i>' + localizer . wasRuned + ': ' + appRune . caption . bold ( ) + '</i><br />' ;
}
}
if ( 'owner' in obj )
{
html += localizer . ownedBy + '<b>' + obj . owner + '</b><br />' ;
}
if ( 'clan' in obj )
{
html += localizer . ownedBy + '<img src="' + clanImgPath + obj . clan + '.gif" width="24" height="15" border="0" /><b>' + obj . clan + '</b><br />' ;
}
if ( ( 'resources' in obj ) || ( ( 'consumes' in obj ) && ( 'spiritlevel' in obj . consumes ) ) )
{
var rhtml = '' ;
if ( 'resources' in obj )
{
for ( var rn in obj . resources )
{
rhtml += '<img src="' + trickResourceImgPath + rn + '.gif" width="8" height="8" border="0" />' ;
rhtml += ' ' + obj . resources [ rn ] + ' ' ;
}
}
if ( ( 'consumes' in obj ) && ( 'spiritlevel' in obj . consumes ) )
{
rhtml += '<img src="' + trickResourceImgPath + 'spirit.gif" width="8" height="8" border="0" />' ;
rhtml += ' ' + obj . consumes . spiritlevel + ' ' ;
}
if ( rhtml != '' )
{
html += '<span style="font-size: 10px; font-family: Verdana, Arial, Helvetica;">' ;
html += rhtml ;
html += '</span><br />' ;
}
}
if ( 'count' in obj )
{
html += format ( localizer . aboutSetCount , obj . count ) + '<br />' ;
}
if ( 'upgrade' in obj )
{
html += localizer . canUpgrade + '<br />' ;
}
if ( ( ( 'artefact' in obj ) && obj . artefact ) || ( ( 'adjustment' in obj ) && obj . adjustment ) )
{
html += localizer . canFit + '<br />' ;
}
if ( 'common' in obj )
{
for ( var mfname in common _props )
{
if ( ! common _props [ mfname ] . view )
{
continue ;
}
var extension = '' ;
if ( mfname == 'price' && showTeeth && ( 'price' in obj . common ) )
{
extension += ' (' ;
var price = obj . common . price ;
if ( price >= 100 )
{
extension += Math . floor ( price / 100 ) ;
price = price % 100 ;
2023-01-10 16:29:32 +00:00
extension += '<img width="7" height="7" border="0" alt="" src="' + toothImgPath + 'zub_low1.gif" title="Чистый зуб" />' ;
2022-12-19 20:22:19 +00:00
}
if ( price >= 10 )
{
extension += Math . floor ( price / 10 ) ;
price = price % 10 ;
2023-01-10 16:29:32 +00:00
extension += '<img width="7" height="7" border="0" alt="" src="' + toothImgPath + 'zub_low3.gif" title="Нормальный зуб" />' ;
2022-12-19 20:22:19 +00:00
}
if ( price > 0 )
{
extension += price ;
2023-01-10 16:29:32 +00:00
extension += '<img width="7" height="7" border="0" alt="" src="' + toothImgPath + 'zub_low4.gif" title="Гнилой зуб" />' ;
2022-12-19 20:22:19 +00:00
}
extension += ')' ;
}
html += getHtmlOfProp ( null , obj . common , common _props [ mfname ] , mfname , extension ) ;
}
if ( ( 'probability' in obj . common ) && item _props . probability . view )
{
html += item _props . probability . lbl + ': ' ;
var probability = obj . common . probability ;
html += getItemPropFormattedValue ( 'probability' , probability ) ;
if ( state != null )
{
var ointellect = 0 ;
if ( ( 'required' in obj ) && ( 'intellect' in obj . required ) )
{
ointellect = obj . required . intellect ;
}
if ( ( 'results' in state ) && ( 'intellect' in state . results ) )
{
html += ' (' + localizer . probabilityReal + ' ' ;
if ( state . results . intellect < ointellect )
{
html += localizer . probabilityNever ;
}
else
{
var realprobability = ( probability * ( 1 + ( state . results . intellect - ointellect ) * 0.03 ) ) ;
realprobability = Math . floor ( realprobability * 100.0 + 0.5 ) / 100.0 ;
if ( realprobability > 99.0 )
{
realprobability = 99.0 ;
}
html += getItemPropFormattedValue ( 'probability' , realprobability ) ;
}
html += ')' ;
}
}
html += '<br />' ;
}
}
var comsumationHtml = '' ;
var absConsumeMultiplier = 1 ;
if ( state != null && state . natural . spirituality >= 75 )
{
absConsumeMultiplier = 0.5 ;
}
for ( var acn in absoluteSpiritConsumers )
{
var ac = absoluteSpiritConsumers [ acn ] ;
if ( ac . id == obj . id )
{
comsumationHtml += getItemPropLabel ( 'spiritlevel' ) ;
comsumationHtml += ': ' ;
comsumationHtml += ac . spirit * absConsumeMultiplier ;
comsumationHtml += '<br />' ;
break ;
}
}
for ( var rcn in relativeSpiritConsumers )
{
var rc = relativeSpiritConsumers [ rcn ] ;
if ( rc . id == obj . id )
{
comsumationHtml += getItemPropLabel ( 'spiritlevel' ) ;
comsumationHtml += ': ' ;
var sl = Math . floor ( ( rc . hp * 1000.0 ) / state . results . hitpoints ) / 100 ;
comsumationHtml += sl ;
comsumationHtml += '<br />' ;
break ;
}
}
if ( comsumationHtml != '' )
{
html += localizer . itemComsumesGroup . bold ( ) + '<br />' ;
html += comsumationHtml ;
}
if ( 'required' in obj )
{
html += localizer . itemRequiredGroup . bold ( ) + '<br />' ;
if ( 'sex' in obj . required )
{
var statesex = state . sex ? 'female' : 'male' ;
var itemProp = item _props [ 'sex' ] ;
if ( itemProp . view )
{
html += getItemPropLabel ( 'sex' ) ;
html += ': ' ;
if ( statesex != obj . required . sex )
{
html += '<font color="red">' ;
}
2023-01-10 16:29:32 +00:00
html += ( obj . required . sex == 'male' ) ? 'мужской' : 'женский' ;
2022-12-19 20:22:19 +00:00
if ( statesex != obj . required . sex )
{
html += '</font>' ;
}
html += '<br />' ;
}
}
for ( var mfname in item _props )
{
var itemProp = item _props [ mfname ] ;
if ( ! itemProp . view )
{
continue ;
}
if ( ( 'required' in itemProp ) && itemProp . required )
{
html += getHtmlOfProp ( state , obj . required , itemProp , mfname ) ;
}
}
if ( isTwohandledWeapon ( obj ) )
{
html += localizer . twohandledWeapon + '<br />' ;
}
if ( 'zodiacs' in obj )
{
2023-01-10 16:29:32 +00:00
html += 'Знак зодиака: ' ;
2022-12-19 20:22:19 +00:00
var firstz = true ;
for ( var zn in obj . zodiacs )
{
var z = obj . zodiacs [ zn ] ;
if ( firstz )
{
firstz = false ;
}
else
{
html += ', ' ;
}
html += z . caption ;
}
html += '<br />' ;
}
if ( 'capitalreputation' in obj . required )
{
2023-01-10 16:29:32 +00:00
html += 'Репутация в Capital city: ' + obj . required . capitalreputation ;
2022-12-19 20:22:19 +00:00
if ( obj . required . capitalreputation >= 10000 )
{
html += '<img src="' + brandImgPath + '1.gif" width="34" height="19" border="0" />' ;
}
html += '<br />' ;
}
if ( 'angelsreputation' in obj . required )
{
2023-01-10 16:29:32 +00:00
html += 'Репутация в Angels city: ' + obj . required . angelsreputation ;
2022-12-19 20:22:19 +00:00
if ( obj . required . angelsreputation >= 10000 )
{
html += '<img src="' + brandImgPath + '2.gif" width="34" height="19" border="0" />' ;
}
html += '<br />' ;
}
if ( 'sandreputation' in obj . required )
{
2023-01-10 16:29:32 +00:00
html += 'Репутация в Sand city: ' + obj . required . sandreputation ;
2022-12-19 20:22:19 +00:00
if ( obj . required . sandreputation >= 10000 )
{
html += '<img src="' + brandImgPath + '7.gif" width="34" height="19" border="0" />' ;
}
html += '<br />' ;
}
if ( 'demonsreputation' in obj . required )
{
2023-01-10 16:29:32 +00:00
html += 'Репутация в Demons city: ' + obj . required . demonsreputation ;
2022-12-19 20:22:19 +00:00
if ( obj . required . demonsreputation >= 10000 )
{
html += '<img src="' + brandImgPath + '3.gif" width="34" height="19" border="0" />' ;
}
html += '<br />' ;
}
if ( 'baltarreputation' in obj . required )
{
2023-01-10 16:29:32 +00:00
html += 'Пожертвовано рубинов на Алтарь Крови: ' + obj . required . baltarreputation ;
2022-12-19 20:22:19 +00:00
if ( obj . required . baltarreputation >= 100 )
{
html += '<img src="' + brand2ImgPath + 'znbl_1.gif" width="35" height="24" border="0" />' ;
}
html += '<br />' ;
}
}
if ( 'modify' in obj )
{
html += localizer . itemModifyGroup . bold ( ) + '<br />' ;
//"Variable actions for different runes
if ( 'opts' in obj . modify )
{
if ( obj . modify . opts . length >= 1 )
{
html += localizer . opt _choices + ':<br />' ;
for ( var a = 0 ; a <= obj . modify . opts . length - 1 ; a ++ )
{
for ( var imod in obj . modify . opts [ a ] )
{
if ( ! item _props [ imod ] )
{ continue ; }
html += '<li> ' + getHtmlOfSignedProp ( obj . modify . opts [ a ] , item _props [ imod ] , imod , null , null , null ) + '</li>' ;
}
}
html += '<br>' ;
}
}
for ( var mfname in item _props )
{
if ( ! item _props [ mfname ] . view )
{
continue ;
}
html += getHtmlOfSignedProp ( obj . modify , item _props [ mfname ] , mfname , obj . charms , obj . rune , obj . runeOpt ) ;
}
for ( var armorn in knownArmorModifiers )
{
if ( ! item _props [ armorn ] . view )
{
continue ;
}
html += getHtmlOfArmorProp ( obj . modify , armorn , getItemPropLabel ( armorn ) ) ;
}
}
if ( 'properties' in obj )
{
html += localizer . itemPropertiesGroup . bold ( ) + '<br />' ;
for ( var mfname in item _props )
{
if ( ! item _props [ mfname ] . view )
{
continue ;
}
html += getHtmlOfSignedProp ( obj . properties , item _props [ mfname ] , mfname ) ;
}
if ( isTwohandledWeapon ( obj ) )
{
addinfo += localizer . twohandledWeapon + '<br />' ;
}
if ( isSecondaryWeapon ( obj ) )
{
addinfo += localizer . secondaryWeapon + '<br />' ;
}
if ( 'blockzones' in obj . properties )
{
addinfo += localizer . blockZones + ': <b>' + obj . properties . blockzones + '</b><br />' ;
}
}
if ( 'magic1' in obj )
{
addinfo += localizer . useMagic ;
addinfo += ' ' ;
addinfo += obj . magic1 ;
addinfo += '<br />' ;
}
if ( 'magic' in obj )
{
addinfo += localizer . hasMagic ;
addinfo += ' ' ;
if ( 'name' in obj . magic )
{
var alt = '' ;
if ( 'caption' in obj . magic )
{
alt = format ( ' alt="{0}"' , obj . magic . caption ) ;
}
addinfo += format ( '<img src="{2}{0}.gif" width="40" height="25" border="0"{1} />' , obj . magic . name , alt , itemImgPath ) ;
addinfo += ' ' ;
}
if ( 'description' in obj . magic )
{
addinfo += obj . magic . description ;
}
addinfo += '<br />' ;
}
if ( 'setlink' in obj )
{
var set = getSetById ( obj . setlink . name ) ;
addinfo += format ( localizer . partOfSet , set . caption , getCountForSet ( state , set . id ) , set . count ) ;
addinfo += '<br />' ;
}
if ( ( 'fixless' in obj ) && obj . fixless )
{
addinfo += localizer . fixless ;
addinfo += '<br />' ;
}
if ( ( 'artefact' in obj ) && obj . artefact )
{
addinfo += localizer . fixless ;
addinfo += '<br />' ;
addinfo += localizer . charmless ;
addinfo += '<br />' ;
}
if ( 'description' in obj )
{
addinfo += obj . description ;
addinfo += '<br />' ;
}
if ( addinfo != '' )
{
html += localizer . itemAddInfoGroup . italics ( ) + '<br />' ;
html += addinfo ;
}
if ( 'attacks' in obj )
{
var af = getAttackFreq ( obj ) ;
html += localizer . itemAttackGroup . italics ( ) + '<br />' ;
for ( var attackn in obj . attacks )
{
var attackt = 'attackt' + attackn ;
if ( attackt in localizer )
{
attackt = localizer [ attackt ] ;
}
else
{
attackt = attackn ;
}
var attackq = 'attackq' + obj . attacks [ attackn ] ;
if ( attackq in localizer )
{
attackq = localizer [ attackq ] ;
}
else
{
attackq = obj . attacks [ attackn ] ;
}
var attackf = af [ attackn ] . freal ;
html += attackt + ': ' + attackq + ' (' + attackf + '%)<br />' ;
}
}
if ( 'defences' in obj )
{
html += localizer . itemDefenceGroup . italics ( ) + '<br />' ;
for ( var defencen in obj . defences )
{
var defencet = 'defencet' + defencen ;
if ( defencet in localizer )
{
defencet = localizer [ defencet ] ;
}
else
{
defencet = defencen ;
}
var defenceq = 'defenceq' + obj . defences [ defencen ] ;
if ( defenceq in localizer )
{
defenceq = localizer [ defenceq ] ;
}
else
{
defenceq = obj . defences [ defencen ] ;
}
html += defencet + ': ' + defenceq + '<br />' ;
}
}
return html ;
}
// serialization
function serializeValue ( v )
{
var r = '' ;
if ( v == null )
{
r += '0//' ;
}
else
{
if ( typeof ( v ) == 'string' )
{
r += "s/'" ;
r += escape ( v ) ;
r += "'/" ;
}
else if ( typeof ( v ) == 'boolean' )
{
r += 'b/' ;
r += v ? 'Y' : 'N' ;
r += '/' ;
}
else if ( typeof ( v ) == 'number' )
{
r += 'n/' ;
r += v . toString ( ) ;
r += '/' ;
}
else if ( typeof ( v ) == 'object' )
{
if ( v instanceof Array )
{
r += 'a/' ;
r += serializeArray ( v ) ;
r += '/' ;
}
else
{
r += 'o/' ;
r += serializeObject ( v ) ;
r += '/' ;
}
}
}
return r ;
}
function serializeArray ( a )
{
var r = '' ;
for ( var i = 0 ; i < a . length ; i ++ )
{
if ( r != '' )
{
r += ',' ;
}
r += serializeValue ( a [ i ] ) ;
}
r = '(' + r + ')' ;
return r ;
}
function serializeObject ( obj )
{
var r = '' ;
for ( var propName in obj )
{
if ( r != '' )
{
r += ',' ;
}
var v = obj [ propName ] ;
r += propName ;
r += '/' ;
r += serializeValue ( v ) ;
}
r = '{' + r + '}' ;
return r ;
}
function reqContextChar ( context )
{
var found = false ;
var c = context . s . charAt ( context . index ) ;
var msg = '' ;
for ( var i = 1 ; i < reqContextChar . arguments . length ; i ++ )
{
if ( c == reqContextChar . arguments [ i ] )
{
found = true ;
break ;
}
if ( msg != '' )
{
msg += ' or ' ;
}
msg += '"' + reqContextChar . arguments [ i ] + '"' ;
}
if ( ! found )
{
context . errorMessage = 'cannot deserialize value. we expect ' + msg + ' character at index ' + context . index + '.' ;
context . errorFound = true ;
}
return found ;
}
function readSerializedValue ( context )
{
var c ;
var vt = context . s . charAt ( context . index ) ;
context . index ++ ;
switch ( vt )
{
case '0' :
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
context . valueRead = null ;
break ;
case 's' :
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
reqContextChar ( context , "'" ) ;
context . index ++ ;
var nextAposIndex = context . s . indexOf ( "'" , context . index ) ;
if ( nextAposIndex < 0 )
{
context . errorMessage = 'cannot deserialize string value. we expect end ' character after index ' + context . index + '.' ;
context . errorFound = true ;
return ;
}
context . valueRead = unescape ( context . s . substring ( context . index , nextAposIndex ) ) ;
context . index = nextAposIndex + 1 ;
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
break ;
case 'b' :
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
reqContextChar ( context , 'Y' , 'N' ) ;
c = context . s . charAt ( context . index ) ;
context . valueRead = ( c == 'Y' ) ;
context . index ++ ;
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
break ;
case 'n' :
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
var nextTwoDotIndex = context . s . indexOf ( ":" , context . index ) ;
var nextSlashIndex = context . s . indexOf ( "/" , context . index ) ;
if ( nextTwoDotIndex < 0 || ( nextSlashIndex >= 0 && nextTwoDotIndex > nextSlashIndex ) )
{
nextTwoDotIndex = nextSlashIndex ;
}
if ( nextTwoDotIndex < 0 )
{
context . errorMessage = 'cannot deserialize number value. we expect end ":" or "/" character after index ' + context . index + '.' ;
context . errorFound = true ;
return ;
}
var v = context . s . substring ( context . index , nextTwoDotIndex ) ;
context . valueRead = ( v . indexOf ( '.' ) >= 0 ) ? parseFloat ( v ) : parseInt ( v ) ;
context . index = nextTwoDotIndex + 1 ;
break ;
case 'a' :
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
readSerializedArray ( context ) ;
if ( context . errorFound )
{
return ;
}
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
break ;
case 'o' :
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
readSerializedObject ( context ) ;
if ( context . errorFound )
{
return ;
}
reqContextChar ( context , ':' , '/' ) ;
context . index ++ ;
break ;
default :
context . errorMessage = 'cannot deserialize unknown value. unexpected type prefix ' + vt ;
context . errorFound = true ;
break ;
}
}
function readSerializedArray ( context )
{
var valueRead = new Array ( ) ;
var c ;
reqContextChar ( context , '(' ) ;
context . index ++ ;
c = context . s . charAt ( context . index ) ;
if ( c == ")" )
{
context . index ++ ;
context . valueRead = valueRead ;
return ;
}
for ( ; ! context . errorFound ; context . index ++ )
{
readSerializedValue ( context ) ;
if ( context . errorFound )
{
return ;
}
var v = context . valueRead ;
valueRead . push ( v ) ;
c = context . s . charAt ( context . index ) ;
if ( c == ")" )
{
context . index ++ ;
context . valueRead = valueRead ;
return ;
}
if ( c != "," )
{
context . errorMessage = 'cannot deserialize array value. we expect "," or ")" character at index ' + context . index + '.' ;
context . errorFound = true ;
return ;
}
}
}
function readSerializedObject ( context )
{
var valueRead = new Object ( ) ;
var c ;
reqContextChar ( context , '{' ) ;
context . index ++ ;
c = context . s . charAt ( context . index ) ;
if ( c == "}" )
{
context . index ++ ;
context . valueRead = valueRead ;
return ;
}
for ( ; ! context . errorFound ; context . index ++ )
{
var nextTwoDotIndex = context . s . indexOf ( ":" , context . index ) ;
var nextSlashIndex = context . s . indexOf ( "/" , context . index ) ;
if ( nextTwoDotIndex < 0 || ( nextSlashIndex >= 0 && nextTwoDotIndex > nextSlashIndex ) )
{
nextTwoDotIndex = nextSlashIndex ;
}
if ( nextTwoDotIndex <= 0 )
{
context . errorMessage = 'cannot deserialize object property name. we expect ":" or "/" character after index ' + context . index + '.' ;
context . errorFound = true ;
return ;
}
var propName = context . s . substring ( context . index , nextTwoDotIndex ) ;
context . index = nextTwoDotIndex + 1 ;
readSerializedValue ( context ) ;
if ( context . errorFound )
{
return ;
}
var v = context . valueRead ;
valueRead [ propName ] = v ;
c = context . s . charAt ( context . index ) ;
if ( c == "}" )
{
context . index ++ ;
context . valueRead = valueRead ;
return ;
}
if ( c != "," )
{
context . errorMessage = 'cannot deserialize object value. we expect "," or "}" character at index ' + context . index + '.' ;
context . errorFound = true ;
return ;
}
}
}
function deserializeObject ( s )
{
// drop CR/LF and spaces if any was entered by user.
s = replacestr ( replacestr ( replacestr ( s , "\n" , '' ) , "\r" , '' ) , ' ' , '' ) ;
var context = { s : s , index : 0 , errorFound : false , errorMessage : '' , valueRead : null } ;
readSerializedObject ( context ) ;
if ( context . errorFound )
{
alert ( context . errorMessage ) ;
return null ;
}
return context . valueRead ;
}
function deserializeArray ( s )
{
// drop CR/LF if any was entered by user.
s = replacestr ( replacestr ( s , "\n" , '' ) , "\r" , '' ) ;
var context = { s : s , index : 0 , errorFound : false , errorMessage : '' , valueRead : null } ;
readSerializedArray ( context ) ;
if ( context . errorFound )
{
alert ( context . errorMessage ) ;
return null ;
}
return context . valueRead ;
}
function createVirtualSet ( name , caption , count , sitems )
{
var level = 0 ;
var items = sitems . split ( '/' ) ;
for ( var i in items )
{
var item = getObjectById ( items [ i ] ) ;
if ( item == null ) continue ;
item . setlink = { name : name } ;
if ( ! ( 'baseitem' in item ) && ( 'required' in item ) && ( 'level' in item . required ) && ( item . required . level > level ) )
{
level = item . required . level ;
}
}
var details = { } ;
// details[name + count] = { id: name + count, required: { itemscount: count }};
var o = { id : name , virtual : true , caption : caption , count : count , required : { level : level } , details : details } ;
dressSets [ name ] = o ;
}
function createVirtualSets ( )
{
2023-01-10 16:29:32 +00:00
createVirtualSet ( 'newbie' , 'Комплект Ученика' , 12 , 'clip86/amulet90/staff1/roba17/belt40/ring123/whelmet4/gloves1/boots210/braslet26' ) ;
createVirtualSet ( 'green' , 'Зелёный Комплект' , 12 , 'clip87/amulet91/staff2/roba18/belt41/ring124/whelmet5/gloves2/boots211/braslet28' ) ;
createVirtualSet ( 'seeker' , 'Комплект Ищущего' , 12 , 'clip88/amulet92/staff3/roba19/belt42/ring125/whelmet6/gloves3/boots212/braslet29' ) ;
2022-12-19 20:22:19 +00:00
}
var catRunes = {
earrings : {
lv4 : [ 'rune_0_0_1' , 'rune_0_1_1' , 'rune_0_2_1' , 'rune_0_3_1'
] , lv7 : [ 'rune_1_0_1' , 'rune_1_1_1' , 'rune_1_2_1' , 'rune_1_3_1'
] , lv9 : [ 'rune_2_0_1' , 'rune_2_1_10' , 'rune_2_2_1' , 'rune_2_3_1' ] } ,
necklaces : {
lv4 : [ 'rune_0_0_2' , 'rune_0_1_2' , 'rune_0_2_2' , 'rune_0_3_2'
] , lv7 : [ 'rune_1_0_2' , 'rune_1_1_2' , 'rune_1_2_2' , 'rune_1_3_2'
] , lv9 : [ 'rune_2_0_2' , 'rune_2_1_1' , 'rune_2_2_2' , 'rune_2_3_2' ] } ,
rings : {
lv4 : [ 'rune_0_0_3' , 'rune_0_1_3' , 'rune_0_2_3' , 'rune_0_3_3'
] , lv7 : [ 'rune_1_0_3' , 'rune_1_1_3' , 'rune_1_2_3' , 'rune_1_3_3'
] , lv9 : [ 'rune_2_0_3' , 'rune_2_1_2' , 'rune_2_2_3' , 'rune_2_3_3' ] } ,
gauntlets : {
lv4 : [ 'rune_0_0_4' , 'rune_0_1_4' , 'rune_0_2_4' , 'rune_0_3_4'
] , lv7 : [ 'rune_1_0_4' , 'rune_1_1_4' , 'rune_1_2_4' , 'rune_1_3_4'
] , lv9 : [ 'rune_2_0_4' , 'rune_2_1_3' , 'rune_2_2_4' , 'rune_2_3_4' ] } ,
pants : {
lv4 : [ 'rune_0_0_5' , 'rune_0_1_5' , 'rune_0_2_5' , 'rune_0_3_5'
] , lv7 : [ 'rune_1_0_5' , 'rune_1_1_5' , 'rune_1_2_5' , 'rune_1_3_5'
] , lv9 : [ 'rune_2_0_5' , 'rune_2_1_4' , 'rune_2_2_5' , 'rune_2_3_5' ] } ,
boots : {
lv4 : [ 'rune_0_0_6' , 'rune_0_1_6' , 'rune_0_2_6' , 'rune_0_3_6'
] , lv7 : [ 'rune_1_0_6' , 'rune_1_1_6' , 'rune_1_2_6' , 'rune_1_3_6'
] , lv9 : [ 'rune_2_0_6' , 'rune_2_1_5' , 'rune_2_2_6' , 'rune_2_3_6' ] } ,
helmets : {
lv4 : [ 'rune_0_0_7' , 'rune_0_1_7' , 'rune_0_2_7' , 'rune_0_3_7'
] , lv7 : [ 'rune_1_0_7' , 'rune_1_1_7' , 'rune_1_2_7' , 'rune_1_3_7'
] , lv9 : [ 'rune_2_0_7' , 'rune_2_1_6' , 'rune_2_2_7' , 'rune_2_3_7' ] } ,
bracelets : {
lv4 : [ 'rune_0_0_8' , 'rune_0_1_8' , 'rune_0_2_8' , 'rune_0_3_8'
] , lv7 : [ 'rune_1_0_8' , 'rune_1_1_8' , 'rune_1_2_8' , 'rune_1_3_8'
] , lv9 : [ 'rune_2_0_8' , 'rune_2_1_7' , 'rune_2_2_8' , 'rune_2_3_8' ] } ,
heavyarmors : {
lv4 : [ 'rune_0_0_9' , 'rune_0_1_9' , 'rune_0_2_9' , 'rune_0_3_9'
] , lv7 : [ 'rune_1_0_9' , 'rune_1_1_9' , 'rune_1_2_9' , 'rune_1_3_9'
] , lv9 : [ 'rune_2_0_9' , 'rune_2_1_8' , 'rune_2_2_9' , 'rune_2_3_9' ] } ,
lightarmors : {
lv4 : [ 'rune_0_0_9' , 'rune_0_1_9' , 'rune_0_2_9' , 'rune_0_3_9'
] , lv7 : [ 'rune_1_0_9' , 'rune_1_1_9' , 'rune_1_2_9' , 'rune_1_3_9'
] , lv9 : [ 'rune_2_0_9' , 'rune_2_1_8' , 'rune_2_2_9' , 'rune_2_3_9' ] } ,
belts : {
lv4 : [ 'rune_0_0_10' , 'rune_0_1_10' , 'rune_0_2_10' , 'rune_0_3_10'
] , lv7 : [ 'rune_1_0_10' , 'rune_1_1_10' , 'rune_1_2_10' , 'rune_1_3_10'
] , lv9 : [ 'rune_2_0_10' , 'rune_2_1_9' , 'rune_2_2_10' , 'rune_2_3_10' ] } } ;
var superRunes = [ 'rune_super_1' , 'rune_super_2' , 'rune_super_3' , 'rune_super_4' , 'rune_super_5' , 'rune_super_6' , 'rune_super_7' , 'rune_super_8' , 'rune_super_9' , 'rune_super_10' ] ;