From 8437e8ee046263253904984569f3d855cabb41e0 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sat, 16 Jun 2007 21:56:12 +0000 Subject: [PATCH] added request amb404 --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40966 --- core/MenuManager.cpp | 4 +++- core/smn_menus.cpp | 12 +++++++++--- plugins/include/menus.inc | 14 ++++++++++++++ public/IMenuManager.h | 17 +++++++++++++++-- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/core/MenuManager.cpp b/core/MenuManager.cpp index 87ca61f6..b5cb2126 100644 --- a/core/MenuManager.cpp +++ b/core/MenuManager.cpp @@ -126,6 +126,7 @@ void VoteMenuHandler::EndVoting() */ unsigned int dup_array[256]; + unsigned int total = m_Votes[0]; for (size_t i=1; i m_Votes[highest]) @@ -141,6 +142,7 @@ void VoteMenuHandler::EndVoting() */ dup_array[dup_count++] = i; } + total += m_Votes[i]; } /* Check if we need to pick from the duplicate list */ @@ -160,7 +162,7 @@ void VoteMenuHandler::EndVoting() } picked_item: - m_pHandler->OnMenuVoteEnd(m_pCurMenu, chosen); + m_pHandler->OnMenuVoteEnd(m_pCurMenu, chosen, m_Votes[highest], total); m_pHandler->OnMenuEnd(m_pCurMenu); InternalReset(); } diff --git a/core/smn_menus.cpp b/core/smn_menus.cpp index e6e4a1b0..24d08991 100644 --- a/core/smn_menus.cpp +++ b/core/smn_menus.cpp @@ -69,7 +69,10 @@ public: void OnMenuEnd(IBaseMenu *menu); void OnMenuDestroy(IBaseMenu *menu); void OnMenuVoteStart(IBaseMenu *menu); - void OnMenuVoteEnd(IBaseMenu *menu, unsigned int item); + void OnMenuVoteEnd(IBaseMenu *menu, + unsigned int item, + unsigned int winningVotes, + unsigned int totalVotes); void OnMenuVoteCancel(IBaseMenu *menu); #if 0 void OnMenuDrawItem(IBaseMenu *menu, int client, unsigned int item, unsigned int &style); @@ -288,9 +291,12 @@ void CMenuHandler::OnMenuVoteStart(IBaseMenu *menu) DoAction(menu, MenuAction_VoteStart, 0, 0); } -void CMenuHandler::OnMenuVoteEnd(IBaseMenu *menu, unsigned int item) +void CMenuHandler::OnMenuVoteEnd(IBaseMenu *menu, + unsigned int item, + unsigned int winningVotes, + unsigned int totalVotes) { - DoAction(menu, MenuAction_VoteEnd, item, 0); + DoAction(menu, MenuAction_VoteEnd, item, (totalVotes << 16) | (totalVotes & 0xFFFF)); } void CMenuHandler::OnMenuVoteCancel(IBaseMenu *menu) diff --git a/plugins/include/menus.inc b/plugins/include/menus.inc index d1f5e5b9..f1a85137 100644 --- a/plugins/include/menus.inc +++ b/plugins/include/menus.inc @@ -501,3 +501,17 @@ native GetPanelCurrentKey(Handle:panel); * @error Invalid Handle. */ native bool:SetPanelCurrentKey(Handle:panel, key); + +/** + * Retrieves voting information from MenuAction_VoteEnd. + * + * @param param2 Second parameter of MenuAction_VoteEnd. + * @param winningVotes Number of votes received by the winning option. + * @param totalVotes Number of total votes received. + * @noreturn + */ +stock GetMenuVoteInfo(param2, &winningVotes, &totalVotes) +{ + winningVotes = param2 & 0xFFFF; + totalVotes = param2 >> 16; +} diff --git a/public/IMenuManager.h b/public/IMenuManager.h index 2e17d641..9d6c453c 100644 --- a/public/IMenuManager.h +++ b/public/IMenuManager.h @@ -23,7 +23,7 @@ #include #define SMINTERFACE_MENUMANAGER_NAME "IMenuManager" -#define SMINTERFACE_MENUMANAGER_VERSION 3 +#define SMINTERFACE_MENUMANAGER_VERSION 4 /** * @file IMenuManager.h @@ -647,8 +647,13 @@ namespace SourceMod * * @param menu Menu pointer. * @param item Item position that was chosen by a majority. + * @param winningVotes Number of votes from the winning item. + * @param totalVotes Number of votes total. */ - virtual void OnMenuVoteEnd(IBaseMenu *menu, unsigned int item) + virtual void OnMenuVoteEnd(IBaseMenu *menu, + unsigned int item, + unsigned int winningVotes, + unsigned int totalVotes) { } @@ -715,6 +720,14 @@ namespace SourceMod { return SMINTERFACE_MENUMANAGER_VERSION; } + virtual bool IsVersionCompatible(unsigned int version) + { + if (version < 4 || version > GetInterfaceVersion()) + { + return false; + } + return true; + } public: /** * @brief Finds a style by name.