on("chat:message", function(msg) { if(msg.type == "api" && msg.content.toLowerCase().indexOf('!attack') !== -1) { var slice = msg.content.split(" "); // definining the enemy stats based on the first person named after the !attack var enemyname = slice[1]; var targetenemytoken = findObjs({_type: "graphic", name: enemyname})[0]; var targetenemycharacter = findObjs({_type: "character", name: enemyname})[0]; var ac = findObjs({ _type: 'attribute', name: 'AC', _characterid: targetenemycharacter.id })[0]; var fort = findObjs({ _type: 'attribute', name: 'Fort', _characterid: targetenemycharacter.id })[0]; var will = findObjs({ _type: 'attribute', name: 'Will', _characterid: targetenemycharacter.id })[0]; var reflex = findObjs({ _type: 'attribute', name: 'Reflex', _characterid: targetenemycharacter.id })[0]; // definining the player stats based on the second person named after the !attack var playername = slice[2]; var targetplayercharacter = findObjs({_type: "character", name: playername})[0]; var tohit = findObjs({ _type: 'attribute', name: 'tohit', _characterid: targetplayercharacter.id })[0]; var damage = findObjs({ _type: 'attribute', name: 'damage', _characterid: targetplayercharacter.id })[0]; // sets the target defense based on what the third entry was var targetdefensename = slice[3]; if(targetdefensename="AC"){ var targetdefensenumber = parseInt(ac.get("current")) }; if(randomInteger(20) + parseInt(tohit.get("current"))> parseInt(targetdefensenumber)){ targetenemytoken.set("bar1_value", parseInt(targetenemytoken.get("bar1_value"))-5); }; }; }); That script now works for basic attacks it will roll a d20 and add the tohit vs the targets ac it is basic and needs expanding but it is a good starting place.