void CSymbolEngineReplayFrameController::UpdateOnHeartbeat() { if(p_engine_container->symbol_engine_casino()->ConnectedToOHReplay()){ // No point in shooting frames when connected to OHReplay write_log(Preferences()->debug_replayframes(), "[CSymbolEngineReplayFrameController] No replay required, as connected to OHReplay\n"); return; } if (p_lazyscraper->IsIdenticalScrape()) { // There is no benefit in duplicate frames, so we abort write_log(Preferences()->debug_replayframes(), "[CSymbolEngineReplayFrameController] No replay required, as identical scrape\n"); return; } if ((Preferences()->replay_record() == kShootReplyFramesOnEveryChangeWhilePlaying) && p_table_state->User()->HasKnownCards()) { write_log(Preferences()->debug_replayframes(), "[CSymbolEngineReplayFrameController] Replay required (on change while in hand)\n"); ShootReplayFrameIfNotYetDone(); return; } if (Preferences()->replay_record() == kShootReplyFramesOnEveryChange) { write_log(Preferences()->debug_replayframes(), "[CSymbolEngineReplayFrameController] Replay required (on every change in table-state)\n"); ShootReplayFrameIfNotYetDone(); return; } bool shoot_replay_frame_by_formula = p_function_collection->Evaluate( k_standard_function_names[k_standard_function_shoot_replay_frame], Preferences()->log_hopper_functions()); if (shoot_replay_frame_by_formula) { write_log(Preferences()->debug_replayframes(), "[CSymbolEngineReplayFrameController] Replay required by f$shoot_replay_frame\n"); ShootReplayFrameIfNotYetDone(); return; } }
void CSymbolEngineReplayFrameController::UpdateAfterAutoplayerAction(int autoplayer_action_code) { if (Preferences()->replay_record() == kShootReplyFramesOnMyTurn) { // Replay-frame already in scraper memory, it only needs to be stored. // Therefore it does not matter if we shoot "after" action. write_log(Preferences()->debug_replayframes(), "[CSymbolEngineReplayFrameController] Replay required (on my turn and time to act)\n"); ShootReplayFrameIfNotYetDone(); } }
void CSymbolEngineReplayFrameController::ResetOnHeartbeat() { if (p_lazyscraper->IsIdenticalScrape()) { // There is no benefit in duplicate frames, so we abort write_log(preferences.debug_replayframes(), "[CSymbolEngineReplayFrameController] No replay required, as identical scrape\n"); return; } if ((preferences.replay_record() == kShootReplyFramesOnEveryChangeWhilePlaying) && p_table_state->User()->HasKnownCards()) { write_log(preferences.debug_replayframes(), "[CSymbolEngineReplayFrameController] Replay required (on change while in hand)\n"); ShootReplayFrameIfNotYetDone(); return; } if (preferences.replay_record() == kShootReplyFramesOnEveryChange) { write_log(preferences.debug_replayframes(), "[CSymbolEngineReplayFrameController] Replay required (on every change in table-state)\n"); ShootReplayFrameIfNotYetDone(); return; } if ((preferences.replay_record() == kShootReplyFramesOnMyTurn) && p_symbol_engine_autoplayer->ismyturn() && p_autoplayer->autoplayer_engaged() && p_stableframescounter->NumberOfStableFrames() == preferences.frame_delay()) { // If it's my turn and we have enough stable frames // then we will usually act and shoot a replay-frame on this heartbeat. // Shooting exactly once in case of no action is ensured by // "p_stableframescounter->NumberOfStableFrames() == preferences.frame_delay()". // As NumberOfStableFrames() updates OnHeartbeat we have to put that code here // and can~t make use of OnMyTurn(); write_log(preferences.debug_replayframes(), "[CSymbolEngineReplayFrameController] Replay required (on my turn and time to act)\n"); ShootReplayFrameIfNotYetDone(); return; } // ResetOnHeartbeat() is the last function to be called, // whereas the first one depends on circumstances. // therefore we reset _replay_recored_this_turn here at the very end. _replay_recored_this_turn = false; }