搜索
查看: 1622|回复: 1

哪位看得懂代码的,看一下这个插件的SMA

[复制链接]
发表于 2006-8-1 11:32:37 | 显示全部楼层 |阅读模式 来自 福建福州
这个是服务器人满插件,刚好我需要从浩方房间转IP到公网的服务器,浩方那边可以显示人满,但不知能不能修改下面的参数来修改显示的人数上限。(上限是32人,因为插件是虚拟人数的,所以想调到76人,这样也好看一点,不知哪们兄弟会修改)

#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <fakemeta_stocks>
#include <fun>

new const Plugin[] = "FakeFull Original"
new const Version[] = "1.7.4"
new const Author[] = "JTP10181/Freecode/AssKicR"

#define MAX_NAMES 256

new bool:is_user_ffbot[33]
new bool:checkingStatus = false
new bool:changingBots = false
new botCount = 0, namesread = 0
new namesToUse[MAX_NAMES][33]

public plugin_init()
{
register_plugin(Plugin,Version,Author)
register_cvar("ff_automode","0")
register_cvar("ff_players","2")
register_cvar("ff_delay","1")
register_concmd("amx_addfake","botadd",ADMIN_BAN,"<# | @FILL> - add this many bots")
register_concmd("amx_removefake","botremove",ADMIN_BAN,"<# | @ALL> - remove this many bots")
set_task(10.0,"ServerStatus",0,_,_,"b")
ReadNames()

//Setup jtp10181 CVAR
new cvarString[256], shortName[16]
copy(shortName,15,"ff")

register_cvar("jtp10181","",FCVAR_SERVER|FCVAR_SPONLY)
get_cvar_string("jtp10181",cvarString,255)

if (strlen(cvarString) == 0) {
formatex(cvarString,255,shortName)
set_cvar_string("jtp10181",cvarString)
}
else if (contain(cvarString,shortName) == -1) {
format(cvarString,255,"%s,%s",cvarString, shortName)
set_cvar_string("jtp10181",cvarString)
}
}

public botadd(id,level,cid)
{
if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED

new arg[10], botNum

if (read_argc() == 1) botNum = 1
else {
read_argv(1,arg,9)
if (equali(arg,"@FILL")) botNum = get_maxplayers() - get_playersnum(1)
else botNum = str_to_num(arg)
}

if (botNum <=0 || botNum > get_maxplayers() - get_playersnum(1)) {
console_print(id,"[AMXX] Invalid number of bots to add")
return PLUGIN_HANDLED
}

new Float:botDelay = get_cvar_float("ff_delay")
console_print(id,"[AMXX] Adding %d bots with %.1f second delay for each",botNum,botDelay)
set_task(botDelay,"createBot",0,_,_,"a",botNum)
set_task(botDelay * (botNum + 1),"doneChanging")
changingBots = true

return PLUGIN_HANDLED
}

public botremove(id,level,cid)
{
if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED

new arg[10], botNum

if (read_argc() == 1) botNum = 1
else {
read_argv(1,arg,9)
if (equali(arg,"@ALL")) botNum = botCount
else botNum = str_to_num(arg)
}

if (botNum <=0 || botNum > botCount) {
console_print(id,"[AMXX] Invalid number of bots to remove")
return PLUGIN_HANDLED
}

new Float:botDelay = get_cvar_float("ff_delay")
console_print(id,"[AMXX] Removing %d bots with %.1f second delay for each",botNum,botDelay)
set_task(botDelay,"removeBot",0,_,_,"a",botNum)
set_task(botDelay * (botNum + 1),"doneChanging")
changingBots = true

return PLUGIN_HANDLED
}

public client_putinserver(id)
{
is_user_ffbot[id] = false
ServerStatus()
}

public client_disconnect(id)
{
is_user_ffbot[id] = false
ServerStatus()
}

