Extend Nominations API (bug 4677, r=pred)
This commit is contained in:
		
							parent
							
								
									616113d384
								
							
						
					
					
						commit
						6267c17c6b
					
				| @ -29,14 +29,39 @@ enum MapChange | |||||||
|  */ |  */ | ||||||
| native NominateResult:NominateMap(const String:map[], bool:force, owner); | native NominateResult:NominateMap(const String:map[], bool:force, owner); | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Attempt to remove a map from the mapchooser map list. | ||||||
|  |  * | ||||||
|  |  * @param map		Map to remove. | ||||||
|  |  * @return			True if the nomination was found and removed, or false if the nomination was not found. | ||||||
|  |  */ | ||||||
|  | native bool:RemoveNominationByMap(const String:map[]); | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Attempt to remove a map from the mapchooser map list. | ||||||
|  |  * | ||||||
|  |  * @param owner		Client index of the nominater. | ||||||
|  |  * @return			True if the nomination was found and removed, or false if the nomination was not found. | ||||||
|  |  */ | ||||||
|  | native bool:RemoveNominationByOwner(owner); | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Gets the current list of excluded maps. |  * Gets the current list of excluded maps. | ||||||
|  * |  * | ||||||
|  * @param array		An ADT array handle to add the map strings to. Needs to be  |  * @param array		An ADT array handle to add the map strings to. | ||||||
|  * @noreturn |  * @noreturn | ||||||
|  */ |  */ | ||||||
| native GetExcludeMapList(Handle:array); | native GetExcludeMapList(Handle:array); | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Gets the current list of nominated maps. | ||||||
|  |  * | ||||||
|  |  * @param maparray		An ADT array handle to add the map strings to. | ||||||
|  |  * @param ownerarray	An optional ADT array handle to add the nominator client indexes to. | ||||||
|  |  * @noreturn | ||||||
|  |  */ | ||||||
|  | native GetNominatedMapList(Handle:maparray, Handle:ownerarray = INVALID_HANDLE); | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Checks if MapChooser will allow a vote |  * Checks if MapChooser will allow a vote | ||||||
|  * |  * | ||||||
| @ -75,6 +100,11 @@ native bool:EndOfMapVoteEnabled(); | |||||||
|  */ |  */ | ||||||
| forward OnNominationRemoved(const String:map[], owner); | forward OnNominationRemoved(const String:map[], owner); | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * Called when mapchooser starts a Map Vote. | ||||||
|  |  */ | ||||||
|  | forward OnMapVoteStarted(); | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| public SharedPlugin:__pl_mapchooser =  | public SharedPlugin:__pl_mapchooser =  | ||||||
| { | { | ||||||
| @ -90,7 +120,10 @@ public SharedPlugin:__pl_mapchooser = | |||||||
| public __pl_mapchooser_SetNTVOptional() | public __pl_mapchooser_SetNTVOptional() | ||||||
| { | { | ||||||
| 	MarkNativeAsOptional("NominateMap"); | 	MarkNativeAsOptional("NominateMap"); | ||||||
|  | 	MarkNativeAsOptional("RemoveNominationByMap"); | ||||||
|  | 	MarkNativeAsOptional("RemoveNominationByOwner"); | ||||||
| 	MarkNativeAsOptional("GetExcludeMapList"); | 	MarkNativeAsOptional("GetExcludeMapList"); | ||||||
|  | 	MarkNativeAsOptional("GetNominatedMapList"); | ||||||
| 	MarkNativeAsOptional("CanMapChooserStartVote"); | 	MarkNativeAsOptional("CanMapChooserStartVote"); | ||||||
| 	MarkNativeAsOptional("InitiateMapChooserVote"); | 	MarkNativeAsOptional("InitiateMapChooserVote"); | ||||||
| 	MarkNativeAsOptional("HasEndOfMapVoteFinished"); | 	MarkNativeAsOptional("HasEndOfMapVoteFinished"); | ||||||
|  | |||||||
| @ -91,6 +91,7 @@ new g_NominateCount = 0; | |||||||
| new MapChange:g_ChangeTime; | new MapChange:g_ChangeTime; | ||||||
| 
 | 
 | ||||||
| new Handle:g_NominationsResetForward = INVALID_HANDLE; | new Handle:g_NominationsResetForward = INVALID_HANDLE; | ||||||
|  | new Handle:g_MapVoteStartedForward = INVALID_HANDLE; | ||||||
| 
 | 
 | ||||||
| /* Upper bound of how many team there could be */ | /* Upper bound of how many team there could be */ | ||||||
| #define MAXTEAMS 10 | #define MAXTEAMS 10 | ||||||
| @ -157,6 +158,7 @@ public OnPluginStart() | |||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	g_NominationsResetForward = CreateGlobalForward("OnNominationRemoved", ET_Ignore, Param_String, Param_Cell); | 	g_NominationsResetForward = CreateGlobalForward("OnNominationRemoved", ET_Ignore, Param_String, Param_Cell); | ||||||
|  | 	g_MapVoteStartedForward = CreateGlobalForward("OnMapVoteStarted", ET_Ignore); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max) | public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max) | ||||||
| @ -164,10 +166,13 @@ public APLRes:AskPluginLoad2(Handle:myself, bool:late, String:error[], err_max) | |||||||
| 	RegPluginLibrary("mapchooser");	 | 	RegPluginLibrary("mapchooser");	 | ||||||
| 	 | 	 | ||||||
| 	CreateNative("NominateMap", Native_NominateMap); | 	CreateNative("NominateMap", Native_NominateMap); | ||||||
|  | 	CreateNative("RemoveNominationByMap", Native_RemoveNominationByMap); | ||||||
|  | 	CreateNative("RemoveNominationByOwner", Native_RemoveNominationByOwner); | ||||||
| 	CreateNative("InitiateMapChooserVote", Native_InitiateVote); | 	CreateNative("InitiateMapChooserVote", Native_InitiateVote); | ||||||
| 	CreateNative("CanMapChooserStartVote", Native_CanVoteStart); | 	CreateNative("CanMapChooserStartVote", Native_CanVoteStart); | ||||||
| 	CreateNative("HasEndOfMapVoteFinished", Native_CheckVoteDone); | 	CreateNative("HasEndOfMapVoteFinished", Native_CheckVoteDone); | ||||||
| 	CreateNative("GetExcludeMapList", Native_GetExcludeMapList); | 	CreateNative("GetExcludeMapList", Native_GetExcludeMapList); | ||||||
|  | 	CreateNative("GetNominatedMapList", Native_GetNominatedMapList); | ||||||
| 	CreateNative("EndOfMapVoteEnabled", Native_EndOfMapVoteEnabled); | 	CreateNative("EndOfMapVoteEnabled", Native_EndOfMapVoteEnabled); | ||||||
| 
 | 
 | ||||||
| 	return APLRes_Success; | 	return APLRes_Success; | ||||||
| @ -531,6 +536,10 @@ InitiateVote(MapChange:when, Handle:inputlist=INVALID_HANDLE) | |||||||
| 	g_VoteMenu = CreateMenu(Handler_MapVoteMenu, MenuAction:MENU_ACTIONS_ALL); | 	g_VoteMenu = CreateMenu(Handler_MapVoteMenu, MenuAction:MENU_ACTIONS_ALL); | ||||||
| 	SetMenuTitle(g_VoteMenu, "Vote Nextmap"); | 	SetMenuTitle(g_VoteMenu, "Vote Nextmap"); | ||||||
| 	SetVoteResultCallback(g_VoteMenu, Handler_MapVoteFinished); | 	SetVoteResultCallback(g_VoteMenu, Handler_MapVoteFinished); | ||||||
|  | 
 | ||||||
|  | 	/* Call OnMapVoteStarted() Forward */ | ||||||
|  | 	Call_StartForward(g_MapVoteStartedForward); | ||||||
|  | 	Call_Finish(); | ||||||
| 	 | 	 | ||||||
| 	/** | 	/** | ||||||
| 	 * TODO: Make a proper decision on when to clear the nominations list. | 	 * TODO: Make a proper decision on when to clear the nominations list. | ||||||
| @ -961,6 +970,78 @@ public Native_NominateMap(Handle:plugin, numParams) | |||||||
| 	return _:InternalNominateMap(map, GetNativeCell(2), GetNativeCell(3)); | 	return _:InternalNominateMap(map, GetNativeCell(2), GetNativeCell(3)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool:InternalRemoveNominationByMap(String:map[]) | ||||||
|  | {	 | ||||||
|  | 	for (new i = 0; i < GetArraySize(g_NominateList); i++) | ||||||
|  | 	{ | ||||||
|  | 		new String:oldmap[33]; | ||||||
|  | 		GetArrayString(g_NominateList, i, oldmap, sizeof(oldmap)); | ||||||
|  | 
 | ||||||
|  | 		if(strcmp(map, oldmap, false) == 0) | ||||||
|  | 		{ | ||||||
|  | 			Call_StartForward(g_NominationsResetForward); | ||||||
|  | 			Call_PushString(oldmap); | ||||||
|  | 			Call_PushCell(GetArrayCell(g_NominateOwners, i)); | ||||||
|  | 			Call_Finish(); | ||||||
|  | 
 | ||||||
|  | 			RemoveFromArray(g_NominateList, i); | ||||||
|  | 			RemoveFromArray(g_NominateOwners, i); | ||||||
|  | 			g_NominateCount--; | ||||||
|  | 
 | ||||||
|  | 			return true; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* native  bool:RemoveNominationByMap(const String:map[]); */ | ||||||
|  | public Native_RemoveNominationByMap(Handle:plugin, numParams) | ||||||
|  | { | ||||||
|  | 	new len; | ||||||
|  | 	GetNativeStringLength(1, len); | ||||||
|  | 	 | ||||||
|  | 	if (len <= 0) | ||||||
|  | 	{ | ||||||
|  | 	  return false; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	new String:map[len+1]; | ||||||
|  | 	GetNativeString(1, map, len+1); | ||||||
|  | 	 | ||||||
|  | 	return _:InternalRemoveNominationByMap(map); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool:InternalRemoveNominationByOwner(owner) | ||||||
|  | {	 | ||||||
|  | 	new index; | ||||||
|  | 
 | ||||||
|  | 	if (owner && ((index = FindValueInArray(g_NominateOwners, owner)) != -1)) | ||||||
|  | 	{ | ||||||
|  | 		new String:oldmap[33]; | ||||||
|  | 		GetArrayString(g_NominateList, index, oldmap, sizeof(oldmap)); | ||||||
|  | 
 | ||||||
|  | 		Call_StartForward(g_NominationsResetForward); | ||||||
|  | 		Call_PushString(oldmap); | ||||||
|  | 		Call_PushCell(owner); | ||||||
|  | 		Call_Finish(); | ||||||
|  | 
 | ||||||
|  | 		RemoveFromArray(g_NominateList, index); | ||||||
|  | 		RemoveFromArray(g_NominateOwners, index); | ||||||
|  | 		g_NominateCount--; | ||||||
|  | 
 | ||||||
|  | 		return true; | ||||||
|  | 	} | ||||||
|  | 	 | ||||||
|  | 	return false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* native  bool:RemoveNominationByOwner(owner); */ | ||||||
|  | public Native_RemoveNominationByOwner(Handle:plugin, numParams) | ||||||
|  | {	 | ||||||
|  | 	return _:InternalRemoveNominationByOwner(GetNativeCell(1)); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* native InitiateMapChooserVote(); */ | /* native InitiateMapChooserVote(); */ | ||||||
| public Native_InitiateVote(Handle:plugin, numParams) | public Native_InitiateVote(Handle:plugin, numParams) | ||||||
| { | { | ||||||
| @ -994,8 +1075,6 @@ public Native_GetExcludeMapList(Handle:plugin, numParams) | |||||||
| 	{ | 	{ | ||||||
| 		return;	 | 		return;	 | ||||||
| 	} | 	} | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	new size = GetArraySize(g_OldMapList); | 	new size = GetArraySize(g_OldMapList); | ||||||
| 	decl String:map[33]; | 	decl String:map[33]; | ||||||
| 	 | 	 | ||||||
| @ -1007,3 +1086,29 @@ public Native_GetExcludeMapList(Handle:plugin, numParams) | |||||||
| 	 | 	 | ||||||
| 	return; | 	return; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | public Native_GetNominatedMapList(Handle:plugin, numParams) | ||||||
|  | { | ||||||
|  | 	new Handle:maparray = Handle:GetNativeCell(1); | ||||||
|  | 	new Handle:ownerarray = Handle:GetNativeCell(2); | ||||||
|  | 	 | ||||||
|  | 	if (maparray == INVALID_HANDLE) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	decl String:map[33]; | ||||||
|  | 
 | ||||||
|  | 	for (new i = 0; i < GetArraySize(g_NominateList); i++) | ||||||
|  | 	{ | ||||||
|  | 		GetArrayString(g_NominateList, i, map, sizeof(map)); | ||||||
|  | 		PushArrayString(maparray, map); | ||||||
|  | 
 | ||||||
|  | 		// If the optional parameter for an owner list was passed, then we need to fill that out as well | ||||||
|  | 		if(ownerarray != INVALID_HANDLE) | ||||||
|  | 		{ | ||||||
|  | 			new index = GetArrayCell(g_NominateOwners, i); | ||||||
|  | 			PushArrayCell(ownerarray, index); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return; | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user