Created
November 27, 2013 10:48
-
-
Save BaldarSilveraxe/7673795 to your computer and use it in GitHub Desktop.
Roll20 API code for critical hits and misses. Creates two handouts for the GM and updates them when called.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//API:Events:ChatMessage:processAPIswitch:common:critical********************************************** | |
roll20API.processAPIcritical = function() { | |
var MeleeArmed = new Array(); | |
MeleeArmed[0] = {Code: "FGM", Text: "Lost Footing"}; | |
MeleeArmed[1] = {Code: "DPM", Text: "Drop Weapon"}; | |
MeleeArmed[2] = {Code: "SIM", Text: "Self Injury"}; | |
MeleeArmed[3] = {Code: "EGA", Text: "Entangle With Foe"}; | |
MeleeArmed[4] = {Code: "TWM", Text: "Twist Muscle"}; | |
MeleeArmed[5] = {Code: "SDM", Text: "Scenery Disadvantage"}; | |
MeleeArmed[6] = {Code: "WMM", Text: "Wardrobe Malfunction"}; | |
MeleeArmed[7] = {Code: "WBM", Text: "Weapon Break"}; | |
MeleeArmed[8] = {Code: "FFM", Text: "Friendly Fire"}; | |
var MeleeUnarmed = new Array(); | |
MeleeUnarmed[0] = {Code: "FGM", Text: "Lost Footing"}; | |
MeleeUnarmed[1] = {Code: "SIM", Text: "Self Injury"}; | |
MeleeUnarmed[2] = {Code: "EGU", Text: "Entangle With Foe"}; | |
MeleeUnarmed[3] = {Code: "TWM", Text: "Twist Muscle"}; | |
MeleeUnarmed[4] = {Code: "SDM", Text: "Scenery Disadvantage"}; | |
MeleeUnarmed[5] = {Code: "WMM", Text: "Wardrobe Malfunction"}; | |
MeleeUnarmed[6] = {Code: "FFM", Text: "Friendly Fire"}; | |
var RangedWeapon = new Array(); | |
RangedWeapon[0] = {Code: "FGR", Text: "Lost Footing"}; | |
RangedWeapon[1] = {Code: "DPR", Text: "Drop Weapon"}; | |
RangedWeapon[2] = {Code: "TWR", Text: "Twist Muscle"}; | |
RangedWeapon[3] = {Code: "SDR", Text: "Scenery Disadvantage"}; | |
RangedWeapon[4] = {Code: "WMR", Text: "Wardrobe Malfunction"}; | |
RangedWeapon[5] = {Code: "WBR", Text: "Weapon Break"}; | |
RangedWeapon[6] = {Code: "FFR", Text: "Friendly Fire"}; | |
var RangedThrown = new Array(); | |
RangedThrown[0] = {Code: "FGR", Text: "Lost Footing"}; | |
RangedThrown[1] = {Code: "DPR", Text: "Drop Weapon"}; | |
RangedThrown[2] = {Code: "TWR", Text: "Twist Muscle"}; | |
RangedThrown[3] = {Code: "SDR", Text: "Scenery Disadvantage"}; | |
RangedThrown[4] = {Code: "WMR", Text: "Wardrobe Malfunction"}; | |
RangedThrown[4] = {Code: "LWF", Text: "Lost Weapon To Foe"}; | |
RangedThrown[5] = {Code: "FFR", Text: "Friendly Fire"}; | |
var StealthArmed = new Array(); | |
StealthArmed[0] = {Code: "FGS", Text: "Lost Footing"}; | |
StealthArmed[1] = {Code: "DPS", Text: "Drop Weapon"}; | |
StealthArmed[2] = {Code: "TWS", Text: "Twist Muscle"}; | |
StealthArmed[3] = {Code: "SDS", Text: "Scenery Disadvantage"}; | |
StealthArmed[4] = {Code: "WMS", Text: "Wardrobe Malfunction"}; | |
StealthArmed[5] = {Code: "DTS", Text: "Detected By Foe"}; | |
var StealthUnarmed = new Array(); | |
StealthUnarmed[0] = {Code: "FGS", Text: "Lost Footing"}; | |
StealthUnarmed[1] = {Code: "TWS", Text: "Twist Muscle"}; | |
StealthUnarmed[2] = {Code: "SDS", Text: "Scenery Disadvantage"}; | |
StealthUnarmed[3] = {Code: "WMS", Text: "Wardrobe Malfunction"}; | |
StealthUnarmed[4] = {Code: "DTS", Text: "Detected By Foe"}; | |
var rndMeleeArmedFF = Math.floor(Math.random() * MeleeArmed.length); | |
var rndMeleeUnarmedFF = Math.floor(Math.random() * MeleeUnarmed.length); | |
var rndRangedWeaponFF = Math.floor(Math.random() * RangedWeapon.length); | |
var rndRangedThrownFF = Math.floor(Math.random() * RangedThrown.length); | |
var rndMeleeArmed = Math.floor(Math.random() * (MeleeArmed.length - 1)); | |
var rndMeleeUnarmed = Math.floor(Math.random() * (MeleeUnarmed.length - 1)); | |
var rndRangedWeapon = Math.floor(Math.random() * (RangedWeapon.length - 1)); | |
var rndRangedThrown = Math.floor(Math.random() * (RangedThrown.length - 1)); | |
var rndStealthArmed = Math.floor(Math.random() * StealthArmed.length); | |
var rndStealthUnarmed = Math.floor(Math.random() * StealthUnarmed.length); | |
var resultArray = new Array(); | |
resultArray[0] = { Category: "Melee Armed | ", | |
Family: MeleeArmed[rndMeleeArmed].Text, | |
Code: MeleeArmed[rndMeleeArmed].Code, | |
Result: ""}; | |
resultArray[1] = { Category: "Melee Unarmed | ", | |
Family: MeleeUnarmed[rndMeleeUnarmed].Text, | |
Code: MeleeUnarmed[rndMeleeUnarmed].Code, | |
Result: ""}; | |
resultArray[2] = { Category: "Ranged Weapon | ", | |
Family: RangedWeapon[rndRangedWeapon].Text, | |
Code: RangedWeapon[rndRangedWeapon].Code, | |
Result: ""}; | |
resultArray[3] = { Category: "RangedThrown | ", | |
Family: RangedThrown[rndRangedThrown].Text, | |
Code: RangedThrown[rndRangedThrown].Code, | |
Result: ""}; | |
resultArray[4] = { Category: "Stealth Armed | ", | |
Family: StealthArmed[rndStealthArmed].Text, | |
Code: StealthArmed[rndStealthArmed].Code, | |
Result: ""}; | |
resultArray[5] = { Category: "Stealth Unarmed | ", | |
Family: StealthUnarmed[rndStealthUnarmed].Text, | |
Code: StealthUnarmed[rndStealthUnarmed].Code, | |
Result: ""}; | |
resultArray[6] = { Category: "Melee Armed | ", | |
Family: MeleeArmed[rndMeleeArmedFF].Text, | |
Code: MeleeArmed[rndMeleeArmedFF].Code, | |
Result: ""}; | |
resultArray[7] = { Category: "Melee Unarmed | ", | |
Family: MeleeUnarmed[rndMeleeUnarmedFF].Text, | |
Code: MeleeUnarmed[rndMeleeUnarmedFF].Code, | |
Result: ""}; | |
resultArray[8] = { Category: "Ranged Weapon | ", | |
Family: RangedWeapon[rndRangedWeaponFF].Text, | |
Code: RangedWeapon[rndRangedWeaponFF].Code, | |
Result: ""}; | |
resultArray[9] = { Category: "RangedThrown | ", | |
Family: RangedThrown[rndRangedThrownFF].Text, | |
Code: RangedThrown[rndRangedThrownFF].Code, | |
Result: ""}; | |
roll20API.fumbleResultTemp = "Lost Footing (Melee)"; | |
for (var fumbleGroup=0;fumbleGroup<resultArray.length;fumbleGroup++){ | |
switch (resultArray[fumbleGroup].Code){ | |
case "FGM": | |
roll20API.processAPI_FGM(); | |
break; | |
case "FGR": | |
roll20API.processAPI_FGR(); | |
break; | |
case "FGS": | |
roll20API.processAPI_FGS(); | |
break; | |
case "DPM": | |
roll20API.processAPI_DPM(); | |
break; | |
case "DPR": | |
roll20API.processAPI_DPR(); | |
break; | |
case "DPS": | |
roll20API.processAPI_DPS(); | |
break; | |
case "SIM": | |
roll20API.processAPI_SIM(); | |
break; | |
case "EGA": | |
roll20API.processAPI_EGA(); | |
break; | |
case "EGU": | |
roll20API.processAPI_EGU(); | |
break; | |
case "TWM": | |
roll20API.processAPI_TWM(); | |
break; | |
case "TWR": | |
roll20API.processAPI_TWR(); | |
break; | |
case "TWS": | |
roll20API.processAPI_TWS(); | |
break; | |
case "SDM": | |
roll20API.processAPI_SDM(); | |
break; | |
case "SDR": | |
roll20API.processAPI_SDR(); | |
break; | |
case "SDS": | |
roll20API.processAPI_SDS(); | |
break; | |
case "WMM": | |
roll20API.processAPI_WMM(); | |
break; | |
case "WMR": | |
roll20API.processAPI_WMR(); | |
break; | |
case "WMS": | |
roll20API.processAPI_WMS(); | |
break; | |
case "LWF": | |
roll20API.processAPI_LWF(); | |
break; | |
case "FFM": | |
roll20API.processAPI_FFM(); | |
break; | |
case "FFR": | |
roll20API.processAPI_FFR(); | |
break; | |
case "DTS": | |
roll20API.processAPI_DTS(); | |
break; | |
case "WBM": | |
roll20API.processAPI_WBM(); | |
break; | |
case "WBR": | |
roll20API.processAPI_WBR(); | |
break; | |
default: | |
roll20API.processAPI_FGM(); | |
break; | |
}; | |
resultArray[fumbleGroup].Result = roll20API.fumbleResultTemp | |
}; | |
roll20API.edgedWeaponResult = "DEFAULT Double Damage"; | |
roll20API.piercingWeaponResult = "DEFAULT Double Damage"; | |
roll20API.bluntWeaponResult = "DEFAULT Double Damage"; | |
roll20API.versusAnimalResult = "DEFAULT Double Damage"; | |
roll20API.processAPI_Crit(); | |
var percentRoll = Math.floor(Math.random() * 100) + 1; | |
var CriticalHitText = "<h4>Critical Hit Results</h4><hr>"; | |
CriticalHitText = CriticalHitText + "1) Player Level + 1d00 must be greater than 20% to <b><i>ACHIEVE</i></b> the results below:<br>"; | |
CriticalHitText = CriticalHitText + "2) This random result of <b><u>" + percentRoll + "</u></b> can be used or have the player roll.<br>"; | |
CriticalHitText = CriticalHitText + "<hr>"; | |
CriticalHitText = CriticalHitText + "<b>Edged Weapon Result: </b><i>" + roll20API.edgedWeaponResult + "</i><br>"; | |
CriticalHitText = CriticalHitText + "<b>Piercing Weapon Result: </b><i>" + roll20API.piercingWeaponResult + "</i><br>"; | |
CriticalHitText = CriticalHitText + "<b>Blunt Weapon Result: </b><i>" + roll20API.bluntWeaponResult + "</i><br>"; | |
CriticalHitText = CriticalHitText + "<b>Versus Animal Result: </b><i>" + roll20API.versusAnimalResult + "</i><br>"; | |
var CriticalFumbleText = "<h4>Fumble Results</h4><hr>"; | |
CriticalFumbleText = CriticalFumbleText + "1) Player Level + 1d00 must be greater than 80% to <b><i>AVOID</i></b> the results below:<br>"; | |
CriticalFumbleText = CriticalFumbleText + "2) This random result of <b><u>" + percentRoll + "</u></b> can be used or have the player roll.<br>"; | |
CriticalFumbleText = CriticalFumbleText + "3) Fumble results with a chance of 'Friendly Fire' should be used if possible." | |
CriticalFumbleText = CriticalFumbleText + "<hr>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>Friendly Fire Possble</b>" | |
CriticalFumbleText = CriticalFumbleText + "<hr>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>a) " + resultArray[6].Category + resultArray[6].Family + " </b>"; | |
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[6].Result + "</i><br>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>b) " + resultArray[7].Category + resultArray[7].Family + " </b>"; | |
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[7].Result + "</i><br>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>c) " + resultArray[8].Category + resultArray[8].Family + " </b>"; | |
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[8].Result + "</i><br>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>d) " + resultArray[9].Category + resultArray[9].Family + " </b>"; | |
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[9].Result + "</i><br>"; | |
CriticalFumbleText = CriticalFumbleText + "<hr>"; | |
CriticalFumbleText = CriticalFumbleText + "4) Fumble results with NO a chance of 'Friendly Fire' should be used as needed." | |
CriticalFumbleText = CriticalFumbleText + "<hr>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>Friendly Fire NOT Possble</b>" | |
CriticalFumbleText = CriticalFumbleText + "<hr>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>e) " + resultArray[0].Category + resultArray[0].Family + " </b>"; | |
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[0].Result + "</i><br>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>f) " + resultArray[1].Category + resultArray[1].Family + " </b>"; | |
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[1].Result + "</i><br>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>g) " + resultArray[2].Category + resultArray[2].Family + " </b>"; | |
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[2].Result + "</i><br>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>h) " + resultArray[3].Category + resultArray[3].Family + " </b>"; | |
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[3].Result + "</i><br>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>i) " + resultArray[4].Category + resultArray[4].Family + " </b>"; | |
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[4].Result + "</i><br>"; | |
CriticalFumbleText = CriticalFumbleText + "<b>j) " + resultArray[5].Category + resultArray[5].Family + " </b>"; | |
CriticalFumbleText = CriticalFumbleText + "<i>" + resultArray[5].Result + "</i><br>"; | |
//Check for CriticalFumble Handout | |
var CriticalFumble = findObjs({ _type: "handout", name: "GM_Fumble" }).length | |
var CriticalFumbleExist = false; | |
if(CriticalFumble !== 0){ | |
CriticalFumbleExist = true; | |
}else{ | |
CriticalFumbleExist = false; | |
}; | |
if(CriticalFumbleExist == false){ | |
createObj("handout", { | |
name: "GM_Fumble", | |
}); | |
}; | |
CriticalFumble = findObjs({ _type: "handout", name: "GM_Fumble" }) | |
CriticalFumble[0].set("notes", CriticalFumbleText); | |
//Check for CriticalHit Handout | |
var CriticalHit = findObjs({ _type: "handout", name: "GM_CriticalHit" }).length | |
var CriticalHitExist = false; | |
if(CriticalHit !== 0){ | |
CriticalHitExist = true; | |
}else{ | |
CriticalHiteExist = false; | |
}; | |
if(CriticalHitExist == false){ | |
createObj("handout", { | |
name: "GM_CriticalHit", | |
}); | |
}; | |
CriticalHit = findObjs({ _type: "handout", name: "GM_CriticalHit" }) | |
CriticalHit[0].set("notes", CriticalHitText); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment