Help catch a cheat.

Thoughts, Help, Feature Requests, Bug Reports, Developing code for...

Moderators: dorpond, trevor, Azhrei

Forum rules
PLEASE don't post images of your entire desktop, attach entire campaign files when only a single file is needed, or generally act in some other anti-social behavior. :)
Malos
Kobold
Posts: 7
Joined: Thu Nov 12, 2009 4:19 am

Help catch a cheat.

Post by Malos »

I am playing in a game with someone who I believe is either

a) Using a macro that he can program

Skill Check: 1d20 ([r:X]) + 7 = [r:X+7]

or

b) Has a macro that he already put the number in

Skill Check: 1d20 (17) + 7 = 24


This player has played the last 5 games without rolling lower than a 13... on average ~25 rolls a game. I do not want to call him out without proof, nor does the GM want to accuse him. Since telling him to use the base roll [1d20+7] is basically inferring that the GM believes he is cheating, he will not do that.

My question; Is there any way to record exactly what is being typed into the chat window, not just the result?

User avatar
plothos
Great Wyrm
Posts: 1890
Joined: Sat Jun 21, 2008 1:07 am

Re: Help catch a cheat.

Post by plothos »

Hmmm, how about this:
Add a bit of code to all campaign macros that output to chat like that. All it would do is add an innocuous macroLink() somehow or other that when clicked sends a message to the GM with a secret content no player would know (e.g. "Monkeys! Monkeys! Monkeys!!!!").

Now whenever anybody rolls a macro that outputs, the link will be there but out of the way, but the GM can click it whenever he wants to confirm his macro is being used. If he gets his secret message, it's all good. The player can't replicated it, no matter how clever or macro-versed he is, because he won't know the secret message.

The GM wouldn't even have to tell anybody what the link is for, just that it's a private GM thing. They won't see anything if they click it.

Code: Select all

[r: macroLink(".","Secret Message@Lib:whatever","gm","",token.name)]
Then code up a macro called Secret Message on a lib somewhere with your message.

I think that'd work.
Drop-In Utilities:
My Spell Manager for D&D3.5 and PFRPG
My Inventory Manager for D&D and PFRPG, but more generally useable than that.
My Message Manager -- My Top-Down D&D Token Images
and my Custom Initiative & Status/Spell-Effect Tracker (work in progress, but functional).

User avatar
Azhrei
Site Admin
Posts: 12086
Joined: Mon Jun 12, 2006 1:20 pm
Location: Tampa, FL

Re: Help catch a cheat.

Post by Azhrei »

If tooltips are not turned on then rolls will have guillemets on either side and MapTool strips those out so that they can't be entered by the user.

And you can't rule out "luck". I've had game sessions where my NPCs were crit'ing against the PCs all the time. That's just a bad string of luck for the players, but what goes around, comes around...

The other option is to just make all of the rolls for everyone at the table. As a GM, I almost always roll skill checks in private since the players should not know whether their PC succeeded or not. Especially important for Spot checks, Craft checks, Sense Motive checks, and similar. But even important for Knowledge checks and the like (better that the player not be able to metagame what they got on their roll and the best way is for them to not know what it is).

Edit: I like plothos' idea. If the campaign macros are not editable by players (they shouldn't be) and the player is using those macros, you'll immediately know (because they won't even know that those messages are being sent). In fact, you could just add an extra [gm: "a skill check was rolled"] or something similar.

User avatar
mfrizzell
Dragon
Posts: 762
Joined: Sat Feb 13, 2010 2:35 am
Location: California

Re: Help catch a cheat.

Post by mfrizzell »

Malos wrote:I am playing in a game with someone who I believe is either

a) Using a macro that he can program

Skill Check: 1d20 ([r:X]) + 7 = [r:X+7]

or

b) Has a macro that he already put the number in

Skill Check: 1d20 (17) + 7 = 24


This player has played the last 5 games without rolling lower than a 13... on average ~25 rolls a game. I do not want to call him out without proof, nor does the GM want to accuse him. Since telling him to use the base roll [1d20+7] is basically inferring that the GM believes he is cheating, he will not do that.

My question; Is there any way to record exactly what is being typed into the chat window, not just the result?

If I understand you correctly then what you are saying is the other player is not using macro's he's just typing the rolls in by hand. If true then when you hover over the roll outcome the tool tip will display all that went into the roll. If all you are seeing is the final result without any tool tip, then it would have to be up to the DM to insist that he either use the campaign provided macro's or that he use a specific format for his rolls to ensure the math is correct.
Your DM is not calling the player a cheat if all he is doing is insisting on specific format for the dice rolls. Insistence of using the macro's means the output is consistent from player to player which means the rolling moves along quicker and everyone has an opportunity to ensure that no mistakes were made in the dice calculation.
DCI/RPGA# 7208328396 Skype ID mfrizzell77
Characters:
Strabor - Dwarf Avenger 5th Level
Tikkanan - Human Warlock 2nd Level
----------------------------------------------------
"People are more violently opposed to fur than leather because it's safer to harass rich women than motorcycle gangs."

User avatar
JonathanTheBlack
Dragon
Posts: 544
Joined: Mon Jun 28, 2010 12:12 pm
Location: I'm the worm...

Re: Help catch a cheat.

Post by JonathanTheBlack »

Use a framework that rolls everything in Lib:token macro's and builds up your own tooltip and display. Don't allow the players to use their own macro's for attacks or skill checks.

User avatar
CoveredInFish
Demigod
Posts: 3104
Joined: Mon Jun 29, 2009 10:37 am
Location: Germany
Contact:

Re: Help catch a cheat.

Post by CoveredInFish »

With LibTokens and UDF you can redefine maptools functions. You can as well redefine Wiki: roll().
My first idea is to rewrite in a way that it sends the rolled value secretly to the gm like this

Code: Select all

[r: val = oldFunction(arg(0), arg(1))]
[h: execLink(macroLinkText("displayGM@Lib:token", "gm", val, 0))] 
(Note: it doubles the gm message everytime. Anyone any idea why?)

This really clutters the chat output so I thought it would be better just to store the rolls anyone makes in a list and if you're interested you can inspect that. I wrote a little drop in that does this. Note that I have only rewritten roll() so other roll expressions like 4d6k3 are not considered.
this code was brought to you by macroIO™

Code: Select all

@@onCampaignLoad
@PROPS@ autoExecute=true ; color=default ; fontColor=black ; group= ; includeLabel=false ; sortBy=0 ; index=2 ; fontSize=1.00em ; minWidth= ; playerEditable=false ; maxWidth= ; tooltip= ; applyToSelected=false ; 
[h: defineFunction("roll", "roll@Lib:cif.roll.history")]
[h: defineFunction("cif.storeRoll", "storeRoll@Lib:cif.roll.history")]

@@roll
@PROPS@ autoExecute=true ; color=default ; fontColor=black ; group= ; includeLabel=false ; sortBy=0 ; index=1 ; fontSize=1.00em ; minWidth= ; playerEditable=false ; maxWidth= ; tooltip= ; applyToSelected=false ; 
[r: val = oldFunction(arg(0), arg(1))]
[h: cif.storeRoll(getPlayerName(), strformat("%sd%s=%s", arg(0), arg(1), val))]

@@storeRoll
@PROPS@ autoExecute=true ; color=default ; fontColor=black ; group= ; includeLabel=false ; sortBy=0 ; index=3 ; fontSize=1.00em ; minWidth= ; playerEditable=false ; maxWidth= ; tooltip= ; applyToSelected=false ; 
[h: player = arg(0)]
[h: val = arg(1)]
[h: storage = getLibProperty("rollStat", "Lib:cif.roll.history")]
[h, if( json.type(storage)!="OBJECT" ): storage = "{}"]
[h, if(json.contains(storage, player)): playersRolls = json.get(storage, player); playersRolls = "[]"]
[h: playersRolls = json.append(playersRolls, val)]
[h: storage = json.set(storage, player, playersRolls)]
[h: setLibProperty("rollStat", storage, "Lib:cif.roll.history")] 

@@show history
@PROPS@ autoExecute=true ; color=green ; fontColor=black ; group= ; includeLabel=false ; sortBy=8 ; index=4 ; fontSize=1.00em ; minWidth= ; playerEditable=false ; maxWidth= ; tooltip= ; applyToSelected=false ; 
[frame("Roll statistic"): {
<html>
<pre>
[h: data = getLibProperty("rollStat", "Lib:cif.roll.history")]
[r, if(json.type(data)!="UNKNOWN"): json.indent(data, 4); "no data yet"]
</pre>
}]

@@clear history
@PROPS@ autoExecute=true ; color=red ; fontColor=black ; group= ; includeLabel=false ; sortBy=12 ; index=5 ; fontSize=1.00em ; minWidth= ; playerEditable=false ; maxWidth= ; tooltip= ; applyToSelected=false ; 
[h: assert(isGM(), "Only GM are allowed to use this.")]
[h: status=input("dummy|This will delete the roll history. Are your sure?||LABEL|SPAN=TRUE")]
[h: abort(status)]
[h: setLibProperty("rollStat", "", "Lib:cif.roll.history")]
 
Attachments
lib_roll_history.rptok
(7.42 KiB) Downloaded 124 times
Last edited by CoveredInFish on Wed Sep 01, 2010 2:37 am, edited 2 times in total.

Craig
Great Wyrm
Posts: 2107
Joined: Sun Jun 22, 2008 7:53 pm
Location: Melbourne, Australia

Re: Help catch a cheat.

Post by Craig »

Malos wrote:I am playing in a game with someone who I believe is either

a) Using a macro that he can program

Skill Check: 1d20 ([r:X]) + 7 = [r:X+7]

or

b) Has a macro that he already put the number in

