Advertisement
magrega

citadels js

Jul 13th, 2022
1,063
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.  /* jshint esversion: 6 */
  3. /*
  4. ����������������� ����������
  5.  
  6. game_uiaction - �������� ������
  7. game_roles - ������� � ���������� ����� ���� {'role': '������� ��������'}
  8. game_names - ����� �������
  9. game_update_link - ������ ��� ��������� ���������
  10. game_me - ����� ������
  11. */
  12.  
  13.  
  14. var game_to = false;
  15. var log_step = false;
  16. var logs_v = -1; //0 = ������������ ��� ���������; -1 = �������� ���������
  17. var logs = [];
  18.  
  19. //////////////////////////////МОИ ПЕРЕМЕННЫЕ DOM/////////////////////////////////////////////
  20.  
  21. var topwrapper = document.createElement('div');
  22. topwrapper.setAttribute('id', 'top-wrapper');
  23. document.body.append(topwrapper);
  24.  
  25. var citadelWrapper = document.createElement('div');
  26. citadelWrapper.setAttribute('id', 'citadelWrapper');
  27. document.querySelector('#top-wrapper').append(citadelWrapper);
  28.  
  29. var citadelCardsMyCitadel = document.createElement('div');
  30. citadelCardsMyCitadel.setAttribute('class', 'cards-container myCitadel');
  31. document.querySelector('#citadelWrapper').append(citadelCardsMyCitadel);
  32.  
  33.  
  34. var roleOrder = document.getElementById("role-order");
  35. roleOrder.classList.add("firstLine");
  36. var gameActions = document.getElementById("game-actions");
  37. gameActions.classList.add("firstLine");
  38.  
  39.  
  40. var topWrapperDivs = document.querySelectorAll('.firstLine');
  41.  
  42. for (var i = 0; i < topWrapperDivs.length; i++) {
  43.     topwrapper.appendChild(topWrapperDivs[i]);
  44. }
  45.  
  46. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47.  
  48. function game_update() {
  49.     game_update_real(game_uiaction, '');
  50. }
  51.  
  52. function game_update_uiaction(uiaction) {
  53.     game_uiaction = uiaction;
  54.     game_update_real(uiaction, '');
  55. }
  56.  
  57. function game_update_params(params) {
  58.     game_update_real('', params);
  59. }
  60.  
  61. function game_translate(s) {
  62.     s = s.replace(/[~@#+&^%=]/, '');
  63.  
  64.     for (var r in game_roles) {
  65.         s = s.replace('[' + r + ']', game_roles[r]);
  66.  
  67.  
  68.  
  69.     }
  70.     for (var r in game_names) {
  71.         s = s.replace('{' + r + '}', game_names[r]);
  72.  
  73.     }
  74.     return s;
  75. }
  76.  
  77. function game_log_step() {
  78.     var stop = false;
  79.     var tradeSlice = " ";
  80.     var rolesArray = [];
  81.     while (!stop && (logs_v + 1 < logs.length)) {
  82.         logs_v++;
  83.         var s = logs[logs_v];
  84.  
  85.  
  86.         if (-1 != s.indexOf('~')) {
  87.             var r = s.replace('~', '').match(/\[([a-z]+)\]/);
  88.  
  89.             if (r) {
  90.                 r = r[1];
  91.  
  92.                 $('div.role').removeClass('role-current');
  93.                 $('div#role-' + r).addClass('role-current');
  94.  
  95.  
  96.             }
  97.         } else {
  98.             var r = s.match(/\[([a-z]+)\] \{([\-]?[0-9]+)\}/);
  99.  
  100.  
  101.  
  102.             if (r) {
  103.  
  104.  
  105.                 trade = document.getElementById('role-' + r[1]).firstChild.data;
  106.                 tradeSlice = trade.slice(0, 1);
  107.                 tradeFull = trade.slice(0);
  108.  
  109.                 $('div#role-' + r[1] + ' span.role-player').html(game_names[r[2]]);
  110.  
  111.                 $('div#role-' + r[1] + ' span.role-player').show();
  112.  
  113.  
  114.                 if ($('div#role-' + r[1] + ' span.role-player').text().length > 0) {
  115.                     document.getElementById('role-' + r[1]).firstChild.data = tradeSlice;
  116.                 }
  117.  
  118.                 if (document.getElementById('role-' + r[1]).firstChild.data.length > 7) {
  119.                     $('div#role-' + r[1]).css("fontSize", 14);
  120.                 }
  121.  
  122.                 stop = true;
  123.             }
  124.  
  125.  
  126.  
  127.             if (-1 != s.indexOf('@')) {
  128.                 $('div.role').removeClass('role-current');
  129.                 $('div.role span.role-player').html("");
  130.                 $('div.role span.role-player').hide();
  131.                 $('.role-penalty').hide();
  132.                 $('.role-closed').hide();
  133.  
  134.                 var roles = document.querySelectorAll('.role');
  135.  
  136.  
  137.                 for (var key in game_roles) {
  138.                     rolesArray.push(game_roles[key]);
  139.                 }
  140.  
  141.                 for (var i = 0; i < roles.length; i++) {
  142.                     roles[i].firstChild.data = rolesArray[i];
  143.  
  144.                 }
  145.  
  146.  
  147.                 stop = false;
  148.             }
  149.             if (-1 != s.indexOf('^')) {
  150.                 var re = /\[([a-z]+)\]/g;
  151.                 var rm = [];
  152.                 var m;
  153.  
  154.                 while (m = re.exec(s)) {
  155.                     rm.push(m[1]);
  156.  
  157.                 }
  158.                 if (rm.length >= 2) {
  159.                     $('div#role-closed-' + rm[1]).fadeIn("slow");
  160.  
  161.                     stop = true;
  162.                 }
  163.             } else if (-1 != s.indexOf('%')) {
  164.                 var re = /\[([a-z]+)\]/g;
  165.                 var rm = [];
  166.                 var m;
  167.                 while (m = re.exec(s)) {
  168.                     rm.push(m[1]);
  169.                 }
  170.                 if (rm.length >= 2) {
  171.                     $('div#role-penalty-' + rm[1]).fadeIn("slow");
  172.                     stop = true;
  173.                 }
  174.             } else if (-1 != s.indexOf('+')) {
  175.                 var coins = s.substr(s.indexOf('+') + 1, 1);
  176.                 if (r && coins) {
  177.                     $('div#role-coin-' + r[1]).html(coins);
  178.  
  179.                     if ($('div#role-penalty-' + r[1]).css('display') === "block") {
  180.  
  181.                         $('div#role-penalty-' + r[1]).fadeOut('fast', function () {
  182.                             $('div#role-coin-' + r[1]).fadeIn("slow").fadeOut("slow", function () {
  183.                                 $('div#role-penalty-' + r[1]).fadeIn('fast');
  184.                             });
  185.  
  186.                         });
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.                     } else {
  194.  
  195.                         $('div#role-coin-' + r[1]).fadeIn("slow").fadeOut("slow");
  196.  
  197.  
  198.                     }
  199.  
  200.  
  201.  
  202.                     stop = false;
  203.                 }
  204.             } else if (-1 != s.indexOf('#')) {
  205.                 var cards = s.substr(s.indexOf('#') + 1, 1);
  206.                 if (r && cards) {
  207.  
  208.                     $('div#role-card-' + r[1]).html(cards);
  209.  
  210.  
  211.                     if ($('div#role-closed-' + r[1]).css('display') === "block") {
  212.  
  213.  
  214.                         $('div#role-closed-' + r[1]).fadeOut('fast', function () {
  215.                             $('div#role-card-' + r[1]).fadeIn("slow").fadeOut("slow", function () {
  216.                                 $('div#role-closed-' + r[1]).fadeIn('fast');
  217.                             });
  218.  
  219.                         });
  220.  
  221.  
  222.  
  223.                     } else {
  224.                         $('div#role-card-' + r[1]).fadeIn("slow").fadeOut("slow");
  225.                     }
  226.  
  227.  
  228.  
  229.                     stop = false;
  230.  
  231.                 }
  232.             } else if (-1 != s.indexOf('&')) {}
  233.         }
  234.         $('#game-log-current').html(game_translate(s));
  235.     }
  236.     if (logs_v + 1 < logs.length) {
  237.  
  238.         log_step = setTimeout(game_log_step, 1000);
  239.     } else {
  240.         log_step = false;
  241.     }
  242. }
  243.  
  244. function game_update_log(l) {
  245.     if (l.length > logs.length) {
  246.         var c = document.getElementById('log');
  247.         for (var i = logs.length; i < l.length; i++) {
  248.             var s = l[i];
  249.             $('#game-log-full').prepend($("<div>" + game_translate(s) + "</div>"));
  250.         }
  251.         logs = l;
  252.         if (logs_v < 0) {
  253.             logs_v = logs.length - 1;
  254.         }
  255.         if (logs_v == 0 && logs.length) {
  256.             $('#game-log-current').html(game_translate(logs[0]));
  257.         }
  258.         if (!log_step) {
  259.             log_step = setTimeout(game_log_step, 1000);
  260.         }
  261.     }
  262. }
  263.  
  264. function game_update_real(uiaction, params) {
  265.     if (game_to) {
  266.         clearTimeout(game_to);
  267.         game_to = false;
  268.     }
  269.     var lnk = game_update_link;
  270.     if ('' != uiaction) lnk += "&uiaction=" + uiaction;
  271.     lnk += params;
  272.     $.getJSON(lnk, function (data) {
  273.         game_names = data['names'];
  274.         game_uiaction = data['uiaction'];
  275.  
  276.         $('#game-go').html(data['divs']['go']);
  277.  
  278.         if ($('#coin').length) {
  279.  
  280.             $('#top-wrapper').find('#coin').html('<span>' + data['gold'] + '</span>');
  281.  
  282.         } else {
  283.  
  284.             $('#top-wrapper').append('<div id="coin" class="firstLine"><span>' + data['gold'] + '</span></div>');
  285.             $('#coin').insertAfter('#role-order');
  286.         }
  287.  
  288.  
  289.         $('#game-action-title').html(data['action-title'] ? '<div class="action-title">' + data['action-title'] + '</div>' : '');
  290.         $('#game-actions').html(data['divs']['actions']);
  291.         $('#game-hand').html(data['divs']['hand']);
  292.         $('#hand').children('div').addClass("handcards");
  293.  
  294.  
  295. ////////////////////////////////////////////////////РАБОТА НАД РАЗДАЧЕЙ ИМЕН ИГРОКАМ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  296.        
  297.         data['divs']['citadels'].forEach((element, index) => {
  298.             if (index === game_me) {
  299.                 if ($('#citadelWrapper').find('td').length) {
  300.                     $('#citadelWrapper').find('td').html(
  301.                         '<div class="player-name' + (index == game_me ? ' player-me' : '') +
  302.                         (index == data['minister'] ? ' player-minister' : '') +
  303.                         '">' + game_names[index] + '</div>'
  304.                     );
  305.  
  306.                 } else {
  307.                     $('#citadelWrapper').prepend(
  308.  
  309.                         '<td>' +
  310.                         '<div class="player-name' + (index == game_me ? ' player-me' : '') +
  311.                         (index == data['minister'] ? ' player-minister' : '') +
  312.                         '">' + game_names[index] + '</div>' +
  313.                         '</td>'
  314.  
  315.  
  316.                     );
  317.                 }
  318.  
  319.  
  320.             } else {
  321.  
  322.                 if ($('.player-' + index).length) {
  323.                    
  324.                 } else {
  325.                     $('#game-citadels').append('<div class="gridLayout player-' + index +'"><div class="cards-container cards-container-' + index +'"></div></div>');
  326.  
  327.                     $('.player-' + index +'').prepend(
  328.            
  329.                         '<td class="name">' +
  330.        
  331.                             '<div class="player-name' + (index == game_me ? ' player-me' : '') +
  332.                             (index == data['minister'] ? ' player-minister' : '') +
  333.                             '">' + game_names[index] + '</div>' +
  334.                            
  335.                             '</td>');
  336.  
  337.                 }
  338.  
  339.              
  340.  
  341.                
  342.             }
  343.         });
  344.         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  345.  
  346.  
  347.         ////////////////////////////////////////////////////РАБОТА НАД РАЗДАЧЕЙ КВАДРАТИКОВ ИГРОКАМ//////////////////////////////////////////////
  348.        
  349.  
  350.         function strip_tags(str) { // Strip HTML and PHP tags from a string
  351.  
  352.             return str.replace(/<\/?[^>]+>/gi, ' ').trim();
  353.         }
  354.  
  355.      
  356.         // $('body').find('.cards-container').html('');
  357.         $('#game-citadels').addClass('citGridLayout');
  358.        
  359.        
  360.  
  361.         for (let i = 0; i < data['divs']['citadels'].length; i++) {
  362.            
  363.         var splitsAI = [];
  364.         var splitsCitadelsAI = [];
  365.         splitsAI = data['divs']['citadels-pict'][i].split('</div>').filter(Boolean);
  366.         splitsCitadelsAI = data['divs']['citadels'][i].split('</div>').filter(Boolean);
  367.        
  368.         splitsAI.forEach((element, index) => {
  369.            
  370.            
  371.             if (i === game_me) {
  372.              
  373.              
  374.                 if ($('#citadelWrapper').find('#card-container-' + index).length) {
  375.  
  376.                 //  console.log("HI!");
  377.                 }
  378.  
  379.                 else {
  380.                 $('#citadelWrapper').find('.cards-container').append(
  381.  
  382.                    
  383.                     '<div id="card-container-' + index + '" class="stack">' + element + '</div>' +
  384.                     '<span  class="citName" data-id="#dialog' + index + '">' + strip_tags(splitsCitadelsAI[index]).slice(0, -1).trim() + '</span>'
  385.                     + '<div style="display: none" id="dialog' + index + '" class="box"><img class="pic popupcard"src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/57/Playing_card_heart_A.svg/384px-Playing_card_heart_A.svg.png"alt="card"></div>'
  386.    
  387.                 );
  388.    
  389.                 $('.cards-container.myCitadel').find('#card-container-' + index).css('background-color', $('.cards-container.myCitadel').find('.card-stack-' + index).find('#card').children().first().css('fill'));
  390.  
  391.                
  392.                
  393.                 }
  394.    
  395.  
  396.             } else {
  397.  
  398.                 if ($('.player-' + i).find('#card-container-' + index).length) {
  399.  
  400.                     // console.log("HI AI!");
  401.                 }
  402.                
  403.                 else {
  404.                
  405.  
  406.                    $('#game-citadels').find('.cards-container-' + i +'').append(
  407.  
  408.  
  409.                      '<div id="card-container-' + index + '" class="stack">' + element + '</div>' +
  410.                 '<span  class="citName" data-id="#dialog' + index + '">' + strip_tags(splitsCitadelsAI[index]).slice(0, -1).trim() + '</span>'
  411.                 + '<div style="display: none" id="dialog' + index + '" class="box"><img class="pic popupcard"src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/57/Playing_card_heart_A.svg/384px-Playing_card_heart_A.svg.png"alt="card"></div>'
  412.  
  413.                    );
  414.  
  415.                    $('.player-' + i).find('#card-container-' + index).css('background-color',  $('.player-' + i).find('.card-stack-' + index).find('#card').children().first().css('fill'));
  416.                
  417.         }}});
  418.  
  419.      
  420.         }
  421.        
  422.         $('.player-2').find('.name').css('order', 2);
  423.         $('.player-4').find('.name').css('order', 2);
  424.  
  425.         $('.player-me').parent().addClass('name');
  426.         $('#citadelWrapper').addClass('gridLayout');
  427.  
  428.    
  429.  
  430.         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  431.  
  432.        
  433.  
  434.         game_update_log(data['logs']);
  435.  
  436.         if (!data['gameover']) {
  437.             game_to = setTimeout(game_update, 4000);
  438.         }
  439.  
  440.     });
  441. }
  442.  
  443.  
  444.  
  445.  
  446. $(function () {
  447.     // $('#game-log').accordion({
  448.     //     collapsible: true
  449.     // });
  450.     $('#game-log').hide();
  451.     $('#game-log-full').detach().appendTo('#game-citadels');
  452.     $('.role-penalty').hide();
  453.     $('.role-closed').hide();
  454.     $('.role-coin').hide();
  455.     $('.role-card').hide();
  456.    
  457.  
  458.     /////////////////////////////////////////////////
  459.  
  460.     $('#top-wrapper').insertAfter('#game-log');
  461.     $('#citadelWrapper').insertBefore('#game-actions');
  462.     $('#citadelWrapper').append($('.myCitadel'));
  463.  
  464.     var isPopup = false;
  465.  
  466.     jQuery(document).ajaxComplete(function ($) {
  467.         jQuery(document).ready(function ($) {
  468.  
  469.             $(".citName").click(function (e) {
  470.                
  471.                 $(this).parent().find('.box').show();
  472.                 $('body').css('overflow','hidden');
  473.                 isPopup = true;
  474.             });
  475.        
  476.             $(".box").click(function (e) {
  477.                 $(this).parent().find('.box').hide();
  478.                 $('body').css('overflow','visible');
  479.                 isPopup = false;
  480.             });
  481.  
  482.          
  483.          
  484.             $(".stack").click(function () {
  485.                
  486.                 var width2 = $(this).find("span").width();
  487.                 $(this).animate({
  488.                     'max-width': width2 + 10
  489.                 }, 500);
  490.                 $(this).find("div").first().hide();
  491.                 $(this).find(".citName").show();
  492.  
  493.             }).mouseleave(function () {
  494.                
  495.                 $(this).find("div").first().show();
  496.                 $(this).find(".citName").hide();
  497.                 $(this).animate({
  498.                     'max-width': '30px'
  499.                 }, 200);
  500.  
  501.             });
  502.  
  503.            
  504.         });
  505.  
  506.  
  507.     });
  508. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement