Advertisement
Guest User

Untitled

a guest
Jul 17th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //Properties
  2.  
  3. var skillBackgroundImage = "http://i.imgur.com/wiFOCFZ.png";
  4. var parryBackgroundImage = "http://i.imgur.com/wiFOCFZ.png";
  5. var psychicBackgroundImage = "http://i.imgur.com/wiFOCFZ.png";
  6. var magicBackgroundImage = "http://i.imgur.com/wiFOCFZ.png";
  7. var combatBackgroundImage = "http://i.imgur.com/wiFOCFZ.png";
  8. var initBackgroundImage = "http://i.imgur.com/wiFOCFZ.png";
  9.  
  10. var skillLineImage = "http://i.imgur.com/M0MBhn2.png";
  11. var parryLineImage = "http://i.imgur.com/M0MBhn2.png";
  12. var psychicLineImage = "http://i.imgur.com/M0MBhn2.png";
  13. var magicLineImage = "http://i.imgur.com/M0MBhn2.png";
  14. var combatLineImage = "http://i.imgur.com/M0MBhn2.png";
  15. var initLineImage = "http://i.imgur.com/M0MBhn2.png";
  16.  
  17. var critSucCombat = 1; //set to 0 to turn off crit success
  18. var critFailCombat = 100; //set to 101 to turn off crit failure
  19.  
  20. var attackSymbol = "http://i.imgur.com/8qxwt6D.png";
  21. var shootSymbol = "http://i.imgur.com/0xyAjAv.png";
  22. var ulfricSymbol = "http://i.imgur.com/86dULxQ.png";
  23.  
  24. var critSucParry = 1; //set to 0 to turn off crit success
  25. var critFailParry = 100; //set to 101 to turn off crit failure
  26. var parrySymbol = "http://i.imgur.com/uO7vkzJ.png";
  27.  
  28. var critSucSkill = 1; //set to 0 to turn off crit success
  29. var critFailSkill = 100; //set to 101 to turn off crit failure
  30. var skillSymbol = "http://i.imgur.com/COrr5Ag.png";
  31.  
  32. var magicSymbol = "http://i.imgur.com/pusXx1U.png";
  33.  
  34. var initSymbol = "http://i.imgur.com/BcYG0mH.png";
  35.  
  36. var fortunePointBackground = "http://i.imgur.com/B8isZnB.png";
  37.  
  38. var critSucPsychic = 1; //set to 0 to turn off crit success
  39. var critFailPsychic = 100; //set to 101 to turn off crit failure
  40. var psychicSymbol = "http://i.imgur.com/0HGEZS1.png";
  41.  
  42. /// Templates
  43.  
  44. var warhammerCombatTableTemplate = "<table style='max-width: 250px; min-width:150px; background-image:url("+combatBackgroundImage+"); background-size: 100% 100%; background-repeat: no-repeat;font-family: \"Century Gothic\", CenturyGothic, AppleGothic, sans-serif;'>"
  45.             +'<tr><th COLSPAN="2" style="text-align:center;padding-top:15px;">Attack Test<<FORTUNE>></th></tr>'
  46.             +'<tr>'
  47.             +'<td COLSPAN="2" style="text-align:center;">'
  48.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  49.             +'</td>'
  50.             +'</tr>'
  51.            
  52.             + '<tr>'
  53.             +'<td style="text-align:center; width:25%;padding-left:10px;"><img class="sheet-imghr" style="width:100%;" src="<<ATTACK_SYMBOL>>" /></td>'
  54.             +'<td style="text-align:center; width:75%;padding-right:10px;"><b><<ATTACK_NAME>></b></td>'
  55.             +'</tr>'
  56.            
  57.            
  58.             +'<td COLSPAN="2" style="text-align:center;">'
  59.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  60.             +'</td>'
  61.             +'</tr>'
  62.             +'<tr>'
  63.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Stat :</b></span> <b><<STAT_NUMBER>> %</b></td>'
  64.             +'</tr>'
  65.  
  66.             +'<tr>'
  67.             +'<td  COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Attack :</b></span> <span style="color: <<COLOR>>"><b><<ROLL_NUMBER>></b></span></td>'
  68.             +'</tr>'
  69.            
  70.             +'<tr>'
  71.                 +'<<ROLL_RESULT>>'
  72.             +'</tr>'
  73.             +'<tr>'
  74.                 +'<<ROLL_DEGREE>>'
  75.             +'</tr>'
  76.                 +'<<IF_HIT>>'
  77.                 +'<<QUALITIES>>'
  78.             +'<tr><td COLSPAN="2" style="padding-top:15px;"></td></tr>'
  79.            
  80.         +'</table>';
  81. var warhammerCombatSuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Success!</b></td>";
  82. var warhammerCombatCriticalSuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Critical Success!</b></td>";
  83. var warhammerCombatFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Failure!</b></td>";
  84. var warhammerCombatCriticalFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Critical Failure!</b></td>";
  85. var warhammerCombatDoSTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Degree of Success:</b> <<DEGREE>></td>";
  86. var warhammerCombatDoFTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Degree of Failure:</b> <<DEGREE>></td>";
  87. var warhammerCombatHitTemplate = '<tr>'
  88.             +'<td COLSPAN="2" style="text-align:center;">'
  89.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  90.             +'</td>'
  91.             +'</tr>'  
  92.                                 + '<tr>'
  93.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Hit Location :</b></span> <b><<HIT_LOCATION>></b> (<<HIT_REVERSE>>)</td>'
  94.                                 +'<tr>'
  95.                                 + '<tr>'
  96.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Damage Modifier :</b></span> <b><<DAMAGE_MOD>></b></td>'
  97.                                 +'<tr>'
  98.                                 + '<tr>'
  99.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Damage :</b></span> <span style="color: <<DAMAGE_COLOR1>>;"><b><<DAMAGE1_TOTAL>></b> (<<ROLL_DAMAGE1>>)</span></td>'
  100.                                 +'<tr>'
  101.                                 +'<<IMPACT>>'
  102.                                 +'<<ULFRIC_FURY>>';
  103. var warhammerCombatImpactTemplate = '<tr>'
  104.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Damage Impact :</b></span> <span style="color: <<DAMAGE_COLOR2>>;"><b><<DAMAGE2_TOTAL>></b> (<<ROLL_DAMAGE2>>)</span></td>'
  105.                                 +'<tr>';
  106. var warhammerCombatUlfricFuryTemplate = '<tr>'
  107.             +'<td COLSPAN="2" style="text-align:center;">'
  108.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  109.             +'</td>'
  110.             +'</tr>'  
  111.            
  112.             + '<tr>'
  113.             +'<td style="text-align:center; width:25%;padding-left:10px;"><img class="sheet-imghr" style="width:100%;" src="'+ ulfricSymbol +'" /></td>'
  114.             +"<td style='text-align:center;'><span style='font-style:oblique;font-weight:bolder;color: red;'><b>RIGHTEOUS FURY!</b></td>"
  115.             +'</tr>'
  116.                                 + '<tr>'
  117.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Crit Confirm :</b></span><span style="color: <<CONFIRM_COLOR>>"> <b><<CRIT_CONFIRM>></b></span></td>'
  118.                                 +'<tr>'
  119.                                 +'<<CRIT_ROLL_CONFIRMED>>';
  120. var warhammerCombatCriticalDamage =  '<tr>'
  121.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Crit Damage :</b></span> <b><<CRIT_DAMAGE>></b> <<CRIT_ROLLEDDMG>></td>'
  122.                                 +'<tr>'
  123.                                 + '<tr>'
  124.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Total Damage :</b></span> <b><<TOTAL_DAMAGE>></b></td>'
  125.                                 +'<tr>';
  126. var warhammerCombatQualitiesTemplate = '<tr>'
  127.             +'<td COLSPAN="2" style="text-align:center;">'
  128.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  129.             +'</td>'
  130.             +'</tr>'  
  131.                                 + '<tr>'
  132.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Qualities :</b></span> <b><<QUALITIES>></b></td>'
  133.                                 +'<tr>';
  134. var warhammerCombatRetryTemplate = "<tr><td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><a href='<<RETRY>>' style='background-image:url("+fortunePointBackground+"); border:0px; background-repeat:no-repeat; background-size:100% 100%; background-color:transparent; background-position:center; color:black; padding:10px 20px 10px 30px'>Use Fate Point!</a></td></tr>";
  135.  
  136. var warhammerCombatUlfricRetryTableTemplate = "<table style='max-width: 250px; background-image:url("+combatBackgroundImage+"); background-size: 100% 100%; background-repeat: no-repeat;font-family: \"Century Gothic\", CenturyGothic, AppleGothic, sans-serif;'>"
  137.            
  138.            
  139.             +"<tr><th COLSPAN='2' style='text-align:center;padding-top:15px;'>Ulfric's Fury Fortune Point</th></tr>"
  140.            
  141.             +'<tr>'
  142.             +'<td COLSPAN="2" style="text-align:center;">'
  143.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  144.             +'</td>'
  145.             +'</tr>'
  146.            
  147.             + '<tr>'
  148.             +'<td style="text-align:center; width:25%;padding-left:10px;"><img class="sheet-imghr" style="width:100%;" src="<<ATTACK_SYMBOL>>" /></td>'
  149.             +'<td style="text-align:center; width:75%;padding-right:10px;"><b><<ATTACK_NAME>></b></td>'
  150.             +'</tr>'
  151.            
  152.             +'<tr>'
  153.             +'<td COLSPAN="2" style="text-align:center;">'
  154.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  155.             +'</td>'
  156.             +'</tr>'
  157.            
  158.             +'<tr>'
  159.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Stat :</b></span> <b><<STAT_NUMBER>> %</b></td>'
  160.             +'</tr>'
  161.  
  162.             +'<tr>'
  163.             +'<td  COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Crit Confirm :</b></span> <span style="color: <<CONFIRM_COLOR>>"><b><<CRIT_CONFIRM>></b></span></td>'
  164.             +'</tr>'
  165.                 +'<<IF_HIT>>'
  166.             +'<tr><td COLSPAN="2" style="padding-top:15px;"></td></tr>'
  167.            
  168.         +'</table>';
  169.  
  170.  
  171. var warhammerParryTableTemplate = "<table style='max-width: 250px; min-width:150px; background-image:url("+parryBackgroundImage+"); background-size: 100% 100%; background-repeat: no-repeat;font-family: \"Century Gothic\", CenturyGothic, AppleGothic, sans-serif;'>"
  172.            
  173.             +"<tr><th COLSPAN='2' style='text-align:center;padding-top:15px;'>Parry Test<<FORTUNE>></th></tr>"
  174.            
  175.             +'<tr>'
  176.             +'<td COLSPAN="2" style="text-align:center;">'
  177.                 +'<img class="sheet-imghr" style="width:95%;" src="'+parryLineImage+'" />'
  178.             +'</td>'
  179.             +'</tr>'
  180.            
  181.             + '<tr>'
  182.             +'<td style="text-align:center; width:25%;padding-left:10px;"><img class="sheet-imghr" style="width:100%;" src="'+ parrySymbol +'" /></td>'
  183.             +'<td style="text-align:center; width:75%;padding-right:10px;"><b><<ATTACK_NAME>></b></td>'
  184.             +'</tr>'
  185.            
  186.             +'<tr>'
  187.             +'<td COLSPAN="2" style="text-align:center;">'
  188.                 +'<img class="sheet-imghr" style="width:95%;" src="'+parryLineImage+'" />'
  189.             +'</td>'
  190.             +'</tr>'  
  191.             + '<tr>'
  192.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Stat :</b></span> <b><<STAT_NUMBER>> %</b></td>'
  193.             +'</tr>'
  194.  
  195.             +'<tr>'
  196.             +'<td  COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Roll :</b></span> <span style="color: <<COLOR>>"><b><<ROLL_NUMBER>></b></span></td>'
  197.             +'</tr>'
  198.            
  199.             +'<tr>'
  200.                 +'<<ROLL_RESULT>>'
  201.             +'<tr>'
  202.             +'<tr>'
  203.                 +'<<ROLL_DEGREE>>'
  204.             +'<tr>'
  205.                 +'<<ROLL_RETRY>>'
  206.             +'<tr><td COLSPAN="2" style="padding-top:15px;"></td></tr>'
  207.            
  208.         +'</table>';
  209. var warhammerParrySuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Success!</b></td>";
  210. var warhammerParryCriticalSuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Critical Success!</b></td>";
  211. var warhammerParryFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Failure!</b></td>";
  212. var warhammerParryCriticalFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Critical Failure!</b></td>";
  213. var warhammerParryDoSTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Degree of Success:</b> <<DEGREE>></td>";
  214. var warhammerParryDoFTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Degree of Failure:</b> <<DEGREE>></td>";
  215. var warhammerParryRetryTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><a href='<<RETRY>>' style='background-image:url("+fortunePointBackground+"); border:0px; background-repeat:no-repeat; background-size:100% 100%; background-color:transparent; background-position:center; color:black; padding:10px 20px 10px 30px'>Use Fate Point!</a></td>";
  216.  
  217. var warhammerPsychicTableTemplate = "<table style='max-width: 250px; min-width:150px; background-image:url("+psychicBackgroundImage+"); background-size: 100% 100%; background-repeat: no-repeat;font-family: \"Century Gothic\", CenturyGothic, AppleGothic, sans-serif;'>"
  218.            
  219.             +"<tr><th COLSPAN='2' style='text-align:center;padding-top:15px;'>Focus Power Test<<FORTUNE>></th></tr>"
  220.            
  221.             +'<tr>'
  222.             +'<td COLSPAN="2" style="text-align:center;">'
  223.                 +'<img class="sheet-imghr" style="width:95%;" src="'+psychicLineImage+'" />'
  224.             +'</td>'
  225.             +'</tr>'
  226.            
  227.             + '<tr>'
  228.             +'<td style="text-align:center; width:25%;padding-left:10px;"><img class="sheet-imghr" style="width:100%;" src="'+ psychicSymbol +'" /></td>'
  229.             +'<td style="text-align:center; width:75%;padding-right:10px;"><b><<PSYCHIC_NAME>></b></td>'
  230.             +'</tr>'
  231.            
  232.             +'<tr>'
  233.             +'<td COLSPAN="2" style="text-align:center;">'
  234.                 +'<img class="sheet-imghr" style="width:95%;" src="'+psychicLineImage+'" />'
  235.             +'</td>'
  236.             +'</tr>'  
  237.             + '<tr>'
  238.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Sanctioned? :</b></span> <b><<SANCTIONED_NUMBER>></b></td>'
  239.             +'</tr>'
  240.             + '<tr>'
  241.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Stat :</b></span> <b><<STAT_NUMBER>> %</b></td>'
  242.             +'</tr>'
  243.             + '<tr>'
  244.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Psy Rating :</b></span> <b><<PSY_NUMBER>></b></td>'
  245.             +'</tr>'
  246.             + '<tr>'
  247.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Bonus Psy Rating :</b></span> <b><<BONUSPSY_NUMBER>></b></td>'
  248.             +'</tr>'
  249.             + '<tr>'
  250.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Push Psy Rating :</b></span> <b><<PUSHPSY_NUMBER>></b></td>'
  251.             +'</tr>'
  252.             + '<tr>'
  253.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Sustained Effects :</b></span> <b><<EFFECTS_NUMBER>></b></td>'
  254.             +'</tr>'
  255.             + '<tr>'
  256.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Effective PR :</b></span> <b><<EFFECTIVEPSY_NUMBER>></b></td>'
  257.             +'</tr>'
  258.             + '<tr>'
  259.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Rolling for :</b></span> <b><<EFFECTIVESTAT_NUMBER>></b></td>'
  260.             +'</tr>'
  261.  
  262.             +'<tr>'
  263.             +'<td  COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Roll :</b></span> <span style="color: <<COLOR>>"><b><<ROLL_NUMBER>></b></span></td>'
  264.             +'</tr>'
  265.            
  266.             +'<<ROLL_DOUBLES>>'
  267.            
  268.             +'<tr>'
  269.                 +'<<ROLL_RESULT>>'
  270.             +'</tr>'
  271.                        
  272.             +'<tr>'
  273.                 +'<<ROLL_DEGREE>>'
  274.             +'</tr>'
  275.            
  276.             +'<<ROLL_DOUBLES_RESULT>>'
  277.             +'<<ROLL_PERILS_OF_WARP>>'
  278.  
  279.  
  280.             +'<<ROLL_RETRY>>'
  281.             +'<tr><td COLSPAN="2" style="padding-top:15px;"></td></tr>'
  282.            
  283.         +'</table>';
  284.        
  285. var warhammerPsychicSuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Success!</b></td>";
  286. var warhammerPsychicDoublesTemplate = "<tr><td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>DOUBLES!</b></td></tr>";
  287. var warhammerPsychicCriticalSuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Critical Success!</b></td>";
  288. var warhammerPsychicFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Failure!</b></td>";
  289. var warhammerPsychicCriticalFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Critical Failure!</b></td>";
  290. var warhammerPsychicDoSTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Degree of Success:</b> <<DEGREE>></td>";
  291. var warhammerPsychicDoFTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Degree of Failure:</b> <<DEGREE>></td>";
  292. var warhammerPsychicPhenomenaTemplate = "<tr><td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Psychic Phenomena:</b> <<PHENOMENA>></td></tr>";
  293. var warhammerPsychicPerilsTemplate = "<tr><td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>PERILS OF THE WARP!</b></td></tr><tr><td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Perils of the Warp :</b> <<PERILS>></td></tr>";
  294. var warhammerPsychicRetryTemplate = "<tr><td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><a href='<<RETRY>>' style='background-image:url("+fortunePointBackground+"); border:0px; background-repeat:no-repeat; background-size:100% 100%; background-color:transparent; background-position:center; color:black; padding:10px 20px 10px 30px'>Use Fate Point!</a></td></tr>";
  295.        
  296. var warhammerSkillTableTemplate = "<table style='max-width: 250px; min-width:150px; background-image:url("+skillBackgroundImage+"); background-size: 100% 100%; background-repeat: no-repeat;font-family: \"Century Gothic\", CenturyGothic, AppleGothic, sans-serif;'>"
  297.             +'<tr><th COLSPAN="2" style="text-align:center;padding-top:15px;">Simple Test<<FORTUNE>></th></tr>'
  298.            +'<tr>'
  299.             +'<td COLSPAN="2" style="text-align:center;">'
  300.                 +'<img class="sheet-imghr" style="width:95%;" src="'+skillLineImage+'" />'
  301.             +'</td>'
  302.             +'</tr>'
  303.            
  304.             + '<tr>'
  305.             +'<td style="text-align:center; width:30%;padding-left:10px;"><img class="sheet-imghr" style="width:100%;" src="' + skillSymbol + '" /></td>'
  306.             +'<td style="text-align:center; width:70%;padding-right:10px;"><b><<SKILL_NAME>></b></td>'
  307.             +'</tr>'
  308.             +'<tr>'
  309.             +'<td COLSPAN="2" style="text-align:center;">'
  310.                 +'<img class="sheet-imghr" style="width:95%;" src="'+skillLineImage+'" />'
  311.             +'</td>'
  312.             +'</tr>'  
  313.             + '<tr>'
  314.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Stat :</b></span> <b><<STAT_NUMBER>> %</b></td>'
  315.             +'</tr>'
  316.  
  317.             +'<tr>'
  318.             +'<td  COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Roll :</b></span> <span style="color: <<COLOR>>"><b><<ROLL_NUMBER>></b></span></td>'
  319.             +'</tr>'
  320.            
  321.             +'<tr>'
  322.                 +'<<ROLL_RESULT>>'
  323.             +'<tr>'
  324.             +'<tr>'
  325.                 +'<<ROLL_DEGREE>>'
  326.             +'<tr>'
  327.                 +'<<ROLL_RETRY>>'
  328.             +'<tr><td COLSPAN="2" style="padding-top:15px;"></td></tr>'
  329.            
  330.         +'</table>';
  331. var warhammerSkillSuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Success!</b></td>";
  332. var warhammerSkillCriticalSuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Critical Success!</b></td>";
  333. var warhammerSkillFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Failure!</b></td>";
  334. var warhammerSkillCriticalFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Critical Failure!</b></td>";
  335. var warhammerSkillDoSTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Degree of Success:</b> <<DEGREE>></td>";
  336. var warhammerSkillDoFTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Degree of Failure:</b> <<DEGREE>></td>";
  337. var warhammerSkillRetryTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><a href='<<RETRY>>' style='background-image:url("+fortunePointBackground+"); border:0px; background-repeat:no-repeat; background-size:100% 100%; background-color:transparent; background-position:center; color:black; padding:10px 20px 10px 30px'>Use Fate Point!</a></td>";
  338.  
  339. var warhammerMagicTableTemplate = "<table style='max-width: 250px; min-width:150px; background-image:url("+magicBackgroundImage+"); background-size: 100% 100%; background-repeat: no-repeat;font-family: \"Century Gothic\", CenturyGothic, AppleGothic, sans-serif;'>"
  340.             +'<tr><th COLSPAN="2" style="text-align:center;padding-top:25px;padding-left:10px;padding-right:10px;"><b>Casting Roll</b></th></tr>'
  341.              
  342.             +'<tr>'
  343.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;">'
  344.                 +'<img class="sheet-imghr" style="width:95%;" src="'+magicLineImage+'" />'
  345.             +'</td>'
  346.             +'</tr>'
  347.            
  348.             + '<tr>'
  349.             +'<td style="text-align:center; width:40%;padding-left:10px;"><img class="sheet-imghr" style="width:100%;" src="<<SPELL_IMAGE>>" /></td>'
  350.             +'<td style="text-align:center; width:60%;padding-right:10px;"><b><<SPELL_NAME>></b></td>'
  351.             +'</tr>'
  352.  
  353.             +'<tr>'
  354.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;">'
  355.                 +'<img class="sheet-imghr" style="width:95%;" src="'+magicLineImage+'" />'
  356.             +'</td>'
  357.             +'</tr>'  
  358.            
  359.             +'<<INCLUDE_TEXT>>'
  360.            
  361.             +'<tr>'
  362.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Casting Number :</b></span> <b><<CAST_NUMBER>></b></td>'
  363.             +'</tr>'
  364.             +'<tr>'
  365.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Magic Characteristic :</b></span> <b><<MAGIC_MAX>></b></td>'
  366.             +'</tr>'
  367.             +'<tr>'
  368.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Magic Used :</b></span> <b><<MAGIC_USED>></b></td>'
  369.             +'</tr>'
  370.             +'<tr>'
  371.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Channel Used :</b></span> <b><<CHANNEL>></b></td>'
  372.             +'</tr>'
  373.             +'<tr>'
  374.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Additional Dice :</b></span> <b><<GOOD_DICE>></b></td>'
  375.             +'</tr>'
  376.             +'<tr>'
  377.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Modifier to Total :</b></span> <b><<MODIFIER_TOTAL>></b></td>'
  378.             +'</tr>'
  379.             +'<tr>'
  380.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Modifier to Dice :</b></span> <b><<MODIFIER_DICE>></b></td>'
  381.             +'</tr>'
  382.             +'<tr>'
  383.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Penalty for Armor :</b></span> <b><<MODIFIER_ARMOR>></b></td>'
  384.             +'</tr>'
  385.             +'<tr>'
  386.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Chaos Dice :</b></span> <b><<CHAOS_DICE>></b></td>'
  387.             +'</tr>'
  388.             +'<tr>'
  389.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Using Dhar :</b></span> <b><<DHAR>></b></td>'
  390.             +'</tr>'
  391.              
  392.             +'<tr>'
  393.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;">'
  394.                 +'<img class="sheet-imghr" style="width:95%;" src="'+magicLineImage+'" />'
  395.             +'</td>'
  396.             +'</tr>'
  397.             +'<tr>'
  398.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: #B31515;padding-left:10px;padding-right:10px;'><b>Roll</b></td>"
  399.             +'</tr>'
  400.            
  401.             +'<tr>'
  402.             +"<td COLSPAN='2' style='text-align:center;padding-left:10px;padding-right:10px;'><<DICE_ROLL>></td>"
  403.             +'</tr>'
  404.            
  405.             +'<tr>'
  406.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;">'
  407.                 +'<img class="sheet-imghr" style="width:95%;" src="'+magicLineImage+'" />'
  408.             +'</td>'
  409.             +'</tr>'  
  410.            
  411.             +'<tr>'
  412.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Casting Number :</b></span> <b><<CAST_NUMBER>></b></td>'
  413.             +'</tr>'
  414.             +'<tr>'
  415.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Total :</b></span> <b><<TOTAL>></b></td>'
  416.             +'</tr>'           
  417.             +'<tr>'
  418.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>With Component (+<<COMP>>) :</b></span> <b><<TOTALCOMP>></b></td>'
  419.             +'</tr>'
  420.             +'<tr>'
  421.             +'<<RESULT>>'
  422.             +'</tr>'
  423.             +'<<BAD_STUFF>>'
  424.             +'<tr><td COLSPAN="2" style="padding-top:25px;padding-left:10px;padding-right:10px;"></td></tr>'
  425.            
  426.         +'</table>';
  427.        
  428. var warhammerMagicTextTemplate = '<tr>'
  429.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;padding-left:10px;padding-right:10px;'><b>Description</b></td>"
  430.             +'</tr>'           
  431.             +'<tr>'
  432.             +"<td COLSPAN='2' style='text-align:center;padding-left:10px;padding-right:10px;'><<DESCRIPTION>></td>"
  433.             +'</tr>'
  434.            
  435.             +'<tr>'
  436.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;padding-left:10px;padding-right:10px;'><b>Ingredients</b></td>"
  437.             +'</tr>'           
  438.             +'<tr>'
  439.             +"<td COLSPAN='2' style='text-align:center;padding-left:10px;padding-right:10px;'><<INGREDIENTS>></td>"
  440.             +'</tr>'
  441.             +'<tr>'
  442.            
  443.             +'<tr>'
  444.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;padding-left:10px;padding-right:10px;'><b>Range</b></td>"
  445.             +'</tr>'           
  446.             +'<tr>'
  447.             +"<td COLSPAN='2' style='text-align:center;padding-left:10px;padding-right:10px;'><<RANGE>></td>"
  448.             +'</tr>'
  449.             +'<tr>'
  450.            
  451.             +'<tr>'
  452.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;padding-left:10px;padding-right:10px;'><b>Casting Time</b></td>"
  453.             +'</tr>'           
  454.             +'<tr>'
  455.             +"<td COLSPAN='2' style='text-align:center;padding-left:10px;padding-right:10px;'><<CASTING_TIME>></td>"
  456.             +'</tr>'
  457.             +'<tr>'
  458.              
  459.            
  460.             +'<tr>'
  461.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;padding-left:10px;padding-right:10px;'><b>Duration</b></td>"
  462.             +'</tr>'           
  463.             +'<tr>'
  464.             +"<td COLSPAN='2' style='text-align:center;padding-left:10px;padding-right:10px;'><<DURATION>></td>"
  465.             +'</tr>'
  466.             +'<tr>'
  467.            
  468.             +'<tr>'
  469.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;">'
  470.                 +'<img class="sheet-imghr" style="width:95%;" src="'+magicLineImage+'" />'
  471.             +'</td>'
  472.             +'</tr>';
  473.        
  474. var warhammerMagicSuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Success!</b></td>";
  475. var warhammerMagicFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Failure!</b></td>";
  476.  
  477. var warhammerMagicDiceTemplate = "<span style='white-space:nowrap;color: black; margin:2px; padding:1px'><b><<DICE_TOTAL>></b> (<<DICE_RESULT>>)</span> <<DICE_ROLL>>";
  478. var warhammerChaosDiceTemplate = "<span style='white-space:nowrap;color: red;  margin:2px; padding:1px'><b><<DICE_RESULT>></b></span> <<DICE_ROLL>>";
  479.            
  480. var warhammerMagicBadStuffTemplate = '<tr>'
  481.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;padding-left:10px;padding-right:10px;'>BAD STUFF HAPPENS!<br>TZEENTCH'S CURSE / WRATH OF THE GODS!</td>"
  482.             +'</tr>'
  483.             +'<tr>'
  484.             +'<td COLSPAN="2" style="text-align:center;padding-left:10px;padding-right:10px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Bad Stuff Roll :</b></span> <span style="color:red"><b><<BAD_ROLL>></b></span></td>'
  485.             +'</tr>'
  486.             +'<<BAD_STUFF>>';
  487. var warhammerMagicBadStuffDoublesTemplate = '<tr>'
  488.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;padding-left:10px;padding-right:10px;'>DOUBLES!</td>"
  489.             +'</tr>';
  490.  
  491. var warhammerInitiativeTableTemplate = "<table style='max-width: 250px; min-width:150px; background-image:url("+initBackgroundImage+"); background-size: 100% 100%; background-repeat: no-repeat;font-family: \"Century Gothic\", CenturyGothic, AppleGothic, sans-serif;'>"
  492.             +'<tr><th COLSPAN="2" style="text-align:center;padding-top:15px;">Initiative Roll</th></tr>'
  493.             +'<tr>'
  494.             +'<td COLSPAN="2" style="text-align:center;">'
  495.                 +'<img class="sheet-imghr" style="width:95%;" src="'+initLineImage+'" />'
  496.             +'</td>'
  497.             +'</tr>'
  498.            
  499.             + '<tr>'
  500.             +'<td style="text-align:center; width:25%;padding-left:10px;"><img class="sheet-imghr" style="width:100%;" src="' + initSymbol + '" /></td>'
  501.             +'<td style="text-align:center; width:75%;padding-right:10px;"><b><<CHAR_NAME>></b></td>'
  502.             +'</tr>'
  503.            
  504.             +'<tr>'
  505.             +'<td COLSPAN="2" style="text-align:center;">'
  506.                 +'<img class="sheet-imghr" style="width:95%;" src="'+initLineImage+'" />'
  507.             +'</td>'            
  508.             +'</tr>'
  509.            
  510.             +'<tr>'
  511.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Bonus :</b></span> <b><<AGILITY>></b></td>'
  512.             +'</tr>'
  513.            
  514.             +'<tr>'
  515.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Roll :</b></span> <b><<ROLL>></b></td>'
  516.             +'</tr>'
  517.            
  518.             +'<tr>'
  519.             +'<td COLSPAN="2" style="text-align:center;">'
  520.                 +'<img class="sheet-imghr" style="width:95%;" src="'+initLineImage+'" />'
  521.             +'</td>'           
  522.             +'</tr>'
  523.            
  524.             +'<tr>'
  525.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Total :</b></span> <b><<TOTAL>></b></td>'
  526.             +'</tr>'
  527.            
  528.             +'<tr><td COLSPAN="2" style="padding-top:15px;"></td></tr>'
  529.            
  530.         +'</table>';
  531.        
  532.        
  533. var warhammerAttackTableTemplate = "<table style='max-width: 250px; min-width:150px; background-image:url("+combatBackgroundImage+"); background-size: 100% 100%; background-repeat: no-repeat;font-family: \"Century Gothic\", CenturyGothic, AppleGothic, sans-serif;'>"
  534.             +'<tr><th COLSPAN="2" style="text-align:center;padding-top:15px;"><<ATTACK_OR_PARRY>> Test<<FORTUNE>></th></tr>'
  535.             +'<tr>'
  536.             +'<td COLSPAN="2" style="text-align:center;">'
  537.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  538.             +'</td>'
  539.             +'</tr>'
  540.            
  541.             + '<tr>'
  542.             +'<td style="text-align:center; width:25%;padding-left:10px;"><img class="sheet-imghr" style="width:100%;" src="<<ATTACK_SYMBOL>>" /></td>'
  543.             +'<td style="text-align:center; width:75%;padding-right:10px;"><b><<ATTACK_NAME>></b></td>'
  544.             +'</tr>'
  545.            
  546.            
  547.             +'<td COLSPAN="2" style="text-align:center;">'
  548.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  549.             +'</td>'
  550.             +'</tr>'
  551.             +'<tr>'
  552.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Stat :</b></span> <b><<STAT_NUMBER>> %</b></td>'
  553.             +'</tr>'
  554.  
  555.             +'<tr>'
  556.             +'<td  COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Roll :</b></span> <span style="color: <<COLOR>>"><b><<ROLL_NUMBER>></b></span></td>'
  557.             +'</tr>'
  558.             +'<<JAMMED>>'
  559.             +'<tr>'
  560.                 +'<<ROLL_RESULT>>'
  561.             +'</tr>'
  562.             +'<tr>'
  563.                 +'<<ROLL_DEGREE>>'
  564.             +'</tr>'
  565.                 +'<<IF_HIT>>'
  566.                 +'<<QUALITIES>>'
  567.             +'<tr><td COLSPAN="2" style="padding-top:15px;"></td></tr>'
  568.            
  569.         +'</table>';
  570. var warhammerAttackJammedTemplate = "<tr><td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Possibly Jammed?</b></td></tr>"
  571. var warhammerAttackSuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Success!</b></td>";
  572. var warhammerAttackCriticalSuccessTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: green;'><b>Critical Success!</b></td>";
  573. var warhammerAttackFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Failure!</b></td>";
  574. var warhammerAttackCriticalFailureTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color: red;'><b>Critical Failure!</b></td>";
  575. var warhammerAttackDoSTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Degree of Success:</b> <<DEGREE>></td>";
  576. var warhammerAttackDoFTemplate = "<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;'><b>Degree of Failure:</b> <<DEGREE>></td>";
  577. var warhammerAttackHitTemplate = '<tr>'
  578.             +'<td COLSPAN="2" style="text-align:center;">'
  579.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  580.             +'</td>'
  581.             +'</tr>'  
  582.                                 + '<tr>'
  583.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515; "><b>Hit Location :</b></span> <b><<HIT_LOCATION>></b> (<<HIT_REVERSE>>)</td>'
  584.                                 +'</tr>';
  585. var warhammerAttackQualitiesTemplate = '<tr>'
  586.             +'<td COLSPAN="2" style="text-align:center;">'
  587.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  588.             +'</td>'
  589.             +'</tr>'  
  590.                                 + '<tr>'
  591.             +'<td COLSPAN="2" style="text-align:center;"><div style="padding-left:25px;padding-right:25px;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Qualities :</b></span> <b><<QUALITIES>></b></div></td>'
  592.                                 +'</tr>';
  593. var warhammerAttackRetryTemplate = '<tr><td COLSPAN="2" style="text-align:center;font-style:oblique;font-weight:bolder;"><a href="<<RETRY>>" style="background-image:url('+fortunePointBackground+'); border:0px; background-repeat:no-repeat; background-size:100% 100%; background-color:transparent; background-position:center; color:black; padding:10px 20px 10px 30px">Use Fate Point!</a></td></tr>';
  594.                                
  595. ///Functions
  596.  
  597. function WarhammerCombatDice(char, player, targetnum, mod, moddamage, impact, symbolTest, hidden, title, qualities, whoSent, retried, playerid, lastId)
  598. {
  599.     if (isNaN(symbolTest)) symbolTest = 0;
  600.     var addTitle = false;
  601.     if (title != null)
  602.     {
  603.         if (title != "")
  604.         {
  605.             addTitle = true;
  606.         }
  607.     }
  608.    
  609.     var addQualities = false;
  610.     if (qualities != null)
  611.     {
  612.         if (qualities != "")
  613.         {
  614.             addQualities = true;
  615.         }
  616.     }
  617.    
  618.    
  619.     if (impact != 0 && impact != 1)
  620.     {
  621.         impact = 0;
  622.     }
  623.     var target = Number(targetnum) + Number(mod);
  624.     var targetNumber = Number(target);
  625.  
  626.     //if (targetNumber > 99) targetNumber = 99;
  627.     if (targetNumber < 1) targetNumber = 1;
  628.  
  629.  
  630.     var tableCreation = warhammerCombatTableTemplate;
  631.     if (addTitle == true)
  632.     {
  633.         tableCreation = tableCreation.replace("<<ATTACK_NAME>>", title + " ");
  634.     }
  635.     else
  636.     {
  637.         tableCreation = tableCreation.replace("<<ATTACK_NAME>>", "Custom Attack");
  638.     }
  639.     tableCreation = tableCreation.replace("<<STAT_NUMBER>>", targetNumber);
  640.    
  641.     if (symbolTest == 0)
  642.     {
  643.         tableCreation = tableCreation.replace("<<ATTACK_SYMBOL>>", attackSymbol);
  644.     }
  645.     else
  646.     {
  647.         tableCreation = tableCreation.replace("<<ATTACK_SYMBOL>>", shootSymbol);
  648.     }
  649.        
  650.     if (retried == true)
  651.     {
  652.         tableCreation = tableCreation.replace("<<FORTUNE>>", " (Fortune Point)");
  653.     }
  654.     else
  655.     {
  656.         tableCreation = tableCreation.replace("<<FORTUNE>>", "");
  657.     }
  658.    
  659.     var resulttemp = warhammerCombatFailureTemplate;
  660.  
  661.     var rollOne = randomInteger(10) - 1;
  662.     var rollTwo = randomInteger(10) - 1;
  663.  
  664.     var sum = (rollOne * 10) + rollTwo;
  665.     if (sum == 0) sum = 100;
  666.     var succ = false;
  667.     var color = "red";
  668.     if (sum <= targetNumber && sum != 100)
  669.     {
  670.         succ = true;
  671.         color = "green";
  672.         resulttemp = warhammerCombatSuccessTemplate;
  673.     }
  674.     if (sum <= critSucCombat)
  675.     {
  676.         resulttemp = warhammerCombatCriticalSuccessTemplate;
  677.     }
  678.     if (sum >= critFailCombat)
  679.     {
  680.         succ = false;
  681.         color = "red";
  682.         resulttemp = warhammerCombatCriticalFailureTemplate;
  683.     }
  684.    
  685.     tableCreation = tableCreation.replace("<<COLOR>>", color);
  686.     tableCreation = tableCreation.replace("<<ROLL_NUMBER>>", sum);
  687.  
  688.     var MoS = 0;
  689.     if (sum > targetNumber || sum == 100)
  690.     {
  691.         MoS = sum - targetNumber;
  692.     }
  693.     else
  694.     {
  695.         MoS = targetNumber - sum;
  696.     }
  697.  
  698.     if (succ == true)
  699.     {
  700.         tableCreation = tableCreation.replace("<<ROLL_DEGREE>>", warhammerCombatDoSTemplate);
  701.     }
  702.     else
  703.     {
  704.         tableCreation = tableCreation.replace("<<ROLL_DEGREE>>", warhammerCombatDoFTemplate);
  705.     }
  706.     tableCreation = tableCreation.replace("<<DEGREE>>", Math.floor((MoS + 10)/10));
  707.  
  708.     tableCreation = tableCreation.replace("<<ROLL_RESULT>>", resulttemp);
  709.    
  710.     if (succ == false)
  711.     {
  712.         if (retried == false)
  713.         {
  714.             tableCreation = tableCreation.replace("<<IF_HIT>>", warhammerCombatRetryTemplate);
  715.             if (addQualities == false) qualities = "None";
  716.             if (addTitle == false) title = "Custom Attack";
  717.             tableCreation = tableCreation.replace("<<RETRY>>", "!wardmgrollretryattack ;" + char + ";" + player + ";" + targetnum + ";" + mod + ";" + moddamage + ";" + impact + ";" + symbolTest + ";" + hidden + ";" + title + ";" + qualities + ";" + whoSent + ";" + true + ";" + playerid + ";" + lastId);
  718.         }
  719.         else           
  720.         {
  721.             tableCreation = tableCreation.replace("<<IF_HIT>>", "");
  722.         }
  723.     }
  724.    
  725.     if (succ == true)
  726.     {
  727.         tableCreation = tableCreation.replace("<<IF_HIT>>", warhammerCombatHitTemplate);
  728.        
  729.         var sum2 = (rollTwo * 10) + rollOne;
  730.     if (sum2 == 0) sum2 = 100;
  731.        
  732.         var locationHit = "";
  733.         if (sum2 >= 86)
  734.         {
  735.             locationHit = "Left Leg";
  736.         }
  737.         else if (sum2 >= 71)
  738.         {
  739.             locationHit = "Right Leg";
  740.         }
  741.         else if (sum2 >= 31)
  742.         {
  743.             locationHit = "Body";
  744.         }
  745.         else if (sum2 >= 21)
  746.         {
  747.             locationHit = "Left Arm";
  748.         }
  749.         else if (sum2 >= 11)
  750.         {
  751.             locationHit = "Right Arm";
  752.         }
  753.         else
  754.         {
  755.             locationHit = "Head";
  756.         }
  757.        
  758.         tableCreation = tableCreation.replace("<<HIT_LOCATION>>", locationHit);
  759.         tableCreation = tableCreation.replace("<<HIT_REVERSE>>", sum2);
  760.        
  761.        
  762.         var damage1 = randomInteger(10);
  763.         var damage2 = -1;
  764.         if (impact == 1)
  765.         {
  766.             damage2 = randomInteger(10);
  767.         }
  768.         var main_damage = damage1;
  769.         if (damage2 > damage1)
  770.         {
  771.             main_damage = damage2;
  772.         }
  773.        
  774.         main_damage = main_damage + Number(moddamage);
  775.        
  776.         var ulric = false;
  777.         if (damage1 == 10 || damage2 == 10)
  778.         {
  779.             ulric = true;
  780.         }
  781.        
  782.         var tempdamage = damage1 + Number(moddamage);
  783.        
  784.         if (Number(moddamage) > 0)
  785.         {
  786.             tableCreation = tableCreation.replace("<<DAMAGE_MOD>>", "+<<DAMAGE_MOD>>");
  787.         }
  788.         else if (Number(moddamage) < 0)
  789.         {
  790.             tableCreation = tableCreation.replace("<<DAMAGE_MOD>>", "-<<DAMAGE_MOD>>");
  791.         }
  792.        
  793.         tableCreation = tableCreation.replace("<<DAMAGE_MOD>>", moddamage);
  794.        
  795.         tableCreation = tableCreation.replace("<<DAMAGE1_TOTAL>>", tempdamage);
  796.         tableCreation = tableCreation.replace("<<ROLL_DAMAGE1>>", damage1);
  797.        
  798.         if (impact == 1)
  799.         {
  800.             tableCreation = tableCreation.replace("<<IMPACT>>", warhammerCombatImpactTemplate);
  801.            
  802.             tempdamage = damage2 + Number(moddamage);
  803.        
  804.             tableCreation = tableCreation.replace("<<DAMAGE2_TOTAL>>", tempdamage);
  805.             tableCreation = tableCreation.replace("<<ROLL_DAMAGE2>>", damage2);
  806.         }
  807.         else
  808.         {
  809.             tableCreation = tableCreation.replace("<<IMPACT>>", "");
  810.         }
  811.        
  812.         if (ulric == true)
  813.         {
  814.             tableCreation = tableCreation.replace("<<ULFRIC_FURY>>", warhammerCombatUlfricFuryTemplate);
  815.            
  816.             if(damage1 == 10) tableCreation = tableCreation.replace("<<DAMAGE_COLOR1>>", "green");
  817.             else  tableCreation = tableCreation.replace("<<DAMAGE_COLOR1>>", "black");
  818.            
  819.             if(damage2 == 10) tableCreation = tableCreation.replace("<<DAMAGE_COLOR2>>", "green");
  820.             else  tableCreation = tableCreation.replace("<<DAMAGE_COLOR2>>", "black");
  821.            
  822.             var rollConfirmCrit = randomInteger(100);
  823.            
  824.             var colorConfirm = "red";
  825.            
  826.             if (rollConfirmCrit <= targetNumber && rollConfirmCrit != 100)
  827.             {
  828.                 colorConfirm = "green";
  829.                
  830.                 tableCreation = tableCreation.replace("<<CRIT_ROLL_CONFIRMED>>", warhammerCombatCriticalDamage);
  831.                
  832.                 var tempCritDamage = randomInteger(10);
  833.                 var tempTotalCritDamage = tempCritDamage;
  834.                 var rolledstr = "(" + tempCritDamage;
  835.                 if (tempCritDamage == 10) rolledstr +="<b>!</b>";
  836.                 while(tempCritDamage == 10)
  837.                 {
  838.                     tempCritDamage = randomInteger(10);
  839.                     tempTotalCritDamage = tempTotalCritDamage + tempCritDamage;
  840.                     rolledstr += "," + tempCritDamage;
  841.                     if (tempCritDamage == 10) rolledstr +="<b>!</b>";
  842.                 }
  843.                 rolledstr += ")";
  844.                 main_damage = main_damage + tempTotalCritDamage;
  845.                
  846.                 tableCreation = tableCreation.replace("<<CRIT_DAMAGE>>", tempTotalCritDamage);
  847.                 tableCreation = tableCreation.replace("<<CRIT_ROLLEDDMG>>", rolledstr);
  848.                 tableCreation = tableCreation.replace("<<TOTAL_DAMAGE>>", main_damage);
  849.             }
  850.             else
  851.             {
  852.                 tableCreation = tableCreation.replace("<<CRIT_ROLL_CONFIRMED>>", warhammerCombatRetryTemplate);
  853.                 tableCreation = tableCreation.replace("<<RETRY>>", "!wardmgrollretrycrit ;" + char + ";" + player + ";" + targetNumber + ";" + main_damage + ";" + hidden + ";" + whoSent + ";" + title + ";" + playerid + ";" + lastId);
  854.             }
  855.            
  856.             tableCreation = tableCreation.replace("<<CRIT_CONFIRM>>", rollConfirmCrit);
  857.             tableCreation = tableCreation.replace("<<CONFIRM_COLOR>>", colorConfirm);
  858.         }
  859.         else
  860.         {
  861.             tableCreation = tableCreation.replace("<<ULFRIC_FURY>>", "");
  862.             tableCreation = tableCreation.replace("<<DAMAGE_COLOR1>>", "black");
  863.             tableCreation = tableCreation.replace("<<DAMAGE_COLOR2>>", "black");
  864.         }
  865.     }
  866.    
  867.     if (addQualities == true)
  868.     {
  869.         tableCreation = tableCreation.replace("<<QUALITIES>>", warhammerCombatQualitiesTemplate);
  870.         tableCreation = tableCreation.replace("<<QUALITIES>>", qualities);
  871.     }
  872.     else
  873.     {
  874.         tableCreation = tableCreation.replace("<<QUALITIES>>", "");
  875.     }
  876.    
  877.     if (hidden==2)
  878.     {
  879.         var tempText = "/w " + whoSent + " "+tableCreation;
  880.         if (player==1) sendChat("player|"+char, tempText);
  881.         else sendChat("character|"+char, tempText);
  882.     }
  883.     if (hidden >= 1) tableCreation = "/w gm " + tableCreation;
  884.     if (player==1) sendChat("player|"+char, tableCreation);
  885.     else sendChat("character|"+char, tableCreation);
  886.  
  887. };
  888.  
  889. function WarhammerCombatDiceRetryCrit(char, player, targetNumber, main_damage, hidden, whoSent, title)
  890. {
  891.     var tableCreation = warhammerCombatUlfricRetryTableTemplate;
  892.     var addTitle = false;
  893.     if (title != null)
  894.     {
  895.         if (title != "")
  896.         {
  897.             addTitle = true;
  898.         }
  899.     }  
  900.     if (addTitle == true)
  901.     {
  902.         tableCreation = tableCreation.replace("<<ATTACK_NAME>>", title + " ");
  903.     }
  904.     else
  905.     {
  906.         tableCreation = tableCreation.replace("<<ATTACK_NAME>>", "Custom Attack");
  907.     }
  908.         tableCreation = tableCreation.replace("<<ATTACK_SYMBOL>>", ulfricSymbol);
  909.             tableCreation = tableCreation.replace("<<STAT_NUMBER>>", targetNumber);
  910.             var rollConfirmCrit = randomInteger(100);
  911.     main_damage = Number(main_damage);
  912.             var colorConfirm = "red";
  913.            
  914.             if (rollConfirmCrit <= targetNumber && rollConfirmCrit != 100)
  915.             {
  916.                 colorConfirm = "green";
  917.                
  918.                 tableCreation = tableCreation.replace("<<IF_HIT>>", warhammerCombatCriticalDamage);
  919.                
  920.                 var tempCritDamage = randomInteger(10);
  921.                 var tempTotalCritDamage = tempCritDamage;
  922.                 var rolledstr = "(" + tempCritDamage;
  923.                 if (tempCritDamage == 10) rolledstr +="<b>!</b>";
  924.                 while(tempCritDamage == 10)
  925.                 {
  926.                     tempCritDamage = randomInteger(10);
  927.                     tempTotalCritDamage = tempTotalCritDamage + tempCritDamage;
  928.                     rolledstr += "," + tempCritDamage;
  929.                     if (tempCritDamage == 10) rolledstr +="<b>!</b>";
  930.                 }
  931.                 rolledstr += ")"
  932.                 main_damage = main_damage + tempTotalCritDamage;
  933.                
  934.                 tableCreation = tableCreation.replace("<<CRIT_DAMAGE>>", tempTotalCritDamage);
  935.                 tableCreation = tableCreation.replace("<<CRIT_ROLLEDDMG>>", rolledstr);
  936.                 tableCreation = tableCreation.replace("<<TOTAL_DAMAGE>>", main_damage);
  937.             }
  938.             else
  939.             {
  940.                 tableCreation = tableCreation.replace("<<IF_HIT>>", "");
  941.             }
  942.            
  943.             tableCreation = tableCreation.replace("<<CRIT_CONFIRM>>", rollConfirmCrit);
  944.             tableCreation = tableCreation.replace("<<CONFIRM_COLOR>>", colorConfirm);
  945.            
  946.     if (hidden==2)
  947.     {
  948.         var tempText = "/w " + whoSent + " "+tableCreation;
  949.         if (player==1) sendChat("player|"+char, tempText);
  950.         else sendChat("character|"+char, tempText);
  951.     }
  952.     if (hidden >= 1) tableCreation = "/w gm " + tableCreation;
  953.     if (player==1) sendChat("player|"+char, tableCreation);
  954.     else sendChat("character|"+char, tableCreation);
  955.  
  956. };
  957.  
  958. function WarhammerParryDice(char, player, targetnum, mod, hidden, title, whoSent, retried, playerid, lastId)
  959. {
  960.     var addTitle = false;
  961.     if (title != null)
  962.     {
  963.         if (title != "")
  964.         {
  965.             addTitle = true;
  966.         }
  967.     }
  968.     var target = Number(targetnum) + Number(mod);
  969.     var targetNumber = Number(target);
  970.  
  971.     //if (targetNumber > 99) targetNumber = 99;
  972.     if (targetNumber < 1) targetNumber = 1;
  973.  
  974.  
  975.     var tableCreation = warhammerParryTableTemplate;
  976.     if (addTitle == true)
  977.     {
  978.         tableCreation = tableCreation.replace("<<ATTACK_NAME>>", title + " ");
  979.     }
  980.     else
  981.     {
  982.         tableCreation = tableCreation.replace("<<ATTACK_NAME>>", "Custom Parry");
  983.     }
  984.     if ( Boolean(retried) == true)
  985.     {
  986.         tableCreation = tableCreation.replace("<<FORTUNE>>", " (Fortune's Point)");
  987.     }
  988.     else
  989.     {
  990.         tableCreation = tableCreation.replace("<<FORTUNE>>", "");
  991.     }
  992.    
  993.     tableCreation = tableCreation.replace("<<STAT_NUMBER>>", targetNumber);
  994.     var resulttemp = warhammerParryFailureTemplate;
  995.  
  996.     var rollOne = randomInteger(10) - 1;
  997.     var rollTwo = randomInteger(10) - 1;
  998.  
  999.     var sum = (rollOne * 10) + rollTwo;
  1000.     if (sum == 0) sum = 100;
  1001.     var succ = false;
  1002.     var color = "red";
  1003.     if (sum <= targetNumber && sum != 100)
  1004.     {
  1005.         succ = true;
  1006.         color = "green";
  1007.         resulttemp = warhammerParrySuccessTemplate;
  1008.     }
  1009.     if (sum <= critSucParry)
  1010.     {
  1011.         resulttemp = warhammerParryCriticalSuccessTemplate;
  1012.     }
  1013.     if (sum >= critFailParry)
  1014.     {
  1015.         succ = false;
  1016.         color = "red";
  1017.         resulttemp = warhammerParryCriticalFailureTemplate;
  1018.     }
  1019.    
  1020.     tableCreation = tableCreation.replace("<<COLOR>>", color);
  1021.     tableCreation = tableCreation.replace("<<ROLL_NUMBER>>", sum);
  1022.  
  1023.     var MoS = 0;
  1024.     if (sum > targetNumber)
  1025.     {
  1026.         MoS = sum - targetNumber;
  1027.     }
  1028.     else
  1029.     {
  1030.         MoS = targetNumber - sum;
  1031.     }
  1032.  
  1033.     if (succ == true)
  1034.     {
  1035.         tableCreation = tableCreation.replace("<<ROLL_DEGREE>>", warhammerParryDoSTemplate);
  1036.     }
  1037.     else
  1038.     {
  1039.         tableCreation = tableCreation.replace("<<ROLL_DEGREE>>", warhammerParryDoFTemplate);
  1040.     }
  1041.     tableCreation = tableCreation.replace("<<DEGREE>>", Math.floor((MoS + 10)/10));
  1042.  
  1043.     tableCreation = tableCreation.replace("<<ROLL_RESULT>>", resulttemp);
  1044.    
  1045.     if (succ == false && Boolean(retried)  == false)
  1046.     {
  1047.         tableCreation = tableCreation.replace("<<ROLL_RETRY>>", warhammerParryRetryTemplate);
  1048.         tableCreation = tableCreation.replace("<<RETRY>>", "!warparryrollretry ;" + char + ";" + player + ";" + targetnum + ";" + mod + ";" + hidden + ";" + title + ";" + whoSent + ";true" + ";" + playerid + ";" + lastId);
  1049.     }
  1050.     else
  1051.     {
  1052.         tableCreation = tableCreation.replace("<<ROLL_RETRY>>", "");       
  1053.     }
  1054.    
  1055.     if (hidden==2)
  1056.     {
  1057.         var tempText = "/w " + whoSent + " "+tableCreation;
  1058.         if (player==1) sendChat("player|"+char, tempText);
  1059.         else sendChat("character|"+char, tempText);
  1060.     }
  1061.     if (hidden >= 1) tableCreation = "/w gm " + tableCreation;
  1062.     if (player==1) sendChat("player|"+char, tableCreation);
  1063.     else sendChat("character|"+char, tableCreation);
  1064.  
  1065. };
  1066.  
  1067. function WarhammerPsychicDice(char, player, targetnum, mod, optionPsy, psy, bonuspsy, pushpsy, effects, sanctioned, hidden, title, whoSent, retried, playerid, lastId)
  1068. {
  1069.     var addTitle = false;
  1070.     if (title != null)
  1071.     {
  1072.         if (title != "")
  1073.         {
  1074.             addTitle = true;
  1075.         }
  1076.     }
  1077.     // 0 unfettered, 1 fettered, 2 push
  1078.     if (!optionPsy)
  1079.     {
  1080.         optionPsy = 0;
  1081.     }
  1082.    
  1083.     optionPsy = Number(optionPsy);
  1084.    
  1085.     if (!mod)
  1086.     {
  1087.         mod = 0;
  1088.     }
  1089.    
  1090.     mod = Number(mod);
  1091.    
  1092.     if (!psy)
  1093.     {
  1094.         psy = 0;
  1095.     }
  1096.    
  1097.     psy = Number(psy);
  1098.    
  1099.     if (!bonuspsy)
  1100.     {
  1101.         bonuspsy = 0;
  1102.     }
  1103.    
  1104.     bonuspsy = Number(bonuspsy);
  1105.    
  1106.     if (!sanctioned)
  1107.     {
  1108.         sanctioned = 0;
  1109.     }
  1110.    
  1111.     sanctioned = Number(sanctioned);
  1112.    
  1113.     if (!pushpsy)
  1114.     {
  1115.         pushpsy = 0;
  1116.     }
  1117.    
  1118.     if (optionPsy != 2) pushpsy = 0;
  1119.     if (sanctioned == 0) if (pushpsy > 3) pushpsy = 3;
  1120.    
  1121.     pushpsy = Number(pushpsy);
  1122.    
  1123.     if (!effects)
  1124.     {
  1125.         effects = 0;
  1126.     }
  1127.    
  1128.     effects = Number(effects);
  1129.     if (effects != 0)
  1130.     {
  1131.         effects = effects + 1;
  1132.     }
  1133.    
  1134.     var target = Number(targetnum) + Number(mod);
  1135.     var targetNumber = Number(target);
  1136.    
  1137.     //if (targetNumber > 99) targetNumber = 99;
  1138.     if (targetNumber < 1) targetNumber = 1;
  1139.    
  1140.  
  1141.     var tableCreation = warhammerPsychicTableTemplate;
  1142.     if (addTitle == true)
  1143.     {
  1144.         tableCreation = tableCreation.replace("<<PSYCHIC_NAME>>", title);
  1145.     }
  1146.     else
  1147.     {
  1148.         tableCreation = tableCreation.replace("<<PSYCHIC_NAME>>", "Custom Focus Power Test");
  1149.     }
  1150.     if ( Boolean(retried) == true)
  1151.     {
  1152.         tableCreation = tableCreation.replace("<<FORTUNE>>", " (Fortune's Point)");
  1153.     }
  1154.     else
  1155.     {
  1156.         tableCreation = tableCreation.replace("<<FORTUNE>>", "");
  1157.     }
  1158.    
  1159.     var effectivePsy = 0;
  1160.     if (optionPsy == 0)
  1161.     {
  1162.         effectivePsy = Math.floor(psy/2) + bonuspsy - effects;
  1163.     }
  1164.     if (optionPsy == 1)
  1165.     {
  1166.         effectivePsy = psy + bonuspsy - effects;
  1167.     }
  1168.     if (optionPsy == 2)
  1169.     {
  1170.         effectivePsy = psy + pushpsy + bonuspsy - effects;
  1171.     }
  1172.    
  1173.     if (effectivePsy == 0)
  1174.     {
  1175.     if (player==1) sendChat("player|"+char, "Effective Psy Rating is ZERO! Power failed.");
  1176.     else sendChat("character|"+char, "Effective Psy Rating is ZERO! Power failed.");
  1177.         return;
  1178.         }
  1179.    
  1180.     if (sanctioned == 0)
  1181.     {
  1182.     tableCreation = tableCreation.replace("<<SANCTIONED_NUMBER>>", "Heretic!");
  1183.     }
  1184.     else
  1185.     {
  1186.     tableCreation = tableCreation.replace("<<SANCTIONED_NUMBER>>", "Yes");
  1187.     }
  1188.    
  1189.     tableCreation = tableCreation.replace("<<PSY_NUMBER>>", psy);
  1190.     tableCreation = tableCreation.replace("<<BONUSPSY_NUMBER>>", bonuspsy);
  1191.     tableCreation = tableCreation.replace("<<PUSHPSY_NUMBER>>", pushpsy);
  1192.     tableCreation = tableCreation.replace("<<EFFECTS_NUMBER>>", effects);
  1193.     tableCreation = tableCreation.replace("<<EFFECTIVEPSY_NUMBER>>", effectivePsy);
  1194.    
  1195.     var effetiveTargetNum = 0;
  1196.     effetiveTargetNum = targetNumber + (effectivePsy * 5);
  1197.     var testedVersus = effetiveTargetNum;
  1198.     //if (testedVersus > 99) testedVersus = 99;
  1199.     if (effetiveTargetNum > 90) effetiveTargetNum = 90;
  1200.    
  1201.     tableCreation = tableCreation.replace("<<EFFECTIVESTAT_NUMBER>>", testedVersus + " (" + effetiveTargetNum + ")");
  1202.    
  1203.     tableCreation = tableCreation.replace("<<STAT_NUMBER>>", targetNumber);
  1204.    
  1205.     targetNumber = effetiveTargetNum;
  1206.    
  1207.     var resulttemp = warhammerPsychicFailureTemplate;
  1208.  
  1209.     var rollOne = randomInteger(10) - 1;
  1210.     var rollTwo = randomInteger(10) - 1;
  1211.  
  1212.     var sum = (rollOne * 10) + rollTwo;
  1213.     if (sum == 0) sum = 100;
  1214.     var succ = false;
  1215.     var color = "red";
  1216.     if (sum <= targetNumber && sum < 91)
  1217.     {
  1218.         succ = true;
  1219.         color = "green";
  1220.         resulttemp = warhammerPsychicSuccessTemplate;
  1221.     }
  1222.     if (sum <= critSucPsychic)
  1223.     {
  1224.         resulttemp = warhammerPsychicCriticalSuccessTemplate;
  1225.     }
  1226.     if (sum >= critFailPsychic)
  1227.     {
  1228.         succ = false;
  1229.         color = "red";
  1230.         resulttemp = warhammerPsychicCriticalFailureTemplate;
  1231.     }
  1232.    
  1233.     if (rollOne == rollTwo && optionPsy != 0)
  1234.     {
  1235.         tableCreation = tableCreation.replace("<<ROLL_DOUBLES>>", warhammerPsychicDoublesTemplate);
  1236.         var badroll = randomInteger(100);
  1237.         var additionalBad = 0;
  1238.         if (sanctioned == 0)
  1239.         {
  1240.             additionalBad = additionalBad + (effectivePsy * 5);
  1241.             if (optionPsy == 2)
  1242.             {
  1243.                 additionalBad = additionalBad + (pushpsy * 10);
  1244.             }
  1245.         }
  1246.         if (sanctioned == 1)
  1247.         {
  1248.             if (optionPsy == 2)
  1249.             {
  1250.                 additionalBad = additionalBad + (pushpsy * 5);
  1251.             }
  1252.         }
  1253.         if (effects > 0)
  1254.         {
  1255.             additionalBad = additionalBad + 10;
  1256.         }
  1257.         badroll = badroll + additionalBad;
  1258.        
  1259.         tableCreation = tableCreation.replace("<<ROLL_DOUBLES_RESULT>>", warhammerPsychicPhenomenaTemplate);
  1260.         tableCreation = tableCreation.replace("<<PHENOMENA>>", badroll);
  1261.        
  1262.         if (badroll >= 75)
  1263.         {
  1264.         tableCreation = tableCreation.replace("<<ROLL_PERILS_OF_WARP>>", warhammerPsychicPerilsTemplate);
  1265.         var verybadroll = randomInteger(100);
  1266.         verybadroll = verybadroll + additionalBad;
  1267.         tableCreation = tableCreation.replace("<<PERILS>>", verybadroll);
  1268.         }
  1269.         else
  1270.         {
  1271.         tableCreation = tableCreation.replace("<<ROLL_PERILS_OF_WARP>>", "");
  1272.         }  
  1273.     }
  1274.     else
  1275.     {
  1276.         tableCreation = tableCreation.replace("<<ROLL_DOUBLES>>", "");
  1277.         tableCreation = tableCreation.replace("<<ROLL_DOUBLES_RESULT>>", "");
  1278.         tableCreation = tableCreation.replace("<<ROLL_PERILS_OF_WARP>>", "");
  1279.     }
  1280.    
  1281.     tableCreation = tableCreation.replace("<<COLOR>>", color);
  1282.     tableCreation = tableCreation.replace("<<ROLL_NUMBER>>", sum);
  1283.  
  1284.     var MoS = 0;
  1285.     if (sum > testedVersus)
  1286.     {
  1287.         MoS = sum - testedVersus;
  1288.     }
  1289.     else
  1290.     {
  1291.         MoS = testedVersus - sum;
  1292.     }
  1293.  
  1294.     if (succ == true)
  1295.     {
  1296.         tableCreation = tableCreation.replace("<<ROLL_DEGREE>>", warhammerPsychicDoSTemplate);
  1297.     }
  1298.     else
  1299.     {
  1300.         tableCreation = tableCreation.replace("<<ROLL_DEGREE>>", warhammerPsychicDoFTemplate);
  1301.     }
  1302.     tableCreation = tableCreation.replace("<<DEGREE>>", Math.floor((MoS + 10)/10));
  1303.  
  1304.     tableCreation = tableCreation.replace("<<ROLL_RESULT>>", resulttemp);
  1305.    
  1306.     if (succ == false && Boolean(retried)  == false)
  1307.     {
  1308.         tableCreation = tableCreation.replace("<<ROLL_RETRY>>", warhammerPsychicRetryTemplate);
  1309.         tableCreation = tableCreation.replace("<<RETRY>>", "!warPsychicrollretry ;" + char + ";" + player + ";" + targetnum + ";" + mod + ";" + optionPsy + ";" + psy + ";" + bonuspsy + ";" + pushpsy + ";" + effects + ";" + sanctioned + ";" + hidden + ";" + title + ";" + whoSent + ";true" + ";" + playerid + ";" + lastId);
  1310.     }
  1311.     else
  1312.     {
  1313.         tableCreation = tableCreation.replace("<<ROLL_RETRY>>", "");       
  1314.     }
  1315.    
  1316.     if (hidden==2)
  1317.     {
  1318.         var tempText = "/w " + whoSent + " "+tableCreation;
  1319.         if (player==1) sendChat("player|"+char, tempText);
  1320.         else sendChat("character|"+char, tempText);
  1321.     }
  1322.     if (hidden >= 1) tableCreation = "/w gm " + tableCreation;
  1323.     if (player==1) sendChat("player|"+char, tableCreation);
  1324.     else sendChat("character|"+char, tableCreation);
  1325.  
  1326. };
  1327.  
  1328. function WarhammerForceField(char, player, quality, explode, hidden, whoSent, playerid)
  1329. {
  1330.     if (!quality)
  1331.     {
  1332.         quality = 50;
  1333.     }
  1334.     if (!explode)
  1335.     {
  1336.         explode = 15;
  1337.     }
  1338.     if (quality > 100) quality = 100;
  1339.     if (explode < 0) explode = 0;
  1340.    
  1341.     quality = Number(quality);
  1342.     explode = Number(explode);
  1343.    
  1344.    
  1345.     var rollOne = randomInteger(10) - 1;
  1346.     var rollTwo = randomInteger(10) - 1;
  1347.  
  1348.     var sum = (rollOne * 10) + rollTwo;
  1349.  
  1350.  
  1351.  
  1352.     if (sum == 0) sum = 100;
  1353.    
  1354.     var mess = "<table style='max-width: 250px; min-width:150px; background-image:url("+combatBackgroundImage+"); background-size: 100% 100%; background-repeat: no-repeat;font-family: \"Century Gothic\", CenturyGothic, AppleGothic, sans-serif;'>"
  1355.             +'<tr><th COLSPAN="2" style="text-align:center;padding-top:15px;">Force Field Test</th></tr>'
  1356.             +'<tr>'
  1357.             +'<td COLSPAN="2" style="text-align:center;">'
  1358.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  1359.             +'</td>'
  1360.             +'</tr>'
  1361.            
  1362.             +'<tr>'
  1363.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Rating :</b></span> '+quality+' %</td>'
  1364.             +'</tr>'
  1365.  
  1366.             +'<tr>'
  1367.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Overload on or less :</b></span> '+explode+' %</td>'
  1368.             +'</tr>'
  1369.            
  1370.             +'<tr>'
  1371.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Roll :</b></span> <b>'+sum+' </b></td>'
  1372.             +'</tr>';
  1373.    
  1374.     if (sum <= quality)
  1375.     {
  1376.         mess = mess
  1377.             +'<tr>'
  1378.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color:green'><b>And it worked!</b></td>"
  1379.             +'</tr>';
  1380.     }
  1381.     else
  1382.     {
  1383.         mess = mess  
  1384.             +'<tr>'
  1385.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color:red'><b>... and I got hit...</b></td>"
  1386.             +'</tr>';
  1387.     }
  1388.     if (sum <= explode)
  1389.     {
  1390.         mess = mess  
  1391.             +'<tr>'
  1392.             +"<td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;color:red'><b>... but stopped working. Repair is Tech Use -30...</b></td>"
  1393.             +'</tr>';
  1394.     }
  1395.     mess = mess +'<tr><td COLSPAN="2" style="padding-top:15px;"></td></tr>'
  1396.            
  1397.         +'</table>';
  1398.     if (hidden==2)
  1399.     {
  1400.         var tempText = "/w " + whoSent + " "+mess;
  1401.         if (player==1) sendChat("player|"+char, tempText);
  1402.         else sendChat("character|"+char, tempText);
  1403.     }
  1404.     if (hidden >= 1) mess = "/w gm " + mess;
  1405.     if (player==1) sendChat("player|"+char, mess);
  1406.     else sendChat("character|"+char, mess);
  1407.  
  1408. };
  1409.  
  1410. function WarhammerDice(char, player, targetnum, mod, hidden, title, whoSent, retried, playerid, lastId)
  1411. {
  1412.     var addTitle = false;
  1413.     if (title != null)
  1414.     {
  1415.         if (title != "")
  1416.         {
  1417.             addTitle = true;
  1418.         }
  1419.     }
  1420.     var target = Number(targetnum) + Number(mod);
  1421.     var targetNumber = Number(target);
  1422.  
  1423.     //if (targetNumber > 99) targetNumber = 99;
  1424.     if (targetNumber < 1) targetNumber = 1;
  1425.  
  1426.  
  1427.     var tableCreation = warhammerSkillTableTemplate;
  1428.     if (addTitle == true)
  1429.     {
  1430.         tableCreation = tableCreation.replace("<<SKILL_NAME>>", title + " ");
  1431.     }
  1432.     else
  1433.     {
  1434.         tableCreation = tableCreation.replace("<<SKILL_NAME>>", "Custom Roll");
  1435.     }
  1436.     if ( Boolean(retried) == true)
  1437.     {
  1438.         tableCreation = tableCreation.replace("<<FORTUNE>>", " (Fate's Point)");
  1439.     }
  1440.     else
  1441.     {
  1442.         tableCreation = tableCreation.replace("<<FORTUNE>>", "");
  1443.     }
  1444.     tableCreation = tableCreation.replace("<<STAT_NUMBER>>", targetNumber);
  1445.     var resulttemp = warhammerSkillFailureTemplate;
  1446.  
  1447.     var rollOne = randomInteger(10) - 1;
  1448.     var rollTwo = randomInteger(10) - 1;
  1449.  
  1450.     var sum = (rollOne * 10) + rollTwo;
  1451.     if (sum == 0) sum = 100;
  1452.     var succ = false;
  1453.     var color = "red";
  1454.     if (sum <= targetNumber && sum != 100)
  1455.     {
  1456.         succ = true;
  1457.         color = "green";
  1458.         resulttemp = warhammerSkillSuccessTemplate;
  1459.     }
  1460.     if (sum <= critSucSkill)
  1461.     {
  1462.         resulttemp = warhammerSkillCriticalSuccessTemplate;
  1463.     }
  1464.     if (sum >= critFailSkill)
  1465.     {
  1466.         succ = false;
  1467.         color = "red";
  1468.         resulttemp = warhammerSkillCriticalFailureTemplate;
  1469.     }
  1470.    
  1471.     tableCreation = tableCreation.replace("<<COLOR>>", color);
  1472.     tableCreation = tableCreation.replace("<<ROLL_NUMBER>>", sum);
  1473.  
  1474.     var MoS = 0;
  1475.     if (sum > targetNumber)
  1476.     {
  1477.         MoS = sum - targetNumber;
  1478.     }
  1479.     else
  1480.     {
  1481.         MoS = targetNumber - sum;
  1482.     }
  1483.  
  1484.     if (succ == true)
  1485.     {
  1486.         tableCreation = tableCreation.replace("<<ROLL_DEGREE>>", warhammerSkillDoSTemplate);
  1487.     }
  1488.     else
  1489.     {
  1490.         tableCreation = tableCreation.replace("<<ROLL_DEGREE>>", warhammerSkillDoFTemplate);
  1491.     }
  1492.     tableCreation = tableCreation.replace("<<DEGREE>>", Math.floor((MoS + 10)/10));
  1493.  
  1494.     tableCreation = tableCreation.replace("<<ROLL_RESULT>>", resulttemp);
  1495.    
  1496.     if (succ == false && retried == false)
  1497.     {
  1498.         tableCreation = tableCreation.replace("<<ROLL_RETRY>>", warhammerSkillRetryTemplate);
  1499.         tableCreation = tableCreation.replace("<<RETRY>>", "!warrollretry ;" + char + ";" + player + ";" + targetnum + ";" + mod + ";" + hidden + ";" + title + ";" + whoSent + ";true;" + playerid + ";" + lastId);
  1500.     }
  1501.     else
  1502.     {
  1503.         tableCreation = tableCreation.replace("<<ROLL_RETRY>>", "");       
  1504.     }
  1505.    
  1506.     if (hidden==2)
  1507.     {
  1508.         var tempText = "/w " + whoSent + " "+tableCreation;
  1509.         if (player==1) sendChat("player|"+char, tempText);
  1510.         else sendChat("character|"+char, tempText);
  1511.     }
  1512.     if (hidden >= 1) tableCreation = "/w gm " + tableCreation;
  1513.     if (player==1) sendChat("player|"+char, tableCreation);
  1514.     else sendChat("character|"+char, tableCreation);
  1515.  
  1516. };
  1517.  
  1518. function WarhammerInitiative(char, player, agility, hidden, name, whoSent)
  1519. {
  1520.     var addName = false;
  1521.     if (name != null)
  1522.     {
  1523.         if (name != "")
  1524.         {
  1525.             addName = true;
  1526.         }
  1527.     }
  1528.    
  1529.     agility = Number(agility);
  1530.    
  1531.     var tableCreation = warhammerInitiativeTableTemplate;
  1532.     if (addName == true)
  1533.     {
  1534.         tableCreation = tableCreation.replace("<<CHAR_NAME>>", name);
  1535.     }
  1536.     else
  1537.     {
  1538.         tableCreation = tableCreation.replace("<<CHAR_NAME>>", "NPC");
  1539.     }
  1540.    
  1541.     tableCreation = tableCreation.replace("<<AGILITY>>", agility);
  1542.  
  1543.     var initTotal = 0;
  1544.     var initRoll = randomInteger(10);
  1545.     initTotal += initRoll;
  1546.    
  1547.     tableCreation = tableCreation.replace("<<ROLL>>", initRoll);
  1548.        
  1549.     initTotal += agility;
  1550.     tableCreation = tableCreation.replace("<<TOTAL>>", initTotal);
  1551.  
  1552.     var turnorder;
  1553.     if (Campaign().get("turnorder") == "")
  1554.     {
  1555.         turnorder = [];
  1556.     }
  1557.     else
  1558.         turnorder = JSON.parse(Campaign().get("turnorder"));    
  1559.    
  1560.             turnorder.push({
  1561.                     id: "-1",
  1562.                 pr: initTotal,
  1563.                     custom: name
  1564.                 });
  1565.    
  1566.     Campaign().set("turnorder", JSON.stringify(turnorder));
  1567.    
  1568.     if (hidden==2)
  1569.     {
  1570.         var tempText = "/w " + whoSent + " "+tableCreation;
  1571.         if (player==1) sendChat("player|"+char, tempText);
  1572.         else sendChat("character|"+char, tempText);
  1573.     }
  1574.     if (hidden >= 1) tableCreation = "/w gm " + tableCreation;
  1575.     if (player==1) sendChat("player|"+char, tableCreation);
  1576.     else sendChat("character|"+char, tableCreation);
  1577.  
  1578. };
  1579.        
  1580. function WarhammerMagicDice(char, player, magic, magicmax, channel, gooddice, modtototal, modtodice, armorpenal, chaosdice, dhar, componentvalue, hidden, spellnumber, includetext, spellname, spelldesc, spellcomponent, spelltime, spellduration, spellrange, spellimage, whoSent)
  1581. {
  1582.     if (!spellname)
  1583.     {
  1584.         spellname = "Custom Spell";
  1585.     }
  1586.     if (!spelldesc)
  1587.     {
  1588.         spelldesc = "?";
  1589.     }
  1590.     if (spelldesc == "") spelldesc = "?";
  1591.    
  1592.     if (!spellcomponent)
  1593.     {
  1594.         spellcomponent = "?";
  1595.     }
  1596.     if (spellcomponent == "") spellcomponent = "?";
  1597.    
  1598.     if (!spellimage)
  1599.     {
  1600.         spellimage = magicSymbol;
  1601.     }  
  1602.    
  1603.     if (!spelltime)
  1604.     {
  1605.         spelltime = "?";
  1606.     }
  1607.     if (spelltime == "") spelltime = "?";
  1608.    
  1609.     if (!spellduration)
  1610.     {
  1611.         spellduration = "?";
  1612.     }
  1613.     if (spellduration == "") spellduration = "?";
  1614.    
  1615.     if (!spellrange)
  1616.     {
  1617.         spellrange = "?";
  1618.     }
  1619.     if (spellrange == "") spellrange = "?";
  1620.    
  1621.     dhar = Number(dhar);
  1622.     if (dhar != 0 && dhar != 1)
  1623.     {
  1624.         dhar = 0;
  1625.     }
  1626.    
  1627.     componentvalue = Number(componentvalue);
  1628.     if (componentvalue < 0)
  1629.     {
  1630.         componentvalue = 0;
  1631.     }
  1632.    
  1633.     magic = Number(magic);
  1634.     if (magic < 1) magic = 1;
  1635.    
  1636.     magicmax = Number(magicmax);
  1637.     if (magicmax < 0) magicmax = 1;
  1638.    
  1639.     if (magicmax < magic) magic = magicmax;
  1640.    
  1641.     if (channel != 1 && channel != 0) channel = 0;
  1642.     if (includetext != 1 && includetext != 0) includetext = 0;
  1643.    
  1644.     modtototal = Number(modtototal);
  1645.     modtodice = Number(modtodice);
  1646.     armorpenal = Number(armorpenal);
  1647.     gooddice = Number(gooddice);
  1648.     if (gooddice < 0) gooddice = 0;
  1649.    
  1650.     chaosdice = Number(chaosdice);
  1651.     if (chaosdice < 0) chaosdice = 0;
  1652.    
  1653.     spellnumber = Number(spellnumber);
  1654.     if (spellnumber < 1) spellnumber = 1;
  1655.    
  1656.     var tableCreation = warhammerMagicTableTemplate;
  1657.        
  1658.     tableCreation = tableCreation.replace("<<SPELL_NAME>>", spellname);
  1659.     tableCreation = tableCreation.replace("<<SPELL_IMAGE>>", spellimage);
  1660.    
  1661.     if (includetext == 1)
  1662.     {
  1663.         tableCreation = tableCreation.replace("<<INCLUDE_TEXT>>", warhammerMagicTextTemplate);
  1664.         tableCreation = tableCreation.replace("<<DESCRIPTION>>", spelldesc);
  1665.         tableCreation = tableCreation.replace("<<INGREDIENTS>>", spellcomponent);
  1666.         tableCreation = tableCreation.replace("<<RANGE>>", spellrange);
  1667.         tableCreation = tableCreation.replace("<<CASTING_TIME>>", spelltime);
  1668.         tableCreation = tableCreation.replace("<<DURATION>>", spellduration);
  1669.     }
  1670.     else
  1671.     {
  1672.         tableCreation = tableCreation.replace("<<INCLUDE_TEXT>>", "");
  1673.     }
  1674.        
  1675.     tableCreation = tableCreation.replace("<<CAST_NUMBER>>", spellnumber);
  1676.     tableCreation = tableCreation.replace("<<CAST_NUMBER>>", spellnumber);
  1677.     tableCreation = tableCreation.replace("<<MAGIC_MAX>>", magicmax);
  1678.     tableCreation = tableCreation.replace("<<MAGIC_USED>>", magic);
  1679.     tableCreation = tableCreation.replace("<<GOOD_DICE>>", gooddice);
  1680.    
  1681.     var channelstr = "";
  1682.     if (channel == 0) channelstr = "No";
  1683.     else channelstr = "Yes (+" + magicmax + ")";
  1684.    
  1685.     tableCreation = tableCreation.replace("<<CHANNEL>>", channelstr);
  1686.     tableCreation = tableCreation.replace("<<MODIFIER_TOTAL>>", modtototal);
  1687.     tableCreation = tableCreation.replace("<<MODIFIER_DICE>>", modtodice);
  1688.     tableCreation = tableCreation.replace("<<MODIFIER_ARMOR>>", armorpenal);
  1689.     tableCreation = tableCreation.replace("<<CHAOS_DICE>>", chaosdice);
  1690.     if (dhar == 1)
  1691.     {
  1692.         tableCreation = tableCreation.replace("<<DHAR>>", "Yes");
  1693.     }
  1694.     else
  1695.     {
  1696.         tableCreation = tableCreation.replace("<<DHAR>>", "No");
  1697.     }
  1698.    
  1699.     var diceResults = [];
  1700.     var numberDice = gooddice + magic + dhar;
  1701.     var rollSum = 0;
  1702.     var lowestRoll = 0;
  1703.    
  1704.     for (var i = 0; i < numberDice; i++)
  1705.     {
  1706.         var roll = randomInteger(10);
  1707.         diceResults.push(roll);
  1708.         if (lowestRoll >= roll) lowestRoll = roll;
  1709.         if (lowestRoll == 0) lowestRoll = roll;
  1710.         rollSum += roll + modtodice;
  1711.         tableCreation = tableCreation.replace("<<DICE_ROLL>>", warhammerMagicDiceTemplate);
  1712.         tableCreation = tableCreation.replace("<<DICE_TOTAL>>", (roll + modtodice));
  1713.         tableCreation = tableCreation.replace("<<DICE_RESULT>>", roll);
  1714.        
  1715.         if ((diceResults.length % 3) == 0) tableCreation = tableCreation.replace("<<DICE_ROLL>>", "<br><<DICE_ROLL>>");
  1716.     }
  1717.    
  1718.     if (dhar == 1)
  1719.     {
  1720.         rollSum -= lowestRoll;
  1721.         tableCreation = tableCreation.replace("<<DICE_ROLL>>", "<br><b>Dhar, not counting roll:</b> " + lowestRoll.toString() + "<<DICE_ROLL>>");
  1722.     }
  1723.    
  1724.     if (chaosdice > 0) tableCreation = tableCreation.replace("<<DICE_ROLL>>", "<br><<DICE_ROLL>>");
  1725.    
  1726.     for (var i = 0; i < chaosdice; i++)
  1727.     {
  1728.         var roll = randomInteger(10);
  1729.         diceResults.push(roll);
  1730.         tableCreation = tableCreation.replace("<<DICE_ROLL>>", warhammerChaosDiceTemplate);
  1731.         tableCreation = tableCreation.replace("<<DICE_RESULT>>", roll);
  1732.         if (((i+1) % 3) == 0) tableCreation = tableCreation.replace("<<DICE_ROLL>>", "<br><<DICE_ROLL>>");
  1733.     }
  1734.    
  1735.     tableCreation = tableCreation.replace("<<DICE_ROLL>>", "");
  1736.    
  1737.     rollSum += armorpenal;
  1738.     rollSum += modtototal;
  1739.     if (channel == 1) rollSum += magicmax;
  1740.        
  1741.     var dup = false
  1742.     if (diceResults.length > 1)
  1743.     {
  1744.     var sorted_arr = diceResults.slice().sort();
  1745.     for (var i = 0; i < diceResults.length - 1; i++)
  1746.     {
  1747.         if (sorted_arr[i + 1] == sorted_arr[i])
  1748.         {
  1749.             dup = true;
  1750.             break;
  1751.         }
  1752.     }
  1753.     }
  1754.    
  1755.     if (dup == true)
  1756.     {
  1757.         tableCreation = tableCreation.replace("<<BAD_STUFF>>", warhammerMagicBadStuffTemplate);
  1758.         var badroll = randomInteger(100);
  1759.         tableCreation = tableCreation.replace("<<BAD_ROLL>>", badroll);
  1760.         if ((badroll % 11) == 0)
  1761.         {
  1762.             tableCreation = tableCreation.replace("<<BAD_STUFF>>", warhammerMagicBadStuffDoublesTemplate);
  1763.         }
  1764.         else
  1765.         {
  1766.             tableCreation = tableCreation.replace("<<BAD_STUFF>>", "");
  1767.         }
  1768.     }
  1769.     else
  1770.     {  
  1771.         tableCreation = tableCreation.replace("<<BAD_STUFF>>", "");
  1772.     }
  1773.    
  1774.     if (rollSum >= spellnumber)
  1775.     {
  1776.         tableCreation = tableCreation.replace("<<RESULT>>", warhammerMagicSuccessTemplate);
  1777.     }
  1778.     else
  1779.     {
  1780.         tableCreation = tableCreation.replace("<<RESULT>>", warhammerMagicFailureTemplate);
  1781.     }
  1782.    
  1783.     tableCreation = tableCreation.replace("<<TOTAL>>", rollSum);
  1784.    
  1785.     var sumcomponent = componentvalue + rollSum;
  1786.    
  1787.     tableCreation = tableCreation.replace("<<COMP>>", componentvalue);
  1788.     tableCreation = tableCreation.replace("<<TOTALCOMP>>", sumcomponent);
  1789.    
  1790.     if (hidden==2)
  1791.     {
  1792.         var tempText = "/w " + whoSent + " "+tableCreation;
  1793.         if (player==1) sendChat("player|"+char, tempText);
  1794.         else sendChat("character|"+char, tempText);
  1795.     }
  1796.     if (hidden >= 1) tableCreation = "/w gm " + tableCreation;
  1797.     if (player==1) sendChat("player|"+char, tableCreation);
  1798.     else sendChat("character|"+char, tableCreation);
  1799.  
  1800. };
  1801.  
  1802. function WarhammerAttackDice(char, player, targetnum, mod, ranged, hidden, title, qualities, whoSent, retried, playerid, lastId)
  1803. {
  1804.     var addTitle = false;
  1805.     if (title != null)
  1806.     {
  1807.         if (title != "")
  1808.         {
  1809.             addTitle = true;
  1810.         }
  1811.     }
  1812.     var addQualities = false;
  1813.     if (qualities != null)
  1814.     {
  1815.         if (qualities != "")
  1816.         {
  1817.             addQualities = true;
  1818.         }
  1819.     }
  1820.     else
  1821.     {
  1822.         qualities = "None";
  1823.     }
  1824.     if (!ranged)
  1825.     {
  1826.         ranged = 0;
  1827.     }
  1828.     if (!targetnum)
  1829.     {
  1830.         targetnum = 0;
  1831.     }
  1832.     if (!mod)
  1833.     {
  1834.         mod = 0;
  1835.     }
  1836.     ranged = Number(ranged);
  1837.     var target = Number(targetnum) + Number(mod);
  1838.     var targetNumber = Number(target);
  1839.  
  1840.     //if (targetNumber > 99) targetNumber = 99;
  1841.     if (targetNumber < 1) targetNumber = 1;
  1842.  
  1843.  
  1844.     var tableCreation = warhammerAttackTableTemplate;
  1845.    
  1846.     if (ranged == 0)
  1847.     {
  1848.         tableCreation = tableCreation.replace("<<ATTACK_SYMBOL>>", attackSymbol);
  1849.         tableCreation = tableCreation.replace("<<ATTACK_OR_PARRY>>", "Melee");
  1850.     }
  1851.     if (ranged == 1)
  1852.     {
  1853.         tableCreation = tableCreation.replace("<<ATTACK_SYMBOL>>", shootSymbol);
  1854.         tableCreation = tableCreation.replace("<<ATTACK_OR_PARRY>>", "Ranged");
  1855.     }
  1856.     if (ranged == 2)
  1857.     {
  1858.         tableCreation = tableCreation.replace("<<ATTACK_SYMBOL>>", parrySymbol);
  1859.         tableCreation = tableCreation.replace("<<ATTACK_OR_PARRY>>", "Parry");
  1860.     }
  1861.    
  1862.     if (addTitle == true)
  1863.     {
  1864.         tableCreation = tableCreation.replace("<<ATTACK_NAME>>", title + "<<PARRY_TEST>> ");
  1865.         if (ranged == 2)
  1866.         {
  1867.             tableCreation = tableCreation.replace("<<PARRY_TEST>>", "'s Parry ");
  1868.         }
  1869.         else
  1870.         {
  1871.             tableCreation = tableCreation.replace("<<PARRY_TEST>>", "");
  1872.         }
  1873.     }
  1874.     else
  1875.     {
  1876.         tableCreation = tableCreation.replace("<<ATTACK_NAME>>", "Custom Roll");
  1877.     }
  1878.    
  1879.     if ( Boolean(retried) == true)
  1880.     {
  1881.         tableCreation = tableCreation.replace("<<FORTUNE>>", " (Fate's Point)");
  1882.     }
  1883.     else
  1884.     {
  1885.         tableCreation = tableCreation.replace("<<FORTUNE>>", "");
  1886.     }
  1887.     tableCreation = tableCreation.replace("<<STAT_NUMBER>>", targetNumber);
  1888.     var resulttemp = warhammerAttackFailureTemplate;
  1889.  
  1890.     var rollOne = randomInteger(10) - 1;
  1891.     var rollTwo = randomInteger(10) - 1;
  1892.  
  1893.     var sum = (rollOne * 10) + rollTwo;
  1894.     if (sum == 0) sum = 100;
  1895.     var succ = false;
  1896.     var color = "red";
  1897.     if (sum <= targetNumber && sum != 100)
  1898.     {
  1899.         succ = true;
  1900.         color = "green";
  1901.         resulttemp = warhammerAttackSuccessTemplate;
  1902.     }
  1903.     if (sum <= critSucSkill)
  1904.     {
  1905.         resulttemp = warhammerAttackCriticalSuccessTemplate;
  1906.     }
  1907.     if (sum >= critFailSkill)
  1908.     {
  1909.         succ = false;
  1910.         color = "red";
  1911.         resulttemp = warhammerAttackCriticalFailureTemplate;
  1912.     }
  1913.    
  1914.     if (ranged == 1 && sum > 95)
  1915.     {
  1916.         tableCreation = tableCreation.replace("<<JAMMED>>", warhammerAttackJammedTemplate);
  1917.     }
  1918.     else
  1919.     {
  1920.         tableCreation = tableCreation.replace("<<JAMMED>>", "");
  1921.     }
  1922.    
  1923.     tableCreation = tableCreation.replace("<<COLOR>>", color);
  1924.     tableCreation = tableCreation.replace("<<ROLL_NUMBER>>", sum);
  1925.  
  1926.     var MoS = 0;
  1927.     if (sum > targetNumber)
  1928.     {
  1929.         MoS = sum - targetNumber;
  1930.     }
  1931.     else
  1932.     {
  1933.         MoS = targetNumber - sum;
  1934.     }
  1935.  
  1936.     if (succ == true)
  1937.     {
  1938.         tableCreation = tableCreation.replace("<<ROLL_DEGREE>>", warhammerAttackDoSTemplate);
  1939.     }
  1940.     else
  1941.     {
  1942.         tableCreation = tableCreation.replace("<<ROLL_DEGREE>>", warhammerAttackDoFTemplate);
  1943.     }
  1944.     tableCreation = tableCreation.replace("<<DEGREE>>", Math.floor((MoS + 10)/10));
  1945.  
  1946.     tableCreation = tableCreation.replace("<<ROLL_RESULT>>", resulttemp);
  1947.    
  1948.     if (succ == false && retried == false)
  1949.     {
  1950.         title = title.replace(/'/g , "");
  1951.         qualities = qualities.replace(/'/g , "");
  1952.         title = title.replace(/:/g , "");
  1953.         qualities = qualities.replace(/:/g , "");
  1954.         tableCreation = tableCreation.replace("<<IF_HIT>>", warhammerAttackRetryTemplate);
  1955.         if (title.indexOf('[') != -1 && title.indexOf('[') != 0) title = title.substring(0, title.indexOf('['));
  1956.         tableCreation = tableCreation.replace("<<RETRY>>", "!warattackrollretry ;" + char + ";" + player + ";" + targetnum + ";" + mod + ";" + ranged + ";" + hidden + ";" + title + ";" + qualities + ";" + whoSent + ";true;" + playerid + ";" + lastId);
  1957.        
  1958.     }
  1959.    
  1960.    
  1961.     if (succ == true && ranged != 2)
  1962.     {
  1963.         tableCreation = tableCreation.replace("<<IF_HIT>>", warhammerAttackHitTemplate);
  1964.        
  1965.         var sum2 = (rollTwo * 10) + rollOne;
  1966.         if (sum2 == 0) sum2 = 100;
  1967.        
  1968.         var locationHit = "";
  1969.         if (sum2 >= 91)
  1970.         {
  1971.             locationHit = "Left Leg";
  1972.         }
  1973.         else if (sum2 >= 81)
  1974.         {
  1975.             locationHit = "Right Leg";
  1976.         }
  1977.         else if (sum2 >= 56)
  1978.         {
  1979.             locationHit = "Body";
  1980.         }
  1981.         else if (sum2 >= 36)
  1982.         {
  1983.             locationHit = "Left Arm";
  1984.         }
  1985.         else if (sum2 >= 16)
  1986.         {
  1987.             locationHit = "Right Arm";
  1988.         }
  1989.         else
  1990.         {
  1991.             locationHit = "Head";
  1992.         }
  1993.        
  1994.         tableCreation = tableCreation.replace("<<HIT_LOCATION>>", locationHit);
  1995.         tableCreation = tableCreation.replace("<<HIT_REVERSE>>", sum2);
  1996.     }
  1997.     else
  1998.     {
  1999.         tableCreation = tableCreation.replace("<<IF_HIT>>", "");
  2000.     }
  2001.    
  2002.    
  2003.     if (addQualities == true)
  2004.     {
  2005.         tableCreation = tableCreation.replace("<<QUALITIES>>", warhammerAttackQualitiesTemplate);
  2006.         tableCreation = tableCreation.replace("<<QUALITIES>>", qualities);
  2007.     }
  2008.     else
  2009.     {
  2010.         tableCreation = tableCreation.replace("<<QUALITIES>>", "");
  2011.     }
  2012.    
  2013.    
  2014.     if (hidden==2)
  2015.     {
  2016.         var tempText = "/w " + whoSent + " "+tableCreation;
  2017.         if (player==1) sendChat("player|"+char, tempText);
  2018.         else sendChat("character|"+char, tempText);
  2019.     }
  2020.     if (hidden >= 1) tableCreation = "/w gm " + tableCreation;
  2021.     if (player==1) sendChat("player|"+char, tableCreation);
  2022.     else sendChat("character|"+char, tableCreation);
  2023.  
  2024. };
  2025. function WarhammerDamageHits(char, player, melee, hits, damage, tearing, typeDamage, penetration, hidden, weaponName, whoSent, playerid)
  2026. {
  2027.     if (!melee)
  2028.     {
  2029.         melee = 1;
  2030.     }
  2031.     if (melee != 0 && melee != 1) melee = 1;
  2032.    
  2033.     if (!hits)
  2034.     {
  2035.         hits = 1;
  2036.     }
  2037.     if (hits <= 0) hits = 1;
  2038.    
  2039.     if (!damage)
  2040.     {
  2041.         damage = "1d10";
  2042.     }
  2043.    
  2044.     if (!tearing)
  2045.     {
  2046.         tearing = 0;
  2047.     }
  2048.    
  2049.     if (!typeDamage)
  2050.     {
  2051.         typeDamage = "Unknown";
  2052.     }
  2053.    
  2054.     if (!penetration)
  2055.     {
  2056.         penetration = 0;
  2057.     }
  2058.    
  2059.     if (!weaponName)
  2060.     {
  2061.         weaponName = "Custom Weapon";
  2062.     }
  2063.    
  2064.     penetration = Number(penetration);
  2065.     tearing = Number(tearing);
  2066.     hits = Number(hits);
  2067.    
  2068.     var meleeText = "Melee ";
  2069.     if (melee != 1) meleeText = "Ranged ";
  2070.    
  2071.    
  2072.     var mess = "<table style='max-width: 250px; min-width:150px; background-image:url("+combatBackgroundImage+"); background-size: 100% 100%; background-repeat: no-repeat;font-family: \"Century Gothic\", CenturyGothic, AppleGothic, sans-serif;'>"
  2073.             +'<tr><th COLSPAN="2" style="text-align:center;padding-top:15px;">'+meleeText+'Damage Hits</th></tr>'
  2074.             +'<tr>'
  2075.             +'<td COLSPAN="2" style="text-align:center;">'
  2076.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  2077.             +'</td>'
  2078.             +'</tr>'
  2079.  
  2080.             + '<tr>'
  2081.             +'<td COLSPAN="2" style="text-align:center; width:100%;padding-right:10px;padding-left:10px"><b>'+weaponName+'</b></td>'
  2082.             +'</tr>'
  2083.            
  2084.            
  2085.             +'<td COLSPAN="2" style="text-align:center;">'
  2086.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  2087.             +'</td>'
  2088.             +'</tr>'
  2089.            
  2090.             +'<tr>'
  2091.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Penetration :</b></span> [['+penetration+']] </td>'
  2092.             +'</tr>'
  2093.            
  2094.             +'<tr>'
  2095.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Damage Type :</b></span> <b>'+typeDamage+' </b></td>'
  2096.             +'</tr>';
  2097.    
  2098.     if (tearing == 1)
  2099.     {  
  2100.         mess = mess
  2101.             +'<tr>'
  2102.             +'<td COLSPAN="2" style="text-align:center;"><span style="font-style:oblique;font-weight:bolder;color: #B31515;"><b>Tearing? :</b></span> <b>Rip and Tear!</b></td>'
  2103.             +'</tr>';
  2104.     }
  2105.    
  2106.     var damageQuery = "";
  2107.     for (i = 0; i < hits; i++)
  2108.     {
  2109.         damageQuery = damageQuery + "[[" + damage + " ]] ";
  2110.     }
  2111.         mess = mess  
  2112.             +'<tr>'
  2113.             +'<td COLSPAN="2" style="text-align:center;">'
  2114.                 +'<img class="sheet-imghr" style="width:95%;" src="'+combatLineImage+'" />'
  2115.             +'</td>'
  2116.             +'</tr>'
  2117.             +"<tr><td COLSPAN='2' style='text-align:center;font-style:oblique;font-weight:bolder;height:25px'><b>Damage</b></td></tr>"
  2118.             +'<tr>'
  2119.             +"<td COLSPAN='2' style='text-align:center;'>"+damageQuery+"</td>"
  2120.             +'</tr>';
  2121.    
  2122.     mess = mess +'<tr><td COLSPAN="2" style="padding-top:15px;"></td></tr>'
  2123.            
  2124.         +'</table>';
  2125.    
  2126.    
  2127.     if (hidden==2)
  2128.     {
  2129.         var tempText = "/w " + whoSent + " "+mess;
  2130.         if (player==1) sendChat("player|"+char, tempText);
  2131.         else sendChat("character|"+char, tempText);
  2132.     }
  2133.     if (hidden >= 1) mess = "/w gm " + mess;
  2134.     if (player==1) sendChat("player|"+char, mess);
  2135.     else sendChat("character|"+char, mess);
  2136.    
  2137.  
  2138. };
  2139.  
  2140. on("chat:message", function(msg) {
  2141.     if ( msg.type != 'api' ) return;
  2142.     var cmd = "";
  2143.     if (_.has(msg, 'inlinerolls')) {
  2144.         cmd = _.chain(msg.inlinerolls)
  2145.                 .reduce(function(previous, current, index) {
  2146.                     previous['$[[' + index + ']]'] = current.results.total || 0;
  2147.                     return previous;
  2148.                 },{})
  2149.                 .reduce(function(previous, current, index) {
  2150.                     return previous.replace(index, current);
  2151.                 }, msg.content)
  2152.                 .value();
  2153.     } else {
  2154.         cmd = msg.content;
  2155.     }
  2156.     var cmd = cmd.toLowerCase().split(' ');
  2157.     if ( cmd[0] == "!warroll" )
  2158.     {
  2159.         var inputName = msg.who;
  2160.         var list = findObjs( {
  2161.             _type: "character",
  2162.             name: inputName
  2163.         });
  2164.  
  2165.         var cmd2 = msg.content.split(' ');
  2166.         var str = "";
  2167.         for (i = 4; i < cmd2.length; i++)
  2168.         {
  2169.             str = str + " " + cmd2[i];
  2170.         }
  2171.         str = str.substring(1);
  2172.        
  2173.         var roll = 0;
  2174.         if (isNaN(cmd[1]) == false)
  2175.         {
  2176.             roll = cmd[1];            
  2177.         }
  2178.         else
  2179.         {
  2180.             msg.inlinerolls
  2181.         }
  2182.         if (_.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2183.         {
  2184.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);;
  2185.         }
  2186.         else
  2187.         {
  2188.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid] = { LastRollId: (Math.random() + 1).toString(36).substring(7)}
  2189.         }
  2190.        
  2191.         if (list.length == 0)
  2192.         {
  2193.             WarhammerDice( msg.playerid, 1, cmd[1], cmd[2], cmd[3], str, inputName, false, msg.playerid, state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId);
  2194.         }
  2195.         else
  2196.         {
  2197.             WarhammerDice( list[0].id, 0, cmd[1], cmd[2], cmd[3], str, inputName, false, msg.playerid, state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId);
  2198.         }
  2199.     }
  2200.     else if ( cmd[0] == "!warmagicroll" )
  2201.     {
  2202.         var inputName = msg.who;
  2203.         var list = findObjs( {
  2204.             _type: "character",
  2205.             name: inputName
  2206.         });
  2207.  
  2208.         var cmd2 = msg.content.split(' ');
  2209.         var str = "";
  2210.         for (i = 14; i < cmd2.length; i++)
  2211.         {
  2212.             str = str + " " + cmd2[i];
  2213.         }
  2214.         str = str.substring(1);
  2215.        
  2216.         var spelldesc = str.splitArgs();
  2217.        
  2218.         if (_.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2219.         {
  2220.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);;
  2221.         }
  2222.         else
  2223.         {
  2224.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid] = { LastRollId: (Math.random() + 1).toString(36).substring(7)}
  2225.         }
  2226.        
  2227.         var roll = 0;
  2228.         if (isNaN(cmd[1]) == false)
  2229.         {
  2230.             roll = cmd[1];            
  2231.         }
  2232.         else
  2233.         {
  2234.             msg.inlinerolls
  2235.         }
  2236.         if (list.length == 0)
  2237.         {
  2238.                                                 //magic, magicmax, channel, gooddice, modtototal, modtodice, armorpenal, chaosdice, dhar, componentvalue, hidden, spellnumber, spellname, spelldesc, spellcomponent, spelltime, spellduration, spellrange, spellimage, whoSent)
  2239.             WarhammerMagicDice( msg.playerid, 1, cmd[1], cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], cmd[7], cmd[8], cmd[9], cmd[10], cmd[11], cmd[12], cmd[13], spelldesc[0], spelldesc[1], spelldesc[2], spelldesc[3], spelldesc[4], spelldesc[5], spelldesc[6], inputName);
  2240.         }
  2241.         else
  2242.         {
  2243.             //magic, magicmax, channel, gooddice, modtototal, modtodice, armorpenal, chaosdice, dhar, componentvalue, hidden, spellnumber, spellname, spelldesc, spellcomponent, spelltime, spellduration, spellrange, spellimage, whoSent)
  2244.             WarhammerMagicDice( list[0].id, 0, cmd[1], cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], cmd[7], cmd[8], cmd[9], cmd[10], cmd[11], cmd[12], cmd[13], spelldesc[0], spelldesc[1], spelldesc[2], spelldesc[3], spelldesc[4], spelldesc[5], spelldesc[6], inputName);
  2245.         }
  2246.     }
  2247.     else if ( cmd[0] == "!warinitroll" )
  2248.     {
  2249.         var inputName = msg.who;
  2250.         var list = findObjs( {
  2251.             _type: "character",
  2252.             name: inputName
  2253.         });
  2254.  
  2255.         var cmd2 = msg.content.split(' ');
  2256.         var str = "";
  2257.         for (i = 3; i < cmd2.length; i++)
  2258.         {
  2259.             str = str + " " + cmd2[i];
  2260.         }
  2261.         str = str.substring(1);
  2262.                
  2263.        
  2264.         if (_.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2265.         {
  2266.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);;
  2267.         }
  2268.         else
  2269.         {
  2270.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid] = { LastRollId: (Math.random() + 1).toString(36).substring(7)}
  2271.         }
  2272.        
  2273.         var roll = 0;
  2274.         if (isNaN(cmd[1]) == false)
  2275.         {
  2276.             roll = cmd[1];            
  2277.         }
  2278.         else
  2279.         {
  2280.             msg.inlinerolls
  2281.         }
  2282.         if (list.length == 0)
  2283.         {
  2284.             WarhammerInitiative( msg.playerid, 1, cmd[1], cmd[2], str, inputName);
  2285.         }
  2286.         else
  2287.         {
  2288.             WarhammerInitiative( list[0].id, 0, cmd[1], cmd[2], str, inputName);
  2289.         }
  2290.     }
  2291.     else if ( cmd[0] == "!warparryroll" )
  2292.     {
  2293.         var inputName = msg.who;
  2294.         var list = findObjs( {
  2295.             _type: "character",
  2296.             name: inputName
  2297.         });
  2298.  
  2299.         var cmd2 = msg.content.split(' ');
  2300.         var str = "";
  2301.         for (i = 4; i < cmd2.length; i++)
  2302.         {
  2303.             str = str + " " + cmd2[i];
  2304.         }
  2305.         str = str.substring(1);
  2306.        
  2307.         if (_.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2308.         {
  2309.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);;
  2310.         }
  2311.         else
  2312.         {
  2313.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid] = { LastRollId: (Math.random() + 1).toString(36).substring(7)}
  2314.         }
  2315.         var roll = 0;
  2316.         if (isNaN(cmd[1]) == false)
  2317.         {
  2318.             roll = cmd[1];            
  2319.         }
  2320.         else
  2321.         {
  2322.             msg.inlinerolls
  2323.         }
  2324.         if (list.length == 0)
  2325.         {
  2326.             WarhammerParryDice( msg.playerid, 1, cmd[1], cmd[2], cmd[3], str, inputName, false, msg.playerid, state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId);
  2327.         }
  2328.         else
  2329.         {
  2330.             WarhammerParryDice( list[0].id, 0, cmd[1], cmd[2], cmd[3], str, inputName, false, msg.playerid, state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId);
  2331.         }
  2332.     }
  2333.     else if ( cmd[0] == "!warpsychicroll" )
  2334.     {
  2335.         var inputName = msg.who;
  2336.         var list = findObjs( {
  2337.             _type: "character",
  2338.             name: inputName
  2339.         });
  2340.  
  2341.         var cmd2 = msg.content.split(' ');
  2342.         var str = "";
  2343.         for (i = 10; i < cmd2.length; i++)
  2344.         {
  2345.             str = str + " " + cmd2[i];
  2346.         }
  2347.         str = str.substring(1);
  2348.        
  2349.         if (_.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2350.         {
  2351.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);;
  2352.         }
  2353.         else
  2354.         {
  2355.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid] = { LastRollId: (Math.random() + 1).toString(36).substring(7)}
  2356.         }
  2357.         var roll = 0;
  2358.         if (isNaN(cmd[1]) == false)
  2359.         {
  2360.             roll = cmd[1];            
  2361.         }
  2362.         else
  2363.         {
  2364.             msg.inlinerolls
  2365.         }
  2366.         if (list.length == 0)
  2367.         {
  2368.             WarhammerPsychicDice( msg.playerid, 1, cmd[1], cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], cmd[7], cmd[8], cmd[9], str, inputName, false, msg.playerid, state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId);
  2369.         }
  2370.         else
  2371.         {
  2372.             WarhammerPsychicDice( list[0].id, 0, cmd[1], cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], cmd[7], cmd[8], cmd[9], str, inputName, false, msg.playerid, state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId);
  2373.         }
  2374.     }
  2375.     else if ( cmd[0] == "!warattackroll" )
  2376.     {
  2377.         var inputName = msg.who;
  2378.         var list = findObjs( {
  2379.             _type: "character",
  2380.             name: inputName
  2381.         });
  2382.  
  2383.         var cmd2 = msg.content.split(' ');
  2384.         var str = "";
  2385.         for (i = 5; i < cmd2.length; i++)
  2386.         {
  2387.             str = str + " " + cmd2[i];
  2388.         }
  2389.         str = str.substring(1);
  2390.        
  2391.         if (_.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2392.         {
  2393.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);;
  2394.         }
  2395.         else
  2396.         {
  2397.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid] = { LastRollId: (Math.random() + 1).toString(36).substring(7)}
  2398.         }
  2399.         var attackNameAndQualities = str.splitArgs();      
  2400.        
  2401.         var roll = 0;
  2402.         if (isNaN(cmd[1]) == false)
  2403.         {
  2404.             roll = cmd[1];            
  2405.         }
  2406.         else
  2407.         {
  2408.             msg.inlinerolls
  2409.         }
  2410.         if (list.length == 0)
  2411.         {
  2412.             WarhammerAttackDice( msg.playerid, 1, cmd[1], cmd[2], cmd[3], cmd[4], attackNameAndQualities[0], attackNameAndQualities[1], inputName, false, msg.playerid, state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId);
  2413.         }
  2414.         else
  2415.         {
  2416.             WarhammerAttackDice( list[0].id, 0, cmd[1], cmd[2], cmd[3], cmd[4], attackNameAndQualities[0], attackNameAndQualities[1], inputName, false, msg.playerid, state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId);
  2417.         }
  2418.     }
  2419.     else if ( cmd[0] == "!wardmgroll" )
  2420.     {
  2421.         var inputName = msg.who;
  2422.         var list = findObjs( {
  2423.             _type: "character",
  2424.             name: inputName
  2425.         });
  2426.  
  2427.         var cmd2 = msg.content.split(' ');
  2428.         var str = "";
  2429.         for (i = 7; i < cmd2.length; i++)
  2430.         {
  2431.             str = str + " " + cmd2[i];
  2432.         }
  2433.         str = str.substring(1);
  2434.        
  2435.         if (_.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2436.         {
  2437.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);;
  2438.         }
  2439.         else
  2440.         {
  2441.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid] = { LastRollId: (Math.random() + 1).toString(36).substring(7)}
  2442.         }
  2443.         var attackNameAndQualities = str.splitArgs();      
  2444.        
  2445.         var roll = 0;
  2446.         if (isNaN(cmd[1]) == false)
  2447.         {
  2448.             roll = cmd[1];            
  2449.         }
  2450.         else
  2451.         {
  2452.             msg.inlinerolls
  2453.         }
  2454.         if (list.length == 0)
  2455.         {
  2456.             WarhammerCombatDice( msg.playerid, 1, cmd[1], cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], attackNameAndQualities[0], attackNameAndQualities[1], inputName, false, msg.playerid, state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId);
  2457.         }
  2458.         else
  2459.         {
  2460.             WarhammerCombatDice( list[0].id, 0, cmd[1], cmd[2], cmd[3], cmd[4], cmd[5], cmd[6], attackNameAndQualities[0], attackNameAndQualities[1], inputName, false, msg.playerid, state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId);
  2461.         }
  2462.     }
  2463.     else if (cmd[0] == "!warrollretry" && _.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2464.     {
  2465.         var retryArgs = msg.content.splitArgs(";");
  2466.         if (retryArgs[9] == msg.playerid && state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId == retryArgs[10])
  2467.         {
  2468.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);
  2469.             WarhammerDice( retryArgs[1], retryArgs[2], retryArgs[3], retryArgs[4], retryArgs[5], retryArgs[6], retryArgs[7], retryArgs[8]);
  2470.         }
  2471.     }
  2472.     else if (cmd[0] == "!warpsychicrollretry" && _.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2473.     {
  2474.         var retryArgs = msg.content.splitArgs(";");
  2475.         if (retryArgs[15] == msg.playerid && state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId == retryArgs[16])
  2476.         {
  2477.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);
  2478.             WarhammerPsychicDice( retryArgs[1], retryArgs[2], retryArgs[3], retryArgs[4], retryArgs[5], retryArgs[6], retryArgs[7], retryArgs[8], retryArgs[9], retryArgs[10], retryArgs[11], retryArgs[12], retryArgs[13], retryArgs[14]);
  2479.         }
  2480.     }
  2481.     else if (cmd[0] == "!wardmgrollretryattack" && _.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2482.     {
  2483.         var retryArgs = msg.content.splitArgs(";");
  2484.         if (retryArgs[13] == msg.playerid && state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId == retryArgs[14])   
  2485.         {
  2486.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);
  2487.             WarhammerCombatDice( retryArgs[1], retryArgs[2], retryArgs[3], retryArgs[4], retryArgs[5], retryArgs[6], retryArgs[7], retryArgs[8], retryArgs[9], retryArgs[10], retryArgs[11], retryArgs[12]);
  2488.         }      
  2489.     }
  2490.     else if (cmd[0] == "!wardmgrollretrycrit" && _.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2491.     {
  2492.         var retryArgs = msg.content.splitArgs(";");
  2493.         if (retryArgs[8] == msg.playerid && state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId == retryArgs[9])
  2494.         {
  2495.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);
  2496.             WarhammerCombatDiceRetryCrit( retryArgs[1], retryArgs[2], retryArgs[3], retryArgs[4], retryArgs[5], retryArgs[6], retryArgs[7]);
  2497.         }      
  2498.     }
  2499.     else if (cmd[0] == "!warparryrollretry" && _.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2500.     {
  2501.         var retryArgs = msg.content.splitArgs(";");
  2502.         if (retryArgs[9] == msg.playerid && state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId == retryArgs[10])
  2503.         {
  2504.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);
  2505.             WarhammerParryDice( retryArgs[1], retryArgs[2], retryArgs[3], retryArgs[4], retryArgs[5], retryArgs[6], retryArgs[7], retryArgs[8]);
  2506.         }          
  2507.     }
  2508.     else if (cmd[0] == "!warattackrollretry" && _.has(state.WarhammerDiceStatus.playerDiceLastRoll, msg.playerid))
  2509.     {
  2510.         var retryArgs = msg.content.splitArgs(";");
  2511.         if (retryArgs[11] == msg.playerid && state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId == retryArgs[12])
  2512.         {
  2513.             state.WarhammerDiceStatus.playerDiceLastRoll[msg.playerid].LastRollId = (Math.random() + 1).toString(36).substring(7);
  2514.             WarhammerAttackDice( retryArgs[1], retryArgs[2], retryArgs[3], retryArgs[4], retryArgs[5], retryArgs[6], retryArgs[7], retryArgs[8], retryArgs[9], retryArgs[10]);
  2515.         }          
  2516.     }
  2517.     else if (cmd[0] == "!warforcefield")
  2518.     {
  2519.         var inputName = msg.who;
  2520.         var list = findObjs( {
  2521.             _type: "character",
  2522.             name: inputName
  2523.         });
  2524.  
  2525.         if (list.length == 0)
  2526.         {
  2527.             WarhammerForceField( msg.playerid, 1, cmd[1], cmd[2], cmd[3], inputName, msg.playerid );
  2528.         }
  2529.         else
  2530.         {
  2531.             WarhammerForceField( list[0].id, 0, cmd[1], cmd[2], cmd[3], inputName,  msg.playerid );
  2532.         }          
  2533.     }
  2534.     else if (cmd[0] == "!wardamagehits")
  2535.     {
  2536.         var inputName = msg.who;
  2537.         var list = findObjs( {
  2538.             _type: "character",
  2539.             name: inputName
  2540.         });
  2541.        
  2542.         var cmd2 = "";
  2543.     if (_.has(msg, 'inlinerolls')) {
  2544.         cmd2 = _.chain(msg.inlinerolls)
  2545.                 .reduce(function(previous, current, index) {
  2546.                     previous['$[[' + index + ']]'] = current.results.total || 0;
  2547.                     return previous;
  2548.                 },{})
  2549.                 .reduce(function(previous, current, index) {
  2550.                     return previous.replace(index, current);
  2551.                 }, msg.content)
  2552.                 .value();
  2553.     } else {
  2554.         cmd2 = msg.content;
  2555.     }
  2556.         cmd2 = cmd2.split(';');
  2557.         if (list.length == 0)
  2558.         {
  2559.             WarhammerDamageHits( msg.playerid, 1, cmd2[1], cmd2[2], cmd2[3], cmd2[4], cmd2[5], cmd2[6], cmd2[7], cmd2[8], inputName, msg.playerid );
  2560.         }
  2561.         else
  2562.         {
  2563.             WarhammerDamageHits( list[0].id, 0, cmd2[1], cmd2[2], cmd2[3], cmd2[4], cmd2[5], cmd2[6], cmd2[7], cmd2[8], inputName,  msg.playerid );
  2564.         }          
  2565.     }
  2566.  
  2567.  
  2568. });
  2569.  
  2570. on('ready',function() {
  2571.     "use strict";
  2572.  
  2573.     if( ! state.WarhammerDiceStatus ) {
  2574.         state.WarhammerDiceStatus = {
  2575.             playerDiceLastRoll: {}
  2576.         };
  2577.     }
  2578.  
  2579. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement