У Вас отключён javascript.
В данном режиме, отображение ресурса
браузером не поддерживается

Хранилище

Объявление

АМС
Лучший пост [Имя автора лучшего поста]
Вселенная будто насмехалась над ним, потому что как только они оказались в спальне и желанная женщина почти была у него в руках... Ей позвонила мама. Ригель только закатил глаза, покорно садясь в кресло и прикрывая глаза, ожидая когда этот разговор закончится. Ну не может же он в самом деле длиться дольше пары минут. Всего пара фраз. Да, все хорошо. Да, спальни разные. Да, я очень много времени провожу с миссис Блэкторн, а Ригеля почти не вижу. Не пара фраз и не пара минут. Кассия мерила шагами комнату и оправдывалась словно школьница, которая нарушила комендантский час и опаздывала домой на добрую четверть часа.
Коты-воители
Отголоски прошлого

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Хранилище » Анкеты » Оформление локаций


Оформление локаций

Сообщений 21 страница 28 из 28

21

[html]<div style="background:#e3e2de;border:2px solid #676a52;border-radius:10px;padding:15px;font-family:'Book Antiqua',serif;max-width:550px;margin:10px auto;"><div style="font-weight:bold;font-size:18px;color:#39423c;">📋 Миссия: Разведка территории</div><div style="margin-top:10px;color:#4d5a55;"><p>🐾 <strong>Пикачу</strong> отправляется на задание!</p><p>🎯 Шанс успеха: <span style="color:#2b6f2b;font-weight:bold;">70%</span></p><div style="background:#848a87;height:15px;border-radius:10px;overflow:hidden;margin:5px 0;"><div style="background:linear-gradient(90deg,#fc8181,#f6e05e,#48bb78);height:100%;width:70%;"></div></div><p>✅ При успехе: +55 XP</p><p>❌ При провале: -18 HP</p><p id="timer-1785752521574" style="font-weight:bold;color:#c03028;font-size:16px;">⏳ Ожидание...</p><div id="result-1785752521574" style="margin-top:10px;font-weight:bold;display:none;"></div><button id="btn-1785752521574" style="display:none;margin-top:15px;padding:10px 25px;background:#4CAF50;color:white;border:none;border-radius:25px;font-weight:bold;cursor:pointer;font-size:14px;width:100%;">🔍 Проверить результат миссии</button></div></div><script>(function() {var endTime = new Date(Date.now() + 180000);var timerEl = document.getElementById("timer-1785752521574");var btnEl = document.getElementById("btn-1785752521574");var resultEl = document.getElementById("result-1785752521574");var missionName = "Разведка территории";var pokemonId = "2";var userId = "2";var damage = 18;var xpGain = 55;var chance = 70;var apiBase = "https://script.google.com/macros/s/AKfycbyK-EocFHcnHKTvOR4zHCshEx_23hMiLDvPbD3gMIBje7GivhLez-Xz4AhjJVS754G5/exec";if (!timerEl) return;var interval = setInterval(function() {var now = new Date();var diff = Math.max(0, endTime - now);if (diff <= 0) {clearInterval(interval);timerEl.innerHTML = "⏳ Время вышло! Нажмите кнопку для проверки результата.";timerEl.style.color = "#2b6f2b";btnEl.style.display = "block";return;}var mins = Math.floor(diff / 60000);var secs = Math.floor((diff % 60000) / 1000);timerEl.innerHTML = "⏳ Осталось: " + mins + ":" + (secs < 10 ? "0" : "") + secs;}, 1000);function checkMissionResult() {if (btnEl.textContent === "⏳ Обработка...") return;btnEl.textContent = "⏳ Обработка...";btnEl.style.background = "#848a87";btnEl.disabled = true;var roll = Math.floor(Math.random() * 100) + 1;var success = roll <= chance;var xp = success ? xpGain : 0;var dmg = success ? 0 : damage;var url = apiBase + "?action=completeMission&tid=" + userId + "&pid=" + pokemonId + "&mission=" + encodeURIComponent(missionName) + "&result=" + (success ? "success" : "fail") + "&damage=" + dmg + "&xp=" + xp;fetch(url).then(function(r) { return r.json(); }).then(function(data) {if (data.success) {resultEl.style.display = "block";if (success) {resultEl.innerHTML = "🎉 <strong>УСПЕХ!</strong> Миссия выполнена! Получено +" + xpGain + " XP!";resultEl.style.color = "#2b6f2b";timerEl.innerHTML = "✅ Миссия успешно завершена! +" + xpGain + " XP";} else {resultEl.innerHTML = "💔 <strong>ПРОВАЛ!</strong> Миссия не выполнена! Потеряно 18 HP";resultEl.style.color = "#c03028";timerEl.innerHTML = "❌ Миссия провалена! Потеряно 18 HP";}btnEl.textContent = "✅ Готово";btnEl.style.background = "#848a87";btnEl.disabled = true;} else {resultEl.style.display = "block";resultEl.innerHTML = "❌ Ошибка при завершении миссии. Попробуйте позже.";resultEl.style.color = "#c03028";btnEl.textContent = "🔍 Попробовать снова";btnEl.style.background = "#4CAF50";btnEl.disabled = false;}}).catch(function(e) {resultEl.style.display = "block";resultEl.innerHTML = "❌ Ошибка соединения. Попробуйте позже.";resultEl.style.color = "#c03028";btnEl.textContent = "🔍 Попробовать снова";btnEl.style.background = "#4CAF50";btnEl.disabled = false;console.error(e);});}btnEl.onclick = checkMissionResult;})();</script>[/html]

0

22

[html]<div style="background:#e3e2de;border:2px solid #676a52;border-radius:10px;padding:15px;font-family:'Book Antiqua',serif;max-width:550px;margin:10px auto;"><div style="font-weight:bold;font-size:18px;color:#39423c;">📋 Миссия: Освещение тоннелей</div><div style="margin-top:10px;color:#4d5a55;"><p>🐾 <strong>Пикачу</strong> отправляется на задание!</p><p>🎯 Шанс успеха: <span style="color:#2b6f2b;font-weight:bold;">82%</span></p><div style="background:#848a87;height:15px;border-radius:10px;overflow:hidden;margin:5px 0;"><div style="background:linear-gradient(90deg,#fc8181,#f6e05e,#48bb78);height:100%;width:82%;"></div></div><p>✅ При успехе: +24 XP</p><p>❌ При провале: без последствий</p><p id="timer-1785753655069" style="font-weight:bold;color:#c03028;font-size:16px;">⏳ Ожидание...</p><div id="result-1785753655069" style="margin-top:10px;font-weight:bold;display:none;"></div><button id="btn-1785753655069" style="display:none;margin-top:15px;padding:10px 25px;background:#4CAF50;color:white;border:none;border-radius:25px;font-weight:bold;cursor:pointer;font-size:14px;width:100%;">🔍 Проверить результат миссии</button></div></div><script>(function() {var endTime = new Date(Date.now() + 120000);var timerEl = document.getElementById("timer-1785753655069");var btnEl = document.getElementById("btn-1785753655069");var resultEl = document.getElementById("result-1785753655069");var missionName = "Освещение тоннелей";var pokemonId = "2";var userId = "2";var damage = 0;var xpGain = 24;var chance = 82;var apiBase = "https://script.google.com/macros/s/AKfycbyK-EocFHcnHKTvOR4zHCshEx_23hMiLDvPbD3gMIBje7GivhLez-Xz4AhjJVS754G5/exec";if (!timerEl) return;var interval = setInterval(function() {var now = new Date();var diff = Math.max(0, endTime - now);if (diff <= 0) {clearInterval(interval);timerEl.innerHTML = "⏳ Время вышло! Нажмите кнопку для проверки результата.";timerEl.style.color = "#2b6f2b";btnEl.style.display = "block";return;}var mins = Math.floor(diff / 60000);var secs = Math.floor((diff % 60000) / 1000);timerEl.innerHTML = "⏳ Осталось: " + mins + ":" + (secs < 10 ? "0" : "") + secs;}, 1000);function checkMissionResult() {if (btnEl.textContent === "⏳ Обработка...") return;btnEl.textContent = "⏳ Обработка...";btnEl.style.background = "#848a87";btnEl.disabled = true;var roll = Math.floor(Math.random() * 100) + 1;var success = roll <= chance;var xp = success ? xpGain : 0;var dmg = success ? 0 : damage;var url = apiBase + "?action=completeMission&tid=" + userId + "&pid=" + pokemonId + "&mission=" + encodeURIComponent(missionName) + "&result=" + (success ? "success" : "fail") + "&damage=" + dmg + "&xp=" + xp;fetch(url).then(function(r) { return r.json(); }).then(function(data) {if (data.success) {resultEl.style.display = "block";if (success) {resultEl.innerHTML = "🎉 <strong>УСПЕХ!</strong> Миссия выполнена! Получено +" + xpGain + " XP!";resultEl.style.color = "#2b6f2b";timerEl.innerHTML = "✅ Миссия успешно завершена! +" + xpGain + " XP";} else {resultEl.innerHTML = "💔 <strong>ПРОВАЛ!</strong> Миссия не выполнена! Без последствий";resultEl.style.color = "#c03028";timerEl.innerHTML = "❌ Миссия провалена! Без последствий";}btnEl.textContent = "✅ Готово";btnEl.style.background = "#848a87";btnEl.disabled = true;} else {resultEl.style.display = "block";resultEl.innerHTML = "❌ Ошибка при завершении миссии. Попробуйте позже.";resultEl.style.color = "#c03028";btnEl.textContent = "🔍 Попробовать снова";btnEl.style.background = "#4CAF50";btnEl.disabled = false;}}).catch(function(e) {resultEl.style.display = "block";resultEl.innerHTML = "❌ Ошибка соединения. Попробуйте позже.";resultEl.style.color = "#c03028";btnEl.textContent = "🔍 Попробовать снова";btnEl.style.background = "#4CAF50";btnEl.disabled = false;console.error(e);});}btnEl.onclick = checkMissionResult;})();</script>[/html]

