Guest User

Untitled

a guest
Feb 22nd, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.72 KB | None | 0 0
  1. var AppCampaign = function () {
  2.  
  3. var reset_cost = parseInt($('#buy-credits-button').attr('data-id'), 10);
  4. var user_credits = parseInt($('#user_credits').text(), 10);
  5.  
  6. var waiting_fight = false;
  7. var try_count = 0;
  8. var timerId;
  9.  
  10. var currentCampaign = $('.p-campaign').data('campaign'); // campaign name - кампания
  11. var currentScenario = $('.scenario').data('scenario'); // n - сценарий
  12. var currentPart = -1; // n - часть сценария
  13. var currentPostBattle = $('.p-campaign').data('postbattle'); // определяет postbattle
  14.  
  15. // уменьшаем currentScenario на 1, так как нужно показать завершение прошлого сценария
  16. if(currentPostBattle) {
  17. currentScenario--;
  18. }
  19.  
  20. var partTemplate = $('.scenario .part');
  21. var characterTemplate = $('.scenario .character');
  22.  
  23. // В этом прекрасном массиве хранятся персонажи - кто где стоит и кто говорит [слева, справа, говорит]
  24. // Все картинки геров по умолчанию должны быть прилеплены к левой части экрана, зеркальное отражение автоматически.
  25. var characters = {};
  26. var BattleBackground = {}; // фон боя
  27.  
  28. BattleBackground['campaign_01'] = [
  29. aune.image('p/campaign/campaign_01/globus.png'),
  30. aune.image('p/campaign/campaign_01/red.png'),
  31. aune.image('p/campaign/campaign_01/bar.png'),
  32. aune.image('p/campaign/campaign_01/fox.png'),
  33. aune.image('p/campaign/campaign_01/tubes.png'),
  34. aune.image('p/campaign/campaign_01/hole.png'),
  35. aune.image('p/campaign/campaign_01/brain.png'),
  36. ];
  37.  
  38. characters['campaign_01'] = [
  39.  
  40. // scenario 0
  41. [
  42. [
  43. [['sled'], ['tyrrano'], 'right'],
  44. [['sled'], ['tyrrano'], 'left'],
  45. [['sled'], ['jeff'], 'right'],
  46. [['sled-jeff'], ['tinsel'], 'left'],
  47. [['sled-jeff'], ['tinsel'], 'right']
  48. ],
  49. [
  50. [['sled'], ['tinsel'], 'left'],
  51. [['sled'], ['tinsel'], 'right'],
  52. [['jeff'], ['tinsel'], 'left'],
  53. [['jeff'], ['tinsel'], 'right'],
  54. [['sled'], ['tinsel'], 'left']
  55. ]
  56. ],
  57.  
  58. // scenario 1
  59. [
  60. [
  61. [['sled'], [''], 'left'],
  62. [['sled'], ['simur'], 'right'],
  63. [['sled'], ['simur'], 'left']
  64. ],
  65. [
  66. [['sled-jeff'], ['tinsel'], 'left'],
  67. [['sled-jeff'], ['tinsel'], 'right'],
  68. [['sled-jeff'], ['tinsel'], 'left']
  69. ]
  70. ],
  71.  
  72. // scenario 2
  73. [
  74. [
  75. [['tinsel'], ['paddy'], 'left'],
  76. [['tinsel'], ['paddy'], 'right'],
  77. [['jeff'], ['paddy'], 'left']
  78. ],
  79. [
  80. [['sled'], ['roxy'], 'right'],
  81. [['sled'], ['roxy'], 'left']
  82. ]
  83. ],
  84.  
  85. // scenario 3
  86. [
  87. [
  88. [['sled-jeff'], ['arlen'], 'right'],
  89. [['sled-jeff'], ['arlen'], 'left']
  90. ],
  91. [
  92. [['sled-jeff'], ['arlen'], 'right'],
  93. [['sled-jeff'], ['arlen'], 'left'],
  94. [['sled-jeff'], ['arlen'], 'right']
  95. ]
  96. ],
  97.  
  98. // scenario 4
  99. [
  100. [
  101. [['sled'], ['gladis'], 'right'],
  102. [['sled'], ['gladis'], 'left'],
  103. [['sled'], ['gladis'], 'right']
  104. ],
  105. [
  106. [['sled', 'tinsel'], ['gladis'], 'right'],
  107. [['sled', 'tinsel'], ['gladis'], 'left'],
  108. [['sled', 'tinsel'], ['gladis'], 'right'],
  109. [['tinsel'], ['gladis'], 'right'],
  110. [['tinsel'], ['gladis'], 'left'],
  111. [['tinsel'], ['gladis'], 'right'],
  112. [['sled'], [''], 'left']
  113. ]
  114. ],
  115.  
  116. // scenario 5
  117. [
  118. [
  119. [['sled-jeff'], ['tinsel'], 'left'],
  120. [['sled-jeff'], ['tinsel'], 'right']
  121. ],
  122. [
  123. [['sled'], ['murphy'], 'right'],
  124. [['sled'], ['murphy'], 'left'],
  125. [['sled'], ['murphy'], 'right']
  126. ]
  127. ],
  128.  
  129. // scenario 6
  130. [
  131. [
  132. [[''], ['frank'], 'right'],
  133. [['sled-jeff'], ['frank'], 'left'],
  134. [['sled-jeff'], ['frank'], 'right']
  135. ],
  136. [
  137. [['sled'], ['frank'], 'right'],
  138. [['sled'], ['roy'], 'right'],
  139. [['sled'], ['roy'], 'left'],
  140. [['sled'], ['roy'], 'right'],
  141. [['sled'], ['jeff-tinsel'], 'left'],
  142. [['sled'], ['jeff-tinsel'], 'right'],
  143. [['sled'], ['jeff-tinsel'], 'right'],
  144. [['sled'], ['jeff-tinsel'], 'left']
  145. ]
  146. ]
  147. ];
  148.  
  149. var initUI = function() {
  150.  
  151. console.log('AppCampaign init... current scenario: ' + currentScenario);
  152.  
  153. loadBattleScripts();
  154.  
  155. $('#play-campaign').click( function() {
  156. initScenario();
  157. });
  158.  
  159. $('.button-next').click( function() {
  160. nextPart();
  161. });
  162.  
  163. $(document).on('click', '#fight-button', function(event) {
  164. waitingBattle();
  165. });
  166.  
  167. if(currentPostBattle) {
  168. initScenario();
  169. }
  170.  
  171. // для тестов до/после боя
  172. $('.test-container .before').on('click', function () {
  173. showTest(0);
  174. });
  175. $('.test-container .after').on('click', function () {
  176. showTest(1);
  177. });
  178.  
  179. // Покупка жизней за кредиты
  180. $("#buy-credits-button").click( function() {
  181. var buy = confirm("Вы действительно хотите заплатить " + reset_cost + " кредитов за досрочное восстановление жизней?");
  182. console.log('Покупаем...');
  183. if (buy) {
  184. buyLife();
  185. }
  186. });
  187.  
  188. // Покупка за реальные деньги
  189. $("#campaign_reset_cooldown").click( function() {
  190. buyLifeXsolla($(this).attr('id'));
  191. });
  192.  
  193. // Призы
  194. $("#show-prize-button").click( function() {
  195. App.openModal($("#show-prize"));
  196. });
  197. };
  198.  
  199. var waitForCampaignBattleScripts = function (){
  200. console.log('Loading battle scripts...');
  201. if(typeof window.frames[0].frameElement.contentWindow.start_campaign != "function"){
  202. setTimeout(waitForCampaignBattleScripts, 300);
  203. } else {
  204. return true;
  205. }
  206. };
  207.  
  208. // Показать слайды для тестовых просмотров
  209. var showTest = function (before_after) {
  210. currentScenario = $('.test-container option:selected').val();
  211. currentPart = -1;
  212. currentPostBattle = before_after;
  213.  
  214. initScenario();
  215. };
  216.  
  217. // Определяем текущий сценарий, показываем его первую часть
  218. var initScenario = function () {
  219. $('.p-campaign').hide();
  220. $('.scenario').css('display', 'flex');
  221. nextPart();
  222. };
  223.  
  224. // Возвращаемся назад в главное окно из сценария
  225. var backFromScenario = function () {
  226. $('.p-campaign').show();
  227. $('.scenario').css('display', 'none');
  228. $('#play-campaign').hide();
  229. $('#fight-button').show();
  230. };
  231.  
  232. // Скрываем прочитанную часть, заполняем следующую, показываем следующую
  233. var nextPart = function () {
  234.  
  235. partTemplate.hide();
  236. cleanPart();
  237. currentPart++;
  238.  
  239. // Существует ли текущий currentPart
  240. if(currentPart <= characters[currentCampaign][currentScenario][currentPostBattle].length-1) {
  241. fillPart(currentPart,currentPostBattle);
  242. partTemplate.show();
  243. } else {
  244. backFromScenario();
  245.  
  246. // Если это был currentPostBattle, то обнуляем все
  247. if(currentPostBattle) {
  248. window.location.replace("/"+currentCampaign);
  249. }
  250. }
  251. };
  252.  
  253. // Очищаем часть (классы картинок, текст)
  254. var cleanPart = function () {
  255.  
  256. partTemplate.find('.character.left').remove();
  257. partTemplate.find('.character.right').remove();
  258. partTemplate.find('.speech-bubble').removeClass().addClass('speech-bubble');
  259. partTemplate.find('.speech-bubble .part-text').html('');
  260.  
  261. };
  262.  
  263. // Заполняем часть - выставляем правильные картинки и текст
  264. var fillPart = function (part, before_after) {
  265.  
  266. console.log('currentCampaign:'+currentCampaign);
  267. console.log('currentScenario:'+currentScenario);
  268. console.log('part:'+part);
  269. // flipCharacter(currentPart);
  270.  
  271. // Особенности для некоторых частей кампании
  272. if(currentCampaign == 'campaign_01' && currentScenario == 0 && before_after == 0 && part == 0 ) {
  273. partTemplate.addClass('part-start');
  274. }
  275. if(currentCampaign == 'campaign_01' && currentScenario == 0 && before_after == 0 && part == 3 ) {
  276. partTemplate.removeClass('part-start');
  277. }
  278. if(currentCampaign == 'campaign_01' && currentScenario == 6 && before_after == 1 && part == 4 ) {
  279. partTemplate.addClass('part-end');
  280. }
  281.  
  282. $.each( characters[currentCampaign][currentScenario][before_after][part][0], function( key, value ) {
  283. characterTemplate.clone().addClass('left').addClass('left'+key).addClass(value).appendTo(partTemplate);
  284. });
  285.  
  286. $.each( characters[currentCampaign][currentScenario][before_after][part][1], function( key, value ) {
  287. characterTemplate.clone().addClass('right').addClass(value).appendTo(partTemplate);
  288. });
  289.  
  290. partTemplate.find('.speech-bubble').addClass(characters[currentCampaign][currentScenario][before_after][part][2]);
  291.  
  292. // Вставляем текст из transl
  293. var scenario = transl['campaign'][currentCampaign]['scenario_' + currentScenario];
  294. if(scenario && scenario[before_after][part]) {
  295. partTemplate.find('.speech-bubble .part-text').html(scenario[before_after][part]);
  296. }
  297.  
  298. };
  299.  
  300. var waitingBattle = function() {
  301.  
  302. $.ajax({
  303. url: '/'+currentCampaign+'/',
  304. data: {'waiting_battle': 'yes'},
  305. type: 'post',
  306.  
  307. beforeSend: function() {
  308. $('.p-campaign #fight-button').addClass('animated pulse');
  309. setTimeout(function () {
  310. $('.p-campaign #fight-button').css('opacity', 0);
  311. }, 150);
  312. },
  313.  
  314. success: function(data) {
  315. var data = JSON.parse(data);
  316.  
  317. if(data.error == 1) {
  318. // можно еще раз попытаться встать в очередь
  319. waiting_fight = false;
  320.  
  321. // вывести ошибку
  322. console.log(data);
  323. } else {
  324. console.log('Ищем бота...');
  325.  
  326. try_count = 0;
  327. timerId = setInterval(checkFight, 1000);
  328. }
  329. }
  330. });
  331. };
  332.  
  333. var checkFight = function() {
  334.  
  335. $.ajax({
  336. url: '/'+currentCampaign+'/',
  337. data: {'search_battle': 'yes'},
  338. type: 'post',
  339.  
  340. beforeSend: function() {
  341. console.log('tic tac');
  342. },
  343.  
  344. success: function(data) {
  345. var data = JSON.parse( data );
  346.  
  347. if( data.error == 1 ) {
  348. ++try_count;
  349.  
  350. if( try_count >= 3600 ) {
  351. $("#fight-button").show();
  352. clearInterval(timerId);
  353. try_count = 0;
  354. }
  355. } else {
  356. // console.log(data);
  357. console.log('KlanzJS');
  358. clearInterval(timerId);
  359.  
  360. $('#battle-container').fadeIn();
  361.  
  362. if(waitForCampaignBattleScripts()) {
  363. window.frames[0].frameElement.contentWindow.start_campaign(data.post_combat_url, BattleBackground[currentCampaign][currentScenario]);
  364. }
  365. }
  366. }
  367. });
  368. };
  369.  
  370. // Покупка жизней за кредиты
  371. var buyLife = function() {
  372. if(user_credits < reset_cost) {
  373. alert('У вас недостаточно кредитов для покупки жизней!');
  374. } else {
  375. $.ajax({
  376. url: '/'+currentCampaign+'/',
  377. data: {'buy_life': 'yes'},
  378. type: 'post',
  379.  
  380. success: function(json_data) {
  381. console.log("Campaign hearts bought: " + json_data);
  382.  
  383. alert('Жизни куплены. Узнайте чем закончится история кампании!');
  384. document.location = '/' + currentCampaign + '/';
  385. }
  386. });
  387. }
  388.  
  389. };
  390.  
  391. var buyLifeXsolla = function (sku) {
  392. $.ajax({
  393. url: '/xsolla_item_selector/',
  394. data: {'sku': sku },
  395. type: 'post',
  396.  
  397. beforeSend: function() {
  398. },
  399.  
  400. error: function (jqXHR, exception) {
  401. var msg = '';
  402. if (jqXHR.status === 0) {
  403. msg = 'Not connect.\n Verify Network.';
  404. } else if (jqXHR.status == 404) {
  405. msg = 'Requested page not found. [404]';
  406. } else if (jqXHR.status == 500) {
  407. msg = 'Internal Server Error [500].';
  408. } else if (exception === 'parsererror') {
  409. msg = 'Requested JSON parse failed.';
  410. } else if (exception === 'timeout') {
  411. msg = 'Time out error.';
  412. } else if (exception === 'abort') {
  413. msg = 'Ajax request aborted.';
  414. } else {
  415. msg = 'Uncaught Error.\n' + jqXHR.responseText;
  416. }
  417. console.log(msg);
  418. },
  419.  
  420. success: function(data) {
  421.  
  422. try {
  423. var token = JSON.parse( data );
  424. } catch(e) {
  425. console.log(data);
  426. return;
  427. }
  428.  
  429. var options = {
  430. access_token: token,
  431. host: 'secure.xsolla.com'
  432. //sandbox: true
  433. };
  434.  
  435. var s = document.createElement('script');
  436. s.type = "text/javascript";
  437. s.async = true;
  438. s.src = "//static.xsolla.com/embed/paystation/1.0.7/widget.min.js";
  439. s.addEventListener('load', function (e) {
  440. console.log('Инициализируем XPay виджет...');
  441. XPayStationWidget.init(options);
  442. console.log('Открываем XPay виджет...');
  443. XPayStationWidget.open();
  444. }, false);
  445. var head = document.getElementsByTagName('head')[0];
  446. head.appendChild(s);
  447.  
  448. }
  449. });
  450.  
  451. };
  452.  
  453. return {
  454. init: function () {
  455. initUI();
  456. }
  457. };
  458.  
  459. }();
  460.  
  461. if ($('.p-campaign').length){
  462. AppCampaign.init();
  463. }
Add Comment
Please, Sign In to add comment