Fixed revote bug and inflexibilities in RedrawClientVoteMenu (bug 3834, r=fyren).
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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},
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user