0

23

[html]<div style="background:#e3e2de;border:2px solid #676a52;border-radius:10px;padding:15px;font-family:'Book Antiqua',serif;max-width:550px;margin:10px auto;"><div style="font-weight:bold;font-size:18px;color:#39423c;">📋 Миссия: Защита сада фей</div><div style="margin-top:10px;color:#4d5a55;"><p>🐾 <strong>Понита</strong> отправляется на задание!</p><p>🎯 Шанс успеха: <span style="color:#2b6f2b;font-weight:bold;">71%</span></p><div style="background:#848a87;height:15px;border-radius:10px;overflow:hidden;margin:5px 0;"><div style="background:linear-gradient(90deg,#fc8181,#f6e05e,#48bb78);height:100%;width:71%;"></div></div><p>✅ При успехе: +54 XP</p><p>❌ При провале: -15 HP</p><p id="timer-mission-1785754353681-259718" style="font-weight:bold;color:#c03028;font-size:16px;">⏳ Ожидание...</p><div id="result-mission-1785754353681-259718" style="margin-top:10px;font-weight:bold;display:none;"></div><button id="btn-mission-1785754353681-259718" style="display:none;margin-top:15px;padding:10px 25px;background:#4CAF50;color:white;border:none;border-radius:25px;font-weight:bold;cursor:pointer;font-size:14px;width:100%;">🔍 Проверить результат миссии</button></div></div><script>(function() {var missionData = localStorage.getItem("mission-1785754353681-259718");if (missionData) {  try {    var saved = JSON.parse(missionData);    document.getElementById("timer-mission-1785754353681-259718").innerHTML = saved.timerText;    document.getElementById("timer-mission-1785754353681-259718").style.color = saved.timerColor;    if (saved.showBtn) {      document.getElementById("btn-mission-1785754353681-259718").style.display = "block";    }    if (saved.showResult) {      document.getElementById("result-mission-1785754353681-259718").style.display = "block";      document.getElementById("result-mission-1785754353681-259718").innerHTML = saved.resultText;      document.getElementById("result-mission-1785754353681-259718").style.color = saved.resultColor;    }  } catch(e) {}}var endTime = 1785754533681;var timerEl = document.getElementById("timer-mission-1785754353681-259718");var btnEl = document.getElementById("btn-mission-1785754353681-259718");var resultEl = document.getElementById("result-mission-1785754353681-259718");var missionName = "Защита сада фей";var pokemonId = "1";var userId = "2";var damage = 15;var xpGain = 54;var chance = 71;var apiBase = "https://script.google.com/macros/s/AKfycbyK-EocFHcnHKTvOR4zHCshEx_23hMiLDvPbD3gMIBje7GivhLez-Xz4AhjJVS754G5/exec";var uniqueId = "mission-1785754353681-259718";if (!timerEl) return;function saveState() {  var state = {    timerText: timerEl.innerHTML,    timerColor: timerEl.style.color,    showBtn: btnEl.style.display === "block",    showResult: resultEl.style.display === "block",    resultText: resultEl.innerHTML,    resultColor: resultEl.style.color  };  localStorage.setItem(uniqueId, JSON.stringify(state));}var missionCompleted = localStorage.getItem(uniqueId + "_completed");if (missionCompleted === "true") {  return;}var interval = setInterval(function() {var now = Date.now();var diff = Math.max(0, endTime - now);if (diff <= 0) {clearInterval(interval);timerEl.innerHTML = "⏳ Время вышло! Нажмите кнопку для проверки результата.";timerEl.style.color = "#2b6f2b";btnEl.style.display = "block";saveState();return;}var mins = Math.floor(diff / 60000);var secs = Math.floor((diff % 60000) / 1000);timerEl.innerHTML = "⏳ Осталось: " + mins + ":" + (secs < 10 ? "0" : "") + secs;saveState();}, 1000);function checkMissionResult() {if (btnEl.textContent === "⏳ Обработка...") return;btnEl.textContent = "⏳ Обработка...";btnEl.style.background = "#848a87";btnEl.disabled = true;var roll = Math.floor(Math.random() * 100) + 1;var success = roll <= chance;var xp = success ? xpGain : 0;var dmg = success ? 0 : damage;var url = apiBase + "?action=completeMission&tid=" + userId + "&pid=" + pokemonId + "&mission=" + encodeURIComponent(missionName) + "&result=" + (success ? "success" : "fail") + "&damage=" + dmg + "&xp=" + xp;fetch(url).then(function(r) { return r.json(); }).then(function(data) {if (data.success) {resultEl.style.display = "block";if (success) {resultEl.innerHTML = "🎉 <strong>УСПЕХ!</strong> Миссия выполнена! Получено +" + xpGain + " XP!";resultEl.style.color = "#2b6f2b";timerEl.innerHTML = "✅ Миссия успешно завершена! +" + xpGain + " XP";} else {resultEl.innerHTML = "💔 <strong>ПРОВАЛ!</strong> Миссия не выполнена! Потеряно 15 HP";resultEl.style.color = "#c03028";timerEl.innerHTML = "❌ Миссия провалена! Потеряно 15 HP";}btnEl.textContent = "✅ Готово";btnEl.style.background = "#848a87";btnEl.disabled = true;localStorage.setItem(uniqueId + "_completed", "true");saveState();} else {resultEl.style.display = "block";resultEl.innerHTML = "❌ Ошибка при завершении миссии. Попробуйте позже.";resultEl.style.color = "#c03028";btnEl.textContent = "🔍 Попробовать снова";btnEl.style.background = "#4CAF50";btnEl.disabled = false;}}).catch(function(e) {resultEl.style.display = "block";resultEl.innerHTML = "❌ Ошибка соединения. Попробуйте позже.";resultEl.style.color = "#c03028";btnEl.textContent = "🔍 Попробовать снова";btnEl.style.background = "#4CAF50";btnEl.disabled = false;console.error(e);});}btnEl.onclick = checkMissionResult;})();</script>[/html]

0

24

