Character Vault
Any Concept / Any System
Compendium
Your System Come To Life
Roll20 for Android
Streamlined for your Tablet
Roll20 for iPad
Streamlined for your Tablet

Personal tools

Difference between revisions of "Script:Raise Count"

From Roll20 Wiki

Jump to: navigation, search
 
(7 intermediate revisions by one user not shown)
Line 1: Line 1:
The following script creates the API command <code>!rc</code>, which rolls dice and counts the number of raises for the Savage Worlds game system.
+
{{script overview
 +
|name=Raise Count
 +
|author={{user profile|235259|Brian}}
 +
|version=2.5
 +
|dependencies={{api repository link|Interpreted sendChat}}, {{api repository link|splitArgs}}
 +
|lastmodified=2016-04-09}}
  
==== Syntax ====
+
'''Raise Count''' creates the API command <code>!rc</code>, which rolls dice and counts the number of raises for the [[Savage Worlds]] game system.
<blockquote style="border:1px #0088ee solid;background:#eee;padding:0.5em">!rc ''roll''|''target''</blockquote>
+
<br clear="all">
  
{| class="wikitable"
+
=== Syntax ===
|-
+
{{syntaxbox top|Raise Count|formal=true}}
! Parameter
+
{{API command|rc}} {{API parameter|name=roll}} {{API parameter|name=target}}
! Values
+
{{Formal API command|
|-
+
{{token|S}} {{rarr}} {{API command|rc}} {{token|dice expression}} {{integer|-}}
| ''roll''
+
{{dice expression}}
| A dice roll, using Roll20's normal syntax. Do '''not''' include the <code>/r</code> command or inline brackets (<nowiki>[[ and ]]</nowiki>).
+
}}
|-
+
{{syntaxbox end}}
| ''target''
+
| The target number for the roll. The number of raises will be calculated against this target.
+
|}
+
  
==== Code ====
+
{{param description top}}
<pre data-language="javascript">
+
{{param description|name=roll|value=A dice roll, using Roll20's normal syntax. Do '''not''' include the <code>/r</code> command or inline brackets (<nowiki>[[ and ]]</nowiki>).}}
var raise_count = raise_count || {};
+
{{param description|name=target|value=The target number for the roll. The number of raises will be calculated against this target.}}
 +
{{param description bottom}}
  
// Raise increment; generalized in case there are cases where it isn't 4
+
=== Installation ===
raise_count.RAISE_SIZE = 4;
+
The format of the output can be customized by altering <code>Output Format</code>. You may use the placeholders <code>{0}</code>, <code>{1}</code>, and <code>{2}</code> in the <code>Output Format</code> string, which will become an inline roll, the value of ''target'', and the number of raises, respectively.
// Output formatting. %1$s will be replaced with an inline roll. %2$s will be replaced by the user's target input.
+
// %3$s will be replaced by the number of raises resulting the from roll. change this string if you want the results
+
// to show up differently in chat.
+
raise_count.OUTPUT_FORMAT = 'Roll: %1$s, Target: %2$s, Raises: %3$s';
+
  
on('chat:message', function(msg) {
+
You can change the size of a raise use to calculate the number of raises by altering the value of <code>Raise Size</code>.
    if(msg.type != 'api' || msg.content.indexOf('!rc ')) return;
+
   
+
    var roll = msg.content.substring(4, msg.content.indexOf('|'));
+
    var target = msg.content.substring(msg.content.indexOf('|')+1);
+
   
+
    var sendAs = 'system';
+
    var character = findObjs({_type: 'character', name: msg.who})[0];
+
    if(character) sendAs = 'character|'+character.id;
+
    else sendAs = 'player|'+msg.playerid;
+
   
+
    sendChat(sendAs, '[['+roll+']]', function(fmsg) {
+
        var expression = fmsg[0].inlinerolls['1'].expression;
+
        var total = fmsg[0].inlinerolls['1'].results.total;
+
        var raises = Math.floor((total - target) / raise_count.RAISE_SIZE);
+
       
+
        var rollOut = '<span title="Rolling '+expression+' = ';
+
        var fail = crit = false;
+
        for(var i in fmsg[0].inlinerolls['1'].results.rolls)
+
        {
+
            var r = fmsg[0].inlinerolls['1'].results.rolls[i];
+
            if(r['type'] != 'R') continue;
+
           
+
            rollOut += '(';
+
            var max = r['sides'];
+
           
+
            for(var k = 0; k < r['results'].length; k++)
+
            {
+
                var value = r['results'][k]['v'];
+
                crit = crit || (value == max);
+
                fail = fail || (value == 1);
+
                rollOut += '<span class=&quot;basicdiceroll'+(value==max?' critsuccess':(value==1?' critfail':''))+'&quot;>';
+
                rollOut += value+'</span>+';
+
            }
+
            rollOut = rollOut.substring(0,rollOut.length - 1)+')+';
+
        }
+
        rollOut = rollOut.substr(0, rollOut.length - 1);
+
        rollOut += '" class="a inlinerollresult showtip tipsy-n';
+
        rollOut += (crit&&fail?' importantroll':(crit?' fullcrit':(fail?' fullfail':'')))+'">'+total+'</span>';
+
       
+
        var message = '/direct '+raise_count.sprintf(raise_count.OUTPUT_FORMAT, rollOut, target, raises);
+
        sendChat(sendAs, message);
+
    });
+
});
+
  
/**
+
=== Changelog ===
* Really really really super naive implementation of the sprintf function,
+
{{changelog version|2.6|2016-08-01|* Corrected reported ReferenceError
* which will only really work for this script. I should be ashamed for qriting it.
+
* Corrected output styling}}
*/
+
{{changelog version|2.5|2016-04-12|* Update globalconfig support}}
raise_count.sprintf = function(format, arg1, arg2, arg3)
+
{{changelog version|2.4|2016-03-09|* Update for one-click install}}
{
+
{{changelog version|2.3|2015-05-20|* Handle changes to inlinerolls handling on dev server}}
    var out = format.replace('%1$s', arg1);
+
{{changelog version|2.2|2015-01-24|* [bugfix] no-arg crash}}
    out = out.replace('%2$s', arg2);
+
{{changelog version|2.1|2015-01-22|* Fixed transcription error}}
    out = out.replace('%3$s', arg3);
+
{{changelog version|2.0|2015-01-08|* Release}}
    return out;
+
};
+
</pre>
+
 
+
==== Examples ====
+
'''!rc 2d12+d6|?{Target|7}'''
+
<blockquote>This will result in an output such as "Roll: [20], Target: 7, Raises: 3".</blockquote>
+
 
+
==== Note ====
+
On line 8, you will see the variable <code>raise_count.OUTPUT_FORMAT</code>. You can change this string to alter how the script outputs the result.
+
 
+
[[Category:User API Scripts|Raise Count]]
+
[[Category:API Commands|Raise Count]]
+

Latest revision as of 22:55, 1 August 2016

API ScriptAuthor: Brian
Version: 2.5
Last Modified: 2016-04-09
Code: Raise Count
Dependencies: Interpreted sendChat, splitArgs
Conflicts: None

Raise Count creates the API command !rc, which rolls dice and counts the number of raises for the Savage Worlds game system.

[edit] Syntax

!rc <roll> <target>
Formally:

S → !rc dice expression integer
dice expressionroll
dice expressiondice expressionmodifier
dice expression → {expression list}group modifier
dice expressiondice expression operator dice expression
dice expressionfunction(dice expression)
rollmath expressiondf
rollmath expressiondmath expression
math expressioninteger
math expression → (math expression operator math expression)
operator → +
operator → -
operator → *
operator → /
function → floor
function → ceil
function → round
function → abs
modifiercompare
modifier → fcompare
modifier → !compare
modifier → !!compare
modifier → !pcompare
modifier → rcompare
modifier → rocompare
modifierkeep-drop
modifier → s
modifier → sd
compare → ε
compareinteger
compare → >integer
compare → <integer
keep-dropkeep
keep-dropkeepinteger
keep-dropdrop
keep-dropdropinteger
keep → k
keep → kh
keep → kl
drop → d
drop → dh
drop → dl
expression listdice expression, rest expression list
rest expression listdice expression
rest expression listexpression list
group modifierkeep-drop
group modifiercompare
group modifier → fcompare

Parameter Values
roll A dice roll, using Roll20's normal syntax. Do not include the /r command or inline brackets ([[ and ]]).
target The target number for the roll. The number of raises will be calculated against this target.

[edit] Installation

The format of the output can be customized by altering Output Format. You may use the placeholders {0}, {1}, and {2} in the Output Format string, which will become an inline roll, the value of target, and the number of raises, respectively.

You can change the size of a raise use to calculate the number of raises by altering the value of Raise Size.

[edit] Changelog

v2.6 (2016-08-01)

  • Corrected reported ReferenceError
  • Corrected output styling


v2.5 (2016-04-12)

  • Update globalconfig support


v2.4 (2016-03-09)

  • Update for one-click install


v2.3 (2015-05-20)

  • Handle changes to inlinerolls handling on dev server


v2.2 (2015-01-24)

  • [bugfix] no-arg crash


v2.1 (2015-01-22)

  • Fixed transcription error


v2.0 (2015-01-08)

  • Release