Fixed revote bug and inflexibilities in RedrawClientVoteMenu (bug 3834, r=fyren).

This commit is contained in:
David Anderson
2009-05-30 19:59:55 -04:00
parent c2c4ed1fe5
commit d4798ccaa5
7 changed files with 66 additions and 14 deletions
+7 -1
View File
@@ -798,5 +798,11 @@ bool MenuManager::IsClientInVotePool(int client)
bool MenuManager::RedrawClientVoteMenu(int client)
{
return s_VoteHandler.RedrawToClient(client);
return RedrawClientVoteMenu2(client, true);
}
bool MenuManager::RedrawClientVoteMenu2(int client, bool revote)
{
return s_VoteHandler.RedrawToClient(client, revote);
}
+1
View File
@@ -91,6 +91,7 @@ public:
unsigned int GetRemainingVoteDelay();
bool IsClientInVotePool(int client);
bool RedrawClientVoteMenu(int client);
bool RedrawClientVoteMenu2(int client, bool revote);
public: //IHandleTypeDispatch
void OnHandleDestroy(HandleType_t type, void *object);
bool GetHandleApproxSize(HandleType_t type, void *object, unsigned int *pSize);
+16 -3
View File
@@ -1,8 +1,8 @@
/**
* vim: set ts=4 :
* vim: set ts=4 sw=4 :
* =============================================================================
* SourceMod
* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
* Copyright (C) 2004-2009 AlliedModders LLC. All rights reserved.
* =============================================================================
*
* This program is free software; you can redistribute it and/or modify it under
@@ -205,7 +205,7 @@ bool VoteMenuHandler::GetClientVoteChoice(int client, unsigned int *pItem)
return true;
}
bool VoteMenuHandler::RedrawToClient(int client)
bool VoteMenuHandler::RedrawToClient(int client, bool revotes)
{
unsigned int time_limit;
@@ -214,6 +214,18 @@ bool VoteMenuHandler::RedrawToClient(int client)
return false;
}
if (m_ClientVotes[client] >= 0)
{
if ((m_VoteFlags & VOTEFLAG_NO_REVOTES) == VOTEFLAG_NO_REVOTES || !revotes)
{
return false;
}
assert((unsigned)m_ClientVotes[client] < m_Items);
assert(m_Votes[m_ClientVotes[client]] > 0);
m_Votes[m_ClientVotes[client]]--;
m_ClientVotes[client] = -1;
}
if (m_nMenuTime == MENU_TIME_FOREVER)
{
time_limit = m_nMenuTime;
@@ -489,3 +501,4 @@ bool VoteMenuHandler::IsCancelling()
{
return m_bCancelled;
}
+2 -1
View File
@@ -74,7 +74,7 @@ public:
unsigned int GetRemainingVoteDelay();
bool IsClientInVotePool(int client);
bool GetClientVoteChoice(int client, unsigned int *pItem);
bool RedrawToClient(int client);
bool RedrawToClient(int client, bool revote);
private:
void Reset(IMenuHandler *mh);
void DecrementPlayerCount();
@@ -102,3 +102,4 @@ private:
};
#endif //_INCLUDE_SOURCEMOD_MENUVOTING_H_
+15 -2
View File
@@ -676,7 +676,13 @@ static cell_t VoteMenu(IPluginContext *pContext, const cell_t *params)
cell_t *addr;
pContext->LocalToPhysAddr(params[2], &addr);
if (!g_Menus.StartVote(menu, params[3], addr, params[4]))
cell_t flags = 0;
if (params[0] >= 5)
{
flags = params[5];
}
if (!g_Menus.StartVote(menu, params[3], addr, params[4], flags))
{
return 0;
}
@@ -1445,7 +1451,13 @@ static cell_t RedrawClientVoteMenu(IPluginContext *pContext, const cell_t *param
return pContext->ThrowNativeError("Client is not in the voting pool");
}
return g_Menus.RedrawClientVoteMenu(client) ? 1 : 0;
bool revote = true;
if (params[0] >= 2 && !params[2])
{
revote = false;
}
return g_Menus.RedrawClientVoteMenu2(client, revote) ? 1 : 0;
}
class EmptyMenuHandler : public IMenuHandler
@@ -1567,3 +1579,4 @@ REGISTER_NATIVES(menuNatives)
{"VoteMenu", VoteMenu},
{NULL, NULL},
};