Skill Check: 1d20 (17) + 7 = 24
The [r: ...] is the problem if you use r: you are telling MapTool to discard any thing that can help you, the macro can (and should) be rewritten as
Skill Check: 1d20 ([X = 1d20]) + 7 = [X+7]
Obviously you can get more complicated than that if you want.
You can set the "Use tool tips for inline rolls" preference options if you don't want to always see the expanded output, then you can hover the mouse over the roll and see how the result was generated. The << and >> looking characters in the expanded output and tooltips are protected by MapTool so its very hard for players to enter them (I won't say there is none because you never know, but a lot of effort has been placed in removing all the different ways it could be done). For this reason I also advise against the suggestion that you use a framework that rolls its own tool tips unless it uses the same protected characters (they can be used from trusted macros that players can't edit) otherwise you are just giving yourself a false sense of security.

CoveredInFish covered the other way to do it if you absolutely have to stick with [r: ...], the downside though is its awful spammy for the or hard to get right from a synchronization point of view

User avatar
aliasmask
RPTools Team
Posts: 9031
Joined: Tue Nov 10, 2009 6:11 pm
Location: California

Re: Help catch a cheat.

Post by aliasmask »

I just totally fabricated a tooltip roll, but I won't say how. Let the players know you have ZERO tolerance for cheating. Your best bet is to have the element of surprise if you suspect someone cheating and add an easter egg to your macro, but for a determined and informed player, it's nearly impossible to stop someone from cheating. But you should have a macro everyone uses on a lib token rather than having them construct their own rolls, for ease of play if nothing else.

User avatar
JonathanTheBlack
Dragon
Posts: 544
Joined: Mon Jun 28, 2010 12:12 pm
Location: I'm the worm...

Re: Help catch a cheat.

Post by JonathanTheBlack »

This is why I use a framework that is far too complicated for them to try and cheat at. I have automatic macros that apply damage and states automatically as well as generate tooltips for conditions in 4th edition like slowed and dazed and such. They would also have to have a copy of my campaign file to get the necessary functions, since the only function they have access to is [r: Attack("Basic Melee Strike")]

Everything else is handled on the lib:tokens where they can't get to anything.

Craig
Great Wyrm
Posts: 2107
Joined: Sun Jun 22, 2008 7:53 pm
Location: Melbourne, Australia

Re: Help catch a cheat.

Post by Craig »

aliasmask wrote:I just totally fabricated a tooltip roll, but I won't say how. Let the players know you have ZERO tolerance for cheating. Your best bet is to have the element of surprise if you suspect someone cheating and add an easter egg to your macro, but for a determined and informed player, it's nearly impossible to stop someone from cheating. But you should have a macro everyone uses on a lib token rather than having them construct their own rolls, for ease of play if nothing else.
If you can generate an "official looking" tooltip/expanded output as a player (so not as GM and not in a trusted macro as both these are allowed to) please send me a PM tell me how so I can fix it, because it is a serious bug that needs to be dealt with.

User avatar
Jshock
Dragon
Posts: 311
Joined: Sat Jan 26, 2008 8:55 pm
Location: West Warwick, RI
Contact:

Re: Help catch a cheat.

Post by Jshock »

Craig wrote:
aliasmask wrote:I just totally fabricated a tooltip roll, but I won't say how. Let the players know you have ZERO tolerance for cheating. Your best bet is to have the element of surprise if you suspect someone cheating and add an easter egg to your macro, but for a determined and informed player, it's nearly impossible to stop someone from cheating. But you should have a macro everyone uses on a lib token rather than having them construct their own rolls, for ease of play if nothing else.
If you can generate an "official looking" tooltip/expanded output as a player (so not as GM and not in a trusted macro as both these are allowed to) please send me a PM tell me how so I can fix it, because it is a serious bug that needs to be dealt with.
It's not a bug... just good HTML coding (clue #1).

EDIT: Or so I thought.
Last edited by Jshock on Thu Aug 19, 2010 7:38 pm, edited 1 time in total.

Craig
Great Wyrm
Posts: 2107
Joined: Sun Jun 22, 2008 7:53 pm
Location: Melbourne, Australia

Re: Help catch a cheat.

Post by Craig »

Jshock wrote:
Craig wrote: If you can generate an "official looking" tooltip/expanded output as a player (so not as GM and not in a trusted macro as both these are allowed to) please send me a PM tell me how so I can fix it, because it is a serious bug that needs to be dealt with.
It's not a bug... just good HTML coding (clue #1).
Considering that MapTool is supposed to stop you from doing it, if its not its a bug. If you know how to bypass the checks I would appreciate a PM about it so I can fix it rather than posting hints about how to do it so others can cheat by exploiting it.

And by your hint I don't think your case is the same as CoveredInFish's which was
previously being captured but it seems at some point the code changed and it is no
longer the case.

train850
Kobold
Posts: 12
Joined: Fri Aug 13, 2010 10:06 pm

Re: Help catch a cheat.

Post by train850 »

Honestly though, what would be the overall motive to cheat though. Personal gain? I can't even see much gain from it, your ego would have to be pretty bruised to cheat at pnp. What would you like to do today bill? "Im going to cheat at luck and basic math." Nice dude, hope you learn something.

User avatar
aliasmask
RPTools Team
Posts: 9031
Joined: Tue Nov 10, 2009 6:11 pm
Location: California

Re: Help catch a cheat.

Post by aliasmask »

I think people cheat for different reasons. If your GM said, save or die... that would be motivation to cheat. Sometimes people cheat just to see if they can get away with it. Some probably cheat because their immature and believe it to be a form of power. Everyone is guilty of cheating to some degree at some point because they didn't like the results of a possible failure. I try to convince my players that failure is a part of the game as well and could lead you in directions that success would bar. I'm less concerned with cheating than I am with players using player knowledge for their character... it's my pet peeve. Probably because the character actions defy any logical sense other than having special knowledge which in my opinion breaks the story telling.

User avatar
CoveredInFish
Demigod
Posts: 3104
Joined: Mon Jun 29, 2009 10:37 am
Location: Germany
Contact:

Re: Help catch a cheat.

Post by CoveredInFish »

I'm not for cheating (I *do* cheat as gm but that is different since i dont cheat for success but for narative reasons and - hey - its my job to make a story entertaining) but i'm oh so curious. I hope if Craig has fixed some of this stuff someone will tell me what ways were discovered here. PM me before that if you like. :|

Post Reply

Return to “MapTool”