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
(new)
 
m
(10 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.6
 +
|dependencies={{api repository link|Interpreted sendChat}}, {{api repository link|splitArgs}}
 +
|lastmodified=2016-08-01}}
  
==== 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 Command|Raise Count]]
+

Revision as of 14:52, 17 June 2020

API ScriptAuthor: Brian
Version: 2.6
Last Modified: 2016-08-01
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.

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.

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.

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