public createBot()
{
new bool:UseAnotherName
new BotName[33], UserNames[33][33]
new name_rand = random_num(0,namesread - 1)
new endLoop = name_rand - 1
if (endLoop < 0) endLoop = namesread - 1

//Save all the usernames so we dont have to keep getting them all
for (new x = 1; x <= 32; x++) {
if (!is_user_connected(x)) continue
get_user_name(x,UserNames[x],32)
}

do {
UseAnotherName = false
copy(BotName,32,namesToUse[name_rand])

for (new id = 1; id <= 32; id++) {

if (!is_user_connected(id)) continue

if (equali(BotName,UserNames[id])) {
UseAnotherName = true

if (name_rand == endLoop) {
UseAnotherName = false
log_amx("ERROR: Ran out of names to use, please add more to botnames.ini")
}

name_rand++
if (name_rand > namesread - 1) {
name_rand = 0
}
break
}
}
} while(UseAnotherName)

new Bot = EF_CreateFakeClient(BotName)

if (Bot > 0) {
DF_MetaFunc_CallGameEntity("player", Bot)
entity_set_int(Bot, EV_INT_flags, FL_FAKECLIENT)
is_user_ffbot[Bot] = true
botCount++
}
}

public removeBot()
{
for(new id = 1; id <= 32; id++) {
if (is_user_ffbot[id]) {
server_cmd("kick #%d",get_user_userid(id))
botCount--
return
}
}
}

public doneChanging()
{
changingBots = false
}

public ServerStatus()
{
if ( !get_cvar_num("ff_automode") ) return
if ( checkingStatus || changingBots ) return

checkingStatus = true

if (botCount > 0) {
for (new id = 1; id <= 32; id++) {

if (!is_user_connected(id)) continue
if (!is_user_ffbot[id]) continue
new rnd = random_num(1,100)
if (rnd <= 10) {
set_user_frags(id,get_user_frags(id) + 1)
}

if (get_user_team(id) > 0) {
server_cmd("kick #%d",get_user_userid(id))
botCount--
}
}
}

new pnum = get_playersnum(1)
new maxplayers = get_maxplayers()
new ff_players = get_cvar_num("ff_players")
new Float:botDelay = get_cvar_float("ff_delay")

if (ff_players > maxplayers - 2) {
ff_players = maxplayers - 2
set_cvar_num("ff_players",ff_players)
}

if (botDelay <= 0.0 ) {
log_amx("ERROR: Please set ff_delay to a number higher than 0")
}

else if (ff_players > pnum) {
new addnum = ff_players - pnum
set_task(botDelay,"createBot",0,_,_,"a",addnum)
set_task(botDelay * (addnum + 1),"doneChanging")
changingBots = true
}

else if (ff_players < pnum) {
new removenum = pnum - ff_players
removenum = min(removenum, botCount)

if (removenum > 0) {
set_task(botDelay,"removeBot",0,_,_,"a",removenum)
set_task(botDelay * (removenum + 1),"doneChanging")
changingBots = true
}
}

checkingStatus = false
}


public ReadNames() {

new botnames_file[128]
get_configsdir(botnames_file, 63)
format(botnames_file,127,"%s/botnames.txt",botnames_file)

new botnames = fopen(botnames_file,"r")

if (botnames) {
new data[35]

while(!feof(botnames)) {

if (namesread >= MAX_NAMES) {
log_amx("MAX_NAMES exceeded, not all fake client names were able to load")
break
}

fgets(botnames, data, 34)
trim(data)

new len = strlen(data)
if (len <= 0) return
if (data[len]-1 == '^n') data[--len] = 0

if (equal(data,"") || equal(data,"#",1)) continue

copy(namesToUse[namesread],32,data)
namesread++
}

fclose(botnames)
}
else {
new failmsg[128]
formatex(failmsg,128,"Unable to read file ^"%s^", it is required to load bot names from", botnames_file)
log_amx(failmsg)
set_fail_state(failmsg)
}
}
发表于 2006-8-7 18:20:42 | 显示全部楼层 来自 新疆乌鲁木齐

回复: 哪位看得懂代码的,看一下这个插件的SMA

这个。。。真正的原码哎``````
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表