2022-06-06 21:30:34 +00:00
function ImagePreloader ( images , call _back )
{ this . call _back = call _back ; this . nLoaded = 0 ; this . nProcessed = 0 ; this . aImages = [ ] ; this . nImages = images . length ; for ( var i = 0 ; i < images . length ; i ++ )
this . preload ( images [ i ] ) ; }
ImagePreloader . prototype . preload = function ( image )
{ var oImage = new Image ; this . aImages . push ( oImage ) ; oImage . onload = ImagePreloader . prototype . onload ; oImage . onerror = ImagePreloader . prototype . onerror ; oImage . onabort = ImagePreloader . prototype . onabort ; oImage . oImagePreloader = this ; oImage . bLoaded = false ; oImage . src = image ; }
ImagePreloader . prototype . onComplete = function ( )
{ this . nProcessed ++ ; if ( this . nProcessed == this . nImages )
{ if ( this . call _back != null )
{ this . call _back ( this . aImages , this . nLoaded ) ; } } }
ImagePreloader . prototype . onload = function ( )
{ this . bLoaded = true ; this . oImagePreloader . nLoaded ++ ; this . oImagePreloader . onComplete ( ) ; }
ImagePreloader . prototype . onerror = function ( )
{ this . bError = true ; this . oImagePreloader . onComplete ( ) ; }
ImagePreloader . prototype . onabort = function ( )
{ this . bAbort = true ; this . oImagePreloader . onComplete ( ) ; }
function KnownDungeonEntender ( d )
{ var rendered = false ; d . divId = 'dungeon_div_' + d . Name ; d . floorTabsId = 'dungeon_floor_tabs_' + d . Name ; d . mapLookId = 'dungeon_' + d . Name + '_mapLook' ; d . zoomerId = 'dungeon_' + d . Name + '_zoomer' ; d . activeFloorIndex = 0 ; d . rotation = 0 ; d . imagesToBePreloaded = [ ] ; var scriptsToLoadCount = 0 ; d . innerDataLoaded = function ( )
{ this . data . ui = this ; this . IsDungeon = this . data . IsDungeon ; if ( this . IsDungeon )
{ this . createDescriptionPage ( ) ; this . createSettingsPage ( ) ; this . prepareJobPage ( ) ; }
else
{ this . data . Floors . push ( new CustomFloor ( this . data , 0 , '$customDesc' , this . Description , this . NewLineToBR ) ) ; }
this . createShopPages ( ) ; if ( this . imagesToBePreloaded . length > 0 )
{ this . preloader = new ImagePreloader ( this . imagesToBePreloaded , null ) ; } }
d . dataLoaded = function ( f )
{ this . data = underground . loadedDungeons [ this . Name ] ; var scriptsLoaded = function ( )
{ d . innerDataLoaded ( ) ; f ( ) ; }
if ( underground . offline )
{ scriptsLoaded ( ) ; return ; }
var scriptLoaded = function ( )
{ scriptsToLoadCount -- ; if ( scriptsToLoadCount == 0 )
{ scriptsLoaded ( f ) ; } }
var scripts = [ ] ; for ( var i in this . data . RequiredScriptNames )
{ var sn = this . data . RequiredScriptNames [ i ] ; if ( ! ( sn in underground . loadedScripts ) )
{ scripts . push ( underground . settings . jsBase + sn ) ; } }
scriptsToLoadCount = scripts . length ; if ( scriptsToLoadCount > 0 )
{ for ( var i in scripts )
{ var sn = scripts [ i ] ; loadScript ( sn , function ( ) { underground . loadedScripts [ sn ] = sn ; scriptLoaded ( ) ; } ) ; } }
else
{ scriptsLoaded ( ) ; } }
d . loadData = function ( f )
{ if ( underground . offline )
{ this . dataLoaded ( f ) ; }
else
{ loadScript ( underground . settings . jsBase + 'dungeon.city.' + this . Name + '.js' , function ( ) { d . dataLoaded ( f ) ; } ) ; } }
d . createDescriptionPage = function ( )
2023-01-10 16:29:32 +00:00
{ var p = { Name : '$description' , Caption : 'Описание' , NewLineToBR : this . NewLineToBR , ExternalUrl : '' , hidden : true } ; p . Description = this . Description ; this . data . Pages . push ( p ) ; this . descriptionPageIndex = this . data . Pages . length - 1 ; }
2022-06-06 21:30:34 +00:00
d . createSettingsPage = function ( )
{ }
d . createShopPages = function ( )
{ for ( var i in this . data . Shops )
{ this . createShopPage ( this . data . Shops [ i ] ) ; } }
d . getShopItemHtml = function ( item , imageBasePath )
{ var img = [ imageBasePath , item . Name , '.gif' ] . join ( '' ) ; this . imagesToBePreloaded . push ( img ) ; var html = [ '<tr><td width="' , item . W , '">' , '<img lowsrc="' , underground . settings . loadingImageUrl , '" src="' , img , '" border="0" width="' , item . W , '" height="' , item . H , '" />' , '</td><td><nobr><b>' , item . Caption , '</b>' ] ; if ( item . Binding > 0 )
2023-03-31 18:30:14 +00:00
{ html . push ( ' <img src="//img.new-combats.tech/i/destiny.gif" width="16" height="18" border="0" alt=""' ) ; this . imagesToBePreloaded . push ( '//img.new-combats.tech/i/destiny.gif' ) ; switch ( item . Binding )
2023-01-10 16:29:32 +00:00
{ case 1 : html . push ( ' style="filter: invert();" title="Этот предмет будет связан общей судьбой с первым, кто получит е г о . Никто другой не сможет е г о использовать."' ) ; break ; case 2 : html . push ( ' style="filter: gray();" title="Этот предмет будет связан общей судьбой с первым, кто оденет е г о . Никто другой не сможет е г о использовать."' ) ; break ; case 3 : html . push ( ' title="Этот предмет связан общей судьбой."' ) ; break ; }
2022-06-06 21:30:34 +00:00
html . push ( ' />' ) ; }
if ( item . IsGift )
2023-03-31 18:30:14 +00:00
{ this . imagesToBePreloaded . push ( '//img.new-combats.tech/i/podarok.gif' ) ; html . push ( ' <img src="//img.new-combats.tech/i/podarok.gif" width="16" height="18" border="0" alt="" title="Подарок" />' ) ; }
2022-06-06 21:30:34 +00:00
html = html . concat ( [ '</nobr><br />' , item . Description . join ( item . NewLineToBR ? '<br />' : '' ) , '</td></tr>' ] ) ; return html . join ( '' ) ; }
var showShopPage = function ( )
{ var shop = this . Shop ; shop . tdId = '$shoptd$' + this . Dungeon . Name + '$' + shop . Name ; var firstCat = true ; var data = [ ] ; var chapters = [ '<div><ul>' ] ; for ( var i in shop . Categories )
{ var cat = shop . Categories [ i ] ; cat . divId = '$shopcat$' + this . Dungeon . Name + '$' + shop . Name + '$' + cat . Name ; var st = firstCat ? '' : 'display: none;' ; data = data . concat ( [ '<div id="' , cat . divId , '" style="' , st , '"><div>' , '<table width="560" class="proshka"><tr><th colspan="2">' ] ) ; var title = [ cat . Caption ] ; if ( cat . Description . length > 0 )
{ title = title . concat ( [ '<div style="font-size: 80%; font-weight: normal; border-top: 1px dashed #999; padding: 2px; margin: 0;">' , cat . Description . join ( '<br />' ) , '</div>' ] ) ; }
data = data . concat ( title ) ; data . push ( '</th></tr>' ) ; for ( var j in cat . Items )
{ data . push ( this . Dungeon . getShopItemHtml ( cat . Items [ j ] , shop . ImageBasePath ) ) ; }
data . push ( '</table></div></div>' ) ; chapters = chapters . concat ( [ '<li><a class="fblike" style="display: block; width: 256px;" href="javascript:;" onclick="ui_changeShopCategory(\'' , shop . tdId , '\', \'' , cat . divId , '\')"><nobr>' , cat . Caption , '</nobr></a></li>' ] ) ; firstCat = false ; }
chapters . push ( '</ul></div>' ) ; var html = [ shop . Description . join ( shop . NewLineToBR ? '<br />' : '' ) , '<hr />' , '<table class="hintview" cellpadding="4" width="100%"><tr><td valign="top">' ] ; html = html . concat ( chapters ) ; html = html . concat ( [ '</td><td valign="top" id="' , shop . tdId , '">' ] ) ; html = html . concat ( data ) ; html . push ( '</td></tr></table>' ) ; this . Description = html ; }
d . createShopPage = function ( shop )
{ var sp = { Name : '$shop$' + shop . Name , Caption : shop . Caption , NewLineToBR : false , ExternalUrl : '' , Description : [ ] , OnShow : showShopPage , Dungeon : this , Shop : shop } ; this . data . Pages . push ( sp ) ; }
var getCollectiveJobData = function ( job )
{ var title = [ '<b>' , job . Caption , '</b>' ] . join ( '' ) ; var desc = job . Description . join ( '<br />' ) ; var image = job . ImageUrl ; var bonus = job . ItemReward ; var count = job . DefCount ; var maxFactor = 1.25 ; return { title : title , desc : desc , image : image , bonus : bonus , count : count , maxFactor : maxFactor , iw : 60 , ih : 60 } ; }
var getCapturedJobData = function ( job )
{ var title = [ '<b>' , job . Caption , '</b>' ] . join ( '' ) ; var desc = job . Description . join ( '<br />' ) ; var image = job . ImageUrl ; var bonus = job . ItemReward ; var count = job . DefCount ; var maxFactor = 1 ; return { title : title , desc : desc , image : image , bonus : bonus , count : count , maxFactor : maxFactor , iw : 60 , ih : 60 } ; }
var getKillingJobData = function ( job )
2023-03-31 18:30:14 +00:00
{ var mob = underground . mobs [ job . MobName ] ; var align = job . Unique ? 9 : 0 ; var title = [ '<b><img width="12" height="15" border="0" src="//img.new-combats.tech/i/align' , align , '.gif" />' , mob . Caption , '</b>' ] . join ( '' ) ; var desc = job . Description . join ( '<br />' ) ; var image = mob . ImageUrl ; if ( msie && ! msie7 )
2022-06-06 21:30:34 +00:00
{ image = replacestr ( image , '/chars/d/' , '/chars/' ) ; image = replacestr ( image , '.png' , '.gif' ) ; }
var bonus = ( mob . Instances . length == 1 ) ? mob . Instances [ 0 ] . Reward : 0 ; var count = job . Unique ? 1 : job . DefCount ; var maxFactor = 1 ; return { title : title , desc : desc , image : image , bonus : bonus , count : count , maxFactor : maxFactor , mob : mob , iw : 60 , ih : 110 } ; }
var jobDataProviders = [ getCollectiveJobData , getCapturedJobData , getKillingJobData ] ; d . getJobHtml = function ( i , job , catIndex )
{ var data = jobDataProviders [ catIndex ] ( job ) ; job . divId = [ '$job$' , d . Name , '$cat_' , catIndex , '$index_' , i ] . join ( '' ) ; job . descDivId = job . divId + '$desc' ; job . formDivId = job . divId + '$form' ; this . imagesToBePreloaded . push ( data . image ) ; var html = [ '<div>' , data . title , '<blockquote><div class="incqbox" id="' , job . descDivId , '"><table cellspacing="8" cellpadding="0" border="0" width="100%"><tr><td valign="top"' , ' width="' , data . iw , '" valign="top"><img lowsrc="' , underground . settings . loadingImageUrl , '"' , underground . pngClsAttr , ' border="0" src="' , data . image , '" width="' , data . iw , '" height="' , data . ih , '" />' , '</td><td valign="top"><div style="padding-bottom: 4px;">' , data . desc , '</div>' , '<div class="incqbox" id="' , job . formDivId , '">' ] ; if ( 'mob' in data )
{ var rewardid = job . divId + '$reward' ; var handler = [ 'setTimeout("ui_recalculateMobReward(\'' , rewardid , '\'' ] ; var lastmii = 0 ; for ( var mii = 0 ; mii < data . mob . Instances . length ; mii ++ )
{ var mi = data . mob . Instances [ mii ] ; if ( mi . Reward == 0 ) continue ; var countid = job . divId + '$i' + mii + '$count' ; handler = handler . concat ( [ ', \'' , countid , '\', ' , mi . Reward ] ) ; lastmii = mii ; }
handler . push ( ')", 10)' ) ; handler = handler . join ( '' ) ; html . push ( '<table cellspacing="8" cellpadding="0" border="0"><tr><td valign="top">' ) ; html . push ( '<table cellspacing="0" cellpadding="0" border="0">' ) ; for ( var mii = 0 ; mii < data . mob . Instances . length ; mii ++ )
{ var mi = data . mob . Instances [ mii ] ; if ( mi . Reward == 0 ) continue ; var countid = [ job . divId , '$i' , mii , '$count' ] . join ( '' ) ; html = html . concat ( [ '<tr><td valign="top"><label for="' , countid , '"><b>[' , mi . Level , ']</b></label>: </td><td valign="top">' ] ) ; if ( job . Unique )
{ html = html . concat ( [ '<b id="' , countid , '">1</b>' ] ) ; }
else
{ html = html . concat ( [ '<input class="inpText" type="text" size="4" maxlength="3" id="' , countid , '" onfocus="document.getElementById(\'' , countid , '\').select();"' , ' onkeypress="' , handler , '" onchange="' , handler , '" value="' , ( ( mii == lastmii ) ? job . DefCount : 0 ) , '" />' ] ) ; }
2023-01-10 16:29:32 +00:00
html . push ( ' шт.</td></tr>' ) ; }
html . push ( '</table></td><td valign="center">' ) ; html . push ( 'Вы получите <span id="' ) ; html . push ( rewardid ) ; html . push ( '">' ) ; html . push ( job . Unique ? [ '<b>' , data . mob . Instances [ 0 ] . Reward , '</b>' ] . join ( '' ) : ( job . DefCount * data . mob . Instances [ lastmii ] . Reward ) ) ; html . push ( '</span> ед. награды.' ) ; html . push ( '</td></tr></table>' ) ; if ( job . Unique )
{ html . push ( '<br /><span style="color: gray">Уникальное задание, выпадает не более одного раза за круг.</span>' ) ; } }
2022-06-06 21:30:34 +00:00
else
2023-01-10 16:29:32 +00:00
{ var countid = job . divId + '$count' ; var rewardid = job . divId + '$reward' ; var maxcountid = job . divId + '$maxcount' ; var maxrewardid = job . divId + '$maxreward' ; var handler = [ 'setTimeout("ui_recalculateUsualReward(\'' , countid , '\', \'' , rewardid , '\', \'' , maxcountid , '\', ' , data . bonus , ', ' , data . maxFactor , ', \'' , maxrewardid , '\')", 10)' ] . join ( '' ) ; html = html . concat ( [ 'З а <input class="inpText" type="text" size="4" maxlength="3" id="' , countid , '" onfocus="document.getElementById(\'' , countid , '\').select();"' , ' value="' , job . DefCount , '" onkeypress="' , handler , '" onchange="' , handler , '" /> шт. Вы получите <span id="' , rewardid , '">' , job . DefCount * data . bonus , '</span> ед. награды.' ] ) ; if ( data . maxFactor > 1 )
{ var maxc = Math . floor ( job . DefCount * data . maxFactor ) ; html = html . concat ( [ '<br />Можно перевыполнить задание, собрав до <span id="' , maxcountid , '">' , maxc , '</span> шт., и получив до <span id="' , maxrewardid , '">' , maxc * data . bonus , '</span> ед. награды.' ] ) ; } }
2022-06-06 21:30:34 +00:00
html . push ( '</div></td></tr></table></div></blockquote></div>' ) ; return html . join ( '' ) ; }
var jobPageShow = function ( )
2023-01-10 16:29:32 +00:00
{ var jobs = this . Dungeon . data . Jobs ; this . jobTdId = '$jobtd$' + this . Dungeon . Name + '$jobs' ; var html = [ ] ; this . jobCats = [ { Name : 'CollectiveJobs' , Caption : 'Собирательные задания' , Items : jobs . CollectiveJobs } , { Name : 'CapturedJobs' , Caption : 'Задания на трофеи' , Items : jobs . CapturedJobs } , { Name : 'KillingJobs' , Caption : 'Задания на убийство' , Items : jobs . KillingJobs } ] ; html . push ( '<h3>Задания</h3>' ) ; html . push ( '<hr />' ) ; var firstCat = true ; var chapters = [ ] ; var data = [ ] ; chapters . push ( '<div><ul>' ) ; for ( var i in this . jobCats )
2022-06-06 21:30:34 +00:00
{ var cat = this . jobCats [ i ] ; if ( cat . Items . length == 0 ) continue ; cat . divId = '$jobcat$' + this . Name + '$jobs$' + cat . Name ; var st = firstCat ? '' : 'display: none;' ; data . push ( '<div id="' ) ; data . push ( cat . divId ) ; data . push ( '" style="' ) ; data . push ( st ) ; data . push ( '">' ) ; data . push ( '<h3>' ) ; data . push ( cat . Caption ) ; data . push ( '</h3>' ) ; data . push ( '<hr class="dashed" />' ) ; for ( var j in cat . Items )
{ data . push ( this . Dungeon . getJobHtml ( j , cat . Items [ j ] , i ) ) ; }
data . push ( '</div>' ) ; chapters . push ( '<li><a class="fblike" style="display: block; width: 256px;" href="javascript:;" onclick="ui_changeJobsCategory(\'' ) ; chapters . push ( this . jobTdId ) ; chapters . push ( '\', \'' ) ; chapters . push ( cat . divId ) ; chapters . push ( '\')"><nobr>' ) ; chapters . push ( cat . Caption ) ; chapters . push ( '</nobr></a></li>' ) ; firstCat = false ; }
chapters . push ( '</ul></div>' ) ; html . push ( '<table class="hintview" cellpadding="4" width="100%"><tr><td valign="top">' ) ; html . push ( chapters . join ( '' ) ) ; html . push ( '</td><td valign="top" id="' ) ; html . push ( this . jobTdId ) ; html . push ( '">' ) ; html . push ( data . join ( '' ) ) ; html . push ( '</td></tr></table>' ) ; this . Description = html ; }
d . prepareJobPage = function ( )
{ var jobs = this . data . Jobs ; if ( jobs . CollectiveJobs . length == 0 && jobs . CapturedJobs . length == 0 && jobs . KillingJobs . length == 0 )
{ return ; }
2023-01-10 16:29:32 +00:00
var sp = { Name : '$jobs$' , Dungeon : this , Caption : 'Задания' , NewLineToBR : false , ExternalUrl : '' , Description : [ ] , OnShow : jobPageShow } ; this . data . Pages . push ( sp ) ; }
2022-06-06 21:30:34 +00:00
d . getFloorTabsHtml = function ( )
2023-01-10 16:29:32 +00:00
{ if ( ! this . IsDungeon ) return '' ; var html = [ ] ; html . push ( '<li><a onclick="underground.activeDungeon.openDescription()" href="javascript:;">Описание</a></li>' ) ; html . push ( '<li><span style="float:left;padding: 0px 10px;color: #666; margin: 1px;">|</span></li>' ) ; for ( var i in this . data . Floors )
2022-06-06 21:30:34 +00:00
{ var floor = this . data . Floors [ i ] ; html . push ( '<li' ) ; if ( i == this . activeFloorIndex ) html . push ( ' class="activeLink"' ) ; html . push ( '><a onclick="underground.changeFloor(' ) ; html . push ( i ) ; html . push ( ')" href="javascript:;">' ) ; html . push ( floor . Caption ) ; html . push ( '</a></li>' ) ; }
html . push ( '<li><span style="float:left;padding: 0px 10px;color: #666; margin: 1px;">|</span></li>' ) ; if ( msie ) html . push ( this . getZoomText ( ) ) ; html . push ( this . getLookText ( ) ) ; return html . join ( '' ) ; }
d . openDescription = function ( )
{ this . openPage ( this . descriptionPageIndex ) ; }
d . openSettings = function ( )
{ }
d . getStatistics = function ( )
{ var r = { } ; for ( var i in this . data . Floors )
{ var floor = this . data . Floors [ i ] ; var fr = floor . getStatistics ( ) ; for ( var n in fr )
{ if ( ! ( n in r ) )
{ r [ n ] = { } ; }
var frd = fr [ n ] ; for ( var level in frd )
{ if ( ! ( level in r [ n ] ) )
{ r [ n ] [ level ] = 0 ; }
r [ n ] [ level ] += frd [ level ] ; } } }
return r ; }
d . getStatisticsHtml = function ( )
2023-01-10 16:29:32 +00:00
{ if ( ! this . IsDungeon ) return '' ; var stats = this . getStatistics ( ) ; var html = [ ] ; html . push ( getStatisticsHtml ( 'Статистика по подземелью' , stats , '' ) ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
d . needData = function ( f )
{ if ( ! ( 'data' in this ) )
{ this . loadData ( f ) ; }
else
{ f ( ) ; } }
d . hidePages = function ( )
{ for ( var i in this . data . Pages )
{ var page = this . data . Pages [ i ] ; var e = document . getElementById ( page . divId ) ; if ( e != null )
{ e . style . display = 'none' ; } }
document . getElementById ( 'ads' ) . style . display = '' ; }
d . getPageDivCloserHtml = function ( )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<div class="dtab" style="float: right; width: 100%;"><ul class="dtab">' ) ; html . push ( '<li><a href="javascript:;" onclick="underground.hideDungeonPages()">Закрыть документ</a></li>' ) ; html . push ( '</ul></div>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
d . getNewPageDivHtml = function ( id , content )
{ var html = [ ] ; var closer = this . getPageDivCloserHtml ( ) ; html . push ( '<div class="dungeonPage" id="' ) ; html . push ( id ) ; if ( msie7 )
{ html . push ( '" style="filter: alpha(opacity = 94, style = 4) progid:DXImageTransform.Microsoft.Shadow(color=\'#666666\', Direction=135, Strength=2);' ) ; }
html . push ( '">' ) ; html . push ( closer ) ; html . push ( content ) ; html . push ( closer ) ; html . push ( '</div>' ) ; return html . join ( '' ) ; }
d . getChapterHtml = function ( )
{ var html = [ ] ; rendered = true ; this . handleHash2 ( ) ; underground . settings . look = this . data . Floors [ this . activeFloorIndex ] . LookDirection ; html . push ( '<div style="position: relative; width: 100%;" id="' ) ; html . push ( this . divId ) ; html . push ( '">' ) ; html . push ( '<h4>' ) ; html . push ( d . Caption ) ; html . push ( '</h4>' ) ; html . push ( '<div class="dtab" style="background-color: #e6e6e6;"><ul id="' ) ; html . push ( this . floorTabsId ) ; html . push ( '" class="dtab">' ) ; html . push ( this . getFloorTabsHtml ( ) ) ; html . push ( '</ul>' ) ; html . push ( '</div>' ) ; html . push ( '<div>' ) ; html . push ( this . data . getMapHtml ( ) ) ; html . push ( '</div>' ) ; html . push ( '<div>' ) ; html . push ( this . getStatisticsHtml ( ) ) ; html . push ( '</div>' ) ; html . push ( '</div>' ) ; return html . join ( '' ) ; }
d . getZoomText = function ( )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<li>Масштаб: <input id="' ) ; html . push ( this . zoomerId ) ; html . push ( '" type="text" maxlength="3" size="3" class="tool" style="text-align: right;" value="' ) ; html . push ( underground . settings . zoom ) ; html . push ( '" onfocus="this.select()" onchange="ui_zoomChanged()" onkeypress="ui_zoomChanged()" />%</li>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
d . changeFloor = function ( floorIndex )
{ hideMenu ( ) ; hidePopup2 ( ) ; var oldActiveFloorIndex = this . activeFloorIndex ; this . activeFloorIndex = floorIndex ; if ( ! rendered ) return ; this . data . Floors [ oldActiveFloorIndex ] . highlightPoint ( null ) ; underground . settings . look = this . data . Floors [ floorIndex ] . LookDirection ; document . getElementById ( this . mapLookId ) . value = underground . settings . lookTexts [ underground . settings . look ] ; document . getElementById ( this . floorTabsId ) . innerHTML = this . getFloorTabsHtml ( ) ; for ( var i in this . data . Floors )
{ var floor = this . data . Floors [ i ] ; var dm = ( this . activeFloorIndex == i ) ? '' : 'none' ; document . getElementById ( floor . mapId ) . style . display = dm ; } }
d . checkStatsMob = function ( mobName , mobLevel )
{ this . data . Floors [ this . activeFloorIndex ] . checkStatsMob ( mobName , mobLevel ) ; }
d . afterConstruction = function ( )
{ this . data . afterConstruction ( ) ; hideHTextsOf ( document . getElementById ( this . divId ) ) ; document . getElementById ( 'ads' ) . style . display = '' ; }
d . getHash = function ( )
{ var hash = this . Name ; hash += '.' + ( this . activeFloorIndex + 1 ) ; if ( 'data' in this )
{ hash += this . data . Floors [ this . activeFloorIndex ] . getHash ( ) ; }
return hash ; }
var doNothing = function ( )
{ }
d . handleHash2 = doNothing ; d . handleHash = function ( suffix )
{ var floorPart = suffix ; var dotIndex = floorPart . indexOf ( '&' ) ; if ( dotIndex >= 0 )
{ floorPart = floorPart . substr ( 0 , dotIndex ) ; }
var floorIndex = parseInt ( floorPart ) - 1 ; if ( floorIndex >= 0 && floorIndex < this . FloorNames . length )
{ this . activeFloorIndex = floorIndex ; }
var fhash = suffix . substr ( dotIndex + 1 ) ; this . handleHash2 = function ( )
{ this . data . Floors [ this . activeFloorIndex ] . handleHash ( fhash ) ; this . handleHash2 = doNothing ; }
if ( 'data' in this )
{ this . handleHash2 ( ) ; } }
d . getUndergroundTabsHtml = function ( )
{ var html = [ ] ; for ( var i in this . data . Pages )
{ var page = this . data . Pages [ i ] ; page . divId = this . divId + '_page' + i ; if ( 'hidden' in page ) continue ; html . push ( '<li><a href="javascript:;" onclick="underground.activeDungeon.openPage(' ) ; html . push ( i ) ; html . push ( ')">' ) ; html . push ( page . Caption ) ; html . push ( '</a></li>' ) ; }
return html . join ( '' ) ; }
d . pagePreloaded = function ( content )
{ this . imagesToBePreloaded = [ ] ; var basee = document . getElementById ( this . divId ) ; if ( basee . insertAdjacentHTML )
{ basee . insertAdjacentHTML ( 'beforeEnd' , content ) ; }
else
{ basee . innerHTML = basee . innerHTML + content ; } }
d . openPage = function ( pageIndex )
{ this . hidePages ( ) ; this . imagesToBePreloaded = [ ] ; document . getElementById ( 'ads' ) . style . display = 'none' ; if ( pageIndex < 0 ) return ; var page = this . data . Pages [ pageIndex ] ; var e = document . getElementById ( page . divId ) ; if ( e == null )
{ var sep = ( page . NewLineToBR ) ? '<br />' : '' ; if ( 'OnShow' in page )
{ page . OnShow ( ) ; }
var content = page . Description . join ( sep ) ; if ( content == '' && page . ExternalUrl != '' )
{ content = loadXMLDoc2 ( page . ExternalUrl ) ; }
content = this . getNewPageDivHtml ( page . divId , content ) ; if ( msie && ! msie7 && this . imagesToBePreloaded . length > 0 )
{ this . preloader = new ImagePreloader ( this . imagesToBePreloaded , function ( ) { d . pagePreloaded ( content ) ; } ) ; }
else
{ d . pagePreloaded ( content ) ; }
return ; }
e . style . display = '' ; }
d . getCellContentMenuHtml = function ( cellDivId , x , y )
{ return this . data . Floors [ this . activeFloorIndex ] . getCellContentMenuHtml ( cellDivId , x , y ) ; }
d . hotSpot = function ( cellDivId )
{ this . data . Floors [ this . activeFloorIndex ] . hotSpot ( cellDivId ) ; }
d . hideHotSpots = function ( )
{ if ( this . IsDungeon && ( 'data' in this ) )
{ this . data . Floors [ this . activeFloorIndex ] . hideHotSpots ( ) ; } }
d . getLookOption = function ( index , caption )
{ var html = [ ] ; html . push ( '<option value="' ) ; html . push ( index ) ; html . push ( '"' ) ; if ( index == underground . settings . look )
{ html . push ( ' selected="yes"' ) ; }
html . push ( '>' ) ; html . push ( caption ) ; html . push ( '</option>' ) ; return html . join ( '' ) ; }
d . getLookText = function ( )
2023-01-10 16:29:32 +00:00
{ if ( ! this . IsDungeon ) return '' ; var html = [ ] ; html . push ( '<li>Смотрим на <input class="tool" id="' ) ; html . push ( this . mapLookId ) ; html . push ( '" disabled="yes" size="6" maxlength="6" value="' ) ; html . push ( underground . settings . lookTexts [ underground . settings . look ] ) ; html . push ( '" >' ) ; html . push ( '</span></li>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
d . getProposedZoom = function ( )
{ var v = document . getElementById ( this . zoomerId ) . value ; var pv = underground . settings . zoom ; if ( ! isNaN ( v ) )
{ pv = parseInt ( v ) ; if ( isNaN ( pv ) ) pv = underground . settings . zoom ; if ( pv < 10 ) pv = 10 ; if ( pv > 300 ) pv = 300 ; }
if ( pv != v ) document . getElementById ( this . zoomerId ) . value = pv ; return pv ; }
d . applyZoom = function ( zoomFactor )
{ if ( ! ( 'data' in this ) ) return ; document . getElementById ( this . zoomerId ) . value = zoomFactor ; for ( var i in this . data . Floors )
{ this . data . Floors [ i ] . applyZoom ( zoomFactor ) ; } }
d . highlightPoint = function ( point )
{ this . data . Floors [ this . activeFloorIndex ] . highlightPoint ( point ) ; } }
function FloorExtender ( d , i , f )
{ f . dungeon = d ; f . index = i ; var baseId = 'dungeon_' + d . Name + '_floor_' + f . Name + '_' ; f . mapId = baseId + 'map' ; f . mapViewId = baseId + 'mapView' ; f . xaxisId = baseId + 'xaxis' ; f . yaxisId = baseId + 'yaxis' ; f . cellPrefix = baseId + 'cell' ; f . statisticsCheckId = baseId + 'statsCheck' ; f . highlightPointId = baseId + 'highlightPoint' ; f . rightPartId = baseId + 'rightPart' ; f . markers = [ ] ; f . highlightPoint = function ( point )
{ var hd = document . getElementById ( this . highlightPointId ) ; if ( hd == null ) return ; var hdStyle = hd . style ; if ( point == null )
{ hdStyle . visibility = 'hidden' ; return ; }
var pt = underground . getIPoint ( point ) ; hdStyle . left = ( ( pt . x + 1 ) * underground . settings . cellWidth - underground . settings . cellLocationShift ) . toString ( ) + 'px' ; hdStyle . top = ( ( pt . y + 1 ) * underground . settings . cellHeight - underground . settings . cellLocationShift ) . toString ( ) + 'px' ; hdStyle . visibility = '' ; if ( document . body . createTextRange )
{ var trange = document . body . createTextRange ( ) ; if ( trange . moveToElementText && trange . scrollIntoView )
{ trange . moveToElementText ( hd ) ; trange . scrollIntoView ( ) ; } } }
f . getLookPoint = function ( x , y )
{ var pt = { x : x , y : y } ; switch ( underground . settings . rotation )
{ case 1 : pt . x = y ; pt . y = this . Height - x ; break ; case 2 : pt . x = this . Width - x ; pt . y = this . Height - y ; break ; case 3 : pt . x = this . Width - y ; pt . y = x ; break ; case 0 : break ; default : break ; }
return pt ; }
f . getLookDim = function ( )
{ switch ( underground . settings . rotation )
{ case 0 : return { xalpha : true , xinv : false , yinv : false , w : this . Width , h : this . Height } ; case 3 : return { xalpha : false , xinv : false , yinv : true , w : this . Height , h : this . Width } ; case 1 : return { xalpha : false , xinv : true , yinv : false , w : this . Height , h : this . Width } ; case 2 : return { xalpha : true , xinv : true , yinv : true , w : this . Width , h : this . Height } ; } }
f . getMapHtml = function ( )
{ var dm = ( this . dungeon . ui . activeFloorIndex == this . index ) ? '' : 'none' ; var dim = this . getLookDim ( ) ; var html = [ '<div id="' , this . mapId , '" style="display:' , dm , '">' ] ; if ( underground . offline )
{ html . push ( '<table background="i/ugetc/cellbg.gif" cellspacing="0" cellpadding="0" border="0"><tr><td>' ) ; }
html = html . concat ( [ '<div class="dmap" id="' , this . mapViewId , '" style="width:' , ( dim . w + 1 ) * underground . settings . cellWidth , 'px; height: ' , ( dim . h + 1 ) * underground . settings . cellHeight , 'px;' ] ) ; if ( underground . settings . zoom != 100 )
{ html = html . concat ( [ 'zoom:' , underground . settings . zoom , '%;' ] ) ; }
html . push ( '">' ) ; html . push ( '<div id="' ) ; html . push ( this . xaxisId ) ; html . push ( '" class="dxaxis" style="position:absolute;left:' ) ; html . push ( underground . settings . cellWidth ) ; html . push ( 'px;top:0;height:' ) ; html . push ( underground . settings . cellHeight ) ; html . push ( 'px;width:' ) ; html . push ( underground . settings . cellWidth * this . Width ) ; html . push ( 'px;' ) ; html . push ( '">' ) ; var xshift = ( ! msie || msie7 ) ? 10 : 0 ; var startLetterCode = 'A' . charCodeAt ( 0 ) ; for ( var i = 0 ; i < dim . w ; i ++ )
{ var vi = ( dim . xinv ) ? ( dim . w - i ) : ( i + 1 ) ; var vs = ( dim . xalpha ) ? String . fromCharCode ( startLetterCode + vi - 1 ) : vi . toString ( ) ; html . push ( '<div class="xaxislabel" style="position:absolute;top:0;width:' ) ; html . push ( underground . settings . cellWidth - 1 ) ; html . push ( 'px;height:' ) ; html . push ( underground . settings . cellHeight - xshift - 1 ) ; html . push ( 'px;' ) ; html . push ( 'color:' ) ; html . push ( this . dungeon . CellBorderColorString ) ; html . push ( ';' ) ; html . push ( 'left:' ) ; html . push ( i * underground . settings . cellWidth ) ; html . push ( 'px;" id="' ) ; html . push ( this . xaxisId ) ; html . push ( '_' ) ; html . push ( i ) ; html . push ( '">' ) ; html . push ( vs ) ; html . push ( '</div>' ) ; }
html = html . concat ( [ '<div class="xaxisline"><img src="' , underground . settings . blankImageUrl , '" width="1" height="1" border="0" /></div>' , '</div>' ] ) ; html . push ( '<div id="' + this . yaxisId + '" class="dyaxis" style="position:absolute;left:0;top:' + underground . settings . cellHeight + 'px;width:' + underground . settings . cellWidth + 'px;height:' + ( underground . settings . cellHeight * this . Height ) + 'px;">' ) ; var yshift = ( ! msie || msie7 ) ? 10 : 0 ; for ( var i = 0 ; i < dim . h ; i ++ )
{ var vi = ( dim . yinv ) ? ( dim . h - i ) : ( i + 1 ) ; var vs = ( ! dim . xalpha ) ? String . fromCharCode ( startLetterCode + vi - 1 ) : vi . toString ( ) ; html . push ( '<div class="yaxislabel" style="position:absolute;left:0;width:' ) ; html . push ( underground . settings . cellWidth - 8 ) ; html . push ( 'px;height:' ) ; html . push ( underground . settings . cellHeight - yshift - 1 ) ; html . push ( 'px;' ) ; html . push ( 'color:' ) ; html . push ( this . dungeon . CellBorderColorString ) ; html . push ( ';' ) ; html . push ( 'top:' ) ; html . push ( i * underground . settings . cellHeight ) ; html . push ( 'px;" id="' ) ; html . push ( this . yaxisId ) ; html . push ( '_' ) ; html . push ( i ) ; html . push ( '">' ) ; html . push ( vs ) ; html . push ( '</div>' ) ; }
html = html . concat ( [ '<div class="yaxisline"><img src="' , underground . settings . blankImageUrl , '" width="1" height="1" border="0" /></div>' , '</div>' ] ) ; for ( var i in this . Cells )
{ html . push ( this . getCellHtml ( this . Cells [ i ] ) ) ; }
2023-01-10 16:29:32 +00:00
html . push ( '<div id="' ) ; html . push ( this . highlightPointId ) ; html . push ( '" style="position:absolute;left:0;top:0;width:40px;height:40px;visibility:hidden;padding:0;margin:0;">' ) ; html . push ( '<img src="' ) ; html . push ( underground . settings . objectImagesUrl ) ; html . push ( underground . settings . highlightObjectImage ) ; html . push ( '" width="40" height="40" border="0" alt="" title="Вы попали сюда" /></div>' ) ; for ( var i = 0 ; i < this . markers . length ; i ++ )
2022-06-06 21:30:34 +00:00
{ var marker = this . markers [ i ] ; marker . cellDivId = this . getCellDivId ( marker . x , marker . y ) ; html . push ( this . getCellMarkerHtml ( i , marker . cellDivId , marker . x , marker . y , marker . text ) ) ; }
html . push ( '</div>' ) ; if ( underground . offline )
{ html . push ( '</td></tr></table>' ) ; }
html . push ( '<div id="' ) ; html . push ( this . rightPartId ) ; html . push ( '" class="dright" style="position:absolute;left:' ) ; var pos = ( dim . w + 2 ) * underground . settings . cellWidth ; if ( msie && underground . settings . zoom != 100 )
{ pos = Math . floor ( ( pos * underground . settings . zoom ) / 100 ) ; }
html . push ( pos ) ; html . push ( 'px; top: 60px;">' ) ; html . push ( this . getRightPartHtml ( ) ) ; html . push ( '</div>' ) ; html . push ( '<div style="width:' ) ; html . push ( ( dim . w + 1 ) * underground . settings . cellWidth ) ; html . push ( 'px;">' ) ; html . push ( this . getStatisticsHtml ( ) ) ; html . push ( '</div>' ) ; html . push ( '</div>' ) ; return html . join ( '' ) ; }
f . getRightPartHtml = function ( )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<div style="padding: 2px; text-align: center;"><img width="120" height="121" border="0"' ) ; html . push ( underground . pngClsAttr ) ; html . push ( ' src="' ) ; html . push ( underground . settings . compassLocation ) ; html . push ( underground . settings . compass [ underground . settings . look ] ) ; html . push ( '.png" /></div>' ) ; this . floorNavId = baseId + 'mapsNav' ; html . push ( '<div><a style="display:block;" onclick="ui_toggleMapsNav()" href="javascript:;">Этажи</a></div><div id="' )
2022-06-06 21:30:34 +00:00
html . push ( this . floorNavId ) ; html . push ( '" class="mapsNav" style="display:' ) ; html . push ( underground . settings . mapsNavDisplay ) ; html . push ( ';">' ) ; for ( var i in underground . knownDungeons )
{ var kd = underground . knownDungeons [ i ] ; var floorCount = kd . FloorNames . length ; if ( floorCount > 1 )
{ html . push ( '<div><b>' ) ; html . push ( kd . Caption ) ; html . push ( '</b></div><blockquote><ul>' ) ; for ( var fi = 0 ; fi < floorCount ; fi ++ )
{ var onclick ; if ( kd == this . dungeon . ui )
{ onclick = [ 'underground.changeFloor(' , fi , ')' ] ; }
else
{ onclick = [ 'ui_cellObjectAction(1, \'' , kd . Name , '.' , ( fi + 1 ) , '\', \'\')' ] ; }
if ( kd == this . dungeon . ui && fi == this . index )
{ html . push ( '<li style="list-style-type: square;"><b><nobr><a class="fblike" style="display: block;font-size:11px;" href="javascript:;">' ) ; html . push ( kd . FloorNames [ fi ] ) ; html . push ( '</a></nobr></b></li>' ) ; }
else
{ html . push ( '<li style="list-style-type: square;"><nobr><a class="fblike" style="display: block;font-size:11px;" href="javascript:;" onclick="' ) ; html . push ( onclick . join ( '' ) ) ; html . push ( '">' ) ; html . push ( kd . FloorNames [ fi ] ) ; html . push ( '</a></nobr></li>' ) ; } }
html . push ( '</ul></blockquote>' ) ; }
else
{ if ( kd == this . dungeon . ui )
{ html . push ( '<div><b><nobr><a class="fblike" style="display: block;" href="javascript:;">' ) ; html . push ( kd . Caption ) ; html . push ( '</a></nobr></b></div>' ) ; }
else
{ html . push ( '<div><nobr><a class="fblike" style="display: block;" href="javascript:;" onclick="underground.openDungeon(' ) ; html . push ( i ) ; html . push ( ')">' ) ; html . push ( kd . Caption ) ; html . push ( '</a></nobr></div>' ) ; } } }
2023-01-10 16:29:32 +00:00
html . push ( '<div><a style="display:block;" onclick="ui_toggleMapsNav()" href="javascript:;">Скрыть</a></div>' )
2022-06-06 21:30:34 +00:00
html . push ( '</div>' ) ; return html . join ( '' ) ; }
f . applyZoom = function ( zoomFactor )
{ document . getElementById ( this . mapViewId ) . style . zoom = ( zoomFactor + '%' ) ; var dim = this . getLookDim ( ) ; var pos = ( dim . w + 2 ) * underground . settings . cellWidth ; pos = Math . floor ( ( pos * zoomFactor ) / 100 ) ; document . getElementById ( this . rightPartId ) . style . left = pos + 'px' ; }
f . getStatisticsHtml = function ( )
2023-01-10 16:29:32 +00:00
{ var stats = this . getStatistics ( ) ; return getStatisticsHtml ( 'Статистика по этажу' , stats , this . statisticsCheckId ) ; }
2022-06-06 21:30:34 +00:00
f . getBorderStyleHtml = function ( code , size )
{ return [ 'border-' , code , ':' , size , 'px ' , ( ( size < 1 ) ? 'none' : 'solid' ) , ' ' , this . dungeon . CellBorderColorString , ';' , 'padding-' , code , ':' , ( 2 - size ) , 'px;' ] . join ( '' ) ; }
f . getCellDivId = function ( x , y )
{ return [ this . cellPrefix , x , '.' , y ] . join ( '' ) ; }
f . getCellHtml = function ( cell )
{ cell . divId = this . getCellDivId ( cell . X , cell . Y ) ; var pt = this . getLookPoint ( cell . X , cell . Y ) ; var st = [ 'background-color:' , ( ( cell . BackColorString != 'Transparent' ) ? cell . BackColorString : this . dungeon . CellBackgroundColorString ) , '; position: absolute;border-collapse: collapse;' , 'left:' , ( ( pt . x + 1 ) * underground . settings . cellWidth - underground . settings . cellLocationShift ) , 'px;' , 'top:' , ( ( pt . y + 1 ) * underground . settings . cellHeight - underground . settings . cellLocationShift ) , 'px;' , 'width:' , ( underground . settings . cellWidth - underground . settings . cellSizeShift ) , 'px;' , 'height:' , ( underground . settings . cellHeight - underground . settings . cellSizeShift ) , 'px;' , this . getBorderStyleHtml ( 'left' , cell . Border . Left ) , this . getBorderStyleHtml ( 'top' , cell . Border . Top ) , this . getBorderStyleHtml ( 'right' , cell . Border . Right ) , this . getBorderStyleHtml ( 'bottom' , cell . Border . Bottom ) ] ; var html = [ '<div id="' , cell . divId , '" style="' ] ; html = html . concat ( st ) ; var mouseover = [ 'document.getElementById(\'' , this . xaxisId , '_' , cell . X , '\').className = \'xaxislabel hotxaxislabel\';' , 'document.getElementById(\'' , this . yaxisId , '_' , cell . Y , '\').className = \'yaxislabel hotyaxislabel\';' ] ; var mouseout = [ 'document.getElementById(\'' , this . xaxisId , '_' , cell . X , '\').className = \'xaxislabel\';' , 'document.getElementById(\'' , this . yaxisId , '_' , cell . Y , '\').className = \'yaxislabel\';' ] ; if ( cell . HotSpots . length > 0 )
{ mouseover = mouseover . concat ( [ 'underground.hotSpot(\'' , cell . divId , '\');' ] ) ; mouseout . push ( 'hidePopup2();' ) ; }
html . push ( '" onmouseover="' ) ; html . push ( mouseover . join ( '' ) ) ; html . push ( ' return false" onmouseout="' ) ; html . push ( mouseout . join ( '' ) ) ; html . push ( '" oncontextmenu="underground.showCellContextMenu(\'' ) ; html . push ( cell . divId ) ; html . push ( '\',' ) ; html . push ( cell . X ) ; html . push ( ',' ) ; html . push ( cell . Y ) ; html . push ( '); return false">' ) ; for ( var i in cell . ObjectRefs )
{ var objref = cell . ObjectRefs [ i ] ; objref . divId = cell . divId + '_obj' + i ; var oidata = underground . findObjectAndInstance ( objref . ObjectName , objref . InstanceName ) ; var o = oidata . obj ; st = [ 'position: absolute;z-index:1;' , 'left:' , o . ML , 'px;' , 'top:' , o . MT , 'px;' , 'width:' , o . MW , 'px;' , 'height:' , o . MH , 'px;' ] ; var popuphtml = ';' ; var mouseouthtml = ';' ; if ( oidata . instance . Description . length > 0 || o . Description . length > 0 )
{ popuphtml = [ 'underground.showObjRefPopup(\'' , objref . ObjectName , '\', \'' , objref . InstanceName , '\')' ] . join ( '' ) ; mouseouthtml = 'hidePopup2()' ; }
var image = underground . getCellObjectInstanceImage ( o , oidata . instance ) ; if ( o . Importance == 0 )
{ st . push ( underground . decoratedOpacityStyle ) ; }
if ( oidata . instance . HighlightColorString != 'Transparent' )
{ if ( msie )
{ st = st . concat ( [ 'filter:glow(color=\'' , oidata . instance . HighlightColorString , '\', strength=4);' ] ) ; }
else
{ st = st . concat ( [ 'border: 1px solid ' , oidata . instance . HighlightColorString , ';' ] ) ; } }
html = html . concat ( [ '<img id="' , objref . divId , '" onmouseover="' , popuphtml , '" onmouseout="' , mouseouthtml , '" src="' , image , '" width="32" height="32" border="0"' , ' style="' ] ) ; html = html . concat ( st ) ; html . push ( '"' ) ; if ( oidata . instance . ClickAction != 0 )
{ html = html . concat ( [ ' onclick="ui_cellObjectAction(' , oidata . instance . ClickAction , ', \'' , oidata . instance . ClickChapter , '\', \'' , oidata . instance . ClickPoint , '\')"' ] ) ; }
html . push ( ' />' ) ; }
for ( var i in cell . MobRefs )
{ var mpt = getMobPoint ( i , cell . MobRefs . length ) ; st = [ ] ; var mobref = cell . MobRefs [ i ] ; mobref . divId = cell . divId + '_mob' + i ; var midata = underground . findMobAndInstance ( mobref . Name , mobref . Level , mobref . Align , mobref . Tag ) ; var image = underground . getMobInstanceImage ( midata . mob , midata . mi ) ; html = html . concat ( [ '<img id="' , mobref . divId , '" onmouseout="hidePopup2()" style="' , 'position: absolute;z-index:2;' , 'left:' , mpt . x , 'px;' , 'top:' , mpt . y , 'px;' , '" src="' , image , '" width="17" height="26" border="0"' , ' onmouseover="' , 'underground.showMobRefPopup(\'' , mobref . Name , '\', \'' , mobref . Level , '\', \'' , mobref . Align , '\', \'' , mobref . Tag , '\', ' , mobref . Count , ')' , '" />' ] ) ; }
html . push ( '</div>' ) ; return html . join ( '' ) ; }
f . highlightMobs = function ( cell , mobName , mobLevel , v )
{ var color = underground . settings . levelColors [ mobLevel ] ; var filterStr = [ 'glow(color=\'' , color , '\', strength=5)' ] . join ( '' ) ; for ( var i in cell . MobRefs )
{ var mobref = cell . MobRefs [ i ] ; if ( mobref . Name != mobName || mobref . Level != mobLevel )
{ continue ; }
var div = document . getElementById ( mobref . divId ) ; if ( v )
{ if ( msie )
{ div . style . filter = filterStr ; }
else
{ div . style . borderStyle = 'solid' ; div . style . borderWidth = '2px' ; div . style . borderColor = color ; } }
else
{ if ( msie )
{ div . style . filter = '' ; }
else
{ div . style . borderStyle = 'none' ; div . style . borderWidth = '0px' ; div . style . borderColor = 'transparent' ; } } } }
f . checkStatsMob = function ( mobName , mobLevel , depth )
{ var stats = this . getStatistics ( ) ; if ( ! ( mobName in stats ) ) return ; if ( mobLevel != 0 && ! ( mobLevel in stats [ mobName ] ) ) return ; var cid = getStatisticsCheckId ( this . statisticsCheckId , mobName , mobLevel ) ; var v = document . getElementById ( cid ) . checked ; if ( mobLevel == 0 )
{ for ( var lvl in stats [ mobName ] )
{ var chkl = document . getElementById ( getStatisticsCheckId ( this . statisticsCheckId , mobName , lvl ) ) ; if ( chkl == null ) continue ; chkl . checked = v ; this . checkStatsMob ( mobName , lvl , true ) ; }
return ; }
for ( var i in this . Cells )
{ this . highlightMobs ( this . Cells [ i ] , mobName , mobLevel , v ) ; }
if ( depth != null && mobLevel != 0 )
{ var ok = true ; var gid = getStatisticsCheckId ( this . statisticsCheckId , mobName , 0 ) ; for ( var lvl in stats [ mobName ] )
{ var id = getStatisticsCheckId ( this . statisticsCheckId , mobName , mobLevel ) ; if ( ! document . getElementById ( id ) . checked )
{ ok = false ; break ; } }
document . getElementById ( gid ) . checked = ok ; } }
f . getStatistics = function ( )
{ var r = { } ; for ( var i in this . Cells )
{ var cell = this . Cells [ i ] ; for ( var j in cell . MobRefs )
{ var mobref = cell . MobRefs [ j ] ; if ( ! ( mobref . Name in r ) )
{ r [ mobref . Name ] = { } ; }
if ( ! ( mobref . Level in r [ mobref . Name ] ) )
{ r [ mobref . Name ] [ mobref . Level ] = 0 ; }
r [ mobref . Name ] [ mobref . Level ] += mobref . Count ; } }
return r ; }
f . showCellMarkerPopup = function ( markerIndex )
2023-01-10 16:29:32 +00:00
{ showPopup ( '<div class="hintviewcaption">Заметки на полях</div>' + htmlstring ( this . markers [ markerIndex ] . text ) ) ; }
2022-06-06 21:30:34 +00:00
f . getHash = function ( )
{ var r = [ ] ; for ( var i = 0 ; i < this . markers . length ; i ++ )
{ var marker = this . markers [ i ] ; if ( marker . hidden ) continue ; r . push ( '&' ) ; r . push ( marker . x ) ; r . push ( '.' ) ; r . push ( marker . y ) ; r . push ( '&' ) ; r . push ( escape ( marker . text ) ) ; }
return r . join ( '' ) ; }
f . handleHash = function ( hash )
{ var sa = hash . split ( '&' ) ; for ( var i = 0 ; i < sa . length - 1 ; i += 2 )
{ var xy = sa [ i ] . split ( '.' ) ; var x = parseInt ( xy [ 0 ] ) ; var y = parseInt ( xy [ 1 ] ) ; var text = unescape ( sa [ i + 1 ] ) ; if ( ! isNaN ( x ) && ! isNaN ( y ) )
{ this . markers . push ( { x : x , y : y , cellDivId : null , text : text , hidden : false } ) ; } } }
f . getCellMarkerHtml = function ( markerIndex , cellDivId , x , y , text )
{ var markerId = cellDivId + '_marker' ; var mouseover = [ 'document.getElementById(\'' , this . xaxisId , '_' , x , '\').className = \'xaxislabel hotxaxislabel\';' , 'document.getElementById(\'' , this . yaxisId , '_' , y , '\').className = \'yaxislabel hotyaxislabel\';' , 'ui_showCellMarkerPopup(' , markerIndex , '); return false' ] ; var mouseout = [ 'document.getElementById(\'' , this . xaxisId , '_' , x , '\').className = \'xaxislabel\';' , 'document.getElementById(\'' , this . yaxisId , '_' , y , '\').className = \'yaxislabel\';' , 'hidePopup2(); return false' ] ; var content = [ '<div id="' , markerId , '" style="position:absolute;left:' , ( ( x + 1 ) * underground . settings . cellWidth - underground . settings . cellLocationShift ) . toString ( ) , 'px;top:' , ( ( y + 1 ) * underground . settings . cellHeight - underground . settings . cellLocationShift ) . toString ( ) , 'px;width:40px;height:40px;padding:0;margin:0;z-index:3;" oncontextmenu="underground.showCellContextMenu(\'' , cellDivId , '\',' , x , ',' , y , '); return false"><img src="' , underground . settings . cellMarkImageUrl , '" width="40" height="40" border="0" onmouseout="' , mouseout . join ( '' ) , '" onmouseover="' , mouseover . join ( '' ) , '" /></div>' ] . join ( '' ) ; return content ; }
f . toggleCellMarker = function ( cellDivId , x , y )
{ var markerId = cellDivId + '_marker' ; var mdiv = document . getElementById ( markerId ) ; if ( mdiv != null && mdiv . style . visibility == '' )
{ for ( var i = 0 ; i < this . markers . length ; i ++ )
{ var marker = this . markers [ i ] ; if ( marker . x == x && marker . y == y )
{ marker . hidden = true ; break ; } }
mdiv . style . visibility = 'hidden' ; underground . setHash ( ) ; return ; }
2023-01-10 16:29:32 +00:00
var text = window . prompt ( 'Укажите пояснительный текст:' ) ; if ( text == null ) return ; if ( mdiv == null )
2022-06-06 21:30:34 +00:00
{ var content = this . getCellMarkerHtml ( this . markers . length , cellDivId , x , y , text ) ; var mapDiv = document . getElementById ( this . mapViewId ) ; if ( mapDiv . insertAdjacentHTML )
{ mapDiv . insertAdjacentHTML ( 'beforeEnd' , content ) ; }
else
{ mapDiv . innerHTML = mapDiv . innerHTML + content ; }
mdiv = document . getElementById ( markerId ) ; this . markers . push ( { x : x , y : y , cellDivId : cellDivId , text : text , hidden : false } ) ; }
else
{ for ( var i = 0 ; i < this . markers . length ; i ++ )
{ var marker = this . markers [ i ] ; if ( marker . x == x && marker . y == y )
{ marker . hidden = false ; marker . text = text ; break ; } } }
mdiv . style . visibility = '' ; underground . setHash ( ) ; }
f . getCellContentMenuHtml = function ( cellDivId , x , y )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<table cellspacing="0" cellpadding="0" border="0"><tr>' ) ; html . push ( getRowMenuItemHtml ( 'Поставить/снять маркер' , 'ui_toggleCellMarker(\'' + cellDivId + '\',' + x + ',' + y + ')' ) ) ; html . push ( getRowMenuSeparatorHtml ( ) ) ; html . push ( getRowMenuItemHtml ( 'Закрыть' , 'hideMenu()' ) ) ; html . push ( '</table>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
f . findCellByDivId = function ( cellDivId )
{ for ( var i in this . Cells )
{ var cell = this . Cells [ i ] ; if ( cell . divId == cellDivId )
{ return cell ; } }
return null ; }
f . findCellByRef = function ( cellRef )
{ for ( var i in this . Cells )
{ var cell = this . Cells [ i ] ; if ( cell . X == cellRef . X && cell . Y == cellRef . Y )
{ return cell ; } }
return null ; }
f . hotSpot = function ( cellDivId )
{ var cell = this . findCellByDivId ( cellDivId ) ; if ( cell == null ) return ; for ( var i in cell . HotSpots )
{ var hotSpot = cell . HotSpots [ i ] ; hotSpot . divId = cellDivId + '_hotSpot' + i ; var opac = hotSpot . Opacity ; var color = hotSpot . HighlightColorString ; var imageUrl = hotSpot . ImageUrl ; if ( imageUrl == '' )
{ imageUrl = underground . settings . blankImageUrl ; }
for ( var j in hotSpot . CellRefs )
{ var markerId = hotSpot . divId + '_mark' + j ; var marker = document . getElementById ( markerId ) ; if ( marker != null )
{ marker . style . visibility = '' ; continue ; }
var html = [ ] ; var cref = hotSpot . CellRefs [ j ] ; var tcell = this . findCellByRef ( cref ) ; var te = document . getElementById ( tcell . divId ) ; if ( te == null ) continue ; html . push ( '<div id="' ) ; html . push ( markerId ) ; html . push ( '" style="position: absolute; padding: 0; border: 0; z-index:10; left: ' ) ; html . push ( underground . settings . cellLocationShift ) ; html . push ( 'px; background-color: ' ) ; html . push ( color ) ; html . push ( '; top: ' ) ; html . push ( underground . settings . cellLocationShift ) ; html . push ( 'px;' ) ; if ( opac < 1 )
{ html . push ( ' opacity: ' ) ; html . push ( opac ) ; html . push ( '; -moz-opacity: ' ) ; html . push ( opac ) ; html . push ( '; KhtmlOpacity: ' ) ; html . push ( opac ) ; html . push ( ';filter:alpha(opacity = ' ) ; html . push ( Math . floor ( opac * 100 ) ) ; html . push ( ', style = 4);' ) ; }
html . push ( ' width: ' ) ; html . push ( underground . settings . cellWidth - tcell . Border . Left - tcell . Border . Right ) ; html . push ( '; height: ' ) ; html . push ( underground . settings . cellHeight - tcell . Border . Top - tcell . Border . Bottom ) ; html . push ( ';"><img src="' ) ; html . push ( imageUrl ) ; html . push ( '" border="0" width="' ) ; html . push ( underground . settings . cellWidth - tcell . Border . Left - tcell . Border . Right ) ; html . push ( '" height="' ) ; html . push ( underground . settings . cellHeight - tcell . Border . Top - tcell . Border . Bottom ) ; html . push ( '" /></div>' ) ; html = html . join ( '' ) ; if ( te . insertAdjacentHTML )
{ te . insertAdjacentHTML ( 'beforeEnd' , html ) ; }
else
{ te . innerHTML = te . innerHTML + html ; } } } }
f . hideHotSpots = function ( )
{ for ( var i in this . Cells )
{ var cell = this . Cells [ i ] ; for ( var i in cell . HotSpots )
{ var hotSpot = cell . HotSpots [ i ] ; if ( ! ( 'divId' in hotSpot ) ) continue ; var hotSpotId = hotSpot . divId ; for ( var j in hotSpot . CellRefs )
{ var markerId = hotSpot . divId + '_mark' + j ; var marker = document . getElementById ( markerId ) ; if ( marker != null )
{ marker . style . visibility = 'hidden' ; } } } } } }
function LoadedDungeonEntender ( d )
{ d . IsDungeon &= ( d . Floors . length > 0 ) ; for ( var i in d . Floors )
{ var f = d . Floors [ i ] ; FloorExtender ( d , i , f ) ; }
d . getMapHtml = function ( )
{ var html = [ ] ; for ( var i in this . Floors )
{ var f = d . Floors [ i ] ; html . push ( f . getMapHtml ( ) ) ; }
return html . join ( '' ) ; }
d . afterConstruction = function ( )
{ } }
function CustomResource ( )
{ this . Description = [ ] ; this . NewLineToBR = true ; this . activeFloorIndex = 0 ; this . rotation = 0 ; this . FloorCount = 1 ; this . getChapterHtml = function ( )
{ return '' ; }
this . afterConstruction = function ( )
{ }
this . getHash = function ( )
{ return this . Name ; }
this . handleHash = function ( suffix )
{ }
this . changeFloor = function ( floorIndex )
{ }
this . getUndergroundTabsHtml = function ( )
{ return '' ; }
this . hidePages = function ( )
{ }
this . needData = function ( f )
{ f ( ) ; }
this . getCellContentMenuHtml = function ( cellDivId , x , y )
{ return '' ; }
this . hotSpot = function ( cellDivId )
{ }
this . hideHotSpots = function ( )
{ }
this . getProposedZoom = function ( )
{ return underground . settings . zoom ; }
this . applyZoom = function ( zoomFactor )
{ }
this . highlightPoint = function ( point )
{ } }
function ExternalResource ( url , caption , desc , newLineToBR )
{ this . Url = url ; this . Caption = caption ; this . Description = desc ; this . NewLineToBR = newLineToBR ; this . desc = desc . join ( newLineToBR ? '<br />' : '' ) ; }
function CustomFloor ( d , i , name , description , newLineToBR )
{ this . dungeon = d ; this . index = i ; this . Name = name ; this . Description = description ; this . NewLineToBR = newLineToBR ; this . mapId = 'dungeon_' + d . Name + '_floor_' + this . Name + '_map' ; this . getMapHtml = function ( )
{ var html = [ ] ; var dm = ( this . dungeon . ui . activeFloorIndex == this . index ) ? '' : 'none' ; html . push ( '<div id="' ) ; html . push ( this . mapId ) ; html . push ( '" style="display:' ) ; html . push ( dm ) ; html . push ( '">' ) ; html . push ( this . Description . join ( this . NewLineToBR ? '<br />' : '' ) ) ; html . push ( '</div>' ) ; return html . join ( '' ) ; }
this . getStatisticsHtml = function ( )
{ return '' ; }
this . getStatistics = function ( )
{ return { } ; }
this . getCellContentMenuHtml = function ( cellDivId , x , y )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<table cellspacing="0" cellpadding="0" border="0"><tr>' ) ; html . push ( getRowMenuItemHtml ( 'Закрыть' , 'hideMenu()' ) ) ; html . push ( '</table>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
this . hotSpot = function ( cellDivId )
{ }
this . hideHotSpots = function ( )
{ }
this . getHash = function ( )
{ return '' ; }
this . handleHash = function ( hash )
{ } }
function WelcomeDungeon ( )
2023-01-10 16:29:32 +00:00
{ this . baseConstructor = CustomResource ; this . baseConstructor ( ) ; this . Name = 'welcome' ; this . Caption = 'Стартовая' ; this . showDescription = function ( s )
2022-06-06 21:30:34 +00:00
{ document . getElementById ( 'welcomeDungeon_descriptionArea' ) . innerHTML = s ; }
this . getMenuItemHtml = function ( d , di , popupFuncName , openFuncName , url )
{ var target = ' target="_blank"' ; if ( url == null ) { url = 'javascript:;' ; target = '' ; }
return [ '<li style="margin: 5px;"><a' , target , ' class="fblike" style="display: block; width: 256px;" onmouseover="' , popupFuncName , '(' , di , ')" onmouseout="underground.welcomeDungeon.showDescription(\'&nbsp;\')" href="' , url , '" onclick="' , openFuncName , '(' , di , ')">' , d . Caption , '</a></li>' ] . join ( '' ) ; }
this . getChapterHtml = function ( )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<table cellpadding="0" cellspacing="0" width="100%" border="0"><tr><td width="250" valign="top"><br /><br /><p>Добро пожаловать в р е с у р с о Подземельях Бойцовского Клуба.</p>' ) ; html . push ( '<p>Пожалуйста, выберите одно из подземелий:</p>' ) ; html . push ( '<blockquote><ul style="margin: 5px; font-size: larger;">' ) ; for ( var di in underground . knownDungeons )
2022-06-06 21:30:34 +00:00
{ var d = underground . knownDungeons [ di ] ; if ( ! d . IsDungeon ) continue ; html . push ( this . getMenuItemHtml ( d , di , 'underground.showDungeonPopup' , 'underground.openDungeon' ) ) ; }
2023-01-10 16:29:32 +00:00
html . push ( '</ul></blockquote>' ) ; html . push ( '<p>Одно из сопутствующих мест:</p>' ) ; html . push ( '<blockquote><ul style="margin: 5px; font-size: larger;">' ) ; for ( var di in underground . knownDungeons )
2022-06-06 21:30:34 +00:00
{ var d = underground . knownDungeons [ di ] ; if ( d . IsDungeon ) continue ; html . push ( this . getMenuItemHtml ( d , di , 'underground.showDungeonPopup' , 'underground.openDungeon' ) ) ; }
2023-01-10 16:29:32 +00:00
html . push ( '</ul></blockquote>' ) ; html . push ( '<p>Или один из дополнительных ресурсов:</p>' ) ; html . push ( '<blockquote><ul style="margin: 5px; font-size: larger;">' ) ; for ( var di in underground . resources )
2022-06-06 21:30:34 +00:00
{ var d = underground . resources [ di ] ; html . push ( this . getMenuItemHtml ( d , di , 'underground.showResourcePopup' , 'underground.openResource' ) ) ; }
2023-01-10 16:29:32 +00:00
html . push ( '</ul></blockquote>' ) ; html . push ( '<p>Также рекомендуем:</p>' ) ; html . push ( '<blockquote><ul style="margin: 5px; font-size: larger;">' ) ; for ( var di in underground . externals )
2022-06-06 21:30:34 +00:00
{ var d = underground . externals [ di ] ; html . push ( this . getMenuItemHtml ( d , di , 'underground.showExternalPopup' , 'javascript:;' , d . Url ) ) ; }
html . push ( '</ul></blockquote></td><td valign="top"><div id="welcomeDungeon_descriptionArea" style="padding: 4px; margin: 4px; margin-right: 40px; margin-top: 70px; border: 1px solid #ccc;"> </div></td></tr></table>' ) ; return html . join ( '' ) ; } }
function DiggerConst ( )
2023-01-10 16:29:32 +00:00
{ this . baseConstructor = CustomResource ; this . baseConstructor ( ) ; this . Description = [ 'Устали рыться в пергаментах с рецептами, постоянно путаетесь в мешочках с ингредиентами, потеряли ступку с колбами?' , 'Хм, что ж. В помощь юному алхимику подготовлен удобный р е с у р с , с полной базой рецептов и предметов.' , 'Завтра, включив компьютер, вы будете точно знать, что еще необходимо собрать.' ] ; this . Name = 'diggerconst' ; this . Caption = 'Конструктор диггера' ; this . tabIndex = 0 ; this . imagesToBePreloaded = [ ] ; this . divId = 'diggerConstructorAll' ; this . tabsId = 'diggerConstructorTabs' ; this . knapsackId = 'diggerConstructorKnapsack' ; this . recipesId = 'diggerConstructorRecipes' ; this . allRecipes1Id = 'diggerConstructorAllRecipes1' ; this . allRecipesView1Id = 'diggerConstructorAllRecipesView1' ; this . allRecipesItem1Id = 'diggerConstructorAllRecipesItem1' ; this . allRecipes2Id = 'diggerConstructorAllRecipes2' ; this . allRecipesView2Id = 'diggerConstructorAllRecipesView2' ; this . allRecipesItem2Id = 'diggerConstructorAllRecipesItem2' ; this . allItemsId = 'diggerConstructorAllItems' ; this . allItemsViewId = 'diggerConstructorAllItemsView' ; this . allItemsItemId = 'diggerConstructorAllItemsItem' ; this . basketId = 'diggerConstructorBasket' ; this . basketItemsViewId = 'diggerConstructorBasketItemsView' ; this . basketSummaryId = 'diggerConstructorBasketSummaryId' ; this . tabIds = [ this . knapsackId , this . recipesId , this . allRecipes1Id , this . allRecipes2Id , this . allItemsId , this . basketId ] ; this . itemViewIds = [ null , null , this . allRecipesItem1Id , this . allRecipesItem2Id , this . allItemsItemId , null ] ; this . knapsackViewId = 'diggerConstructorKnapsackView' ; this . knapsackImportDialogId = 'diggerConstructorKnapsackImportDialog' ; this . knapsackImportDialogTextId = 'diggerConstructorKnapsackImportDialogText' ; this . knapsackImportDialogLabelId = 'diggerConstructorKnapsackImportDialogLabel' ; this . knapsackAddIngrDialogId = 'diggerConstructorKnapsackAddIngrDialogId' ; this . knapsackAddIngrDialogLabelId = 'diggerConstructorKnapsackAddIngrDialogLabelId' ; this . knapsackAddIngrDialogIngrId = 'diggerConstructorKnapsackAddIngrDialogIngrId' ; this . knapsackAddIngrDialogCountId = 'diggerConstructorKnapsackAddIngrDialogCountId' ; this . knapsackTableId = 'diggerConstructorKnapsackTable' ; this . availIngrId = 'diggerConstructor_availIngr' ; this . availRecipesId = 'diggerConstructor_availRecipes' ; this . chosenIngrId = 'diggerConstructor_chosenIngr' ; this . chosenRecipesId = 'diggerConstructor_chosenRecipes' ; this . isChest = false ; this . toInvPhrase = 'В инвентарь ' ; this . wearPhrase = 'надеть ' ; this . reCount = /^\(X([0-9]+)\)/ ; this . knapsack = { } ; this . items = { } ; this . components = { } ; this . availi = { } ; this . availr = [ ] ; this . choseni = { } ; this . chosenr = [ ] ; this . recipes = [ ] ; this . basket = [ ] ; this . loadCostructorData = function ( d )
2022-06-06 21:30:34 +00:00
{ this . data = d ; this . collectDiggerItems ( ) ; }
this . collectDiggerItems = function ( )
{ for ( var cati = this . data . Categories . length - 1 ; cati >= 0 ; cati -- )
{ var cat = this . data . Categories [ cati ] ; cat . hasRecipes = false ; for ( var i = cat . Items . length - 1 ; i >= 0 ; i -- )
{ var itm = cat . Items [ i ] ; itm . Category = cat ; cat . hasRecipes |= ( itm . Recipes . length > 0 ) ; this . items [ itm . Name ] = itm ; } }
for ( var i in this . items )
{ var itm = this . items [ i ] ; for ( var ri = itm . Recipes . length - 1 ; ri >= 0 ; ri -- )
{ var r = itm . Recipes [ ri ] ; r . Item = itm ; this . recipes . push ( r ) ; for ( var pi = r . RecipeParts . length - 1 ; pi >= 0 ; pi -- )
{ var rp = r . RecipeParts [ pi ] ; this . components [ rp . Item ] = this . items [ rp . Item ] ; if ( ! ( 'usedIn' in this . components [ rp . Item ] ) )
{ this . components [ rp . Item ] . usedIn = { } ; }
this . components [ rp . Item ] . usedIn [ itm . Name ] = { recipe : r , count : rp . Count } ; } } } }
this . dataLoaded = function ( f )
{ this . data . ui = this ; if ( this . imagesToBePreloaded . length > 0 )
{ this . preloader = new ImagePreloader ( this . imagesToBePreloaded , null ) ; }
f ( ) ; }
this . loadData = function ( f )
{ var d = this ; var sn = 'dungeon.constructor.js' ; if ( ! underground . offline && ! ( sn in underground . loadedScripts ) )
{ loadScript ( underground . settings . jsBase + sn , function ( ) { underground . loadedScripts [ sn ] = sn ; d . dataLoaded ( f ) ; } ) ; }
else
{ d . dataLoaded ( f ) ; } }
this . needData = function ( f )
{ if ( ! ( 'data' in this ) )
{ this . loadData ( f ) ; }
else
{ f ( ) ; } }
this . finalizeAvailableRecipes = function ( )
{ }
this . probeRecipe = function ( r )
{ if ( r . RecipeParts . length <= 0 ) return ; var count = 65535 ; for ( var i = r . RecipeParts . length - 1 ; i >= 0 ; i -- )
{ var rp = r . RecipeParts [ i ] ; var mater = this . findDiggerItem ( rp . Item ) ; if ( ! mater . IsGift && ( mater . Binding == 0 ) && ( ( rp . Binding == 0 || rp . Binding == 4 ) ) )
{ continue ; }
if ( ! ( rp . Item in this . availi ) ) return ; var rpCount = this . availi [ rp . Item ] / rp . Count ; if ( rpCount < count )
{ count = rpCount ; if ( count < 1 ) break ; } }
count = Math . floor ( count ) ; if ( count > 0 )
{ this . availr . push ( { recipe : r , count : count } ) ; } }
this . prepareAvailableRecipes = function ( )
{ this . availi = { } ; this . choseni = { } ; for ( var n in this . knapsack )
{ this . availi [ this . knapsack [ n ] . name ] = this . knapsack [ n ] . total ; }
this . finalizeAvailableRecipes ( ) ; this . availr = [ ] ; this . chosenr = [ ] ; for ( var i = this . recipes . length - 1 ; i >= 0 ; i -- )
{ this . probeRecipe ( this . recipes [ i ] ) ; }
this . refreshRecipesTab ( ) ; }
this . changeDiggerTab = function ( index )
{ this . tabIndex = index ; var activeDivId = this . tabIds [ index ] ; var divs = document . getElementById ( this . divId ) . childNodes ; for ( var i = 0 ; i < divs . length ; i ++ )
{ var div = divs [ i ] ; var dv = ( div . id == activeDivId ) ? '' : 'none' ; div . style . display = dv ; }
document . getElementById ( this . tabsId ) . innerHTML = this . getDiggerTabsHtml ( ) ; if ( index == 1 )
{ this . prepareAvailableRecipes ( ) ; } }
this . getDiggerTabHtml = function ( caption , i )
{ var html = [ ] ; html . push ( '<li' ) ; if ( i == this . tabIndex )
{ html . push ( ' class="activeLink"' ) ; }
html . push ( '><a href="javascript:;"' ) ; if ( i != this . tabIndex )
{ html . push ( ' onclick="ui_changeDiggerTab(' ) ; html . push ( i ) ; html . push ( ')"' ) ; }
html . push ( '>' ) ; html . push ( caption ) ; html . push ( '</a></li>' ) ; return html . join ( '' ) ; }
this . loadKnapsack = function ( isChest )
2023-01-10 16:29:32 +00:00
{ this . isChest = isChest ; document . getElementById ( this . knapsackImportDialogLabelId ) . innerHTML = isChest ? 'сундука' : 'рюкзака' ; document . getElementById ( this . knapsackImportDialogTextId ) . value = '' ; document . getElementById ( this . knapsackAddIngrDialogId ) . style . visibility = 'hidden' ; document . getElementById ( this . knapsackImportDialogId ) . style . visibility = '' ; }
2022-06-06 21:30:34 +00:00
this . loadKnapsackCancel = function ( )
{ document . getElementById ( this . knapsackImportDialogTextId ) . value = '' ; document . getElementById ( this . knapsackImportDialogId ) . style . visibility = 'hidden' ; }
this . loadKnapsackOK = function ( )
{ this . parseKnapsackFor ( this . isChest , document . getElementById ( this . knapsackImportDialogTextId ) . value ) ; this . loadKnapsackCancel ( ) ; }
this . addToKnapsack = function ( isChest )
2023-01-10 16:29:32 +00:00
{ this . isChest = isChest ; document . getElementById ( this . knapsackAddIngrDialogLabelId ) . innerHTML = isChest ? 'сундук' : 'рюкзак' ; document . getElementById ( this . knapsackAddIngrDialogCountId ) . value = '1' ; document . getElementById ( this . knapsackImportDialogId ) . style . visibility = 'hidden' ; document . getElementById ( this . knapsackAddIngrDialogId ) . style . visibility = '' ; }
2022-06-06 21:30:34 +00:00
this . addKnapsackOK = function ( )
{ var so = document . getElementById ( this . knapsackAddIngrDialogIngrId ) ; var cov = document . getElementById ( this . knapsackAddIngrDialogCountId ) . value ; if ( so . selectedIndex >= 0 && ! isNaN ( cov ) && parseInt ( cov ) > 0 )
{ this . addIngr ( this . isChest , so . options [ so . selectedIndex ] . value , parseInt ( cov ) ) ; }
this . addKnapsackCancel ( ) ; }
this . addKnapsackCancel = function ( )
{ document . getElementById ( this . knapsackAddIngrDialogId ) . style . visibility = 'hidden' ; }
this . getDiggerTabsHtml = function ( )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<div class="dtab" style="background-color: #e6e6e6;"><ul class="dtab">' ) ; html . push ( this . getDiggerTabHtml ( 'Ваш инвентарь' , 0 ) ) ; html . push ( this . getDiggerTabHtml ( 'Подбор рецептов' , 1 ) ) ; html . push ( this . getDiggerTabHtml ( 'Рецепты по месту с б о р а ' , 2 ) ) ; html . push ( this . getDiggerTabHtml ( 'Рецепты по категории предметов' , 3 ) ) ; html . push ( this . getDiggerTabHtml ( 'В с е предметы' , 4 ) ) ; html . push ( this . getDiggerTabHtml ( 'Корзина' , 5 ) ) ; html . push ( '</ul></div>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
this . findDiggerItem = function ( id )
{ return this . items [ id ] ; }
this . cleanKnapsackFor = function ( isChest , refresh )
{ var r = { } ; var vn = isChest ? 'chest' : 'knapsack' ; for ( var i in this . knapsack )
{ var itm = this . knapsack [ i ] ; itm . total -= itm [ vn ] ; itm [ vn ] = 0 ; if ( itm . total == 0 )
{ continue ; }
r [ i ] = itm ; }
this . knapsack = r ; if ( refresh )
{ this . refreshKnapsackTab ( ) ; } }
this . parserTrim = function ( value )
{ return value . replace ( /^\s+|\s*([\+\,>\s;:])\s*|\s+$/g , "$1" ) ; }
this . refreshKnapsackTab = function ( )
{ document . getElementById ( this . knapsackViewId ) . innerHTML = this . getKnapsackTableHtml ( ) ; }
this . parseKnapsackFor = function ( isChest , text )
{ var vn = isChest ? 'chest' : 'knapsack' ; this . cleanKnapsackFor ( isChest , false ) ; var lines = text . split ( "\n" ) ; for ( var i = 0 ; i < lines . length ; i ++ )
{ var line = lines [ i ] ; line = this . parserTrim ( line ) ; var phraseFound = true ; while ( phraseFound )
{ phraseFound = false ; if ( line . indexOf ( this . wearPhrase ) == 0 )
{ line = line . substr ( this . wearPhrase . length ) ; phraseFound = true ; }
if ( line . indexOf ( this . toInvPhrase ) == 0 )
{ line = line . substr ( this . toInvPhrase . length ) ; phraseFound = true ; } }
var upperLine = line . toUpperCase ( ) ; for ( var ii in this . components )
{ var c = this . components [ ii ] ; var cuc = c . Caption . toUpperCase ( ) ; if ( upperLine . indexOf ( cuc ) == 0 )
{ if ( ! ( c . Name in this . knapsack ) )
{ this . knapsack [ c . Name ] = { name : c . Name , knapsack : 0 , chest : 0 , total : 0 } ; }
var count = 1 ; var trailer = this . parserTrim ( upperLine . substr ( cuc . length ) ) ; var m = trailer . match ( this . reCount ) ; if ( m != null )
{ count = parseInt ( m [ 1 ] ) ; }
this . knapsack [ c . Name ] [ vn ] += count ; this . knapsack [ c . Name ] . total += count ; break ; } } }
this . refreshKnapsackTab ( ) ; }
this . addIngr = function ( toChest , name , count )
{ var vn = toChest ? 'chest' : 'knapsack' ; if ( ! ( name in this . knapsack ) )
{ this . knapsack [ name ] = { name : name , knapsack : 0 , chest : 0 , total : 0 } ; }
if ( ( - count ) > this . knapsack [ name ] [ vn ] ) count = this . knapsack [ name ] [ vn ] ; if ( ( - count ) > this . knapsack [ name ] . total ) count = this . knapsack [ name ] . total ; this . knapsack [ name ] [ vn ] += count ; this . knapsack [ name ] . total += count ; if ( this . knapsack [ name ] . total <= 0 )
{ delete this . knapsack [ name ] ; }
this . refreshKnapsackTab ( ) ; }
this . findRecipePlace = function ( name )
{ var arp = this . data . RecipePlaces ; for ( var i = arp . length - 1 ; i >= 0 ; i -- )
{ var rp = arp [ i ] ; if ( rp . Name == name ) return rp ; }
return null ; }
this . getItemRecipeHtml = function ( recipe )
{ var html = [ ] ; var place = this . findRecipePlace ( recipe . PlaceName ) ; if ( place == null ) return '<font color="red">bad place</font>' ; var arp = recipe . RecipeParts ; html . push ( '<fieldset><legend title="' ) ; html . push ( place . Description . join ( '<br />' ) ) ; html . push ( '">' ) ; html . push ( place . Caption ) ; html . push ( '</legend>' ) ; if ( recipe . Price > 0 )
2023-01-10 16:29:32 +00:00
{ html . push ( '<div>' ) ; html . push ( 'Стоимость сборки: ' ) ; html . push ( recipe . Price ) ; html . push ( ' кр.</div>' ) ; }
2022-06-06 21:30:34 +00:00
for ( var i = 0 ; i < arp . length ; i ++ )
2023-01-10 16:29:32 +00:00
{ var rp = arp [ i ] ; var mater = this . findDiggerItem ( rp . Item ) ; html . push ( '<div>' ) ; html . push ( mater . Caption ) ; html . push ( ': ' ) ; html . push ( rp . Count ) ; html . push ( 'шт.</div>' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '</fieldset>' ) ; return html . join ( '' ) ; }
this . getItemDescHtml = function ( name )
{ var item = this . findDiggerItem ( name ) ; var html = [ ] ; var img = [ item . Category . ImageBasePath , item . Name , '.gif' ] . join ( '' ) ; html . push ( '<div><nobr><b>' ) ; html . push ( item . Caption ) ; if ( item . Binding > 0 )
2023-03-31 18:30:14 +00:00
{ html . push ( ' <img src="//img.new-combats.tech/i/destiny.gif" width="16" height="18" border="0" alt=""' ) ; switch ( item . Binding )
2023-01-10 16:29:32 +00:00
{ case 1 : html . push ( ' style="filter: invert();" title="Этот предмет будет связан общей судьбой с первым, кто получит е г о . Никто другой не сможет е г о использовать."' ) ; break ; case 2 : html . push ( ' style="filter: gray();" title="Этот предмет будет связан общей судьбой с первым, кто оденет е г о . Никто другой не сможет е г о использовать."' ) ; break ; case 3 : html . push ( ' title="Этот предмет связан общей судьбой."' ) ; break ; }
2022-06-06 21:30:34 +00:00
html . push ( ' />' ) ; }
if ( item . IsGift )
2023-03-31 18:30:14 +00:00
{ html . push ( ' <img src="//img.new-combats.tech/i/podarok.gif" width="16" height="18" border="0" alt="" title="Подарок" />' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '</b></nobr></div>' ) ; html . push ( '<div>' ) ; html . push ( '<img src="' ) ; html . push ( img ) ; html . push ( '" border="0" align="right" width="' ) ; html . push ( item . W ) ; html . push ( '" height="' ) ; html . push ( item . H ) ; html . push ( '" />' ) ; html . push ( item . Description . join ( item . NewLineToBR ? '<br />' : '' ) ) ; html . push ( '</div>' ) ; if ( ( 'Recipes' in item ) && ( item . Recipes . length > 0 ) )
{ html . push ( '<div class="hintview">' ) ; for ( var ri in item . Recipes )
{ html . push ( this . getItemRecipeHtml ( item . Recipes [ ri ] ) ) ; }
html . push ( '</div>' ) ; }
if ( 'usedIn' in item )
{ html . push ( '<table class="proshka" width="100%">' ) ; for ( var ui in item . usedIn )
2023-01-10 16:29:32 +00:00
{ var uitem = this . findDiggerItem ( ui ) ; var place = this . findRecipePlace ( item . usedIn [ ui ] . recipe . PlaceName ) ; html . push ( '<tr><td>Используется для создания: <b>' ) ; html . push ( uitem . Caption ) ; html . push ( '</b> в количестве ' ) ; html . push ( item . usedIn [ ui ] . count ) ; html . push ( 'шт., в ' ) ; if ( place == null ) html . push ( '<font color="red">bad place</font>' ) ; else html . push ( place . Caption ) ; html . push ( '.</td></tr>' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '</table>' ) ; }
return html . join ( '' ) ; }
this . showItemInView = function ( name )
{ var vid = this . itemViewIds [ this . tabIndex ] ; if ( vid == null ) return ; var ve = document . getElementById ( vid ) ; if ( ve == null ) return ; ve . innerHTML = this . getItemDescHtml ( name ) ; }
this . showItemPopup = function ( name )
{ var html = [ ] ; html . push ( '<div style="width: 400px;">' ) ; html . push ( this . getItemDescHtml ( name ) ) ; html . push ( '</div>' ) ; showPopup ( html . join ( '' ) ) ; }
this . getKnapsackTableHtml = function ( )
{ var materCount = 0 ; var html = [ ] ; html . push ( '<table style="table-layout:fixed;width:100%;background-color: white;border:1px solid #ccc;padding:2px;margin:0;" id="' ) ; html . push ( this . knapsackTableId ) ; html . push ( '">' ) ; for ( var materi in this . knapsack )
2023-01-10 16:29:32 +00:00
{ var materd = this . knapsack [ materi ] ; var matern = materd . name ; var mater = this . findDiggerItem ( matern ) ; html . push ( '<tr><td width="60" align="center" valign="center" rowspan="2"><img src="' ) ; html . push ( mater . Category . ImageBasePath ) ; html . push ( mater . Name ) ; html . push ( '.gif" width="' ) ; html . push ( mater . W ) ; html . push ( '" height="' ) ; html . push ( mater . H ) ; html . push ( '" border="0" alt="" onmouseover="ui_showDiggerItemPopup(\'' ) ; html . push ( mater . Name ) ; html . push ( '\')" onmouseout="hidePopup2()" /></td><td colspan="2"><b onmouseover="ui_showDiggerItemPopup(\'' ) ; html . push ( mater . Name ) ; html . push ( '\')" onmouseout="hidePopup2()">' ) ; html . push ( mater . Caption ) ; html . push ( '</b></td><td rowspan="2" align="right">В с е г о : <b>' ) ; html . push ( materd . total ) ; html . push ( '</b>шт.</td></tr><tr><td align="right">В рюкзаке: ' ) ; html . push ( materd . knapsack ) ; html . push ( 'шт.' ) ; html . push ( ' <a title="Увеличить количество" href="javascript:;" onclick="ui_addIngr(false, \'' ) ; html . push ( mater . Name ) ; html . push ( '\', 1)"><b>+</b></a>' ) ; if ( materd . knapsack > 0 )
{ html . push ( ' <a title="Уменьшить количество" href="javascript:;" onclick="ui_addIngr(false, \'' ) ; html . push ( mater . Name ) ; html . push ( '\', -1)"><b>-</b></a>' ) ; }
html . push ( '</td><td align="right">В сундуке: ' ) ; html . push ( materd . chest ) ; html . push ( 'шт.' ) ; html . push ( ' <a title="Увеличить количество" href="javascript:;" onclick="ui_addIngr(true, \'' ) ; html . push ( mater . Name ) ; html . push ( '\', 1)"><b>+</b></a>' ) ; if ( materd . chest > 0 )
{ html . push ( ' <a title="Уменьшить количество" href="javascript:;" onclick="ui_addIngr(true, \'' ) ; html . push ( mater . Name ) ; html . push ( '\', -1)"><b>-</b></a>' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '</td></tr>' ) ; materCount ++ ; }
if ( materCount == 0 )
2023-01-10 16:29:32 +00:00
{ html . push ( '<tr><td align="center" style="color: #a0a0a0;">Инвентарь не содержит ингредиентов и других компонентов.</td></tr>' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '</table>' ) ; return html . join ( '' ) ; }
this . getComponentOptions = function ( )
{ var html = [ ] ; for ( var cati = 0 ; cati < this . data . Categories . length ; cati ++ )
{ var cat = this . data . Categories [ cati ] ; var chtml = [ ] ; for ( var i = 0 ; i < cat . Items . length ; i ++ )
{ var itm = cat . Items [ i ] ; if ( ! ( 'usedIn' in itm ) ) continue ; chtml . push ( '<option value="' ) ; chtml . push ( itm . Name ) ; chtml . push ( '">' ) ; chtml . push ( itm . Caption ) ; chtml . push ( '</option>' ) ; }
if ( chtml . length > 0 )
{ html . push ( '<optgroup label="' ) ; html . push ( cat . Caption ) ; html . push ( '">' ) ; html . push ( chtml . join ( '' ) ) ; html . push ( '</optgroup>' ) ; } }
return html . join ( '' ) ; }
this . getKnapsackTabHtml = function ( )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<div style="position:relative;" id="' ) ; html . push ( this . knapsackId ) ; html . push ( '">' ) ; html . push ( '<div style="visibility:hidden;position:absolute;left:5%;width: 90%;top:10px;height: 380px;border: 1px solid #333;filter: alpha(opacity = 95, style = 4), progid:DXImageTransform.Microsoft.Shadow(color=\'#666666\', Direction=135, Strength=2);opacity:0.95;-moz-opacity:0.95;KhtmlOpacity:0.95;background-color:whitesmoke;padding:4px;" id="' ) ; html . push ( this . knapsackImportDialogId ) ; html . push ( '"><div style="background-color: caption; color: captiontext;">Загрузка данных</div>' ) ; html . push ( 'Скопируйте содержимое <span id="' ) ; html . push ( this . knapsackImportDialogLabelId ) ; html . push ( '">рюкзака</span> сюда:<br /><textarea style="left:4%;width:92%;top: 4px;height:320px;" mode="soft" id="' ) ; html . push ( this . knapsackImportDialogTextId ) ; html . push ( '"></textarea><br />' ) ; html . push ( ' <input type="button" class="inpButton" value="Загрузить" onclick="ui_loadKnapsackOK()" />' ) ; html . push ( ' <input type="button" class="inpButton" value="Отмена" onclick="ui_loadKnapsackCancel()" />' ) ; html . push ( '</div>' ) ; html . push ( '<div style="visibility:hidden;position:absolute;left:5%;width: 90%;top:10px;border: 1px solid #333;filter: alpha(opacity = 95, style = 4), progid:DXImageTransform.Microsoft.Shadow(color=\'#666666\', Direction=135, Strength=2);opacity:0.95;-moz-opacity:0.95;KhtmlOpacity:0.95;background-color:whitesmoke;padding:4px;" id="' ) ; html . push ( this . knapsackAddIngrDialogId ) ; html . push ( '"><div style="background-color: caption; color: captiontext;">Добавление ингредиента</div>' ) ; html . push ( 'Добавить ингредиент в <span id="' ) ; html . push ( this . knapsackAddIngrDialogLabelId ) ; html . push ( '">рюкзак</span>: <select id="' ) ; html . push ( this . knapsackAddIngrDialogIngrId ) ; html . push ( '">' ) ; html . push ( this . getComponentOptions ( ) ) ; html . push ( '</select><br />Количество: <input type="text" value="1" id="' ) ; html . push ( this . knapsackAddIngrDialogCountId ) ; html . push ( '" /><br />' ) ; html . push ( ' <input type="button" class="inpButton" value="Добавить" onclick="ui_addKnapsackOK()" />' ) ; html . push ( ' <input type="button" class="inpButton" value="Отмена" onclick="ui_addKnapsackCancel()" />' ) ; html . push ( '</div>' ) ; html . push ( '<div style="width: 100%;height: 440px;overflow: auto;">' ) ; html . push ( '<div id="' ) ; html . push ( this . knapsackViewId ) ; html . push ( '">' ) ; html . push ( this . getKnapsackTableHtml ( ) ) ; html . push ( '</div></div>' ) ; html . push ( ' <input type="button" class="inpButton" value="Загрузить рюкзак" onclick="ui_loadKnapsack(false)" />' ) ; html . push ( ' <input type="button" class="inpButton" value="Загрузить сундук" onclick="ui_loadKnapsack(true)" />' ) ; html . push ( ' <input type="button" class="inpButton" value="Добавить ингредиент в рюкзак" onclick="ui_addToKnapsack(false)" />' ) ; html . push ( ' <input type="button" class="inpButton" value="Добавить ингредиент в сундук" onclick="ui_addToKnapsack(true)" />' ) ; html . push ( ' <input type="button" class="inpButton" value="Сохранить на сервере" onclick="ui_saveKnapsack()" disabled="yes" />' ) ; html . push ( ' <input type="button" class="inpButton" value="Очистить" onclick="ui_clearKnapsack()" />' ) ; html . push ( ' <input type="button" class="inpButton" value="Подобрать рецепты >>>" onclick="ui_changeDiggerTab(1)" />' ) ; html . push ( '</div>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
this . refreshRecipesTab = function ( )
2023-01-10 16:29:32 +00:00
{ document . getElementById ( this . availIngrId ) . innerHTML = this . getIngrTable ( this . availi , 'Доступные компоненты' ) ; document . getElementById ( this . availRecipesId ) . innerHTML = this . getRecipeTable ( this . availr , true , 'Доступные рецепты' ) ; document . getElementById ( this . chosenIngrId ) . innerHTML = this . getIngrTable ( this . choseni , 'Использованные компоненты' ) ; document . getElementById ( this . chosenRecipesId ) . innerHTML = this . getRecipeTable ( this . chosenr , false , 'Выбранные рецепты' ) ; }
2022-06-06 21:30:34 +00:00
this . getRecipesTabHtml = function ( )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<div style="display: none;" id="' ) ; html . push ( this . recipesId ) ; html . push ( '">' ) ; html . push ( '<table class="proshka" style="width: 100%" style="table-layout: fixed;"><tr><td width="50%"><div style="overflow: auto;height:260px;background-color: white;" id="' ) ; html . push ( this . availIngrId ) ; html . push ( '">' ) ; html . push ( this . getIngrTable ( { } , 'Доступные компоненты' ) ) ; html . push ( '</div></td><td><div style="overflow: auto;height:260px;background-color: white;" id="' ) ; html . push ( this . availRecipesId ) ; html . push ( '">' ) ; html . push ( this . getRecipeTable ( [ ] , true , 'Доступные рецепты' ) ) ; html . push ( '</div></td></tr><tr><td width="50%"><div style="overflow: auto;height:260px;background-color: white;" id="' ) ; html . push ( this . chosenIngrId ) ; html . push ( '">' ) ; html . push ( this . getIngrTable ( { } , 'Использованные компоненты' ) ) ; html . push ( '</div></td><td><div style="overflow: auto;height:260px;background-color: white;" id="' ) ; html . push ( this . chosenRecipesId ) ; html . push ( '">' ) ; html . push ( this . getRecipeTable ( [ ] , false , 'Выбранные рецепты' ) ) ; html . push ( '</div></td></tr></table>' ) ; html . push ( ' <input type="button" class="inpButton" value="<<< Изменить содержание рюкзака" onclick="ui_changeDiggerTab(0)" />' ) ; html . push ( '</div>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
this . getIngrTable = function ( va , title )
{ var html = [ ] ; var count = 0 ; html . push ( '<table class="proshka">' ) ; if ( title != null )
{ html . push ( '<tr><th colspan="2">' ) ; html . push ( title ) ; html . push ( '</th></tr>' ) ; }
for ( var n in va )
2023-01-10 16:29:32 +00:00
{ html . push ( '<tr><td' ) ; var mater = this . findDiggerItem ( n ) ; html . push ( ' onmouseover="ui_showDiggerItemPopup(\'' ) ; html . push ( mater . Name ) ; html . push ( '\')" onmouseout="hidePopup2()">' ) ; html . push ( mater . Caption ) ; html . push ( '</td><td' ) ; if ( va [ n ] < 0 ) html . push ( ' style="color: red;"' ) ; html . push ( '>' ) ; html . push ( va [ n ] ) ; html . push ( 'шт.</td></tr>' ) ; count ++ ; }
2022-06-06 21:30:34 +00:00
if ( count == 0 )
2023-01-10 16:29:32 +00:00
{ html . push ( '<tr><td colspan="2" align="center">Нет ингредиентов или других компонентов.</td></tr>' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '</table>' ) ; return html . join ( '' ) ; }
this . getRecipeTable = function ( va , additive , title )
{ var html = [ ] ; var count = 0 ; html . push ( '<table class="proshka">' ) ; if ( title != null )
{ html . push ( '<tr><th' ) ; if ( additive != null )
{ html . push ( ' colspan="' ) ; html . push ( ( additive == false || additive == true || additive == '4basket' ) ? 3 : 2 ) ; html . push ( '"' ) ; }
html . push ( '>' ) ; html . push ( title ) ; html . push ( '</th></tr>' ) ; }
for ( var n in va )
{ html . push ( '<tr><td' ) ; var rd = va [ n ] ; var mater = rd . recipe . Item ; var place = this . findRecipePlace ( rd . recipe . PlaceName ) ; html . push ( ' onclick="ui_showItemInView(\'' ) ; html . push ( mater . Name ) ; html . push ( '\')" onmouseover="ui_showDiggerItemPopup(\'' ) ; html . push ( mater . Name ) ; html . push ( '\')" onmouseout="hidePopup2()">' ) ; if ( place == null ) html . push ( '<font color="red">bad place</font>' ) ; else html . push ( place . Caption ) ; html . push ( ': ' ) ; html . push ( mater . Caption ) ; html . push ( '</td>' ) ; if ( additive != null )
{ if ( additive == false || additive == true || additive == '4basket' )
2023-01-10 16:29:32 +00:00
{ html . push ( '<td' ) ; if ( va [ n ] < 0 ) html . push ( ' style="color: red;"' ) ; html . push ( '>' ) ; html . push ( ( rd . count < 65535 ) ? rd . count : '?' ) ; html . push ( 'шт.</td>' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '<td>' ) ; if ( additive == '2basket' )
2023-01-10 16:29:32 +00:00
{ html . push ( '<small><a title="Добавить в корзину" href="javascript:;" onclick="ui_addRecipeToBasket(\'' ) ; html . push ( rd . recipe . PlaceName ) ; html . push ( '\', \'' ) ; html . push ( rd . recipe . Item . Name ) ; html . push ( '\')">Добавить</a></small>' ) ; }
2022-06-06 21:30:34 +00:00
else if ( additive == '4basket' )
2023-01-10 16:29:32 +00:00
{ html . push ( '<small><a title="Убрать из корзины" href="javascript:;" onclick="ui_removeRecipeFromBasket(\'' ) ; html . push ( rd . recipe . PlaceName ) ; html . push ( '\', \'' ) ; html . push ( rd . recipe . Item . Name ) ; html . push ( '\')">Убрать</a></small>' ) ; }
2022-06-06 21:30:34 +00:00
else if ( additive == true )
2023-01-10 16:29:32 +00:00
{ html . push ( '<small><a href="javascript:;" onclick="ui_chooseRecipe(' ) ; html . push ( n ) ; html . push ( ', true)">Добавить</a></small>' ) ; }
2022-06-06 21:30:34 +00:00
else
2023-01-10 16:29:32 +00:00
{ html . push ( '<small><a href="javascript:;" onclick="ui_chooseRecipe(' ) ; html . push ( n ) ; html . push ( ', false)">Убрать</a></small>' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '</td>' ) ; }
html . push ( '</tr>' ) ; count ++ ; }
if ( count == 0 )
2023-01-10 16:29:32 +00:00
{ html . push ( '<tr><td align="center">Нет рецептов.</td></tr>' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '</table>' ) ; return html . join ( '' ) ; }
this . getSpliceArray = function ( a , index )
{ var r = [ ] ; for ( var i = 0 ; i < a . length ; i ++ )
{ if ( i != index )
{ r . push ( a [ i ] ) ; } }
return r ; }
this . chooseRecipe = function ( index , additive )
{ var from = additive ? this . availr : this . chosenr ; var to = additive ? this . chosenr : this . availr ; from [ index ] . count -- ; var recipe = from [ index ] . recipe ; var it = - 1 ; for ( var i = 0 ; i < to . length ; i ++ )
{ if ( to [ i ] . recipe == recipe )
{ it = i ; break ; } }
if ( it >= 0 )
{ to [ i ] . count ++ ; }
else
{ to . push ( { recipe : recipe , count : 1 } ) ; }
if ( from [ index ] . count == 0 )
{ from = this . getSpliceArray ( from , index ) ; if ( additive ) this . availr = from ; else this . chosenr = from ; }
from = additive ? this . availi : this . choseni ; to = additive ? this . choseni : this . availi ; for ( var i = 0 ; i < recipe . RecipeParts . length ; i ++ )
{ var rp = recipe . RecipeParts [ i ] ; if ( rp . Item in to )
{ to [ rp . Item ] += rp . Count ; }
else
{ to [ rp . Item ] = rp . Count ; }
if ( rp . Item in from )
{ from [ rp . Item ] -= rp . Count ; }
else
{ from [ rp . Item ] = - rp . Count ; }
if ( from [ rp . Item ] == 0 )
{ delete from [ rp . Item ] ; } }
this . refreshRecipesTab ( ) ; }
this . getAllRecipes1TabHtml = function ( )
{ var html = [ ] ; html . push ( '<div style="display: none; width: 100%;" id="' ) ; html . push ( this . allRecipes1Id ) ; html . push ( '"><table class="proshka" style="width: 100%"><tr><td width="220" valign="top">' ) ; var arp = this . data . RecipePlaces ; for ( var i = 0 ; i < arp . length ; i ++ )
{ var rp = arp [ i ] ; html . push ( '<div style="font-size: 11px;"><a href="javascript:;" onclick="ui_openRecipesOfPlace(' ) ; html . push ( i ) ; html . push ( ')">' ) ; html . push ( rp . Caption ) ; html . push ( '</a></div>' ) ; }
html . push ( '</td><td>' ) ; html . push ( '<div style="height: 440px;overflow: auto;" id="' )
2023-01-10 16:29:32 +00:00
html . push ( this . allRecipesView1Id ) ; html . push ( '"><font color="#a0a0a0">Выберите место с б о р а для просмотра.</font></div>' ) ; html . push ( '</td><td width="260">' ) ; html . push ( '<div style="width: 100%;" id="' )
html . push ( this . allRecipesItem1Id ) ; html . push ( '"><font color="#a0a0a0">Выберите предмет для просмотра.</font></div>' ) ; html . push ( '</td></tr></table></div>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
this . getItemTable = function ( va , title , options )
{ var html = [ ] ; var count = 0 ; html . push ( '<table class="proshka">' ) ; if ( title != null )
{ html . push ( '<tr><th' ) ; if ( options && options . action == '2basket' )
{ html . push ( ' colspan="2"' ) ; }
html . push ( title ) ; html . push ( '</th></tr>' ) ; }
for ( var n in va )
{ html . push ( '<tr><td' ) ; var mater = va [ n ] ; html . push ( ' onclick="ui_showItemInView(\'' ) ; html . push ( mater . Name ) ; html . push ( '\')" onmouseover="ui_showDiggerItemPopup(\'' ) ; html . push ( mater . Name ) ; html . push ( '\')" onmouseout="hidePopup2()">' ) ; html . push ( mater . Caption ) ; html . push ( '</td>' ) ; if ( options && options . action == '2basket' )
2023-01-10 16:29:32 +00:00
{ html . push ( '<td><small><a title="Добавить в корзину" href="javascript:;" onclick="ui_addItemToBasket(\'' ) ; html . push ( mater . Name ) ; html . push ( '\')">Добавить</a></small></td>' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '</tr>' ) ; count ++ ; }
if ( count == 0 )
2023-01-10 16:29:32 +00:00
{ html . push ( '<tr><td align="center">Нет предметов.</td></tr>' ) ; }
2022-06-06 21:30:34 +00:00
html . push ( '</table>' ) ; return html . join ( '' ) ; }
this . openRecipesOfPlace = function ( index )
{ var va = [ ] ; var place = this . data . RecipePlaces [ index ] ; var placeName = place . Name ; for ( var i in this . recipes )
{ var recipe = this . recipes [ i ] ; if ( recipe . PlaceName == placeName )
{ va . push ( { recipe : recipe , count : 0 } ) ; } }
var html = [ ] ; var title = [ place . Caption ] ; if ( place . Description . length > 0 )
{ title . push ( '<div style="font-size: 80%; font-weight: normal; border-top: 1px dashed #999; padding: 2px; margin: 0;">' ) ; title . push ( place . Description . join ( '<br />' ) ) ; title . push ( '</div>' ) ; }
html . push ( this . getRecipeTable ( va , '2basket' , title . join ( '' ) ) ) ; document . getElementById ( this . allRecipesView1Id ) . innerHTML = html . join ( '' ) ; }
this . getAllRecipes2TabHtml = function ( )
{ var html = [ ] ; html . push ( '<div style="display: none; width: 100%;" id="' ) ; html . push ( this . allRecipes2Id ) ; html . push ( '"><table class="proshka" style="width: 100%"><tr><td width="220">' ) ; var arp = this . data . Categories ; for ( var i = 0 ; i < arp . length ; i ++ )
{ var rp = arp [ i ] ; if ( ! rp . hasRecipes ) continue ; html . push ( '<div style="font-size: 11px;"><a href="javascript:;" onclick="ui_openRecipesOfCategory(' ) ; html . push ( i ) ; html . push ( ')">' ) ; html . push ( rp . Caption ) ; html . push ( '</a></div>' ) ; }
html . push ( '</td><td>' ) ; html . push ( '<div style="height: 440px;overflow: auto;" id="' )
2023-01-10 16:29:32 +00:00
html . push ( this . allRecipesView2Id ) ; html . push ( '"><font color="#a0a0a0">Выберите категорию для просмотра.</font></div>' ) ; html . push ( '</td><td width="260">' ) ; html . push ( '<div style="width: 100%;" id="' )
html . push ( this . allRecipesItem2Id ) ; html . push ( '"><font color="#a0a0a0">Выберите предмет для просмотра.</font></div>' ) ; html . push ( '</td></tr></table></div>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
this . openRecipesOfCategory = function ( index )
{ var va = [ ] ; var cat = this . data . Categories [ index ] ; for ( var i in this . items )
{ var itm = this . items [ i ] ; if ( itm . Category == cat && itm . Recipes . length > 0 )
{ va . push ( itm ) ; } }
var html = [ ] ; var title = [ cat . Caption ] ; if ( cat . Description . length > 0 )
{ title . push ( '<div style="font-size: 80%; font-weight: notmal; border-top: 1px dashed #999; padding: 2px; margin: 0;">' ) ; title . push ( cat . Description . join ( cat . NewLineToBR ? '<br />' : '' ) ) ; title . push ( '</div>' ) ; }
html . push ( this . getItemTable ( va , title . join ( '' ) , { id : '' , action : '2basket' } ) ) ; document . getElementById ( this . allRecipesView2Id ) . innerHTML = html . join ( '' ) ; }
this . getAllItemsTabHtml = function ( )
{ var html = [ ] ; html . push ( '<div style="display: none; width: 100%;" id="' ) ; html . push ( this . allItemsId ) ; html . push ( '"><table class="proshka" style="width: 100%"><tr><td width="220">' ) ; var arp = this . data . Categories ; for ( var i = 0 ; i < arp . length ; i ++ )
{ var rp = arp [ i ] ; html . push ( '<div style="font-size: 11px;"><a href="javascript:;" onclick="ui_openItemsOfCategory(' ) ; html . push ( i ) ; html . push ( ')">' ) ; html . push ( rp . Caption ) ; html . push ( '</a></div>' ) ; }
html . push ( '</td><td>' ) ; html . push ( '<div style="height: 440px;overflow: auto;" id="' )
2023-01-10 16:29:32 +00:00
html . push ( this . allItemsViewId ) ; html . push ( '"><font color="#a0a0a0">Выберите категорию для просмотра.</font></div>' ) ; html . push ( '</td><td width="260">' ) ; html . push ( '<div style="width: 100%;" id="' )
html . push ( this . allItemsItemId ) ; html . push ( '"><font color="#a0a0a0">Выберите предмет для просмотра.</font></div>' ) ; html . push ( '</td></tr></table></div>' ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
this . openItemsOfCategory = function ( index )
{ var cat = this . data . Categories [ index ] ; var html = [ ] ; var title = [ '<div style="width: 100%;">' , cat . Caption , '</div>' ] ; if ( cat . Description . length > 0 )
{ title . push ( '<div style="font-size: 80%; font-weight: normal; border-top: 1px dashed #999; padding: 2px; margin: 0; width: 100%;">' ) ; title . push ( cat . Description . join ( cat . NewLineToBR ? '<br />' : '' ) ) ; title . push ( '</div>' ) ; }
html . push ( this . getItemTable ( cat . Items , title . join ( '' ) , { id : '' , action : '2basket' } ) ) ; document . getElementById ( this . allItemsViewId ) . innerHTML = html . join ( '' ) ; }
this . addRecipeToBasket _Core = function ( recipe , count )
{ var it = - 1 ; var total = count ; for ( var i = 0 ; i < this . basket . length ; i ++ )
{ if ( this . basket [ i ] . recipe == recipe )
{ it = i ; break ; } }
if ( it >= 0 )
{ total += this . basket [ it ] . count ; this . basket [ it ] . count = total ; }
else
{ this . basket . push ( { recipe : recipe , count : count } ) ; it = this . basket . length - 1 ; }
if ( total == 0 )
{ this . basket = this . getSpliceArray ( this . basket , it ) ; } }
this . getBasketSummary = function ( )
{ var html = [ ] ; var ingr = { } ; var price = 0 ; for ( var i in this . basket )
{ var def = this . basket [ i ] ; var rps = def . recipe . RecipeParts ; var count = def . count ; if ( def . recipe . Price > 0 )
{ price += def . recipe . Price * count ; }
for ( var j in rps )
{ var rp = rps [ j ] ; var idef = { name : rp . Item , item : this . items [ rp . Item ] , count : count * rp . Count } ; if ( idef . name in ingr )
{ ingr [ idef . name ] . count += idef . count ; }
else
{ ingr [ idef . name ] = idef ; } } }
2023-01-10 16:29:32 +00:00
html . push ( '<table class="proshka">' ) ; html . push ( '<tr><th>Компонент</th><th>Количество</th></tr>' ) ; var empty = true ; if ( price > 0 )
{ html . push ( '<tr><td scope="row">Стоимость сборки' ) ; html . push ( '</td><td style="text-align: center;">' ) ; html . push ( price ) ; html . push ( ' кр.</td></tr>' ) ; empty = false ; }
2022-06-06 21:30:34 +00:00
for ( var i in ingr )
2023-01-10 16:29:32 +00:00
{ var idef = ingr [ i ] ; html . push ( '<tr><td scope="row">' ) ; html . push ( idef . item . Caption ) ; html . push ( '</td><td style="text-align: center;">' ) ; html . push ( idef . count ) ; html . push ( ' шт.</td></tr>' ) ; empty = false ; }
2022-06-06 21:30:34 +00:00
if ( empty )
2023-01-10 16:29:32 +00:00
{ html . push ( '<tr><td colspan="2" style="text-align: center; color: #a0a0a0;">' ) ; html . push ( 'Ничего не требуется.' ) ; html . push ( '</td></tr>' ) ; empty = false ; }
2022-06-06 21:30:34 +00:00
html . push ( '</table>' ) ; return html . join ( '' ) ; }
this . refreshBasketTab = function ( )
2023-01-10 16:29:32 +00:00
{ document . getElementById ( this . basketItemsViewId ) . innerHTML = this . getRecipeTable ( this . basket , '4basket' , 'Корзина' ) ; document . getElementById ( this . basketSummaryId ) . innerHTML = this . getBasketSummary ( ) ; }
2022-06-06 21:30:34 +00:00
this . addRecipeToBasket = function ( placeName , itemName )
{ var itm = this . items [ itemName ] ; if ( ! ( 'Recipes' in itm ) ) return ; for ( var rn in itm . Recipes )
{ var recipe = itm . Recipes [ rn ] ; if ( recipe . PlaceName == placeName )
{ this . addRecipeToBasket _Core ( recipe , 1 ) ; break ; } }
this . refreshBasketTab ( ) ; }
this . removeRecipeFromBasket = function ( placeName , itemName )
{ var itm = this . items [ itemName ] ; if ( ! ( 'Recipes' in itm ) ) return ; for ( var rn in itm . Recipes )
{ var recipe = itm . Recipes [ rn ] ; if ( recipe . PlaceName == placeName )
{ this . addRecipeToBasket _Core ( recipe , - 1 ) ; break ; } }
this . refreshBasketTab ( ) ; }
this . addItemToBasket = function ( itemName )
{ var itm = this . items [ itemName ] ; if ( ! ( 'Recipes' in itm ) ) return ; for ( var rn in itm . Recipes )
{ var recipe = itm . Recipes [ rn ] ; this . addRecipeToBasket _Core ( recipe , 1 ) ; }
this . refreshBasketTab ( ) ; }
this . getBasketTabHtml = function ( )
{ var html = [ ] ; html . push ( '<div style="display: none; width: 100%;" id="' ) ; html . push ( this . basketId ) ; html . push ( '"><table class="proshka" style="width: 100%"><tr>' ) ; html . push ( '<td>' ) ; html . push ( '<div id="' )
2023-01-10 16:29:32 +00:00
html . push ( this . basketItemsViewId ) ; html . push ( '">' ) ; html . push ( this . getRecipeTable ( this . basket , '4basket' , 'Корзина' ) ) ; html . push ( '</div>' ) ; html . push ( '</td></tr>' ) ; html . push ( '<tr>' ) ; html . push ( '<td>' ) ; html . push ( '<div id="' )
2022-06-06 21:30:34 +00:00
html . push ( this . basketSummaryId ) ; html . push ( '">' ) ; html . push ( this . getBasketSummary ( ) ) ; html . push ( '</div>' ) ; html . push ( '</td></tr></table></div>' ) ; return html . join ( '' ) ; }
this . getChapterHtml = function ( )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<h5>Конструктор диггера</h5>' ) ; html . push ( '<div id="' ) ; html . push ( this . tabsId ) ; html . push ( '">' ) ; html . push ( this . getDiggerTabsHtml ( ) ) ; html . push ( '</div>' ) ; html . push ( '<div id="' ) ; html . push ( this . divId ) ; html . push ( '">' ) ; html . push ( this . getKnapsackTabHtml ( ) ) ; html . push ( this . getRecipesTabHtml ( ) ) ; html . push ( this . getAllRecipes1TabHtml ( ) ) ; html . push ( this . getAllRecipes2TabHtml ( ) ) ; html . push ( this . getAllItemsTabHtml ( ) ) ; html . push ( this . getBasketTabHtml ( ) ) ; html . push ( '</div>' ) ; return html . join ( '' ) ; } }
2022-06-06 21:30:34 +00:00
function Underground ( )
2023-01-10 16:29:32 +00:00
{ this . offline = false ; this . titleSuffix = ' - ' + document . title ; this . knownChapters = { } ; this . welcomeDungeon = new WelcomeDungeon ( ) ; this . activeDungeon = this . welcomeDungeon ; this . diggerConstructor = new DiggerConst ( ) ; this . resources = [ this . diggerConstructor ] ; this . externals = [ new ExternalResource ( 'https://tarmans.kombats.ru/forum/index.php?showtopic=9159' , 'Букмекерская контора Хранителей Азарта Армады' , [ 'Существует множество разнообразных видов прогноза - от прогноза погоды до систем расчета поведения групп людей в определенных ситуациях. Н о , пожалуй, самой популярной темой для прогнозирования всегда был спорт и все, что с ним связано. Следует признать, что умением прогнозировать правильно обладают далеко не все, но те, кто в этом силен, легко могут существенно увеличить свой капитал. А помогут им в этом Хранители Азарта Армады - они знают о прогнозировании и о спорте все.' , 'Букмекерская контора Армады предлагает Вам возможность сделать ставки на все самые важные и интересные события в мире спорта - хоккей, теннис, футбол и многое другое. Играйте и выигрывай!' ] , true ) , new ExternalResource ( 'https://demonscity.combats.ru/forum.pl?id=1172503495&n=sales' , 'Гильдии Тёмных Земель' , [ 'В чужой монастырь с о своим уставом не суйся. Так как заработать на Территории Тьмы, заработать кредиты, а не очередную травму? Маги, наемники, лекари и торговцы, специально для ващего сообщества были созданы Гильдии Темных Земель.' , 'Что же вам дает вступление кроме ограничений? Поддержку Армады, слаженность команды и помощь в поиске клиентов. Торгуйте, лечите, колдуйте, калечьте по высоким ценам, демпингу не место во Тьме.' ] , true ) ] ; this . loadedDungeons = { } ; this . loadedScripts = { } ; this . objects = { } ; this . mobs = { } ; this . imagesToBePreloaded = [ ] ; this . preloader = null ; this . decoratedOpacityStyle = 'opacity: 0.3; -moz-opacity: 0.3; KhtmlOpacity: 0.3;filter:alpha(opacity = 30, style = 4);' ; this . activeChapterHeader = null ; this . pngCls = ( msie && ! msie7 ) ? 'objectImage' : '' ; this . pngClsAttr = ( msie && ! msie7 ) ? ' class="objectImage"' : '' ; this . settings = { cellWidth : 40 , cellHeight : 40 , cellLocationShift : 0 , cellSizeShift : msie ? ( msie7 ? 4 : 0 ) : 4 , monsterPositions : [ 4 , 21 , 12 ] , jsBase : '/head/?r=' , mobImagesUrl : '/i/cache/?r=ugmob/' , objectImagesUrl : '/i/cache/?r=ugobj/' , blankImageUrl : '/i/cache/?r=blank.gif' , cellMarkImageUrl : '/i/cache/?r=ugetc/cellmark.gif' , compassLocation : '/i/cache/?r=ugetc/compass/' , loadingImageUrl : '/i/cache/?r=loading.gif' , look : 0 , rotation : 0 , zoom : 100 , highlightObjectImage : 'entrancepoint_green1.gif' , mapsNavDisplay : 'none' , lookTexts : [ '' , 'Север' , 'Восток' , 'Юг' , 'Запад' ] , compass : [ '' , 'compas_N' , 'compas_O' , 'compas_S' , 'compas_W' ] , levelColors : [ 'Red' , 'Green' , 'SpringGreen' , 'Gold' , 'Magenta' , 'RoyalBlue' , 'Yellow' , 'GreenYellow' , 'DeepPink' , 'DeepSkyBlue' , 'Orange' , 'DarkTurquoise' , 'LawnGreen' , 'Violet' , 'DodgerBlue' ] , chapterHeaderPlace : '/i/cache/?r=ugetc/' , chapterHeaders : { welcome : { name : 'welcome' , tw : 286 , th : 124 , rw : 289 , rh : 180 } , novice : { name : 'novice' , tw : 261 , th : 72 , rw : 367 , rh : 180 } , capital : { name : 'capital' , tw : 278 , th : 111 , rw : 299 , rh : 180 } , angel : { name : 'angels' , tw : 165 , th : 79 , rw : 284 , rh : 180 } , sand : { name : 'sand' , tw : 179 , th : 100 , rw : 277 , rh : 180 } , emerald : { name : 'emeralds' , tw : 287 , th : 118 , rw : 312 , rh : 180 } , demons : { name : ' d
2022-06-06 21:30:34 +00:00
{ var hash = '' ; hash += this . activeDungeon . getHash ( ) ; window . location . hash = hash ; document . title = this . activeDungeon . Caption + this . titleSuffix ; }
this . renderChaptersCore = function ( )
{ this . imagesToBePreloaded = [ ] ; if ( ! ( this . activeDungeon . Name in this . knownChapters ) )
{ this . addChapter ( this . activeDungeon . Name , this . getActiveChapterHtml ( ) ) ; this . activeDungeon . afterConstruction ( ) ; }
document . getElementById ( 'nav' ) . innerHTML = this . getUndergroundTabsHtml ( ) ; for ( var i in this . knownChapters )
{ var v = ( this . knownChapters [ i ] == this . activeDungeon . Name ) ? '' : 'none' ; document . getElementById ( 'chap_' + this . knownChapters [ i ] ) . style . display = v ; }
this . setHash ( ) ; this . stopWait ( ) ; this . changeChapterHeader ( ) ; }
var headerFxBegin = function ( )
{ if ( msie ) document . getElementById ( 'header' ) . filters [ 0 ] . apply ( ) ; }
var headerFxEnd = function ( )
{ if ( msie ) document . getElementById ( 'header' ) . filters [ 0 ] . play ( ) ; }
var setImgProps = function ( img , src , w , h , m )
{ if ( m == null ) m = 'scale' ; img . width = w ; img . height = h ; if ( msie && ! msie7 )
{ img . runtimeStyle . filter = [ 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' , src , '\',sizingMethod=\'' , m , '\')' ] . join ( '' ) ; }
else
{ img . src = src ; } }
this . applyChapterHeader = function ( )
{ var d = this . activeChapterHeader ; d . loaded = true ; var htitle = document . getElementById ( 'header_dungeontitle' ) ; var hrightpart = document . getElementById ( 'header_rightpart' ) ; headerFxBegin ( ) ; setImgProps ( htitle , d . imagesToBePreloaded [ 0 ] , d . tw , d . th , 'image' ) ; setImgProps ( hrightpart , d . imagesToBePreloaded [ 1 ] , d . rw , d . rh , 'image' ) ; headerFxEnd ( ) ; }
this . changeChapterHeader = function ( )
{ var d = ( this . activeDungeon . Name in this . settings . chapterHeaders ) ? this . settings . chapterHeaders [ this . activeDungeon . Name ] : this . settings . chapterHeaders . welcome ; if ( d == this . activeChapterHeader ) return ; this . activeChapterHeader = d ; if ( d . loaded )
{ this . applyChapterHeader ( ) ; }
else
{ d . imagesToBePreloaded = [ [ this . settings . chapterHeaderPlace , d . name , '/' , 'header-dungeontitle.png' ] . join ( '' ) , [ this . settings . chapterHeaderPlace , d . name , '/' , 'header-rightpart.png' ] . join ( '' ) ] ; d . preloader = new ImagePreloader ( d . imagesToBePreloaded , function ( ) { underground . applyChapterHeader ( ) ; } ) ; } }
this . renderChapters = function ( )
{ hideMenu ( ) ; hidePopup2 ( ) ; this . startWait ( ) ; this . activeDungeon . needData ( function ( ) { underground . renderChapters2 ( ) ; } ) ; }
this . renderChapters2 = function ( )
{ if ( msie && ! msie7 && this . imagesToBePreloaded . length > 0 )
{ this . preloader = new ImagePreloader ( this . imagesToBePreloaded , function ( ) { underground . renderChaptersCore ( ) ; } ) ; }
else
{ this . renderChaptersCore ( ) ; } }
this . addChapter = function ( name , html )
{ this . knownChapters [ name ] = name ; var r = [ ] ; r . push ( '<div id="chap_' ) ; r . push ( name ) ; r . push ( '">' ) ; r . push ( html ) ; r . push ( '</div>' ) ; html = r . join ( '' ) ; var dsurface = document . getElementById ( 'dsurface' ) ; if ( dsurface . insertAdjacentHTML )
{ dsurface . insertAdjacentHTML ( 'beforeEnd' , html ) ; }
else
{ dsurface . innerHTML = dsurface . innerHTML + html ; } }
this . getUndergroundTabsHtml = function ( )
2023-01-10 16:29:32 +00:00
{ var html = [ ] ; html . push ( '<li><a href="javascript:;" onclick="underground.chooseDungeon()" title="Нажмите здесь, чтобы выбрать другое подземелье">' ) ; html . push ( 'Выбрать подземелье' ) ; html . push ( '</a></li>' ) ; html . push ( '<li class="activeLink"><a href="javascript:;" onclick="underground.hideDungeonPages()">' ) ; html . push ( this . activeDungeon . Caption ) ; html . push ( '</a></li>' ) ; html . push ( this . activeDungeon . getUndergroundTabsHtml ( ) ) ; return html . join ( '' ) ; }
2022-06-06 21:30:34 +00:00
this . chooseDungeon = function ( )
{ this . activeDungeon = this . welcomeDungeon ; this . renderChapters ( ) ; }
this . openDungeon = function ( chapterIndex )
{ this . activeDungeon = this . knownDungeons [ chapterIndex ] ; this . settings . rotation = this . activeDungeon . rotation ; this . renderChapters ( ) ; }
this . openResource = function ( chapterIndex )
{ this . activeDungeon = this . resources [ chapterIndex ] ; this . renderChapters ( ) ; }
this . hideDungeonPages = function ( )
{ hidePopup2 ( ) ; this . activeDungeon . hidePages ( ) ; }
this . getActiveChapterHtml = function ( )
{ return this . activeDungeon . getChapterHtml ( ) ; }
this . renderingRequired = function ( )
{ this . handleHash ( ) ; this . initializeSurface ( ) ; this . renderChapters ( ) ; }
var initialized = false ; this . domReadyCore = function ( )
{ initialized = true ; if ( 'knownDungeons' in this )
{ this . renderingRequired ( ) ; } }
this . domReady = this . domReadyCore ; this . knowAbout = function ( collectedData )
{ this . knownDungeons = collectedData . KnownDungeons ; this . extendKnownDungeons ( ) ; if ( initialized )
{ this . renderingRequired ( ) ; } }
this . handleHash = function ( hash )
{ if ( hash == null ) hash = window . location . hash ; var suffix = '' ; if ( hash . length > 0 && hash . charAt ( 0 ) == '#' ) hash = hash . substr ( 1 ) ; var pti = hash . indexOf ( '.' ) ; if ( pti >= 0 )
{ suffix = hash . substr ( pti + 1 ) ; hash = hash . substr ( 0 , pti ) ; }
if ( hash == '' ) return ; for ( var i in this . knownDungeons )
{ var d = this . knownDungeons [ i ] ; if ( d . Name == hash )
{ this . activeDungeon = d ; if ( suffix != '' ) d . handleHash ( suffix ) ; return ; } }
for ( var i in this . resources )
{ var d = this . resources [ i ] ; if ( d . Name == hash )
{ this . activeDungeon = d ; if ( suffix != '' ) d . handleHash ( suffix ) ; return ; } } }
this . extendKnownDungeons = function ( )
{ for ( var i in this . knownDungeons )
{ this . knownDungeons [ i ] . index = i ; KnownDungeonEntender ( this . knownDungeons [ i ] ) ; } }
this . initializeSurface = function ( )
{ document . getElementById ( 'dsurface' ) . innerHTML = '' ; }
this . addDungeon = function ( dungeon )
{ LoadedDungeonEntender ( dungeon ) ; this . loadedDungeons [ dungeon . Name ] = dungeon ; }
this . changeFloor = function ( floorIndex )
{ this . activeDungeon . changeFloor ( floorIndex ) ; this . setHash ( ) ; }
this . checkStatsMob = function ( mobName , mobLevel )
{ this . activeDungeon . checkStatsMob ( mobName , mobLevel ) ; }
this . getMobInfoHtml = function ( mob , mi , count )
{ var html = '' ; var reward = mi . Reward ; if ( reward == 0 )
{ for ( var i = 0 ; i < mob . Instances . length ; i ++ )
{ var ami = mob . Instances [ i ] ; if ( ami . Level == mi . Level && ami . Reward > 0 )
{ reward = ami . Reward ; break ; } } }
html += '<div class="hintviewcaption"><nobr>' ; if ( mi . Align != '0' )
2023-03-31 18:30:14 +00:00
{ html += '<img border="0" width="12" height="15" src="//img.new-combats.tech/i/align' + mi . Align + '.gif" />' ; }
2023-01-10 16:29:32 +00:00
html += '<b>' + mob . Caption + '</b>' ; html += ' [' + mi . Level + ']' ; if ( count != null ) html += ', ' + count + ' шт.' ; if ( reward > 0 ) html += ', x' + reward + '</u> ед. награды' ; if ( mi . HitPoints > 0 ) html += ', <u>' + mi . HitPoints + '</u>HP' ; html += '</nobr></div>' ; html += '<div style="width: 100%;"><div style="float: left;">' ; if ( mi . HitPoints > 0 )
2023-03-31 18:30:14 +00:00
{ html += '<div style="position: relative; width: 60px; height: 9px; background: green url(//img.new-combats.tech/i/misc/bk_life_green.gif) repeat; padding: 0; margin: 0; overflow: hidden;">' ; html += '<nobr style="position: absolute; left: 5px; top: 0; padding: 0; margin: 0; height: 9px; line-height: 1; font-family: Verdana,Arial,Helvetica,Tahoma,sans-serif; font-size: 9px; font-weight: bold; color: #fff;">' + mi . HitPoints + '</nobr>' ; html += '</div>' ; }
2022-06-06 21:30:34 +00:00
html += '<img' + underground . pngClsAttr + ' border="0" width="60" height="110" src="' + mob . ImageUrl + '" lowsrc="' + underground . settings . loadingImageUrl + '" />' ; html += '</div>' ; html += '<div style="margin-left: 8px; padding: 4px;">' ; if ( count != null )
2023-01-10 16:29:32 +00:00
{ html += 'В количестве <b>' + count + '</b> шт.<br /><br />' ; }
if ( mi . Strength != 0 ) html += 'Сила: ' + mi . Strength + '<br />' ; if ( mi . Dexterity != 0 ) html += 'Ловкость: ' + mi . Dexterity + '<br />' ; if ( mi . Intuition != 0 ) html += 'Интуиция: ' + mi . Intuition + '<br />' ; if ( mi . Endurance != 0 ) html += 'Выносливость: ' + mi . Endurance + '<br />' ; if ( mi . Intellect != 0 ) html += 'Интеллект: ' + mi . Intellect + '<br />' ; if ( mi . Wisdom != 0 ) html += 'Мудрость: ' + mi . Wisdom + '<br />' ; html += '</div>' ; if ( mi . Move ) html += '<div style="color: red">Монстр перемещается, е г о расположение заранее неизвестно.</div>' ; html += '</div>' ; var desc = mi . Description ; if ( desc . length == 0 ) desc = mob . Description ; if ( desc . length > 0 )
2022-06-06 21:30:34 +00:00
{ html += '<div style="border-top: 1px dashed gray; padding: 2px;">' + desc . join ( '<br />' ) + '</div>' ; }
return html ; }
this . getCellObjectInfoHtml = function ( o , i )
{ var caption = i . Caption ; if ( caption == '' ) caption = o . Caption ; var desc = i . Description ; if ( desc . length == 0 ) desc = o . Description ; var html = '' ; html += '<div class="hintviewcaption"><nobr>' ; html += caption ; html += '</nobr></div>' ; html += '<div style="width: 100%;"><div style="float: left;">' ; html += '<img' + underground . pngClsAttr + ' border="0" width="' + o . BW + '" height="' + o . BH + '" src="' + o . ImageUrl + '" lowsrc="' + underground . settings . loadingImageUrl + '" />' ; html += '</div>' ; html += '<div style="margin-left: 8px; padding: 4px;">' ; if ( desc . length > 0 )
{ html += desc . join ( '<br />' ) ; }
html += '</div></div>' ; return html ; }
this . findObjectAndInstance = function ( objectName , instanceName )
{ var obj = this . objects [ objectName ] ; var instance = obj . Instances [ 0 ] ; for ( var i in obj . Instances )
{ if ( obj . Instances [ i ] . Name == instanceName )
{ instance = obj . Instances [ i ] ; break ; } }
return { obj : obj , instance : instance } ; }
this . findMobAndInstance = function ( name , level , align , tag )
{ var mob = this . mobs [ name ] ; var mi = mob . Instances [ 0 ] ; for ( var i in mob . Instances )
{ cmi = mob . Instances [ i ] ; if ( cmi . Level == level && cmi . Align == align && cmi . Tag == tag )
{ mi = cmi ; break ; } }
return { mob : mob , mi : mi } ; }
this . showMobRefPopup = function ( name , level , align , tag , count )
{ var midata = this . findMobAndInstance ( name , level , align , tag ) ; var html = [ ] ; var mobInfo = document . getElementById ( 'mobInfo' ) ; html . push ( this . getMobInfoHtml ( midata . mob , midata . mi , count ) ) ; html = '<div style="width: 400px;">' + html + '</div>' ; cursorX += 40 ; cursorY += 16 ; showPopup ( html ) ; }
this . showObjRefPopup = function ( objectName , instanceName )
{ var oidata = this . findObjectAndInstance ( objectName , instanceName ) ; var html = this . getCellObjectInfoHtml ( oidata . obj , oidata . instance ) ; html = '<div style="width: 400px;">' + html + '</div>' ; showPopup ( html ) ; }
this . getMobImage = function ( mob )
{ var r = ( mob . SmImg != '' ) ? mob . SmImg : mob . Name ; return this . settings . mobImagesUrl + r + '.gif' ; }
this . getMobInstanceImage = function ( mob , mobInstance )
{ var r = ( mobInstance . Image != '' ) ? ( this . settings . mobImagesUrl + mobInstance . Image + '.gif' ) : this . getMobImage ( mob ) ; return r ; }
this . getCellObjectImage = function ( obj )
{ var r = ( obj . SmImg != '' ) ? obj . SmImg : obj . Name ; return this . settings . objectImagesUrl + r + '.gif' ; }
this . getCellObjectInstanceImage = function ( obj , objInstance )
{ var r = this . getCellObjectImage ( obj ) ; return r ; }
this . preloadMobImage = function ( mob )
{ this . imagesToBePreloaded . push ( this . getMobImage ( mob ) ) ; for ( var mobit in mob . Instances )
{ this . imagesToBePreloaded . push ( this . getMobInstanceImage ( mob , mob . Instances [ mobit ] ) ) ; } }
this . preloadCellObjectImage = function ( obj )
{ this . imagesToBePreloaded . push ( this . getCellObjectImage ( obj ) ) ; for ( var oin in obj . Instances )
{ this . imagesToBePreloaded . push ( this . getCellObjectInstanceImage ( obj , obj . Instances [ oin ] ) ) ; } }
this . installMobs = function ( mobsData )
{ for ( var i in mobsData . Objects )
{ var obj = mobsData . Objects [ i ] ; this . objects [ obj . Name ] = obj ; if ( msie && ! msie7 ) this . preloadCellObjectImage ( obj ) ; }
for ( var i in mobsData . Mobs )
{ var mob = mobsData . Mobs [ i ] ; this . mobs [ mob . Name ] = mob ; if ( msie && ! msie7 ) this . preloadMobImage ( mob ) ; } }
this . loadCostructorData = function ( d )
{ this . diggerConstructor . loadCostructorData ( d ) ; }
this . showWelcomePopup = function ( d )
{ if ( d . Description . length == 0 ) return ; this . welcomeDungeon . showDescription ( d . Description . join ( d . NewLineToBR ? '<br />' : '' ) ) ; }
this . showDungeonPopup = function ( dungeonIndex )
{ this . showWelcomePopup ( underground . knownDungeons [ dungeonIndex ] ) ; }
this . showResourcePopup = function ( dungeonIndex )
{ this . showWelcomePopup ( underground . resources [ dungeonIndex ] ) ; }
this . showExternalPopup = function ( dungeonIndex )
{ this . showWelcomePopup ( underground . externals [ dungeonIndex ] ) ; }
this . getCellContentMenuHtml = function ( cellDivId , x , y )
{ return this . activeDungeon . getCellContentMenuHtml ( cellDivId , x , y ) ; }
this . showCellContextMenu = function ( cellDivId , x , y )
{ showMenu ( this . getCellContentMenuHtml ( cellDivId , x , y ) ) ; }
this . hotSpot = function ( cellDivId )
{ this . activeDungeon . hotSpot ( cellDivId ) ; }
this . hideHotSpots = function ( )
{ this . activeDungeon . hideHotSpots ( ) ; }
this . zoomChanged = function ( )
{ var proposedZoom = this . activeDungeon . getProposedZoom ( ) ; if ( proposedZoom == underground . settings . zoom ) return ; underground . settings . zoom = proposedZoom ; for ( var i in this . knownDungeons )
{ this . knownDungeons [ i ] . applyZoom ( proposedZoom ) ; } }
this . getIPoint = function ( s )
{ var x = s . charCodeAt ( 0 ) - 'A' . charCodeAt ( 0 ) ; var y = parseInt ( s . substr ( 1 ) ) - 1 ; return { x : x , y : y } ; }
this . startWait = function ( )
{ document . getElementById ( 'header_progress' ) . style . visibility = '' ; }
this . stopWait = function ( )
{ document . getElementById ( 'header_progress' ) . style . visibility = 'hidden' ; } }
function createAjaxRequest ( f )
{ var req = false ; try
{ if ( typeof XMLHttpRequest != 'undefined' )
{ req = new XMLHttpRequest ( ) ; }
if ( ! req )
try
{ req = new ActiveXObject ( "Msxml2.XMLHTTP" ) ; }
catch ( e )
{ try
{ req = new ActiveXObject ( "Microsoft.XMLHTTP" ) ; }
catch ( e )
{ req = false ; } }
if ( ! req )
{ alert ( "Kill yourself or change the browser..." ) ; return '' ; } }
catch ( e )
{ alert ( "Request error:\n" + e . message ) ; return '' ; }
if ( f != null )
{ req . onreadystatechange = function ( )
{ if ( req . readyState == 4 )
{ f ( req . responseText ) ; } } }
return req ; }
function loadXMLDoc2 ( url , f )
{ if ( underground . offline ) alert ( 'bad call from ' + loadXMLDoc2 . caller ) ; var req = createAjaxRequest ( f ) ; if ( req )
{ req . open ( "GET" , url , ( f != null ) ) ; req . send ( null ) ; return ( f == null ) ? req . responseText : '' ; }
return false ; }
function loadScript ( url , f )
{ if ( underground . offline ) alert ( 'bad call from ' + loadScript . caller ) ; var f2 = ( f != null ) ? ( function ( doc ) { eval ( doc ) ; f ( ) ; } ) : null ; var script = loadXMLDoc2 ( url , f2 ) ; if ( f == null )
{ if ( script == '' )
2023-01-10 16:29:32 +00:00
{ alert ( 'Ошибка загрузки скрипта ' + url ) ; return ; }
2022-06-06 21:30:34 +00:00
eval ( script ) ; } }
function getMobPoint ( index , totalCount )
{ var pt ; var MonsterPositions = underground . settings . monsterPositions ; switch ( totalCount )
{ case 1 : pt = { x : underground . settings . cellWidth / 2 - 8 , y : underground . settings . cellHeight / 2 - 13 } ; break ; case 2 : pt = { x : MonsterPositions [ index ] , y : underground . settings . cellHeight / 2 - 13 } ; break ; case 3 : pt = { x : MonsterPositions [ index ] , y : ( index < 2 ) ? 0 : underground . settings . cellHeight / 2 - 8 } ; break ; default : pt = { x : MonsterPositions [ ( index < 2 ) ? index : index - 2 ] , y : ( index < 2 ) ? - 3 : underground . settings . cellHeight / 2 - ( ( index == 4 ) ? 10 : 4 ) } ; break ; }
return pt ; }
function getStatisticsCheckId ( checkId , mobName , mobLevel )
{ return [ checkId , mobName , mobLevel ] . join ( '_' ) ; }
function getStatisticsHtml ( legend , stats , checkId )
{ var minlevel = 21 ; var maxlevel = 0 ; var mobCount = 0 ; var checks = ( checkId != '' )
for ( var mobn in stats )
{ for ( var l in stats [ mobn ] )
{ var level = parseInt ( l ) ; if ( minlevel > level ) minlevel = level ; if ( maxlevel < level ) maxlevel = level ; }
mobCount ++ ; }
if ( mobCount == 0 )
{ return '' ; }
var html = [ '<center><fieldset><legend>' , legend , '</legend>' ] ; if ( ! checks )
{ html . push ( '<br /><div class="htext" name="htext" width="100%;">' ) ; }
2023-01-10 16:29:32 +00:00
html . push ( '<table class="hintview"><tr>' ) ; if ( checks ) html . push ( '<th><!--checkboxes here--></th>' ) ; html . push ( '<th colspan="2" align="left">Название</th>' ) ; for ( var level = minlevel ; level <= maxlevel ; level ++ )
2022-06-06 21:30:34 +00:00
{ var color = underground . settings . levelColors [ level ] ; html = html . concat ( [ '<th style="padding-left: 8px; padding-right: 8px; text-align: center; background-color: ' , color , ';"> [' , level , '] </th>' ] ) ; }
2023-01-10 16:29:32 +00:00
html . push ( '<th style="padding-left: 8px; padding-right: 8px; text-align: center;">В с е г о </th></tr>' ) ; for ( var mobn in stats )
2022-06-06 21:30:34 +00:00
{ var mob = underground . mobs [ mobn ] ; var count = 0 ; var gid = getStatisticsCheckId ( checkId , mob . Name , 0 ) ; html . push ( '<tr>' ) ; if ( checks )
{ html = html . concat ( [ '<td valign="center"><input type="checkbox" style="width:10px;height:10px;margin:0;padding:0;" id="' , gid , '" onclick="ui_checkStatsMob(\'' , mob . Name , '\', 0)" /></td>' ] ) ; }
var img = underground . getMobImage ( mob ) ; html . push ( '<td>' ) ; if ( checks )
{ html = html . concat ( [ '<label for="' , gid , '">' ] ) ; }
html . push ( '<img src="' ) ; html . push ( img ) ; html . push ( '" width="17" height="26" border="0" valign="absbottom" />' ) ; if ( checks )
{ html . push ( '</label>' ) ; }
html . push ( '</td><td>' ) ; if ( checks )
{ html = html . concat ( [ '<label for="' , gid , '">' ] ) ; }
html . push ( mob . Caption ) ; if ( checks )
{ html . push ( '</label>' ) ; }
html . push ( '</td>' ) ; for ( var level = minlevel ; level <= maxlevel ; level ++ )
{ html . push ( '<td align="center" valign="center">' ) ; if ( level in stats [ mobn ] )
{ var lid = getStatisticsCheckId ( checkId , mob . Name , level ) ; if ( checks )
{ html = html . concat ( [ '<label for="' , lid , '">' ] ) ; }
html = html . concat ( [ '<b>' , stats [ mobn ] [ level ] , '</b>' ] ) ; if ( checks )
{ html = html . concat ( [ '</label><input type="checkbox" style="width:10px;height:10px;margin:0;padding:0;" id="' , lid , '" onclick="ui_checkStatsMob(\'' , mob . Name , '\', ' , level , ')" />' ] ) ; }
count += parseInt ( stats [ mobn ] [ level ] ) ; }
else
{ html . push ( '-' ) ; }
html . push ( '</td>' ) ; }
html = html . concat ( [ '<td align="center" valign="center"><b>' , count , '</b></td></tr>' ] ) ; }
html . push ( '</table>' ) ; if ( ! checks )
{ html . push ( '<br /> </div>' ) ; }
html . push ( '</fieldset></center>' ) ; return html . join ( '' ) ; }
var underground = new Underground ( ) ; function hidePopup2 ( )
{ hidePopup ( ) ; underground . hideHotSpots ( ) ; }
function ui _changeShopCategory ( shopTDId , catDivId )
{ var td = document . getElementById ( shopTDId ) ; for ( var i = 0 ; i < td . childNodes . length ; i ++ )
{ var div = td . childNodes [ i ] ; div . style . display = ( div . id == catDivId ) ? '' : 'none' ; } }
function ui _changeJobsCategory ( shopTDId , catDivId )
{ ui _changeShopCategory ( shopTDId , catDivId ) ; }
function ui _changeDiggerTab ( index )
{ underground . diggerConstructor . changeDiggerTab ( index ) ; }
function ui _loadKnapsack ( isChest )
{ underground . diggerConstructor . loadKnapsack ( isChest ) ; }
function ui _clearKnapsack ( )
2023-01-10 16:29:32 +00:00
{ if ( ! window . confirm ( 'Вы действительно хотите очистить инвентарь?' ) ) return ; underground . diggerConstructor . cleanKnapsackFor ( false , false ) ; underground . diggerConstructor . cleanKnapsackFor ( true , true ) ; }
2022-06-06 21:30:34 +00:00
function ui _addToKnapsack ( toChest )
{ underground . diggerConstructor . addToKnapsack ( toChest ) ; }
function ui _loadKnapsackOK ( )
{ underground . diggerConstructor . loadKnapsackOK ( ) ; }
function ui _loadKnapsackCancel ( )
{ underground . diggerConstructor . loadKnapsackCancel ( ) ; }
function ui _addKnapsackOK ( )
{ underground . diggerConstructor . addKnapsackOK ( ) ; }
function ui _addKnapsackCancel ( )
{ underground . diggerConstructor . addKnapsackCancel ( ) ; }
function ui _showDiggerItemPopup ( name )
{ underground . diggerConstructor . showItemPopup ( name ) ; }
function ui _addIngr ( toChest , name , count )
{ underground . diggerConstructor . addIngr ( toChest , name , count ) ; }
function ui _openRecipesOfPlace ( index )
{ underground . diggerConstructor . openRecipesOfPlace ( index ) ; }
function ui _openRecipesOfCategory ( index )
{ underground . diggerConstructor . openRecipesOfCategory ( index ) ; }
function ui _openItemsOfCategory ( index )
{ underground . diggerConstructor . openItemsOfCategory ( index ) ; }
function ui _chooseRecipe ( index , additive )
{ underground . diggerConstructor . chooseRecipe ( index , additive ) ; }
function ui _checkStatsMob ( mobName , mobLevel )
{ underground . checkStatsMob ( mobName , mobLevel ) ; }
function ui _showItemInView ( itemName )
{ underground . diggerConstructor . showItemInView ( itemName ) ; }
function ui _recalculateUsualReward ( counten , rewarden , maxcounten , bonus , maxFactor , maxrewarden )
{ var counte = document . getElementById ( counten ) ; var rewarde = document . getElementById ( rewarden ) ; var maxcounte = document . getElementById ( maxcounten ) ; var maxrewarde = document . getElementById ( maxrewarden ) ; var count = parseInt ( counte . value ) ; if ( isNaN ( count ) || count < 0 ) { count = 0 ; }
var scount = count . toString ( ) ; if ( counte . value != scount ) counte . value = scount ; rewarde . innerHTML = [ '<b>' , count * bonus , '</b>' ] . join ( '' ) ; if ( maxcounte != null )
{ var maxc = Math . floor ( count * maxFactor ) ; maxcounte . innerHTML = maxc ; maxrewarde . innerHTML = maxc * bonus ; } }
function ui _recalculateMobReward ( rewarden )
{ var rewarde = document . getElementById ( rewarden ) ; var total = 0 ; for ( var i = 1 ; i < ui _recalculateMobReward . arguments . length ; i += 2 )
{ var counten = ui _recalculateMobReward . arguments [ i ] ; var bonus = ui _recalculateMobReward . arguments [ i + 1 ] ; var counte = document . getElementById ( counten ) ; var count = parseInt ( counte . value ) ; if ( isNaN ( count ) || count < 0 ) { count = 0 ; }
var scount = count . toString ( ) ; if ( counte . value != scount ) counte . value = scount ; total += count * bonus ; }
rewarde . innerHTML = [ '<b>' , total , '</b>' ] . join ( '' ) ; }
function ui _addRecipeToBasket ( placeName , itemName )
{ underground . diggerConstructor . addRecipeToBasket ( placeName , itemName ) ; }
function ui _removeRecipeFromBasket ( placeName , itemName )
{ underground . diggerConstructor . removeRecipeFromBasket ( placeName , itemName ) ; }
function ui _addItemToBasket ( itemName )
{ underground . diggerConstructor . addItemToBasket ( itemName ) ; }
var zoomHandle = null ; function ui _zoomChanged ( )
{ if ( zoomHandle != null ) clearTimeout ( zoomHandle ) ; zoomHandle = setTimeout ( 'ui_zoomChanged2()' , 1200 ) ; }
function ui _zoomChanged2 ( )
{ if ( zoomHandle != null )
{ clearTimeout ( zoomHandle ) ; zoomHandle = null ; }
underground . zoomChanged ( ) ; }
function ui _cellObjectAction ( action , chapter , point )
{ if ( action == 1 && chapter != '' )
{ underground . handleHash ( '#' + chapter ) ; underground . renderChapters ( ) ; underground . activeDungeon . changeFloor ( underground . activeDungeon . activeFloorIndex ) ; if ( point != '' )
{ underground . activeDungeon . highlightPoint ( point ) ; } } }
function ui _toggleCellMarker ( cellDivId , x , y )
{ underground . activeDungeon . data . Floors [ underground . activeDungeon . activeFloorIndex ] . toggleCellMarker ( cellDivId , x , y ) ; }
function ui _showCellMarkerPopup ( markerIndex )
{ underground . activeDungeon . data . Floors [ underground . activeDungeon . activeFloorIndex ] . showCellMarkerPopup ( markerIndex ) ; }
function ui _toggleMapsNav ( )
{ underground . settings . mapsNavDisplay = ( underground . settings . mapsNavDisplay == 'none' ) ? '' : 'none' ; var c = getElementsByClass ( 'mapsNav' , document . getElementById ( 'dsurface' ) , 'div' )
for ( var i in c )
{ c [ i ] . style . display = underground . settings . mapsNavDisplay ; } }
String . prototype . quote = function ( )
2023-04-08 15:14:19 +00:00
{ var c , i , l = this . length , o = '"' ; for ( i = 0 ; i < l ; i += 1 ) { c = this . charAt ( i ) ; if ( c >= ' ' ) { if ( c == '\\' || c == '"' ) { o += '\\' ; }
2022-06-06 21:30:34 +00:00
o += c ; } else { switch ( c ) { case '\b' : o += '\\b' ; break ; case '\f' : o += '\\f' ; break ; case '\n' : o += '\\n' ; break ; case '\r' : o += '\\r' ; break ; case '\t' : o += '\\t' ; break ; default : c = c . charCodeAt ( ) ; o += '\\u00' + Math . floor ( c / 16 ) . toString ( 16 ) +
( c % 16 ) . toString ( 16 ) ; } } }
return o + '"' ; } ; var json = function ( )
{ this . unserialize = function ( s ) { return eval ( s ) ; } ; var addslashesRepl = { '\r' : '\\r' , '\n' : '\\n' , '\t' : '\\t' , '\0' : '\\0' , '\\' : '\\\\' , '\b' : '\\b' , '\f' : '\\f' } ; var addslashes = function ( s )
{ return s . toString ( ) . quote ( ) ; }
var isArray = function ( testObject )
2023-04-08 15:14:19 +00:00
{ return testObject && ! ( testObject . propertyIsEnumerable ( 'length' ) ) && typeof testObject == 'object' && typeof testObject . length == 'number' ; }
2022-06-06 21:30:34 +00:00
var serializeArray = function ( o )
{ var s = [ '[' ] ; var first = true ; for ( var i = 0 ; i < o . length ; i ++ )
{ var v = o [ i ] ; if ( first ) first = false ; else s . push ( ',' ) ; s . push ( this . serialize ( v ) ) ; }
s . push ( ']' ) ; return s . join ( '' ) ; }
var serializeObject = function ( o )
{ var s = [ '{' ] ; var first = true ; for ( var i in o )
{ var v = o [ i ] ; if ( first ) first = false ; else s . push ( ',' ) ; s . push ( '"' ) ; s . push ( addslashes ( i ) ) ; s . push ( '":' ) ; s . push ( this . serialize ( v ) ) ; }
s . push ( '}' ) ; return s . join ( '' ) ; }
this . serialize = function ( o )
{ switch ( typeof ( o ) )
{ case 'string' : return [ '"' , addslashes ( o ) , '"' ] . join ( '' ) ; case 'number' : return o . toString ( ) ; case 'object' : if ( isArray ( o ) ) return serializeArray ( o ) ; return serializeObject ( o ) ; case 'boolean' : return o ? 'true' : 'false' ; }
return 'jsonTypeError' ; }
return this ; } ( ) ; attachDomLoaded ( function ( ) { underground . domReady ( ) ; } ) ;