[html]<div style="background:#e3e2de;border:2px solid #676a52;border-radius:10px;padding:15px;font-family:'Book Antiqua',serif;max-width:550px;margin:10px auto;"><div style="font-weight:bold;font-size:18px;color:#39423c;">📋 Миссия: Оборона лагеря</div><div style="margin-top:10px;color:#4d5a55;"><p>🐾 <strong>Понита</strong> отправляется на задание!</p><p>🎯 Шанс успеха: <span style="color:#2b6f2b;font-weight:bold;">93%</span></p><div style="background:#848a87;height:15px;border-radius:10px;overflow:hidden;margin:5px 0;"><div style="background:linear-gradient(90deg,#fc8181,#f6e05e,#48bb78);height:100%;width:93%;"></div></div><p>✅ При успехе: +60 XP</p><p>❌ При провале: -25 HP</p><p id="timer-mission-1785755180060-389350" style="font-weight:bold;color:#c03028;font-size:16px;">⏳ Ожидание...</p><div id="result-mission-1785755180060-389350" style="margin-top:10px;font-weight:bold;display:none;"></div><button id="btn-mission-1785755180060-389350" style="display:none;margin-top:15px;padding:10px 25px;background:#4CAF50;color:white;border:none;border-radius:25px;font-weight:bold;cursor:pointer;font-size:14px;width:100%;">🔍 Проверить результат миссии</button></div></div><script>(function() {var missionData = localStorage.getItem("mission-1785755180060-389350");if (missionData) {  try {    var saved = JSON.parse(missionData);    document.getElementById("timer-mission-1785755180060-389350").innerHTML = saved.timerText;    document.getElementById("timer-mission-1785755180060-389350").style.color = saved.timerColor;    if (saved.showBtn) {      document.getElementById("btn-mission-1785755180060-389350").style.display = "block";    }    if (saved.showResult) {      document.getElementById("result-mission-1785755180060-389350").style.display = "block";      document.getElementById("result-mission-1785755180060-389350").innerHTML = saved.resultText;      document.getElementById("result-mission-1785755180060-389350").style.color = saved.resultColor;    }  } catch(e) {}}var endTime = 1785755360060;var timerEl = document.getElementById("timer-mission-1785755180060-389350");var btnEl = document.getElementById("btn-mission-1785755180060-389350");var resultEl = document.getElementById("result-mission-1785755180060-389350");var missionName = "Оборона лагеря";var pokemonId = "1";var userId = "2";var damage = 25;var xpGain = 60;var chance = 93;var apiBase = "https://script.google.com/macros/s/AKfycbyK-EocFHcnHKTvOR4zHCshEx_23hMiLDvPbD3gMIBje7GivhLez-Xz4AhjJVS754G5/exec";var uniqueId = "mission-1785755180060-389350";if (!timerEl) return;function saveState() {  var state = {    timerText: timerEl.innerHTML,    timerColor: timerEl.style.color,    showBtn: btnEl.style.display === "block",    showResult: resultEl.style.display === "block",    resultText: resultEl.innerHTML,    resultColor: resultEl.style.color  };  localStorage.setItem(uniqueId, JSON.stringify(state));}var missionCompleted = localStorage.getItem(uniqueId + "_completed");if (missionCompleted === "true") {  return;}var interval = setInterval(function() {var now = Date.now();var diff = Math.max(0, endTime - now);if (diff <= 0) {clearInterval(interval);timerEl.innerHTML = "⏳ Время вышло! Нажмите кнопку для проверки результата.";timerEl.style.color = "#2b6f2b";btnEl.style.display = "block";saveState();return;}var mins = Math.floor(diff / 60000);var secs = Math.floor((diff % 60000) / 1000);timerEl.innerHTML = "⏳ Осталось: " + mins + ":" + (secs < 10 ? "0" : "") + secs;saveState();}, 1000);function checkMissionResult() {if (btnEl.textContent === "⏳ Обработка...") return;btnEl.textContent = "⏳ Обработка...";btnEl.style.background = "#848a87";btnEl.disabled = true;var roll = Math.floor(Math.random() * 100) + 1;var success = roll <= chance;var xp = success ? xpGain : 0;var dmg = success ? 0 : damage;var url = apiBase + "?action=completeMission&tid=" + userId + "&pid=" + pokemonId + "&mission=" + encodeURIComponent(missionName) + "&result=" + (success ? "success" : "fail") + "&damage=" + dmg + "&xp=" + xp;fetch(url).then(function(r) { return r.json(); }).then(function(data) {if (data.success) {resultEl.style.display = "block";if (success) {resultEl.innerHTML = "🎉 <strong>УСПЕХ!</strong> Миссия выполнена! Получено +" + xpGain + " XP!";resultEl.style.color = "#2b6f2b";timerEl.innerHTML = "✅ Миссия успешно завершена! +" + xpGain + " XP";} else {resultEl.innerHTML = "💔 <strong>ПРОВАЛ!</strong> Миссия не выполнена! Потеряно 25 HP";resultEl.style.color = "#c03028";timerEl.innerHTML = "❌ Миссия провалена! Потеряно 25 HP";}btnEl.textContent = "✅ Готово";btnEl.style.background = "#848a87";btnEl.disabled = true;localStorage.setItem(uniqueId + "_completed", "true");saveState();} else {resultEl.style.display = "block";resultEl.innerHTML = "❌ Ошибка при завершении миссии. Попробуйте позже.";resultEl.style.color = "#c03028";btnEl.textContent = "🔍 Попробовать снова";btnEl.style.background = "#4CAF50";btnEl.disabled = false;}}).catch(function(e) {resultEl.style.display = "block";resultEl.innerHTML = "❌ Ошибка соединения. Попробуйте позже.";resultEl.style.color = "#c03028";btnEl.textContent = "🔍 Попробовать снова";btnEl.style.background = "#4CAF50";btnEl.disabled = false;console.error(e);});}btnEl.onclick = checkMissionResult;})();</script>[/html]

0

25

[html]<div style="background:#e3e2de;border:2px solid #676a52;border-radius:10px;padding:15px;font-family:'Book Antiqua',serif;max-width:550px;margin:10px auto;"><div style="font-weight:bold;font-size:18px;color:#39423c;">📋 Миссия: Оборона лагеря</div><div style="margin-top:10px;color:#4d5a55;"><p>🐾 <strong>Понита</strong> отправляется на задание!</p><p>🎯 Шанс успеха: <span style="color:#2b6f2b;font-weight:bold;">93%</span></p><div style="background:#848a87;height:15px;border-radius:10px;overflow:hidden;margin:5px 0;"><div style="background:linear-gradient(90deg,#fc8181,#f6e05e,#48bb78);height:100%;width:93%;"></div></div><p>✅ При успехе: +60 XP</p><p>❌ При провале: -25 HP</p><p id="timer-mission-1785755415126-533171" style="font-weight:bold;color:#c03028;font-size:16px;">⏳ Ожидание...</p><div id="result-mission-1785755415126-533171" style="margin-top:10px;font-weight:bold;display:none;"></div><button id="btn-mission-1785755415126-533171" style="display:none;margin-top:15px;padding:10px 25px;background:#4CAF50;color:white;border:none;border-radius:25px;font-weight:bold;cursor:pointer;font-size:14px;width:100%;">🔍 Проверить результат миссии</button></div></div><script>(function() {var missionData = localStorage.getItem("mission-1785755415126-533171");if (missionData) {  try {    var saved = JSON.parse(missionData);    document.getElementById("timer-mission-1785755415126-533171").innerHTML = saved.timerText;    document.getElementById("timer-mission-1785755415126-533171").style.color = saved.timerColor;    if (saved.showBtn) {      document.getElementById("btn-mission-1785755415126-533171").style.display = "block";    }    if (saved.showResult) {      document.getElementById("result-mission-1785755415126-533171").style.display = "block";      document.getElementById("result-mission-1785755415126-533171").innerHTML = saved.resultText;      document.getElementById("result-mission-1785755415126-533171").style.color = saved.resultColor;    }  } catch(e) {}}var endTime = 1785755595126;var timerEl = document.getElementById("timer-mission-1785755415126-533171");var btnEl = document.getElementById("btn-mission-1785755415126-533171");var resultEl = document.getElementById("result-mission-1785755415126-533171");var missionName = "Оборона лагеря";var pokemonId = "1";var userId = "2";var damage = 25;var xpGain = 60;var chance = 93;var apiBase = "https://script.google.com/macros/s/AKfycbyK-EocFHcnHKTvOR4zHCshEx_23hMiLDvPbD3gMIBje7GivhLez-Xz4AhjJVS754G5/exec";var uniqueId = "mission-1785755415126-533171";if (!timerEl) return;function saveState() {  var state = {    timerText: timerEl.innerHTML,    timerColor: timerEl.style.color,    showBtn: btnEl.style.display === "block",    showResult: resultEl.style.display === "block",    resultText: resultEl.innerHTML,    resultColor: resultEl.style.color  };  localStorage.setItem(uniqueId, JSON.stringify(state));}var missionCompleted = localStorage.getItem(uniqueId + "_completed");if (missionCompleted === "true") {  return;}var interval = setInterval(function() {var now = Date.now();var diff = Math.max(0, endTime - now);if (diff <= 0) {clearInterval(interval);timerEl.innerHTML = "⏳ Время вышло! Нажмите кнопку для проверки результата.";timerEl.style.color = "#2b6f2b";btnEl.style.display = "block";saveState();return;}var mins = Math.floor(diff / 60000);var secs = Math.floor((diff % 60000) / 1000);timerEl.innerHTML = "⏳ Осталось: " + mins + ":" + (secs < 10 ? "0" : "") + secs;saveState();}, 1000);function checkMissionResult() {if (btnEl.textContent === "⏳ Обработка...") return;btnEl.textContent = "⏳ Обработка...";btnEl.style.background = "#848a87";btnEl.disabled = true;var roll = Math.floor(Math.random() * 100) + 1;var success = roll <= chance;var xp = success ? xpGain : 0;var dmg = success ? 0 : damage;var url = apiBase + "?action=completeMission&tid=" + userId + "&pid=" + pokemonId + "&mission=" + encodeURIComponent(missionName) + "&result=" + (success ? "success" : "fail") + "&damage=" + dmg + "&xp=" + xp;fetch(url).then(function(r) { return r.json(); }).then(function(data) {if (data.success) {resultEl.style.display = "block";if (success) {resultEl.innerHTML = "🎉 <strong>УСПЕХ!</strong> Миссия выполнена! Получено +" + xpGain + " XP!";resultEl.style.color = "#2b6f2b";timerEl.innerHTML = "✅ Миссия успешно завершена! +" + xpGain + " XP";} else {resultEl.innerHTML = "💔 <strong>ПРОВАЛ!</strong> Миссия не выполнена! Потеряно 25 HP";resultEl.style.color = "#c03028";timerEl.innerHTML = "❌ Миссия провалена! Потеряно 25 HP";}btnEl.textContent = "✅ Готово";btnEl.style.background = "#848a87";btnEl.disabled = true;localStorage.setItem(uniqueId + "_completed", "true");saveState();} else {resultEl.style.display = "block";resultEl.innerHTML = "❌ Ошибка при завершении миссии. Попробуйте позже.";resultEl.style.color = "#c03028";btnEl.textContent = "🔍 Попробовать снова";btnEl.style.background = "#4CAF50";btnEl.disabled = false;}}).catch(function(e) {resultEl.style.display = "block";resultEl.innerHTML = "❌ Ошибка соединения. Попробуйте позже.";resultEl.style.color = "#c03028";btnEl.textContent = "🔍 Попробовать снова";btnEl.style.background = "#4CAF50";btnEl.disabled = false;console.error(e);});}btnEl.onclick = checkMissionResult;})();</script>[/html]

