void Bot::ActiveFrame() { //get ready if in the game if(GS_MatchState() <= MATCH_STATE_WARMUP && !IsReady() && self->r.client->teamstate.timeStamp + 4000 < level.time) G_Match_Ready(self); ApplyPendingTurnToLookAtPoint(); const CombatTask &combatTask = botBrain.combatTask; bool inhibitShooting, inhibitCombatMove; SetCombatInhibitionFlags(&inhibitShooting, &inhibitCombatMove); // ucmd modification in FireWeapon() will be overwritten by MoveFrame() bool fireButtonPressed = false; if (!inhibitShooting) { SetCloakEnabled(false); // If bot fired builtin or script weapon, save builtin fire button status FireWeapon(&fireButtonPressed); } else { if (!combatTask.Empty()) { SetCloakEnabled(true); } else if (botBrain.HasGoal()) { if (botBrain.IsCloseToAnyGoal(768.0f, true)) SetCloakEnabled(true); else if (botBrain.IsCloseToAnyGoal(384.0f, false)) SetCloakEnabled(true); else SetCloakEnabled(false); } else { SetCloakEnabled(false); } } bool beSilent = ShouldBeSilent(inhibitShooting); // Do not modify pmove features by beSilent value, features may be changed dynamically by script. usercmd_t ucmd; memset(&ucmd, 0, sizeof(ucmd)); MoveFrame(&ucmd, inhibitCombatMove, beSilent); if (fireButtonPressed) ucmd.buttons |= BUTTON_ATTACK; CallActiveClientThink(&ucmd); SayVoiceMessages(); }
int SimpleUserQueryEx( TEXTSTR result, int reslen, CTEXTSTR question, PSI_CONTROL pAbove, void (CPROC*query_success_callback)(uintptr_t, LOGICAL), uintptr_t query_user_data ) { PSI_CONTROL pf, pc; struct user_query_info *query_state = New( struct user_query_info ); int32_t mouse_x, mouse_y; //int Done = FALSE, Okay = FALSE; pf = CreateFrame( NULL, 0, 0, 280, 65, 0, pAbove ); SetCommonUserData( pf, (uintptr_t)query_state ); query_state->pf = pf; query_state->Done = FALSE; query_state->Okay = FALSE; query_state->result = result; query_state->reslen = reslen; pc = MakeTextControl( pf, 5, 2, 320, 18, TXT_STATIC, question, TEXT_NORMAL ); query_state->edit = MakeEditControl( pf, 5, 23, 270, 14, TXT_STATIC, NULL, 0 ); AddCommonButtons( pf, &query_state->Done, &query_state->Okay ); SetButtonPushMethod( GetControl( pf, IDOK ), OkayClicked, (uintptr_t)query_state ); SetButtonPushMethod( GetControl( pf, IDCANCEL ), CancelClicked, (uintptr_t)query_state ); GetMousePosition( &mouse_x, &mouse_y ); MoveFrame( pf, mouse_x - 140, mouse_y - 30 ); //lprintf( WIDE("Show query....") ); DisplayFrame( pf ); SetCommonFocus( query_state->edit ); query_state->query_success = query_success_callback; if( !query_success_callback ) { int okay; CommonWait( pf ); if( query_state->Okay ) { GetControlText( query_state->edit, result, reslen ); } DestroyFrame( &pf ); okay = query_state->Okay; Release( query_state ); return okay; } else { query_state->query_success = query_success_callback; query_state->query_user_data = query_user_data; return 0; } }