【已解决】死亡模式队伍平衡插件。
本帖最后由 homework 于 2012-10-27 01:08 编辑求个死亡模式下用的特殊功能队伍平衡功能插件。
插件用途:用于死亡模式服务器的队伍平衡。
插件功能:能在服务器出现CT、T两边人数相差2人时(或以上)自动平衡两边人数
特殊功能:能在玩家都活着的时候平衡两边队伍人数
问题描述:
1、死亡模式大家都知道死后马上复活,而且一局不会结束,一般的队伍平衡插件是在一局结束后进行判断然后平衡队伍人数;所以一般的队伍平衡插件使用在死亡F上没有实际效果。
2、还有这样的情况,死亡服务器上添加的有进入服务器后自动加入队伍插件,这样就可以避免玩家选择偏爱队伍造成不平衡。但是,比如现在CT、T队伍现在是8:8,突然一方退出2位玩家,就变成了6:8,而后一直没有玩家加入服务器,就造成了2边人数势力不平衡;所以需要一种能在人物活着的时候平衡队伍人数。
一点构思:
1、如果写这个插件可以用时间间隔来判断队伍人数(定时、循环),比如每30秒等,可以设置。
2、判定双方人数不平衡后(相差2人或以上)不管活着死亡(除观察员、正在连接玩家以外)自动平衡。
3、死亡模式可以设置玩家死亡后的复活时间,一般服务器设置为1-5秒,如果可以利用这段时间来平衡队伍可能会更人性化,不会让玩家被平衡的时候觉得太突然,但是估计会很麻烦,呵呵。
希望哪位大大帮忙发个此类插件 或 写个,不胜感激;小弟懂点点源码,但要写还有十分大的一段距离。
期待高手,希望此贴也能造福DT,和需要此插件的服务器管理员们,再次感谢。 顶一下!!!!!!:) 希望有高手关注。 顶一个·· 试试这个插件 感谢zhangsheng大大的关注,听说zhangsheng大大已经转向CSOL了,呵呵,
所以特别感谢。
您提供的插件我已经下载放服务器上测试,有测试结果我即时发出来。 zhangsheng大大,插件起到了平衡的作用。
想再请教几个问题,这个插件里面功能这样解释正确不,如下:/* Copyright ?2008, ConnorMcLeod
Instant AutoTeamBalance is free software;
you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Instant AutoTeamBalance; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include <amxmodx>
#include <cstrike>
#define VERSION "DM 0.4.0"
#define BALANCE_IMMUNITY ADMIN_RCON
#define MAX_PLAYERS 32
enum {
aTerro,
aCt
}
new bool:g_bImmuned
new Float:g_fJoinedTeam = {-1.0, ...}
new g_pcvarCount, g_pcvarImmune, g_pCvarMessage
new g_iCounter
new mp_limitteams, mp_autoteambalance
public plugin_init()
{
register_plugin("AutoTeamBalance", VERSION, "ConnorMcLeod")
g_pcvarCount = register_cvar("atb_death_freq", "50")
g_pcvarImmune = register_cvar("atb_admins_immunity", "1")
g_pCvarMessage = register_cvar("iatb_message", "* 系统已自动平衡两队人数 *")
register_logevent("LogEvent_JoinTeam", 3, "1=joined team")
register_event("DeathMsg", "Event_DeathMsg", "a")
mp_limitteams = get_cvar_pointer("mp_limitteams")
mp_autoteambalance = get_cvar_pointer("mp_autoteambalance")
}
public Event_DeathMsg()
{
new iFreq = get_pcvar_num(g_pcvarCount)
if( !iFreq || !get_pcvar_num(mp_autoteambalance) )
return
if( ++g_iCounter < iFreq )
return
g_iCounter = 0
balance_teams()
}
public LogEvent_JoinTeam()
{
new loguser, name, id
read_logargv(0, loguser, 79)
parse_loguser(loguser, name, 31)
id = get_user_index(name)
g_fJoinedTeam = get_gametime()
}
public client_authorized(id)
{
g_bImmuned = bool:(get_user_flags(id) & BALANCE_IMMUNITY)
}
public client_disconnect(id)
{
g_iCounter = max(0, get_pcvar_num(g_pcvarCount) - 1)
}
balance_teams()
{
new iPlayers, iNum
new aTeams, aNum, id
get_players(iPlayers, iNum, "h")
for(new i; i<iNum; i++)
{
id = iPlayers
switch( cs_get_user_team(id) )
{
case CS_TEAM_T:
{
aTeams++] = id
}
case CS_TEAM_CT:
{
aTeams++] = id
}
}
}
new iCheck
new iTimes = aNum - aNum
if(iTimes > 0)
{
iCheck = aCt
}
else if(iTimes < 0)
{
iCheck = aTerro
}
else
{
return
}
iTimes = abs(iTimes)
// at this place iTimes is the players num difference between teams
if( iTimes < 2 || iTimes <= get_pcvar_num(mp_limitteams) )
{
return
}
iTimes /= 2
new bool:bTransfered,
bool:bAdminsImmune = bool:get_pcvar_num(g_pcvarImmune)
new iLast, iCount
while( iTimes > 0 )
{
iLast = 0
for(new i=0; i <aNum; i++)
{
id = aTeams
if( g_bImmuned && bAdminsImmune )
{
continue
}
if(bTransfered)
{
continue
}
if(g_fJoinedTeam > g_fJoinedTeam)
{
iLast = id
}
}
if(!iLast)
{
return
}
if( iCheck )
{
cs_set_user_team(iLast, CS_TEAM_T)
}
else
{
cs_set_user_team(iLast, CS_TEAM_CT)
}
bTransfered = true
iCount++
iTimes--
}
new szMessage
get_pcvar_string(g_pCvarMessage, szMessage, charsmax(szMessage))
client_print(0, print_center, szMessage)
}g_pcvarImmune = register_cvar("atb_admins_immunity", "1") 这里1表示不平衡管理员权限人员,如果改成0,是不是就表示 管理员权限 也会被平衡?
g_pcvarCount = register_cvar("atb_death_freq", "50") 这里50是不是表示间隔多少时间平衡一次? 谢谢
楼主分享~~~~:)
页:
[1]