0

26

[html]<div class="mission-container">
  <div class="mission-list" id="missionList">
    <!-- Заполняется JS -->
  </div>
  <div class="mission-detail" id="missionDetail">
    <p>Выберите миссию слева, чтобы увидеть детали.</p>
  </div>
</div>

<style>
.mission-container {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  background: #e3e2de;
  border: 2px solid #676a52;
  border-radius: 12px;
  padding: 20px;
  font-family: 'Book Antiqua', serif;
  color: #39423c;
  max-width: 900px;
  margin: 20px auto;
}
.mission-list {
  flex: 1;
  min-width: 250px;
  background: #dcdbd6;
  border-radius: 8px;
  padding: 10px;
  max-height: 500px;
  overflow-y: auto;
}
.mission-item {
  padding: 12px 15px;
  margin-bottom: 5px;
  background: #cfcfca;
  border: 1px solid #aeafa8;
  border-radius: 5px;
  cursor: pointer;
  transition: all 0.2s;
  display: flex;
  flex-direction: column;
}
.mission-item:hover, .mission-item.active {
  background: #c0c0b8;
  border-color: #676a52;
}
.mission-item-name {
  font-weight: bold;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  margin-bottom: 8px;
}
.mission-bonus-types {
  display: flex;
  gap: 4px;
  flex-wrap: wrap;
}
.bonus-type-badge {
  padding: 2px 8px;
  border-radius: 10px;
  color: white;
  font-size: 10px;
  font-weight: bold;
  white-space: nowrap;
}

