@@ -120,7 +120,7 @@ <h2 style="color: var(--primary); text-transform: uppercase; margin-bottom: 20px
120120 { id : 'q_16' , trader : 'doctor' , title : 'Infections' , diff : 'inter' , needs : [ 'Antiseptic (Антисептик)' , 'Antibiotics (Антибиотики)' ] , rewards : [ 'Bandage (Бинт)' , 'Rags (Тряпки)' , 'Painkill (Обезболивающее)' ] } ,
121121 { id : 'q_17' , trader : 'doctor' , title : 'Hypovolemia' , diff : 'inter' , needs : [ 'Saline (Физраствор)' ] , rewards : [ 'Water Lock (Гидрозатвор)' ] , target : 3 } ,
122122 { id : 'q_18' , trader : 'doctor' , title : 'Mouth Organ' , diff : 'hard' , needs : [ 'Harmonica (Губная гармошка)' ] , rewards : [ 'Medkit (Аптечка) (3 шт.)' ] } ,
123- { id : 'q_19' , trader : 'doctor' , title : 'Patient Report' , diff : 'hard' , needs : [ 'Patient Report (Отчет о пациенте)' ] , rewards : [ 'AFAK' ] , guide : '<b style="color:var(--primary)">ГДЕ ИСКАТЬ:</b> Школа (Area 05), спортивный зал.<br><br><b style="color:var(--primary)">ИНСТРУКЦИЯ:</b> Пройдите через коридоры к спортзалу. Отчет лежит внутри. Может появится по всей территории зала.<br><br><div class="slider-container"><div class="slider-wrapper"><img id="quest-slide" src="school-trader.png" class="slider-img"></div><div class="slider-controls"><button onclick="changeQuestSlide(-1, event)">←</button><span id="q-slide-num">1 / 3</span><button onclick="changeQuestSlide(1, event)">→</button></div></div>' } ,
123+ { id : 'q_19' , trader : 'doctor' , title : 'Patient Report' , diff : 'hard' , needs : [ 'Patient Report (Отчет о пациенте)' ] , rewards : [ 'AFAK' ] , guide : '<b style="color:var(--primary)">ГДЕ ИСКАТЬ:</b> Школа (Area 05), спортивный зал.<br><br><b style="color:var(--primary)">ИНСТРУКЦИЯ:</b> Пройдите через коридоры к спортзалу. Отчет лежит внутри. Может появится по всей территории зала.<br><br><div class="slider-container"><div class="slider-wrapper"><img id="quest-slide" src="img/" school-trader.png" class="slider-img"></div><div class="slider-controls"><button onclick="changeQuestSlide(-1, event)">←</button><span id="q-slide-num">1 / 3</span><button onclick="changeQuestSlide(1, event)">→</button></div></div>' } ,
124124 { id : 'q_20' , trader : 'doctor' , title : 'Substance' , diff : 'hard' , needs : [ 'Oil Sample (Образец масла)' ] , rewards : [ 'Classroom Key (Ключ от класса)' ] , target : 3 } ,
125125
126126 // --- ОРУЖЕЙНИК (GUNSMITH) ---
@@ -144,7 +144,7 @@ <h2 style="color: var(--primary); text-transform: uppercase; margin-bottom: 20px
144144
145145 { day : 3 , title : 'Fighter Jets (Реактивные истребители)' , place : 'Area 05 (Зона 05)' , chance : '~25%' , desc : 'Финские военные проводят демонстрацию силы. В небе часто появляются истребители, совершающие громкие нелетальные облеты Зоны 05.' } ,
146146
147- { day : 4 , title : 'Missing Cat (Пропавший кот)' , place : 'Outpost (Аванпост)' , chance : 'Гарантировано' , desc : 'Кот бабушки сбежал и попал в беду. Бандиты бросили коробку где-то на территории Аванпоста.<br><br><b style="color:var(--primary)">ПОДСКАЗКА:</b> Ищите вход в бункер, в нем ищите бетонную шахту. Кот сидит на самом дне.<br><br><div class="slider-container"><div class="slider-wrapper"><img id="cat-slide" src="cat1.png" class="slider-img"></div><div class="slider-controls"><button onclick="changeSlide(-1, event)">←</button><span id="slide-num">1 / 5</span><button onclick="changeSlide(1, event)">→</button></div></div>' } ,
147+ { day : 4 , title : 'Missing Cat (Пропавший кот)' , place : 'Outpost (Аванпост)' , chance : 'Гарантировано' , desc : 'Кот бабушки сбежал и попал в беду. Бандиты бросили коробку где-то на территории Аванпоста.<br><br><b style="color:var(--primary)">ПОДСКАЗКА:</b> Ищите вход в бункер, в нем ищите бетонную шахту. Кот сидит на самом дне.<br><br><div class="slider-container"><div class="slider-wrapper"><img id="cat-slide" src="img/" cat1.png" class="slider-img"></div><div class="slider-controls"><button onclick="changeSlide(-1, event)">←</button><span id="slide-num">1 / 5</span><button onclick="changeSlide(1, event)">→</button></div></div>' } ,
148148
149149 { day : 5 , title : 'Punisher arrives to Area 05 (Каратель прибывает в Зону 05)' , place : 'Area 05 (Зона 05)' , chance : '~10%' , desc : 'Криминальный авторитет Каратель угнал полицейский фургон и патрулирует территорию со своей бандой. Встреча с ними крайне опасна.' } ,
150150
@@ -172,7 +172,7 @@ <h2 style="color: var(--primary); text-transform: uppercase; margin-bottom: 20px
172172 const qSec = document . getElementById ( 'quests-section' ) ;
173173 tradersData . forEach ( t => {
174174 const html = `<div class="trader-header" onclick="openTrader('${ t . name } ','${ t . loc } ','${ t . pics [ 0 ] } ','${ t . pics [ 1 ] } ','${ t . pics [ 2 ] } ')">
175- <img src="${ t . img } " class="trader-portrait"><div class="trader-info"><h2>${ t . name } </h2><p>Локация: ${ t . loc } </p></div></div>
175+ <img src="img/" ${ t . img } " class="trader-portrait"><div class="trader-info"><h2>${ t . name } </h2><p>Локация: ${ t . loc } </p></div></div>
176176 <div id="grid-${ t . id } " class="quest-grid"></div>` ;
177177 qSec . insertAdjacentHTML ( 'beforeend' , html ) ;
178178 } ) ;
@@ -277,12 +277,12 @@ <h2 style="color: var(--primary); text-transform: uppercase; margin-bottom: 20px
277277 const d = document . getElementById ( 'searchHints' ) ; if ( d ) { d . innerHTML = '' ; hints . forEach ( h => { const o = document . createElement ( 'option' ) ; o . value = h ; d . appendChild ( o ) ; } ) ; }
278278 }
279279
280- function changeSlide ( d , e ) { e . stopPropagation ( ) ; if ( ! window . cS ) window . cS = 1 ; const imgs = [ "cat1.png" , "cat2.png" , "cat3.png" , "cat4.png" , "cat5.png" ] ; window . cS += d ; if ( window . cS > 5 ) window . cS = 1 ; if ( window . cS < 1 ) window . cS = 5 ; document . getElementById ( 'cat-slide' ) . src = imgs [ window . cS - 1 ] ; document . getElementById ( 'slide-num' ) . innerText = window . cS + " / 5" ; }
281- function changeQuestSlide ( d , e ) { if ( e ) e . stopPropagation ( ) ; if ( ! window . qS ) window . qS = 1 ; const imgs = [ "school-trader.png" , "gymn-cor.jpg" , "gymn.jpg" ] ; window . qS += d ; if ( window . qS > imgs . length ) window . qS = 1 ; if ( window . qS < 1 ) window . qS = imgs . length ; document . getElementById ( 'quest-slide' ) . src = imgs [ window . qS - 1 ] ; document . getElementById ( 'q-slide-num' ) . innerText = window . qS + " / " + imgs . length ; }
280+ function changeSlide ( d , e ) { e . stopPropagation ( ) ; if ( ! window . cS ) window . cS = 1 ; const imgs = [ "cat1.png" , "cat2.png" , "cat3.png" , "cat4.png" , "cat5.png" ] ; window . cS += d ; if ( window . cS > 5 ) window . cS = 1 ; if ( window . cS < 1 ) window . cS = 5 ; document . getElementById ( 'cat-slide' ) . src = "img/ imgs[window.cS-1]; document.getElementById('slide-num').innerText=window.cS+" / 5 "; }
281+ function changeQuestSlide ( d , e ) { if ( e ) e . stopPropagation ( ) ; if ( ! window . qS ) window . qS = 1 ; const imgs = [ "school-trader.png" , "gymn-cor.jpg" , "gymn.jpg" ] ; window . qS += d ; if ( window . qS > imgs . length ) window . qS = 1 ; if ( window . qS < 1 ) window . qS = imgs . length ; document . getElementById ( 'quest-slide' ) . src = "img/ imgs[window.qS-1]; document.getElementById('q-slide-num').innerText=window.qS+" / "+imgs.length; }
282282
283283 function filterQuests ( lvl , btn ) { document . querySelectorAll ( '.filter-btn' ) . forEach ( b => b . classList . remove ( 'active' ) ) ; btn . classList . add ( 'active' ) ; document . querySelectorAll ( '.quest-card' ) . forEach ( card => { const q = questsDatabase . find ( x => x . id === card . id ) ; card . style . display = ( lvl === 'all' || q . diff === lvl ) ? 'flex' : 'none' ; } ) ; }
284284 function updateStats ( ) { const t = questsDatabase . length ; const d = document . querySelectorAll ( '.quest-card.completed' ) . length ; document . getElementById ( 'total-q' ) . innerText = t ; document . getElementById ( 'done-q' ) . innerText = d ; document . getElementById ( 'left-q' ) . innerText = t - d ; }
285- function openTrader ( n , l , i1 , i2 , i3 ) { document . getElementById ( 'modalTraderName' ) . innerText = n ; document . getElementById ( 'modalTraderLoc' ) . innerText = l ; const imgs = [ i1 , i2 , i3 ] ; const labs = [ "ЗДАНИЕ:" , "КОРИДОР:" , "КАБИНЕТ:" ] ; imgs . forEach ( ( src , i ) => { const lbl = document . getElementById ( `label${ i + 1 } ` ) ; const cont = document . getElementById ( `imgCont${ i + 1 } ` ) ; if ( src && src !== 'null' ) { lbl . innerText = labs [ i ] ; cont . innerHTML = `<img src="${ src } " style="width:100%;height:200px;object-fit:cover;margin-top:5px">` ; lbl . parentElement . style . display = 'block' ; } else lbl . parentElement . style . display = 'none' ; } ) ; document . getElementById ( 'traderModal' ) . style . display = 'block' ; }
285+ function openTrader ( n , l , i1 , i2 , i3 ) { document . getElementById ( 'modalTraderName' ) . innerText = n ; document . getElementById ( 'modalTraderLoc' ) . innerText = l ; const imgs = [ i1 , i2 , i3 ] ; const labs = [ "ЗДАНИЕ:" , "КОРИДОР:" , "КАБИНЕТ:" ] ; imgs . forEach ( ( src , i ) => { const lbl = document . getElementById ( `label${ i + 1 } ` ) ; const cont = document . getElementById ( `imgCont${ i + 1 } ` ) ; if ( src && src !== 'null' ) { lbl . innerText = labs [ i ] ; cont . innerHTML = `<img src="img/" ${ src } " style="width:100%;height:200px;object-fit:cover;margin-top:5px">` ; lbl . parentElement . style . display = 'block' ; } else lbl . parentElement . style . display = 'none' ; } ) ; document . getElementById ( 'traderModal' ) . style . display = 'block' ; }
286286 function closeModal ( ) { document . getElementById ( 'traderModal' ) . style . display = 'none' ; }
287287 function closeQuestModal ( ) { document . getElementById ( 'questDetailsModal' ) . style . display = 'none' ; document . body . style . overflow = 'auto' ; }
288288 window . addEventListener ( 'click' , e => { if ( e . target . classList . contains ( 'modal' ) ) { closeModal ( ) ; closeQuestModal ( ) ; } } ) ;
0 commit comments