// Ryzom - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #ifndef NL_GAME_CONTEXT_MENU_H #define NL_GAME_CONTEXT_MENU_H #include "nel/misc/types_nl.h" #include "main_loop.h" #include "nel/gui/ctrl_text_button.h" #include "nel/gui/interface_group.h" #include "interface_v3/interface_pointer.h" #include "game_share/bot_chat_types.h" // *************************************************************************** namespace NLGUI { class CGroupMenu; class CViewTextMenu; } namespace NLMISC{ class CCDBNodeLeaf; } // *************************************************************************** /** * Update Context menu * \author Lionel Berenguier * \author Nevrax France * \date 2003 */ class CGameContextMenu { public: /// Constructor CGameContextMenu(); // init with IM and DB void init(const std::string &menuId); // update the context menu void update(); bool isBuilding() const { return _OkTextTradeOutpostBuilding; } private: // Conditions bool canAttack(); bool canDuel(); bool canPvpChallenge(); bool canDisengage(); bool canTeamKick(); void updateContextMenuMissionsOptions( bool forceHide ); void updateContextMenuWebPage(uint options); void updateContextMenuOutpostState(uint options); void updateContextMenuOutpostBanish(); void updateContextMenuMissionRing(); // talk. void updateContextMenuTalkEntries(uint options); void setupContextMenuCantTalk(); void setupContextMenuTalkWithPlayer(); void applyTextTalk(); // MilkoPad CInterfaceGroupPtr _GroupMilkoPad; NLMISC::CCDBNodeLeaf *_MilkoAttackDisengage; CCtrlTextButtonPtr _MilkoAttDisBut1; CCtrlTextButtonPtr _MilkoAttDisBut2; CGroupMenu *_GroupMenu; NLMISC::CCDBNodeLeaf *_ContextVal; NLMISC::CCDBNodeLeaf *_AvailablePrograms; NLMISC::CCDBNodeLeaf *_ServerTeamPresent; NLMISC::CCDBNodeLeaf *_MissionOption[NUM_MISSION_OPTIONS]; NLMISC::CCDBNodeLeaf *_ServerInDuel; NLMISC::CCDBNodeLeaf *_ServerInPvpChallenge; NLMISC::CCDBNodeLeaf *_WebPageTitle; NLMISC::CCDBNodeLeaf *_OutpostSheet; NLMISC::CCDBNodeLeaf *_OutpostRightToBannish; NLMISC::CCDBNodeLeaf *_MissionRing[BOTCHATTYPE::MaxR2MissionEntryDatabase]; CViewTextMenuPtr _TextLootAction; CViewTextMenuPtr _TextQuartering; CViewTextMenuPtr _TextAttack; CViewTextMenuPtr _TextDuel; CViewTextMenuPtr _TextUnDuel; CViewTextMenuPtr _TextPvpChallenge; CViewTextMenuPtr _TextUnPvpChallenge; CViewTextMenuPtr _TextExchange; CViewTextMenuPtr _TextMount; CViewTextMenuPtr _TextFreeLook; CViewTextMenuPtr _TextMove; CViewTextMenuPtr _TextStop; CViewTextMenuPtr _TextDisengage; CViewTextMenuPtr _TextUnseat; CViewTextMenuPtr _TextInfo; CViewTextMenuPtr _TextFollow; CViewTextMenuPtr _TextAssist; CViewTextMenuPtr _TextInvit; CViewTextMenuPtr _TextGuildInvit; CViewTextMenuPtr _TextQuitTeam; CViewTextMenuPtr _TextAddToFriendList; CViewTextMenuPtr _TextMission[NUM_MISSION_OPTIONS]; // Pack Animal CViewTextMenuPtr _TextPAFollow; CViewTextMenuPtr _TextPAStop; CViewTextMenuPtr _TextPAFree; CViewTextMenuPtr _TextPAEnterStable; // BotChat and player talk CViewTextMenuPtr _TextNews; CViewTextMenuPtr _TextTradeItem; CViewTextMenuPtr _TextTradeTeleport; CViewTextMenuPtr _TextTradeFaction; CViewTextMenuPtr _TextTradeCosmetic; CViewTextMenuPtr _TextTradeGuildOptions; CViewTextMenuPtr _TextTradeOutpostBuilding; CViewTextMenuPtr _TextTradeGuildRoleMaster; CViewTextMenuPtr _TextTradePact; CViewTextMenuPtr _TextTradePhrase; CViewTextMenuPtr _TextChooseMission; CViewTextMenuPtr _TextCreateGuild; CViewTextMenuPtr _TextDynamicMission; CViewTextMenuPtr _TextTalk; CViewTextMenuPtr _TextChooseZCCharge; CViewTextMenuPtr _TextChooseBuilding; CViewTextMenuPtr _TextBuyRM; CViewTextMenuPtr _TextUpgradeRM; CViewTextMenuPtr _TextCancelZCCharge; CViewTextMenuPtr _TextDestroyBuilding; CViewTextMenuPtr _TextOutpostState; CViewTextMenuPtr _TextOutpostBanishPlayer; CViewTextMenuPtr _TextOutpostBanishGuild; CViewTextMenuPtr _TextWebPage; CViewTextMenuPtr _TextMissionRing[BOTCHATTYPE::MaxR2MissionEntryDatabase]; // Forage source CViewTextMenuPtr _TextExtractRM; // Build Spire CViewTextMenuPtr _TextBuildTotem; // Use intermediate OK value. not good thing to do "text->setActive(false); text->setActive(true)" each frame for nothing. bool _OkTextNews; bool _OkTextTradeItem; bool _OkTextTradeTeleport; bool _OkTextTradeFaction; bool _OkTextTradeCosmetic; bool _OkTextTradeGuildOptions; bool _OkTextTradeOutpostBuilding; bool _OkTextTradeGuildRoleMaster; bool _OkTextTradePact; bool _OkTextTradePhrase; bool _OkTextChooseMission; bool _OkTextCreateGuild; bool _OkTextDynamicMission; bool _OkTextTalk; bool _OkTextChooseZCCharge; bool _OkTextChooseBuilding; bool _OkTextBuyRM; bool _OkTextUpgradeRM; bool _OkTextCancelZCCharge; bool _OkTextDestroyBuilding; bool _OkTextOutpostState; bool _OkTextWebPage; }; class CEntityCL; /** * Enable/disable various menu items for animals. * selectedAnimalInVision can be NULL (out of vision) * index can be -1 (no owned animal) * Any CViewTextMenu* can be NULL */ bool testMenuOptionForPackAnimal( CEntityCL* selectedAnimalInVision, uint index, bool clearAll, CViewTextMenu *pFollow, CViewTextMenu *pStop, CViewTextMenu *pFree, CViewTextMenu *pEnterStable, CViewTextMenu *pLeaveStable, CViewTextMenu *pMount, CViewTextMenu *pUnmount ); #endif // NL_GAME_CONTEXT_MENU_H /* End of game_context_menu.h */