.mission-detail {
  flex: 2;
  min-width: 300px;
  background: #cfcfca;
  border-radius: 8px;
  padding: 20px;
  border: 1px solid #aeafa8;
}
.mission-difficulty {
  font-size: 12px;
  padding: 3px 10px;
  border-radius: 12px;
  color: white;
  font-weight: bold;
  display: inline-block;
  margin-left: 10px;
}
.diff-easy { background: #78C850; }
.diff-medium { background: #F08030; }
.diff-hard { background: #C03028; }

.mission-bonus-section {
  margin: 20px 0;
  padding: 10px 0;
}
.mission-bonus-section strong {
  display: block;
  margin-bottom: 10px;
}
.mission-bonus-section .bonus-type-badge {
  font-size: 11px;
  padding: 3px 10px;
  margin-right: 5px;
}

.pokemon-select {
  width: 100%;
  padding: 10px;
  margin: 15px 0;
  background: #e3e2de;
  border: 1px solid #676a52;
  border-radius: 5px;
  font-family: inherit;
  color: #39423c;
}
.pokemon-stats {
  background: #e3e2de;
  border: 1px solid #aeafa8;
  border-radius: 8px;
  padding: 15px;
  margin: 15px 0;
}
.pokemon-stats h4 {
  margin: 0 0 10px 0;
  color: #39423c;
  border-bottom: 1px solid #aeafa8;
  padding-bottom: 5px;
}
.stat-row {
  display: flex;
  justify-content: space-between;
  margin: 5px 0;
  font-size: 14px;
}
.stat-label {
  color: #5a635e;
}
.stat-value {
  font-weight: bold;
  color: #39423c;
}
.stat-types {
  display: flex;
  gap: 5px;
  margin-top: 5px;
}
.type-badge {
  padding: 2px 10px;
  border-radius: 12px;
  color: white;
  font-size: 12px;
  font-weight: bold;
}

/* Цвета для всех типов покемонов */
.type-Нормальный, .bonus-type-badge[data-type="Нормальный"] { background: #A8A878; }
.type-Огонь, .bonus-type-badge[data-type="Огонь"] { background: #F08030; }
.type-Вода, .bonus-type-badge[data-type="Вода"] { background: #6890F0; }
.type-Электро, .bonus-type-badge[data-type="Электро"] { background: #F8D030; }
.type-Трава, .bonus-type-badge[data-type="Трава"] { background: #78C850; }
.type-Лёд, .bonus-type-badge[data-type="Лёд"] { background: #98D8D8; }
.type-Боевой, .bonus-type-badge[data-type="Боевой"] { background: #C03028; }
.type-Яд, .bonus-type-badge[data-type="Яд"] { background: #A040A0; }
.type-Земля, .bonus-type-badge[data-type="Земля"] { background: #E0C068; }
.type-Летающий, .bonus-type-badge[data-type="Летающий"] { background: #A890F0; }
.type-Психо, .bonus-type-badge[data-type="Психо"] { background: #F85888; }
.type-Насекомое, .bonus-type-badge[data-type="Насекомое"] { background: #A8B820; }
.type-Камень, .bonus-type-badge[data-type="Камень"] { background: #B8A038; }
.type-Призрак, .bonus-type-badge[data-type="Призрак"] { background: #705898; }
.type-Дракон, .bonus-type-badge[data-type="Дракон"] { background: #7038F8; }
.type-Сталь, .bonus-type-badge[data-type="Сталь"] { background: #B8B8D0; }
.type-Фея, .bonus-type-badge[data-type="Фея"] { background: #EE99AC; }
.type-Темный, .bonus-type-badge[data-type="Темный"] { background: #705848; }

.calculation-details {
  background: #f0f0eb;
  border: 1px solid #aeafa8;
  border-radius: 8px;
  padding: 12px;
  margin: 10px 0;
  font-size: 13px;
}
.calc-row {
  display: flex;
  justify-content: space-between;
  margin: 4px 0;
  padding: 3px 0;
  border-bottom: 1px dotted #aeafa8;
}
.calc-row.bonus {
  color: #2b6f2b;
  font-weight: bold;
}
.calc-row.total {
  font-weight: bold;
  font-size: 15px;
  color: #39423c;
  border-top: 1px solid #676a52;
  margin-top: 8px;
  padding-top: 8px;
}

.btn-send {
  background: #4CAF50;
  color: white;
  border: none;
  padding: 12px 25px;
  border-radius: 25px;
  font-weight: bold;
  cursor: pointer;
  width: 100%;
  font-size: 16px;
  margin-top: 10px;
  transition: background 0.2s;
}
.btn-send:hover { background: #45a049; }
.btn-send:disabled { background: #848a87; cursor: not-allowed; }

.chance-bar {
  background: #848a87;
  height: 20px;
  border-radius: 10px;
  overflow: hidden;
  margin: 10px 0;
  border: 1px solid #676a52;
}
.chance-fill {
  height: 100%;
  background: linear-gradient(90deg, #fc8181, #f6e05e, #48bb78);
  transition: width 0.5s;
}
.bonus-info {
  color: #2b6f2b;
  font-weight: bold;
  font-size: 14px;
}
</style>

<script>
// ===== КОНФИГУРАЦИЯ =====
var API_BASE = 'https://script.google.com/macros/s/AKfycbyK-EocFHcnHKTvOR4zHCshEx_23hMiLDvPbD3gMIBje7GivhLez-Xz4AhjJVS754G5/exec';
var CACHE_DURATION = 10000;
var trainerCache = {
  data: null,
  timestamp: 0,
  userId: null
};

// ===== МАССИВ МИССИЙ =====
var MISSIONS = [
  {id:1, name:"Поиск целебных трав", diff:"Лёгкая", type:"Гуманитарная", desc:"Поиск редких целебных трав в густом лесу.", bonus:["Трава","Насекомое","Фея"], xp:25, time:120, dmg:0},
  {id:2, name:"Помощь в наводнении", diff:"Лёгкая", type:"Гуманитарная", desc:"Эвакуация животных и перенос грузов через затопленные территории.", bonus:["Вода","Земля"], xp:28, time:120, dmg:0},
  {id:3, name:"Доставка сообщения", diff:"Лёгкая", type:"Гуманитарная", desc:"Доставка срочного сообщения через опасную территорию.", bonus:["Летающий","Нормальный"], xp:22, time:120, dmg:0},
  {id:4, name:"Расшифровка древних письмён", diff:"Лёгкая", type:"Гуманитарная", desc:"Расшифровка древних письмён с помощью интеллекта покемона.", bonus:["Психо","Призрак"], xp:26, time:120, dmg:0},
  {id:5, name:"Очистка токсичных отходов", diff:"Лёгкая", type:"Гуманитарная", desc:"Очистка леса от токсичных отходов.", bonus:["Яд","Трава"], xp:28, time:120, dmg:0},
  {id:6, name:"Освещение тоннелей", diff:"Лёгкая", type:"Гуманитарная", desc:"Помощь в освещении тёмных пещер.", bonus:["Огонь","Камень"], xp:24, time:120, dmg:0},
  {id:7, name:"Починка генератора", diff:"Лёгкая", type:"Гуманитарная", desc:"Восстановление электроснабжения деревни.", bonus:["Электро","Сталь"], xp:23, time:120, dmg:0},
  {id:8, name:"Тренировка ополченцев", diff:"Лёгкая", type:"Гуманитарная", desc:"Тренировка деревенского ополчения.", bonus:["Боевой","Нормальный"], xp:24, time:120, dmg:0},
  {id:9, name:"Разведка территории", diff:"Средняя", type:"Военная", desc:"Скрытное проникновение для сбора разведданных.", bonus:["Электро","Призрак"], xp:55, time:180, dmg:18},
  {id:10, name:"Оборона лагеря", diff:"Средняя", type:"Военная", desc:"Защита лагеря от атаки диких покемонов.", bonus:["Огонь","Боевой"], xp:60, time:180, dmg:25},
  {id:11, name:"Спасение из-под завала", diff:"Средняя", type:"Военная", desc:"Расчистка снежных завалов.", bonus:["Лёд","Боевой"], xp:58, time:180, dmg:22},
  {id:12, name:"Охрана музея", diff:"Средняя", type:"Военная", desc:"Ночная охрана музея от грабителей.", bonus:["Призрак","Психо"], xp:52, time:180, dmg:16},
  {id:13, name:"Патруль у вулкана", diff:"Средняя", type:"Военная", desc:"Разведка вулканической активности.", bonus:["Земля","Огонь"], xp:56, time:180, dmg:20},
  {id:14, name:"Поиск пропавшей экспедиции", diff:"Средняя", type:"Военная", desc:"Поиск экспедиции в Драконьих горах.", bonus:["Дракон","Летающий"], xp:62, time:180, dmg:28},
  {id:15, name:"Защита сада фей", diff:"Средняя", type:"Военная", desc:"Защита волшебного сада от вредителей.", bonus:["Фея","Трава","Насекомое"], xp:54, time:180, dmg:15},
  {id:16, name:"Укрощение дракона", diff:"Сложная", type:"Военная", desc:"Дикий дракон терроризирует окрестности.", bonus:["Дракон"], xp:110, time:300, dmg:50},
  {id:17, name:"Изгнание полтергейста", diff:"Сложная", type:"Военная", desc:"Злобный полтергейст в доме.", bonus:["Призрак"], xp:105, time:300, dmg:45},
  {id:18, name:"Остановка землетрясения", diff:"Сложная", type:"Военная", desc:"Стабилизация тектонических плит.", bonus:["Земля","Камень"], xp:115, time:300, dmg:48},
  {id:19, name:"Усмирение водоворота", diff:"Сложная", type:"Военная", desc:"Гигантский водоворот угрожает городу.", bonus:["Вода","Лёд"], xp:108, time:300, dmg:42},
  {id:20, name:"Битва с лесным гигантом", diff:"Сложная", type:"Военная", desc:"Гигантское хищное растение атакует!", bonus:["Трава","Яд"], xp:112, time:300, dmg:46}
];

var currentMission = null;

// ===== ФУНКЦИЯ ПОЛУЧЕНИЯ БАЗОВОГО ШАНСА =====
function getBaseChance(difficulty) {
  if (difficulty === 'Лёгкая') return 70;
  if (difficulty === 'Средняя') return 50;
  if (difficulty === 'Сложная') return 30;
  return 40;
}

// ===== ВСПОМОГАТЕЛЬНЫЕ ФУНКЦИИ =====

function getCurrentUserId() {
  if (typeof UserID !== 'undefined' && UserID) {
    return parseInt(UserID);
  }
 
  var profileLinks = document.querySelectorAll('a[href*="profile.php?id="]');
  for (var i = 0; i < profileLinks.length; i++) {
    var link = profileLinks[i];
    var text = link.innerText || link.textContent || '';
    if (text.trim() === 'Мой профиль' || text.trim() === 'Личный раздел' ||
        (link.title && (link.title.indexOf('Профиль') !== -1 || link.title.indexOf('Личный раздел') !== -1))) {
      var uidMatch = link.href.match(/id=(\d+)/);
      if (uidMatch) {
        return parseInt(uidMatch[1]);
      }
    }
  }
  return null;
}

function apiGet(params) {
  var queryString = Object.keys(params).map(function(k) {
    return k + '=' + encodeURIComponent(params[k]);
  }).join('&');
 
  return fetch(API_BASE + '?' + queryString)
    .then(function(r) { return r.json(); })
    .catch(function(e) {
      console.error('API Error:', e);
      throw e;
    });
}

function loadAllTrainerData(userId) {
  var now = Date.now();
  if (trainerCache.userId === userId && trainerCache.data && (now - trainerCache.timestamp) < CACHE_DURATION) {
    return Promise.resolve(trainerCache.data);
  }
 
  return apiGet({action: 'getAllData', id: userId}).then(function(data) {
    trainerCache.data = data;
    trainerCache.timestamp = Date.now();
    trainerCache.userId = userId;
    return data;
  });
}

function copyToClipboard(text) {
  if (navigator.clipboard && navigator.clipboard.writeText) {
    navigator.clipboard.writeText(text).then(function() {
      showNotification('Код скопирован в буфер обмена!');
    }).catch(function() {
      fallbackCopy(text);
    });
  } else {
    fallbackCopy(text);
  }
}

function fallbackCopy(text) {
  var ta = document.createElement('textarea');
  ta.value = text;
  ta.style.position = 'fixed';
  ta.style.top = '-9999px';
  ta.style.left = '-9999px';
  document.body.appendChild(ta);
  ta.select();
  try {
    document.execCommand('copy');
    showNotification('Код скопирован в буфер обмена!');
  } catch(e) {
    alert('Не удалось скопировать код. Попробуйте скопировать вручную.');
  }
  document.body.removeChild(ta);
}

function showNotification(message) {
  var notif = document.createElement('div');
  notif.style.cssText = 'position:fixed;bottom:20px;left:50%;transform:translateX(-50%);background:#4CAF50;color:white;padding:12px 25px;border-radius:25px;font-weight:bold;z-index:99999;box-shadow:0 3px 10px rgba(0,0,0,0.3);font-family:Arial,sans-serif;font-size:14px;transition:opacity 0.5s;';
  notif.textContent = message;
  document.body.appendChild(notif);
 
  setTimeout(function() {
    notif.style.opacity = '0';
    setTimeout(function() {
      if (notif.parentNode) document.body.removeChild(notif);
    }, 500);
  }, 3000);
}

// ===== ОСНОВНЫЕ ФУНКЦИИ МИССИЙ =====

function initMissions() {
  var listEl = document.getElementById('missionList');
  if (!listEl) return;
  listEl.innerHTML = '';
 
  for (var i = 0; i < MISSIONS.length; i++) {
    var m = MISSIONS[i];
    var div = document.createElement('div');
    div.className = 'mission-item';
   
    var bonusBadges = '';
    for (var j = 0; j < m.bonus.length; j++) {
      bonusBadges += '<span class="bonus-type-badge" data-type="' + m.bonus[j] + '">' + m.bonus[j] + '</span>';
    }
   
    div.innerHTML = '<div class="mission-item-name">' + m.name + '</div><div class="mission-bonus-types">' + bonusBadges + '</div>';
    div.onclick = (function(mission) {
      return function() { selectMission(mission, this); };
    })(m);
    listEl.appendChild(div);
  }
}

function selectMission(mission, element) {
  currentMission = mission;
  var items = document.querySelectorAll('.mission-item');
  for (var i = 0; i < items.length; i++) {
    items[i].classList.remove('active');
  }
  element.classList.add('active');
  renderMissionDetail();
}

function loadTrainerPokemons() {
  var userId = getCurrentUserId();
  if (!userId) {
    console.warn('Не удалось определить ID пользователя');
    return;
  }
 
  loadAllTrainerData(userId).then(function(data) {
    trainerCache.data = data;
    if (currentMission) renderMissionDetail();
  }).catch(function(e) {
    console.error("Ошибка загрузки покемонов", e);
  });
}

function renderMissionDetail() {
  var detailEl = document.getElementById('missionDetail');
  if (!currentMission) {
    detailEl.innerHTML = '<p>Выберите миссию слева, чтобы увидеть детали.</p>';
    return;
  }
 
  var pokeOptions = '<option value="">-- Выберите покемона --</option>';
 
  if (trainerCache.data && trainerCache.data.pokemons) {
    var pokemons = trainerCache.data.pokemons;
    for (var i = 0; i < pokemons.length; i++) {
      var p = pokemons[i];
      var isRaned = p.status === 'Ранен';
      var style = isRaned ? ' style="color:#c03028;"' : '';
      var label = p.name + ' (Ур.' + p.level + ')' + (isRaned ? ' ⚠️Ранен' : '');
      pokeOptions += '<option value="' + p.id + '" data-types="' + (p.type1 || '') + ',' + (p.type2 || '') + '" data-level="' + p.level + '" data-power="' + p.power + '" data-hp="' + p.hp + '" data-xp="' + p.xp + '" data-status="' + p.status + '" data-name="' + p.name + '"' + style + '>' + label + '</option>';
    }
  }
 
  var diffClass = currentMission.diff === 'Лёгкая' ? 'diff-easy' : (currentMission.diff === 'Средняя' ? 'diff-medium' : 'diff-hard');
  var baseChance = getBaseChance(currentMission.diff);
 
  var html = '<h3>' + currentMission.name + ' <span class="mission-difficulty ' + diffClass + '">' + currentMission.diff + '</span></h3>';
  html += '<p><strong>Тип:</strong> ' + currentMission.type + '</p>';
  html += '<p>' + currentMission.desc + '</p>';
 
  html += '<div class="mission-bonus-section">';
  html += '<strong>⭐ Бонусные стихии:</strong>';
  for (var i = 0; i < currentMission.bonus.length; i++) {
    html += '<span class="bonus-type-badge" data-type="' + currentMission.bonus[i] + '">' + currentMission.bonus[i] + '</span>';
  }
  html += '</div>';
 
  html += '<p><strong>📊 Базовая вероятность:</strong> ' + baseChance + '%</p>';
  html += '<p>✅ Успех: +' + currentMission.xp + ' XP | ❌ Провал: ' + (currentMission.dmg > 0 ? '-' + currentMission.dmg + ' HP' : 'без последствий') + '</p>';
  html += '<p>⏳ Время: ' + Math.floor(currentMission.time / 60) + ' мин.</p>';
  html += '<select class="pokemon-select" id="pokemonSelect" onchange="onPokemonChange()">' + pokeOptions + '</select>';
  html += '<div id="pokemonStatsDisplay" style="display:none;"></div>';
  html += '<div id="chanceDisplay"></div>';
  html += '<button class="btn-send" id="sendBtn" disabled onclick="startMission()">Отправить на миссию</button>';
 
  detailEl.innerHTML = html;
}

function onPokemonChange() {
  var select = document.getElementById('pokemonSelect');
  var statsDiv = document.getElementById('pokemonStatsDisplay');
  var chanceDiv = document.getElementById('chanceDisplay');
  var sendBtn = document.getElementById('sendBtn');
 
  if (!select || !select.value) {
    if (sendBtn) sendBtn.disabled = true;
    if (chanceDiv) chanceDiv.innerHTML = '';
    if (statsDiv) statsDiv.style.display = 'none';
    return;
  }
 
  var option = select.options[select.selectedIndex];
  var status = option.getAttribute('data-status') || '';
  var pokemonName = option.getAttribute('data-name') || '';
  var types = (option.getAttribute('data-types') || '').split(',');
  var level = parseInt(option.getAttribute('data-level')) || 1;
  var power = parseInt(option.getAttribute('data-power')) || 10;
  var hp = parseInt(option.getAttribute('data-hp')) || 20;
 
  if (statsDiv) {
    var typesHtml = '';
    for (var i = 0; i < types.length; i++) {
      if (types[i] && types[i].trim() !== '') {
        typesHtml += '<span class="type-badge type-' + types[i].trim() + '">' + types[i].trim() + '</span>';
      }
    }
   
    statsDiv.style.display = 'block';
    statsDiv.innerHTML = '<div class="pokemon-stats">' +
      '<h4>📊 Характеристики покемона</h4>' +
      '<div class="stat-row"><span class="stat-label">Имя:</span><span class="stat-value">' + pokemonName + '</span></div>' +
      '<div class="stat-row"><span class="stat-label">Уровень:</span><span class="stat-value">' + level + '</span></div>' +
      '<div class="stat-row"><span class="stat-label">Сила:</span><span class="stat-value">' + power + '</span></div>' +
      '<div class="stat-row"><span class="stat-label">Здоровье:</span><span class="stat-value">' + hp + ' HP</span></div>' +
      '<div class="stat-row"><span class="stat-label">Стихии:</span><div class="stat-types">' + typesHtml + '</div></div>' +
    '</div>';
  }
 
  if (status === 'Ранен') {
    chanceDiv.innerHTML = '<p style="color:#c03028;">⚠️ Этот покемон ранен и не может отправиться на миссию!</p>';
    if (sendBtn) sendBtn.disabled = true;
    return;
  }
 
  var baseChance = getBaseChance(currentMission.diff);
  var levelBonus = level * 2;
  var statBonus = 0;
  var statName = '';
 
  if (currentMission.type === 'Военная') {
    statBonus = Math.floor(power / 5);
    statName = 'Сила';
  } else {
    statBonus = Math.floor(hp / 5);
    statName = 'Здоровье';
  }
 
  var bonusTypes = [];
  var hasBonus = false;
  for (var i = 0; i < types.length; i++) {
    if (types[i] && currentMission.bonus.indexOf(types[i].trim()) !== -1) {
      bonusTypes.push(types[i].trim());
      hasBonus = true;
    }
  }
 
  var bonusChance = hasBonus ? 20 : 0;
  var totalChance = baseChance + levelBonus + statBonus + bonusChance;
  totalChance = Math.min(95, Math.max(5, totalChance));
 
  var html = '<div class="calculation-details">';
  html += '<div class="calc-row"><span>Базовая вероятность (' + currentMission.diff + ' миссия):</span><span>' + baseChance + '%</span></div>';
  html += '<div class="calc-row"><span>Уровень покемона (' + level + ' × 2):</span><span>+' + levelBonus + '%</span></div>';
  html += '<div class="calc-row"><span>' + statName + ' (' + (currentMission.type === 'Военная' ? power : hp) + ' ÷ 5):</span><span>+' + statBonus + '%</span></div>';
 
  if (hasBonus) {
    html += '<div class="calc-row bonus"><span>⭐ Бонус стихии (' + bonusTypes.join(', ') + '):</span><span>+' + bonusChance + '%</span></div>';
  } else {
    html += '<div class="calc-row"><span>Бонус стихии (нет совпадений):</span><span>+0%</span></div>';
  }
 
  html += '<div class="calc-row total"><span>🎯 Итоговый шанс успеха:</span><span>' + totalChance + '%</span></div>';
  html += '</div>';
 
  html += '<div class="chance-bar"><div class="chance-fill" style="width:' + totalChance + '%"></div></div>';
 
  if (hasBonus) {
    html += '<p class="bonus-info">⭐ Бонусная стихия! Шанс успеха увеличен на 20%!</p>';
  }
 
  if (chanceDiv) chanceDiv.innerHTML = html;
  if (sendBtn) sendBtn.disabled = false;
}

function startMission() {
  var select = document.getElementById('pokemonSelect');
  if (!select || !select.value) {
    alert('Выберите покемона!');
    return;
  }
 
  var pokemonId = select.value;
  var option = select.options[select.selectedIndex];
  var pokemonName = option.getAttribute('data-name') || option.text.split('(')[0].trim();
  var pokemonLevel = parseInt(option.getAttribute('data-level')) || 1;
  var pokemonPower = parseInt(option.getAttribute('data-power')) || 10;
  var pokemonHp = parseInt(option.getAttribute('data-hp')) || 20;
  var pokemonTypes = (option.getAttribute('data-types') || '').split(',');
 
  var baseChance = getBaseChance(currentMission.diff);
  var levelBonus = pokemonLevel * 2;
  var statBonus = 0;
 
  if (currentMission.type === 'Военная') {
    statBonus = Math.floor(pokemonPower / 5);
  } else {
    statBonus = Math.floor(pokemonHp / 5);
  }
 
  var bonusChance = 0;
  for (var i = 0; i < pokemonTypes.length; i++) {
    if (pokemonTypes[i] && currentMission.bonus.indexOf(pokemonTypes[i].trim()) !== -1) {
      bonusChance = 20;
      break;
    }
  }
 
  var chance = Math.min(95, Math.max(5, baseChance + levelBonus + statBonus + bonusChance));
 
  var userId = getCurrentUserId();
  if (!userId) {
    alert('Не удалось определить ID пользователя');
    return;
  }
 
  apiGet({
    action: 'startMission',
    tid: userId,
    pid: pokemonId,
    mission: currentMission.name,
    time: currentMission.time,
    chance: chance
  }).then(function(startRes) {
    if (!startRes.success) {
      alert('Ошибка: ' + (startRes.error || 'Не удалось начать миссию'));
      return;
    }
   
    var bbcode = generateMissionBBCode(
      pokemonName,
      pokemonId,
      chance,
      currentMission,
      userId
    );
   
    copyToClipboard(bbcode);
    alert('Миссия начата! Код скопирован в буфер обмена. Вставьте его в сообщение.');
   
  }).catch(function(e) {
    console.error(e);
    alert('Ошибка соединения: ' + e.message);
  });
}

function generateMissionBBCode(pokemonName, pokemonId, chance, mission, userId) {
  var uniqueId = 'mission-' + Date.now() + '-' + Math.floor(Math.random() * 1000000);
  var timerId = 'timer-' + uniqueId;
  var btnId = 'btn-' + uniqueId;
  var resultId = 'result-' + uniqueId;
  var endTime = Date.now() + (mission.time * 1000);
 
  var html = '<div style="background:#e3e2de;border:2px solid #676a52;border-radius:10px;padding:15px;font-family:\'Book Antiqua\',serif;max-width:550px;margin:10px auto;">';
  html += '<div style="font-weight:bold;font-size:18px;color:#39423c;">📋 Миссия: ' + mission.name + '</div>';
  html += '<div style="margin-top:10px;color:#4d5a55;">';
  html += '<p>🐾 <strong>' + pokemonName + '</strong> отправляется на задание!</p>';
  html += '<p>🎯 Шанс успеха: <span style="color:#2b6f2b;font-weight:bold;">' + chance + '%</span></p>';
  html += '<div style="background:#848a87;height:15px;border-radius:10px;overflow:hidden;margin:5px 0;">';
  html += '<div style="background:linear-gradient(90deg,#fc8181,#f6e05e,#48bb78);height:100%;width:' + chance + '%;"></div>';
  html += '</div>';
  html += '<p>✅ При успехе: +' + mission.xp + ' XP</p>';
  html += '<p>❌ При провале: ' + (mission.dmg > 0 ? '-' + mission.dmg + ' HP' : 'без последствий') + '</p>';
  html += '<p id="' + timerId + '" style="font-weight:bold;color:#c03028;font-size:16px;">⏳ Ожидание...</p>';
  html += '<div id="' + resultId + '" style="margin-top:10px;font-weight:bold;display:none;"></div>';
  html += '<button id="' + btnId + '" style="display:none;margin-top:15px;padding:10px 25px;background:#4CAF50;color:white;border:none;border-radius:25px;font-weight:bold;cursor:pointer;font-size:14px;width:100%;">🔍 Проверить результат миссии</button>';
  html += '</div>';
  html += '</div>';
 
  html += '<scr' + 'ipt>';
  html += '(function() {';
  html += 'var missionData = localStorage.getItem("' + uniqueId + '");';
  html += 'if (missionData) {';
  html += '  try {';
  html += '    var saved = JSON.parse(missionData);';
  html += '    document.getElementById("' + timerId + '").innerHTML = saved.timerText;';
  html += '    document.getElementById("' + timerId + '").style.color = saved.timerColor;';
  html += '    if (saved.showBtn) {';
  html += '      document.getElementById("' + btnId + '").style.display = "block";';
  html += '    }';
  html += '    if (saved.showResult) {';
  html += '      document.getElementById("' + resultId + '").style.display = "block";';
  html += '      document.getElementById("' + resultId + '").innerHTML = saved.resultText;';
  html += '      document.getElementById("' + resultId + '").style.color = saved.resultColor;';
  html += '    }';
  html += '  } catch(e) {}';
  html += '}';
  html += '';
  html += 'var endTime = ' + endTime + ';';
  html += 'var timerEl = document.getElementById("' + timerId + '");';
  html += 'var btnEl = document.getElementById("' + btnId + '");';
  html += 'var resultEl = document.getElementById("' + resultId + '");';
  html += 'var missionName = "' + mission.name + '";';
  html += 'var pokemonId = "' + pokemonId + '";';
  html += 'var userId = "' + userId + '";';
  html += 'var damage = ' + mission.dmg + ';';
  html += 'var xpGain = ' + mission.xp + ';';
  html += 'var chance = ' + chance + ';';
  html += 'var apiBase = "' + API_BASE + '";';
  html += 'var uniqueId = "' + uniqueId + '";';
  html += '';
  html += 'if (!timerEl) return;';
  html += '';
  html += 'function saveState() {';
  html += '  var state = {';
  html += '    timerText: timerEl.innerHTML,';
  html += '    timerColor: timerEl.style.color,';
  html += '    showBtn: btnEl.style.display === "block",';
  html += '    showResult: resultEl.style.display === "block",';
  html += '    resultText: resultEl.innerHTML,';
  html += '    resultColor: resultEl.style.color';
  html += '  };';
  html += '  localStorage.setItem(uniqueId, JSON.stringify(state));';
  html += '}';
  html += '';
  html += 'var missionCompleted = localStorage.getItem(uniqueId + "_completed");';
  html += 'if (missionCompleted === "true") {';
  html += '  return;';
  html += '}';
  html += '';
  html += 'var interval = setInterval(function() {';
  html += 'var now = Date.now();';
  html += 'var diff = Math.max(0, endTime - now);';
  html += 'if (diff <= 0) {';
  html += 'clearInterval(interval);';
  html += 'timerEl.innerHTML = "⏳ Время вышло! Нажмите кнопку для проверки результата.";';
  html += 'timerEl.style.color = "#2b6f2b";';
  html += 'btnEl.style.display = "block";';
  html += 'saveState();';
  html += 'return;';
  html += '}';
  html += 'var mins = Math.floor(diff / 60000);';
  html += 'var secs = Math.floor((diff % 60000) / 1000);';
  html += 'timerEl.innerHTML = "⏳ Осталось: " + mins + ":" + (secs < 10 ? "0" : "") + secs;';
  html += 'saveState();';
  html += '}, 1000);';
  html += '';
  html += 'function checkMissionResult() {';
  html += 'if (btnEl.textContent === "⏳ Обработка...") return;';
  html += 'btnEl.textContent = "⏳ Обработка...";';
  html += 'btnEl.style.background = "#848a87";';
  html += 'btnEl.disabled = true;';
  html += '';
  html += 'var roll = Math.floor(Math.random() * 100) + 1;';
  html += 'var success = roll <= chance;';
  html += '';
  html += 'var xp = success ? xpGain : 0;';
  html += 'var dmg = success ? 0 : damage;';
  html += '';
  html += 'var url = apiBase + "?action=completeMission&tid=" + userId + "&pid=" + pokemonId + "&mission=" + encodeURIComponent(missionName) + "&result=" + (success ? "success" : "fail") + "&damage=" + dmg + "&xp=" + xp;';
  html += '';
  html += 'fetch(url)';
  html += '.then(function(r) { return r.json(); })';
  html += '.then(function(data) {';
  html += 'if (data.success) {';
  html += 'resultEl.style.display = "block";';
  html += 'if (success) {';
  html += 'resultEl.innerHTML = "🎉 <strong>УСПЕХ!</strong> Миссия выполнена! Получено +" + xpGain + " XP!";';
  html += 'resultEl.style.color = "#2b6f2b";';
  html += 'timerEl.innerHTML = "✅ Миссия успешно завершена! +" + xpGain + " XP";';
  html += '} else {';
  html += 'resultEl.innerHTML = "💔 <strong>ПРОВАЛ!</strong> Миссия не выполнена! ' + (mission.dmg > 0 ? 'Потеряно ' + mission.dmg + ' HP' : 'Без последствий') + '";';
  html += 'resultEl.style.color = "#c03028";';
  html += 'timerEl.innerHTML = "❌ Миссия провалена! ' + (mission.dmg > 0 ? 'Потеряно ' + mission.dmg + ' HP' : 'Без последствий') + '";';
  html += '}';
  html += 'btnEl.textContent = "✅ Готово";';
  html += 'btnEl.style.background = "#848a87";';
  html += 'btnEl.disabled = true;';
  html += 'localStorage.setItem(uniqueId + "_completed", "true");';
  html += 'saveState();';
  html += '} else {';
  html += 'resultEl.style.display = "block";';
  html += 'resultEl.innerHTML = "❌ Ошибка при завершении миссии. Попробуйте позже.";';
  html += 'resultEl.style.color = "#c03028";';
  html += 'btnEl.textContent = "🔍 Попробовать снова";';
  html += 'btnEl.style.background = "#4CAF50";';
  html += 'btnEl.disabled = false;';
  html += '}';
  html += '})';
  html += '.catch(function(e) {';
  html += 'resultEl.style.display = "block";';
  html += 'resultEl.innerHTML = "❌ Ошибка соединения. Попробуйте позже.";';
  html += 'resultEl.style.color = "#c03028";';
  html += 'btnEl.textContent = "🔍 Попробовать снова";';
  html += 'btnEl.style.background = "#4CAF50";';
  html += 'btnEl.disabled = false;';
  html += 'console.error(e);';
  html += '});';
  html += '}';
  html += '';
  html += 'btnEl.onclick = checkMissionResult;';
  html += '})();';
  html += '</scr' + 'ipt>';
 
  return '[html]' + html + '[' + '/html]';
}

// ===== ИНИЦИАЛИЗАЦИЯ =====
if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', function() {
    initMissions();
    setTimeout(loadTrainerPokemons, 300);
  });
} else {
  initMissions();
  setTimeout(loadTrainerPokemons, 300);
}
</script>
[/html]

0

27

[html]<div class="ms-result-card" id="ms-rc-ms_1786268216628_yuytw59g"><div class="ms-rc-title">🗺️ Покемон на миссии</div><div class="ms-rc-poke">Пикачу (Ур.2)</div><div class="ms-rc-mission">Миссия: Починка генератора [Лёгкая]</div><div class="ms-rc-chance">Шанс успеха: 95%</div><div class="ms-rc-timer" id="ms-timer-ms_1786268216628_yuytw59g">02:00</div><div id="ms-result-ms_1786268216628_yuytw59g"></div></div><script>(function() {
        var missionRecordId = arguments[0];
        var endTimeMs = arguments[1];
        var isSuccess = arguments[2];
        var totalSeconds = arguments[3];
        var pokemonName = arguments[4];
        var xpReward = arguments[5];
        var failHp = arguments[6];
        var newXp = arguments[7];
        var newLevel = arguments[8];
        var levelUp = arguments[9];
        var newHp = arguments[10];
       
        function updateTimer() {
            var now = Date.now();
            var remaining = Math.max(0, Math.floor((endTimeMs - now) / 1000));
            var timerEl = document.getElementById('ms-timer-' + missionRecordId);
            if (timerEl) {
                if (remaining > 0) {
                    timerEl.textContent = (function(s){var m=Math.floor(s/60);var sec=s%60;return (m<10?'0':'')+m+':'+(sec<10?'0':'')+sec;})(remaining);
                    setTimeout(updateTimer, 1000);
                } else {
                    timerEl.textContent = '00:00';
                    var resultEl = document.getElementById('ms-result-' + missionRecordId);
                    if (resultEl) {
                        if (isSuccess) {
                            var successHtml = '<div class="ms-rc-result ms-result-success">\u2705 \u0423\u0441\u043F\u0435\u0445! +' + xpReward + ' XP</div>';
                            if (levelUp) successHtml += '<div class="ms-rc-levelup">\u2B06\uFE0F \u0423\u0440\u043E\u0432\u0435\u043D\u044C \u043F\u043E\u0432\u044B\u0448\u0435\u043D \u0434\u043E ' + newLevel + '!</div>';
                            successHtml += '<div class="ms-rc-effects">' + pokemonName + ': XP ' + (isSuccess ? newXp : '') + '/100, \u0423\u0440.' + newLevel + '</div>';
                            resultEl.innerHTML = successHtml;
                        } else if (failHp > 0) {
                            resultEl.innerHTML = '<div class="ms-rc-result ms-result-fail">\u274C \u041F\u0440\u043E\u0432\u0430\u043B: -' + failHp + ' HP</div><div class="ms-rc-effects">' + pokemonName + ': HP ' + newHp + ', \u0423\u0440.' + newLevel + '</div>';
                        } else {
                            resultEl.innerHTML = '<div class="ms-rc-result ms-result-fail">\u274C \u041F\u0440\u043E\u0432\u0430\u043B: \u0431\u0435\u0437 \u043F\u043E\u0441\u043B\u0435\u0434\u0441\u0442\u0432\u0438\u0439</div>';
                        }
                    }
                }
            }
        }
        updateTimer();
    })("ms_1786268216628_yuytw59g",1786268336628,true,120,"Пикачу",23,0,103,3,true,40);</script>[/html]

0

28

[html]<div class="ms-result-card" id="ms-rc-ms_1786294349584_teeaj0j8"><div class="ms-rc-title">Покемон на миссии</div><div class="ms-rc-poke">Понита (Ур.4)</div><div class="ms-rc-mission">Миссия: Освещение тоннелей [Лёгкая]</div><div class="ms-rc-chance">Шанс успеха: 95%</div><div class="ms-rc-timer" id="ms-timer-ms_1786294349584_teeaj0j8">02:00</div><div id="ms-result-ms_1786294349584_teeaj0j8"></div><button id="ms-accept-ms_1786294349584_teeaj0j8" class="ms-btn-send" style="margin-top:8px;background:#4a6741;border-color:#2d4a2d;display:none;" onclick="(function(){var b=document.getElementById('ms-accept-ms_1786294349584_teeaj0j8');if(b){b.disabled=true;b.textContent='Загрузка отчёта...';}var x=new XMLHttpRequest();x.open('GET','https://script.google.com/macros/s/AKfycbyL15prVk03_5eAJMHRiA8RvGDYJYQ2Q4qj_l61cmqMtknceKHcz9XVEocTTlhkfZyl/exec?action=completeMissionAction&tid=2&missionRecordId=ms_1786294349584_teeaj0j8',true);x.onload=function(){var r=JSON.parse(x.responseText);var re=document.getElementById('ms-result-ms_1786294349584_teeaj0j8');var ac=document.getElementById('ms-accept-ms_1786294349584_teeaj0j8');var ti=document.getElementById('ms-timer-ms_1786294349584_teeaj0j8');if(ti)ti.textContent='00:00';if(ac)ac.style.display='none';if(re&&r.success){if(r.isSuccess){re.innerHTML='<div class=ms-rc-result ms-result-success>Успех! +24 XP</div>'+(r.levelUp?'<div class=ms-rc-levelup>Уровень повышен до '+r.newLevel+'!</div>':'')+'<div class=ms-rc-effects>Понита: XP '+r.newXp+'/100, Ур.'+r.newLevel+'</div>';}else if(r.failHp>0){re.innerHTML='<div class=ms-rc-result ms-result-fail>Провал: -'+r.failHp+' HP</div><div class=ms-rc-effects>Понита: HP '+r.newHp+', Ур.'+r.newLevel+'</div>';}else{re.innerHTML='<div class=ms-rc-result ms-result-fail>Провал: без последствий</div>';}}else{if(ac){ac.disabled=false;ac.textContent='Принять отчёт';}alert('Ошибка: '+(r.error||'неизвестна'));}};x.onerror=function(){var ac2=document.getElementById('ms-accept-ms_1786294349584_teeaj0j8');if(ac2){ac2.disabled=false;ac2.textContent='Принять отчёт';}alert('Ошибка соединения');};x.send();})()">Принять отчёт</button></div><script>(function(missionRecordId, endTimeMs, totalSeconds) {
    function updateTimer() {
        var now = Date.now();
        var remaining = Math.max(0, Math.floor((endTimeMs - now) / 1000));
        var timerEl = document.getElementById('ms-timer-' + missionRecordId);
        var acceptBtn = document.getElementById('ms-accept-' + missionRecordId);
       
        if (timerEl) {
            if (remaining > 0) {
                var m = Math.floor(remaining / 60);
                var s = remaining % 60;
                timerEl.textContent = (m < 10 ? '0' : '') + m + ':' + (s < 10 ? '0' : '') + s;
                if (acceptBtn) acceptBtn.style.display = 'none';
                setTimeout(updateTimer, 1000);
            } else {
                timerEl.textContent = '00:00';
                if (acceptBtn) acceptBtn.style.display = 'block';
            }
        }
    }
    updateTimer();
})("ms_1786294349584_teeaj0j8",1786294469584,120);</script>[/html]

0


Вы здесь » Хранилище » Анкеты » Оформление локаций