bool CActor::use_Holder (CHolderCustom* holder) { if(m_holder){ bool b = false; CGameObject* holderGO = smart_cast<CGameObject*>(m_holder); if(smart_cast<CCar*>(holderGO)) b = use_Vehicle(0); else if (holderGO->CLS_ID==CLSID_OBJECT_W_MOUNTED || holderGO->CLS_ID==CLSID_OBJECT_W_STATMGUN) b = use_MountedWeapon(0); if(inventory().ActiveItem()){ CHudItem* hi = smart_cast<CHudItem*>(inventory().ActiveItem()); if(hi) hi->OnAnimationEnd(hi->GetState()); } return b; }else{ bool b = false; CGameObject* holderGO = smart_cast<CGameObject*>(holder); if(smart_cast<CCar*>(holder)) b = use_Vehicle(holder); if (holderGO->CLS_ID==CLSID_OBJECT_W_MOUNTED || holderGO->CLS_ID==CLSID_OBJECT_W_STATMGUN) b = use_MountedWeapon(holder); if(b){//used succesfully // switch off torch... CAttachableItem *I = CAttachmentOwner::attachedItem(CLSID_DEVICE_TORCH); if (I){ CTorch* torch = smart_cast<CTorch*>(I); if (torch) torch->Switch(false); } } if(inventory().ActiveItem()){ CHudItem* hi = smart_cast<CHudItem*>(inventory().ActiveItem()); if(hi) hi->OnAnimationEnd(hi->GetState()); } return b; } }
void CInventory::Update() { if( OnServer() ) { if(m_iActiveSlot!=m_iNextActiveSlot) { CObject* pActor_owner = smart_cast<CObject*>(m_pOwner); if (Level().CurrentViewEntity() == pActor_owner) { if( (m_iNextActiveSlot!=NO_ACTIVE_SLOT) && ItemFromSlot(m_iNextActiveSlot) && !g_player_hud->allow_activation(ItemFromSlot(m_iNextActiveSlot)->cast_hud_item()) ) return; } if( ActiveItem() ) { CHudItem* hi = ActiveItem()->cast_hud_item(); if(!hi->IsHidden()) { if(hi->GetState()==CHUDState::eIdle && hi->GetNextState()==CHUDState::eIdle) hi->SendDeactivateItem(); UpdateDropTasks (); return; } } if (GetNextActiveSlot() != NO_ACTIVE_SLOT) { PIItem tmp_next_active = ItemFromSlot(GetNextActiveSlot()); if (tmp_next_active) { if (IsSlotBlocked(tmp_next_active)) { Activate(m_iActiveSlot); return; } else { tmp_next_active->ActivateItem(); } } } // if ( m_iActiveSlot != GetNextActiveSlot() ) { // LPCSTR const name = smart_cast<CGameObject const*>(m_pOwner)->cName().c_str(); // if ( !xr_strcmp("jup_b43_stalker_assistant_pri6695", name) ) // LogStackTrace (""); // Msg ("[%6d][%s] CInventory::Activate changing active slot from %d to next active slot %d", Device.dwTimeGlobal, name, m_iActiveSlot, GetNextActiveSlot() ); // } m_iActiveSlot = GetNextActiveSlot(); } if((GetNextActiveSlot()!=NO_ACTIVE_SLOT) && ActiveItem() && ActiveItem()->cast_hud_item()->IsHidden()) ActiveItem()->ActivateItem(); } UpdateDropTasks (); }
void CSpectator::FirstEye_ToPlayer(CObject* pObject) { CObject* pCurViewEntity = Level().CurrentEntity(); if (pCurViewEntity) { CActor* pOldActor = smart_cast<CActor*>(pCurViewEntity); if (pOldActor) { pOldActor->inventory().Items_SetCurrentEntityHud(false); }; if (pCurViewEntity->CLS_ID != CLSID_SPECTATOR) { Engine.Sheduler.Unregister (pCurViewEntity); Engine.Sheduler.Register (pCurViewEntity, TRUE); }; }; if (pObject) { Level().SetEntity(pObject); Engine.Sheduler.Unregister (pObject); Engine.Sheduler.Register (pObject, TRUE); CActor* pActor = smart_cast<CActor*> (pObject); if (pActor) { pActor->inventory().Items_SetCurrentEntityHud(true); CHudItem* pHudItem = smart_cast<CHudItem*>(pActor->inventory().ActiveItem()); if (pHudItem) { pHudItem->OnStateSwitch(pHudItem->GetState()); } } }; };
void CLevel::IR_OnKeyboardPress (int key) { if(Device.dwPrecacheFrame) return; #ifdef INGAME_EDITOR if (Device.editor() && (pInput->iGetAsyncKeyState(DIK_LALT) || pInput->iGetAsyncKeyState(DIK_RALT))) return; #endif // #ifdef INGAME_EDITOR bool b_ui_exist = (!!CurrentGameUI()); EGameActions _curr = get_binded_action(key); if(_curr==kPAUSE) { #ifdef INGAME_EDITOR if (Device.editor()) return; #endif // INGAME_EDITOR if (!g_block_pause && (IsGameTypeSingle() || IsDemoPlay())) { #ifdef DEBUG if(psActorFlags.test(AF_NO_CLIP)) Device.Pause(!Device.Paused(), TRUE, TRUE, "li_pause_key_no_clip"); else #endif //DEBUG Device.Pause(!Device.Paused(), TRUE, TRUE, "li_pause_key"); } return; } if( g_bDisableAllInput ) return; switch ( _curr ) { case kSCREENSHOT: Render->Screenshot(); return; break; case kCONSOLE: Console->Show (); return; break; case kQUIT: { if(b_ui_exist && CurrentGameUI()->TopInputReceiver() ) { if(CurrentGameUI()->IR_UIOnKeyboardPress(key)) return;//special case for mp and main_menu CurrentGameUI()->TopInputReceiver()->HideDialog(); }else { Console->Execute("main_menu"); }return; }break; }; if ( !bReady || !b_ui_exist ) return; if ( b_ui_exist && CurrentGameUI()->IR_UIOnKeyboardPress(key)) return; if ( Device.Paused() && !IsDemoPlay() #ifdef DEBUG && !psActorFlags.test(AF_NO_CLIP) #endif //DEBUG ) return; if ( game && game->OnKeyboardPress(get_binded_action(key)) ) return; if(_curr == kQUICK_SAVE && IsGameTypeSingle()) { Console->Execute ("save"); return; } if(_curr == kQUICK_LOAD && IsGameTypeSingle()) { #ifdef DEBUG FS.get_path ("$game_config$")->m_Flags.set(FS_Path::flNeedRescan, TRUE); FS.get_path ("$game_scripts$")->m_Flags.set(FS_Path::flNeedRescan, TRUE); FS.rescan_pathes (); #endif // DEBUG string_path saved_game,command; strconcat (sizeof(saved_game),saved_game,Core.UserName," - ","quicksave"); if (!CSavedGameWrapper::valid_saved_game(saved_game)) return; strconcat (sizeof(command),command,"load ",saved_game); Console->Execute (command); return; } #ifndef MASTER_GOLD switch (key) { case DIK_F7: { if (GameID() != eGameIDSingle) return; FS.get_path ("$game_config$")->m_Flags.set(FS_Path::flNeedRescan, TRUE); FS.get_path ("$game_scripts$")->m_Flags.set(FS_Path::flNeedRescan, TRUE); FS.rescan_pathes (); NET_Packet net_packet; net_packet.w_begin (M_RELOAD_GAME); Send (net_packet,net_flags(TRUE)); return; } case DIK_DIVIDE: { if (!Server) break; SetGameTimeFactor (g_fTimeFactor); #ifdef DEBUG if(!m_bEnvPaused) SetEnvironmentGameTimeFactor(GetEnvironmentGameTime(), g_fTimeFactor); #else //DEBUG SetEnvironmentGameTimeFactor(GetEnvironmentGameTime(), g_fTimeFactor); #endif //DEBUG break; } case DIK_MULTIPLY: { if (!Server) break; SetGameTimeFactor (1000.f); #ifdef DEBUG if(!m_bEnvPaused) SetEnvironmentGameTimeFactor(GetEnvironmentGameTime(), 1000.f); #else //DEBUG SetEnvironmentGameTimeFactor(GetEnvironmentGameTime(), 1000.f); #endif //DEBUG break; } #ifdef DEBUG case DIK_SUBTRACT:{ if (!Server) break; if(m_bEnvPaused) SetEnvironmentGameTimeFactor(GetEnvironmentGameTime(), g_fTimeFactor); else SetEnvironmentGameTimeFactor(GetEnvironmentGameTime(), 0.00001f); m_bEnvPaused = !m_bEnvPaused; break; } #endif //DEBUG case DIK_NUMPAD5: { if (GameID()!=eGameIDSingle) { Msg("For this game type Demo Record is disabled."); /// return; }; if(!pInput->iGetAsyncKeyState(DIK_LSHIFT)) { Console->Hide (); Console->Execute("demo_record 1"); } } break; #ifdef DEBUG // Lain: added TEMP!!! case DIK_UP: { g_separate_factor /= 0.9f; break; } case DIK_DOWN: { g_separate_factor *= 0.9f; if ( g_separate_factor < 0.1f ) { g_separate_factor = 0.1f; } break; } case DIK_LEFT: { g_separate_radius *= 0.9f; if ( g_separate_radius < 0 ) { g_separate_radius = 0; } break; } case DIK_RIGHT: { g_separate_radius /= 0.9f; break; } case DIK_RETURN: { bDebug = !bDebug; return; } case DIK_BACK: if (GameID() == eGameIDSingle) DRender->NextSceneMode(); //HW.Caps.SceneMode = (HW.Caps.SceneMode+1)%3; return; case DIK_F4: { if (pInput->iGetAsyncKeyState(DIK_LALT)) break; if (pInput->iGetAsyncKeyState(DIK_RALT)) break; bool bOk = false; u32 i=0, j, n=Objects.o_count(); if (pCurrentEntity) for ( ; i<n; ++i) if (Objects.o_get_by_iterator(i) == pCurrentEntity) break; if (i < n) { j = i; bOk = false; for (++i; i <n; ++i) { CEntityAlive* tpEntityAlive = smart_cast<CEntityAlive*>(Objects.o_get_by_iterator(i)); if (tpEntityAlive) { bOk = true; break; } } if (!bOk) for (i = 0; i <j; ++i) { CEntityAlive* tpEntityAlive = smart_cast<CEntityAlive*>(Objects.o_get_by_iterator(i)); if (tpEntityAlive) { bOk = true; break; } } if (bOk) { CObject *tpObject = CurrentEntity(); CObject *__I = Objects.o_get_by_iterator(i); CObject **I = &__I; SetEntity(*I); if (tpObject != *I) { CActor* pActor = smart_cast<CActor*> (tpObject); if (pActor) pActor->inventory().Items_SetCurrentEntityHud(false); } if (tpObject) { Engine.Sheduler.Unregister (tpObject); Engine.Sheduler.Register (tpObject, TRUE); }; Engine.Sheduler.Unregister (*I); Engine.Sheduler.Register (*I, TRUE); CActor* pActor = smart_cast<CActor*> (*I); if (pActor) { pActor->inventory().Items_SetCurrentEntityHud(true); CHudItem* pHudItem = smart_cast<CHudItem*>(pActor->inventory().ActiveItem()); if (pHudItem) { pHudItem->OnStateSwitch(pHudItem->GetState()); } } } } return; } // Lain: added case DIK_F5: { if ( CBaseMonster* pBM = smart_cast<CBaseMonster*>(CurrentEntity())) { DBG().log_debug_info(); } break; } case MOUSE_1: { if (GameID() != eGameIDSingle) break; if (pInput->iGetAsyncKeyState(DIK_LALT)) { if (smart_cast<CActor*>(CurrentEntity())) try_change_current_entity (); else restore_actor (); return; } break; } /**/ #endif #ifdef DEBUG case DIK_F9:{ // if (!ai().get_alife()) // break; // const_cast<CALifeSimulatorHeader&>(ai().alife().header()).set_state(ALife::eZoneStateSurge); break; } return; // case DIK_F10:{ // ai().level_graph().set_dest_point(); // ai().level_graph().build_detail_path(); // if (!Objects.FindObjectByName("m_stalker_e0000") || !Objects.FindObjectByName("localhost/dima")) // return; // if (!m_bSynchronization) { // m_bSynchronization = true; // ai().level_graph().set_start_point(); // m_bSynchronization = false; // } // luabind::functor<void> functor; // ai().script_engine().functor("alife_test.set_switch_online",functor); // functor(0,false); // } // return; // case DIK_F11: // ai().level_graph().build_detail_path(); // if (!Objects.FindObjectByName("m_stalker_e0000") || !Objects.FindObjectByName("localhost/dima")) // return; // if (!m_bSynchronization) { // m_bSynchronization = true; // ai().level_graph().set_dest_point(); // ai().level_graph().select_cover_point(); // m_bSynchronization = false; // } // return; #endif // DEBUG } #endif // MASTER_GOLD if (bindConsoleCmds.execute(key)) return; if (CURRENT_ENTITY()) { IInputReceiver* IR = smart_cast<IInputReceiver*> (smart_cast<CGameObject*>(CURRENT_ENTITY())); if (IR) IR->IR_OnKeyboardPress(get_binded_action(key)); } #ifdef _DEBUG CObject *obj = Level().Objects.FindObjectByName("monster"); if (obj) { CBaseMonster *monster = smart_cast<CBaseMonster *>(obj); if (monster) monster->debug_on_key(key); } #endif }
void CLevel::IR_OnKeyboardPress (int key) { bool b_ui_exist = (pHUD && pHUD->GetUI()); if (!g_bDisableAllInput) { if (auto ui = HUD().GetUI()) { if (ui->UIMainIngameWnd) { ui->UIMainIngameWnd->HudAdjustMode(key); // Real Wolf. 07.09.2014. } } /************************************************** added by Ray Twitty (aka Shadows) START **************************************************/ // Колбек на нажатие клавиши if (g_actor) Actor()->callback(GameObject::eOnKeyPress)(key); /*************************************************** added by Ray Twitty (aka Shadows) END ***************************************************/ } EGameActions _curr = get_binded_action(key); switch ( _curr ) { case kSCREENSHOT: Render->Screenshot(); return; break; case kCONSOLE: Console->Show (); return; break; case kQUIT: { if(b_ui_exist && HUD().GetUI()->MainInputReceiver() ){ if(HUD().GetUI()->MainInputReceiver()->IR_OnKeyboardPress(key)) return;//special case for mp and main_menu HUD().GetUI()->StartStopMenu( HUD().GetUI()->MainInputReceiver(), true); }else Console->Execute ("main_menu"); return; }break; case kPAUSE: if(!g_block_pause) { if ( IsGameTypeSingle() ) { Device.Pause(!Device.Paused(), TRUE, TRUE, "li_pause_key"); } } return; break; }; if( g_bDisableAllInput ) return; if ( !b_ui_exist ) return; if ( b_ui_exist && pHUD->GetUI()->IR_OnKeyboardPress(key)) return; if( Device.Paused() ) return; if ( game && Game().IR_OnKeyboardPress(key) ) return; if(_curr == kQUICK_SAVE && IsGameTypeSingle()) { Console->Execute ("save"); return; } if(_curr == kQUICK_LOAD && IsGameTypeSingle()) { #ifdef DEBUG FS.get_path ("$game_config$")->m_Flags.set(FS_Path::flNeedRescan, TRUE); FS.get_path ("$game_scripts$")->m_Flags.set(FS_Path::flNeedRescan, TRUE); FS.rescan_pathes (); #endif // DEBUG string_path saved_game,command; strconcat (sizeof(saved_game),saved_game,Core.UserName,"_","quicksave"); if (!CSavedGameWrapper::valid_saved_game(saved_game)) return; strconcat (sizeof(command),command,"load ",saved_game); Console->Execute (command); return; } #ifndef MASTER_GOLD switch (key) { case DIK_NUMPAD5: { if (GameID() != GAME_SINGLE) { Msg("For this game type Demo Record is disabled."); /// return; }; Console->Hide (); Console->Execute("demo_record 1"); } break; #endif // MASTER_GOLD #ifdef DEBUG case DIK_RETURN: bDebug = !bDebug; return; case DIK_BACK: if (GameID() == GAME_SINGLE) HW.Caps.SceneMode = (HW.Caps.SceneMode+1)%3; return; case DIK_F4: { if (pInput->iGetAsyncKeyState(DIK_LALT)) break; if (pInput->iGetAsyncKeyState(DIK_RALT)) break; bool bOk = false; u32 i=0, j, n=Objects.o_count(); if (pCurrentEntity) for ( ; i<n; ++i) if (Objects.o_get_by_iterator(i) == pCurrentEntity) break; if (i < n) { j = i; bOk = false; for (++i; i <n; ++i) { CEntityAlive* tpEntityAlive = smart_cast<CEntityAlive*>(Objects.o_get_by_iterator(i)); if (tpEntityAlive) { bOk = true; break; } } if (!bOk) for (i = 0; i <j; ++i) { CEntityAlive* tpEntityAlive = smart_cast<CEntityAlive*>(Objects.o_get_by_iterator(i)); if (tpEntityAlive) { bOk = true; break; } } if (bOk) { CObject *tpObject = CurrentEntity(); CObject *__I = Objects.o_get_by_iterator(i); CObject **I = &__I; SetEntity(*I); if (tpObject != *I) { CActor* pActor = smart_cast<CActor*> (tpObject); if (pActor) pActor->inventory().Items_SetCurrentEntityHud(false); } if (tpObject) { Engine.Sheduler.Unregister (tpObject); Engine.Sheduler.Register (tpObject, TRUE); }; Engine.Sheduler.Unregister (*I); Engine.Sheduler.Register (*I, TRUE); CActor* pActor = smart_cast<CActor*> (*I); if (pActor) { pActor->inventory().Items_SetCurrentEntityHud(true); CHudItem* pHudItem = smart_cast<CHudItem*>(pActor->inventory().ActiveItem()); if (pHudItem) { pHudItem->OnStateSwitch(pHudItem->GetState()); } } } } return; } case MOUSE_1: { if (GameID() != GAME_SINGLE) break; if (pInput->iGetAsyncKeyState(DIK_LALT)) { if (CurrentEntity()->CLS_ID == CLSID_OBJECT_ACTOR) try_change_current_entity (); else restore_actor (); return; } break; } /**/ case DIK_DIVIDE: if( OnServer() ){ // float NewTimeFactor = pSettings->r_float("alife","time_factor"); if (GameID() == GAME_SINGLE) Server->game->SetGameTimeFactor(g_fTimeFactor); else { Server->game->SetEnvironmentGameTimeFactor(g_fTimeFactor); Server->game->SetGameTimeFactor(g_fTimeFactor); }; } break; case DIK_MULTIPLY: if( OnServer() ){ float NewTimeFactor = 1000.f; if (GameID() == GAME_SINGLE) Server->game->SetGameTimeFactor(NewTimeFactor); else { Server->game->SetEnvironmentGameTimeFactor(NewTimeFactor); // Server->game->SetGameTimeFactor(NewTimeFactor); }; } break; #endif #ifdef DEBUG case DIK_F9:{ // if (!ai().get_alife()) // break; // const_cast<CALifeSimulatorHeader&>(ai().alife().header()).set_state(ALife::eZoneStateSurge); if (GameID() != GAME_SINGLE) { extern INT g_sv_SendUpdate; g_sv_SendUpdate = 1; }; break; } return; // case DIK_F10:{ // ai().level_graph().set_dest_point(); // ai().level_graph().build_detail_path(); // if (!Objects.FindObjectByName("m_stalker_e0000") || !Objects.FindObjectByName("localhost/dima")) // return; // if (!m_bSynchronization) { // m_bSynchronization = true; // ai().level_graph().set_start_point(); // m_bSynchronization = false; // } // luabind::functor<void> functor; // ai().script_engine().functor("alife_test.set_switch_online",functor); // functor(0,false); // } // return; // case DIK_F11: // ai().level_graph().build_detail_path(); // if (!Objects.FindObjectByName("m_stalker_e0000") || !Objects.FindObjectByName("localhost/dima")) // return; // if (!m_bSynchronization) { // m_bSynchronization = true; // ai().level_graph().set_dest_point(); // ai().level_graph().select_cover_point(); // m_bSynchronization = false; // } // return; #endif // DEBUG #ifndef MASTER_GOLD } #endif // MASTER_GOLD if (bindConsoleCmds.execute(key)) return; if( b_ui_exist && HUD().GetUI()->MainInputReceiver() )return; if (CURRENT_ENTITY()) { IInputReceiver* IR = smart_cast<IInputReceiver*> (smart_cast<CGameObject*>(CURRENT_ENTITY())); if (IR) IR->IR_OnKeyboardPress(get_binded_action(key)); } #ifdef _DEBUG CObject *obj = Level().Objects.FindObjectByName("monster"); if (obj) { CBaseMonster *monster = smart_cast<CBaseMonster *>(obj); if (monster) monster->debug_on_key(key); } #endif }