插件介绍:
- 此插件调用了csgo内部自带的投票功能以及全景UI的投票界面
vote_panorama.smx的效果如下:
特性:
• 自定义的投票显示内容. (HTML supported) • 自定义的投票通过后的显示内容. (HTML supported) • 自定义的面板图标 Customizable panel icons. • 投票可以在任何时候被取消 Custom votes can be canceled at any time and moment. • 玩家投票进行中完全可控 Full control over player voting. • Ability of blocking & modifying votes. • 向任意玩家群体显示自定义投票 Broadcast custom votes to any group of player you want. |
插件依赖:
- 依赖于customvotes.smx(它提供vote_panorama.smx需要的Native函数)
- 编译依赖 1.10+ SourceMod
安装方法:
1. 将 'customvotes.smx' 、'vote_panorama.smx'放到 '/csgo/addons/sourcemod/plugins/'目录. 2. 运行 'sm plugins load customvotes'命令重新载入插件, 或者换图、重启服务器也可以. 3. 结束! |
ConVars:
Code:
// Sound file path that will be played once a client has voted no. // - 玩家选择“反对”时,播放的音频文件 // Default: "sound/ui/menu_invalid.wav" custom_votes_negative_vote_sound "sound/ui/menu_invalid.wav" // Sound file path that will be played once a client has voted yes. // - 玩家选择“同意”时,播放的音频文件 // Default: "sound/ui/menu_accept.wav" custom_votes_positive_vote_sound "sound/ui/menu_accept.wav
API(customvotes.sp实现,customvotes.inc头文件):
Code:
#if defined _customvotes_included
#endinput
#endif
#define _customvotes_included
#define SERVER_OPERATOR_ID 0 /**< Console vote initiator id */
#define DEFAULT_PASS_PERCENTAGE 50.0 /**< Vote pass percenage that will be setted if 'pass_percentage' isn't setted */
#define VOTE_DURATION_FOREVER 0 /**< Vote should be broadcasted as long as possible */
/**
* Client's custom vote decisions.
*/
enum
{
VOTE_DECISION_NONE = -1,
VOTE_DECISION_YES,
VOTE_DECISION_NO
}
/**
* Vote issue. These are mapped to translation strings and pass strings by VoteStart and VotePass
* https://github.com/perilouswithadollarsign/cstrike15_src/blob/f82112a2388b841d72cb62ca48ab1846dfcc11c8/game/shared/shareddefs.h#L185-L206
*/
enum
{
VOTE_ISSUE_UNDEFINED = 1,
VOTE_ISSUE_KICK,
VOTE_ISSUE_CHANGELEVEL,
VOTE_ISSUE_NEXTLEVEL,
VOTE_ISSUE_SWAPTEAMS,
VOTE_ISSUE_SCRAMBLE,
VOTE_ISSUE_RESTARTGAME,
VOTE_ISSUE_SURRENDER,
VOTE_ISSUE_REMATCH,
VOTE_ISSUE_CONTINUE,
VOTE_ISSUE_PAUSEMATCH,
VOTE_ISSUE_UNPAUSEMATCH,
VOTE_ISSUE_LOADBACKUP,
VOTE_ISSUE_ENDWARMUP,
VOTE_ISSUE_STARTTIMEOUT,
VOTE_ISSUE_ENDTIMEOUT,
VOTE_ISSUE_READYFORMATCH,
VOTE_ISSUE_NOTREADYFORMATCH,
// Represents the highest possible index of the enum
VOTE_ISSUE_MAX
}
/**
* Reasons a vote was failed.
* https://github.com/perilouswithadollarsign/cstrike15_src/blob/f82112a2388b841d72cb62ca48ab1846dfcc11c8/game/shared/shareddefs.h#L142-L179
*/
enum
{
VOTE_FAILED_GENERIC = 0,
VOTE_FAILED_TRANSITIONING_PLAYERS,
VOTE_FAILED_RATE_EXCEEDED, // "time" is used
VOTE_FAILED_YES_MUST_EXCEED_NO,
VOTE_FAILED_QUORUM_FAILURE,
VOTE_FAILED_ISSUE_DISABLED,
VOTE_FAILED_MAP_NOT_FOUND,
VOTE_FAILED_MAP_NAME_REQUIRED,
VOTE_FAILED_FAILED_RECENTLY, // "time" is used
VOTE_FAILED_FAILED_RECENT_KICK, // "time" is used
VOTE_FAILED_FAILED_RECENT_CHANGEMAP, // "time" is used
VOTE_FAILED_FAILED_RECENT_SWAPTEAMS, // "time" is used
VOTE_FAILED_FAILED_RECENT_SCRAMBLETEAMS, // "time" is used
VOTE_FAILED_FAILED_RECENT_RESTART, // "time" is used
VOTE_FAILED_TEAM_CANT_CALL,
VOTE_FAILED_WAITINGFORPLAYERS,
VOTE_FAILED_PLAYERNOTFOUND, // Deprecated, same as generic failure
VOTE_FAILED_CANNOT_KICK_ADMIN,
VOTE_FAILED_SCRAMBLE_IN_PROGRESS,
VOTE_FAILED_SWAP_IN_PROGRESS,
VOTE_FAILED_SPECTATOR,
VOTE_FAILED_DISABLED,
VOTE_FAILED_NEXTLEVEL_SET,
VOTE_FAILED_REMATCH,
VOTE_FAILED_TOO_EARLY_SURRENDER,
VOTE_FAILED_CONTINUE,
VOTE_FAILED_MATCH_PAUSED,
VOTE_FAILED_MATCH_NOT_PAUSED,
VOTE_FAILED_NOT_IN_WARMUP,
VOTE_FAILED_NOT_10_PLAYERS,
VOTE_FAILED_TIMEOUT_ACTIVE,
VOTE_FAILED_TIMEOUT_INACTIVE, // Deprecated, same as generic failure
VOTE_FAILED_TIMEOUT_EXHAUSTED,
VOTE_FAILED_CANT_ROUND_END,
// Represents the highest possible index of the enum
VOTE_FAILED_MAX
}
enum struct CustomVoteSetup
{
// Team id to broadcast the custom vote.
//
// Note: This is ignored if 'clients' array is specified.
//
// CS_TEAM_NONE (0) To everyone
// CS_TEAM_SPECTATOR (1) To spectators only
// CS_TEAM_T (2) To terrorists only
// CS_TEAM_CT (3) To counter-terrorists only
int team;
int clients[MAXPLAYERS]; // Array containing player indexes to broadcast to.
int client_count; // Number of players in the array.
// Custom vote initiator client index (who executed the vote), or SERVER_OPERATOR_ID for console.
int initiator;
// Custom vote issue id to use, see the enum above.
int issue_id;
// The required percenage of players who voted positively for the custom vote to pass.
// Leaving the variable value as 0.0 will automatically set it to 'DEFAULT_PASS_PERCENTAGE'.
float pass_percentage;
// Disposition string to display on the custom vote panel once the vote has executed. (HTML based text)
char dispstr[512];
// Disposition string to display on the custom vote panel once the vote has passed. (HTML based text)
char disppass[512];
// Optional data to parse through vote callbacks.
any data;
// Resets back everything to default values.
void Reset()
{
this.team = 0;
for (int current_index; current_index < MAXPLAYERS; current_index++)
{
this.clients[current_index] = 0;
}
this.client_count = 0;
this.initiator = 0;
this.issue_id = 0;
this.pass_percentage = 0.0;
this.dispstr[0] = '\0';
this.disppass[0] = '\0';
this.data = 0;
}
}
/**
* Any of the following prototypes will work as a custom vote callback.
*/
typeset CustomVote_Callback
{
/**
* Called when a custom vote result is available.
*
* @param results Array that contains the decisions of the voters.
* @param data Data passed to CustomVotes_Execute() when vote was executed.
*/
function void (int results[MAXPLAYERS + 1], any data);
/**
* Called when a custom vote result is available.
*
* @param results Array that contains the decisions of the voters.
*/
function void (int results[MAXPLAYERS + 1]);
};
/**
* Executes a custom CS:GO panel vote.
*
* @param setup A fully configurated custom vote setup data struct.
* @param timeout_duration Time in seconds for the custom vote to display until timeout,
* or 'VOTE_DURATION_FOREVER' to last it as long as possible.
* @param passed_callback Callback function to call once the vote has passed.
* @param failed_callback Callback function to call once the vote has failed.
* @param data Optional data value to pass to the callback(s).
*
* @error Another custom vote is currently in progress.
*/
native void CustomVotes_Execute(any[] setup, int timeout_duration, CustomVote_Callback passed_callback = INVALID_FUNCTION, CustomVote_Callback failed_callback = INVALID_FUNCTION, any data = 0);
/**
* Returns whether a custom vote is in progress.
*
* @return True if a custom vote is in progress, false otherwise.
*/
native bool CustomVotes_IsVoteInProgress();
/**
* Returns the configurated custom vote setup data struct of the current vote in progress.
*
* @param buffer Buffer to store the setup data.
* @error No custom vote is currently in progress.
*/
native void CustomVotes_GetSetup(any[] buffer);
/**
* Cancels the current vote in progress.
*
* @param force If set to true, this forces the custom vote to be cancelled, even if it's not being executed from the called plugin.
* @error No custom vote is currently in progress.
*/
native void CustomVotes_Cancel(bool force = false);
/**
* Retrieves all the players decisions related to the current custom vote.
*
* @param results Buffer to store the vote decision results. (See the enum above)
* @error No custom vote is currently in progress.
*/
native void CustomVotes_GetVoteDecisions(int results[MAXPLAYERS + 1]);
/**
* Called when a custom vote is receiving from a client.
*
* @param client Client index.
* @param voteDecision Client's vote decision. See the enum above.
* @return An Action value. Returning Plugin_Handled bypasses the game function call.
* Returning Plugin_Stop bypasses the post hook as well as the game function.
*/
forward Action CustomVotes_OnVoteReceive(int client, int &voteDecision);
#if !defined REQUIRE_PLUGIN
public void __pl_customvotes_SetNTVOptional()
{
MarkNativeAsOptional("CustomVotes_Execute");
MarkNativeAsOptional("CustomVotes_IsVoteInProgress");
MarkNativeAsOptional("CustomVotes_GetSetup");
MarkNativeAsOptional("CustomVotes_Cancel");
MarkNativeAsOptional("CustomVotes_GetVoteDecisions");
}
#endif
public SharedPlugin __pl_customvotes =
{
name = "customvotes",
file = "customvotes.smx",
#if defined REQUIRE_PLUGIN
required = 1,
#else
required = 0,
#endif
};
使用方法:
!zanting //调用暂停投票(这里并没有真的实现暂停功能,需要自己实现)
!huifu //调用恢复比赛投票(这里并没有真的实现恢复比赛功能,需要自己实现)
*注意:
本插件的依赖插件名字叫做customvotes.smx,和论坛里的另外一个自定义投票插件重名了,用的时候要注意,别起冲突!
下载地址:
链接: https://pan.baidu.com/s/1vwDorx4CnWMEj2WqsWvy5Q?pwd=1vwe 提取码: 1vwe 复制这段内容后打开百度网盘手机App,操作更方便哦
--来自百度网盘超级会员v4的分享
参考:
收藏的用户(2)
X
正在加载信息~