If one coin gives several points, the game needs a closer look. Useful logs show which touch events happened and which ones actually changed the score.
You will investigate a version with a deliberate bug of a coin pickup in a disposable Roblox Studio place. Allow about 40 minutes. Keep a working copy available and do not introduce test bugs into a published experience.

Read this example as text
Log the event
- Which part touched?
- Which player was found?
- Was the coin available?
Then check the reward
- Did the score change?
- Did it change more than once?
- Was the second reward inside cooldown?
See the finished example
This is a working browser model of the rules, not a Roblox Studio capture. The Studio scripts need separate Studio checks.
1. Define what counts as a failure
For this example, a shared coin should award one point, become unavailable for three seconds, then respawn. A second reward during those three seconds is the bug. Another reward after the cooldown is expected behaviour.
Run the working example first. Then, in a separate copy, remove its availability check and leave touch handling active during the cooldown. Label this copy clearly so you do not mistake it for the fixed version.
2. Record the events that matter
Before changing reward logic, add a diagnostic line in the callback:
print("touch", os.clock(), coin.Name, hit.Name, available)
After identifying a valid player, log the player's name and score before and after the award. Use test accounts and share only the relevant sanitized Output lines. A physics event may fire for multiple character parts; logs help you see which callbacks reached the reward step.
The line above is diagnostic instrumentation for the example, not an instruction to leave noisy logging in a finished game.
3. Ask for hypotheses tied to the evidence
Diagnose this Roblox coin issue.
Expected: one point per shared coin during a three-second cooldown.
Actual: [EXACT OBSERVED RESULT].
Reproduction: [STEPS].
Hierarchy and script context: [OBJECTS AND SERVER/CLIENT LOCATION].
Relevant code: [CALLBACK, GUARD AND SCORE UPDATE].
Output: [SANITIZED TIME-ORDERED LINES].
Give ranked hypotheses and one check for each. Explain which log lines
support your leading hypothesis. Request missing information instead
of guessing. Suggest the smallest fix, not a whole-system rewrite.
4. Check the most likely cause
Repeated touch messages alone do not prove duplicate rewards. Compare them with score-update messages. If rewards repeat while the coin should be unavailable, inspect whether the guard runs, whether it changes state before awarding and whether two separate scripts are each maintaining their own guard.
Roblox documents repeated collision callbacks and debounce handling. Use that reference to understand the mechanism; it does not establish that every duplicate-reward bug has the same cause.
5. Repair and rerun the original reproduction
Restore one shared guard for the intended pickup and set it before awarding. Rerun rapid touches, two-player collisions, non-player touches and cooldown completion. Verify that the second player is blocked only during the shared cooldown, not permanently.
Record actual results:
Cause: [EVIDENCE-SUPPORTED CAUSE].
Fix: [MINIMAL CHANGE].
Original reproduction: [NOW PASSES OR STILL FAILS].
Other cases checked: [ACTUAL RESULTS].
Remaining limits: [UNTESTED CONDITIONS].
Remove or reduce temporary logging once it has served its purpose. Keep the useful diagnosis and test record.
The logs seem impossible: check duplicate scripts and whether messages come from server or client. AI cannot explain a line: supply the surrounding code and object hierarchy. The fix breaks respawning: test the whole state cycle, not only the first pickup.
This is a reproducible investigation recipe; no Studio execution or arbitrary bug diagnosis is claimed for this draft.
