Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

2 страниц V   1 2

Изменить fakefull_original

, Помогите изменить
Статус пользователя CH0CAPIC
сообщение 13.9.2014, 13:11
Сообщение #1


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Здравствуйте ! Нужно изменить плагин fakefull_original, который кикнет ботов, когда сервер полон. К примеру: когда 29 человек - первого бота, 30 человек - второго бота, 31 человек - третьего, а также, если кол-во игроков начнёт уменьшаться (в обратном порядке 31,30.29), то мог бы завести обратно бота... Заранее благодарен.

Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <fun>

new const Plugin[] = "FakeFull Original"
new const Version[] = "1.7.6"
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]
new pDelay, pAuto, pPlayers

public plugin_init()
{
register_plugin(Plugin,Version,Author)
pAuto = register_cvar("ff_automode","1")
pPlayers = register_cvar("ff_players","3")
pDelay = 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 plugin_natives()
{
set_module_filter("module_filter")
set_native_filter("native_filter")
}

public module_filter(const module[])
{
if (!cstrike_running() && equali(module, "cstrike")) {
return PLUGIN_HANDLED
}

return PLUGIN_CONTINUE
}

public native_filter(const name[], index, trap)
{
if (!trap) return PLUGIN_HANDLED

return PLUGIN_CONTINUE
}

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_pcvar_float(pDelay)
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_pcvar_float(pDelay)
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)
{
//Don't want anyone going invisible on us
set_pev(id, pev_rendermode, kRenderNormal)

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 = engfunc(EngFunc_CreateFakeClient, BotName)

if (Bot > 0) {
//Supposed to prevent crashes?
dllfunc(MetaFunc_CallGameEntity, "player", Bot)
set_pev(Bot, pev_flags, FL_FAKECLIENT)

//Make Sure they have no model
set_pev(Bot, pev_model, "")
set_pev(Bot, pev_viewmodel2, "")
set_pev(Bot, pev_modelindex, 0)

//Make them invisible for good measure
set_pev(Bot, pev_renderfx, kRenderFxNone)
set_pev(Bot, pev_rendermode, kRenderTransAlpha)
set_pev(Bot, pev_renderamt, 0.0)

//Set the team if we need to for this mod
set_team(Bot)

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))
is_user_ffbot[id] = false
botCount--
return
}
}
}

public doneChanging()
{
changingBots = false
}

public ServerStatus()
{
if ( !get_pcvar_num(pAuto) ) return
if ( checkingStatus || changingBots ) return

checkingStatus = true
new rnd

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

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

//Set the team if we need to for this mod
set_team(id)

if (get_user_team(id) > 0) {
server_cmd("kick #%d",get_user_userid(id))
is_user_ffbot[id] = false
botCount--
}
}
}

new pnum = get_playersnum(1)
new maxplayers = get_maxplayers()
new ff_players = get_pcvar_num(pPlayers)
new Float:botDelay = get_pcvar_float(pDelay)

if (ff_players > maxplayers - 2) {
ff_players = maxplayers - 2
set_pcvar_num(pPlayers, 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 set_team(BotID)
{
if (cstrike_running()) {
cs_set_user_team(BotID, CS_TEAM_UNASSIGNED)
}
}

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)
}
}


Отредактировал: CH0CAPIC, - 13.9.2014, 21:58
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Bloo
сообщение 13.9.2014, 13:19
Сообщение #2


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

CH0CAPIC, он как бы уже это умеет
Код
ff_automode 1 - Добавлять ботов автоматически
ff_players 31 - кол-во ботов
ff_delay 1 - Сколько убирать/присоединять ботов, ктогда настоящий игрок присоединяется/отключается.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 13.9.2014, 13:25
Сообщение #3


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Цитата(Bloo @ 13.9.2014, 12:19) *
CH0CAPIC, он как бы уже это умеет
Код
ff_automode 1 - Добавлять ботов автоматически
ff_players 31 - кол-во ботов
ff_delay 1 - Сколько убирать/присоединять ботов, ктогда настоящий игрок присоединяется/отключается.

Не думаю, ff_players это кол-во ботов, которое подсоединяется к серверу (у меня 3). Да и дело в том, что плагин даже при пустом сервере кикает ботов, когда подсоединяется игрок.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 13.9.2014, 13:45
Сообщение #4


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

CH0CAPIC, Все понял как ты хочешь. Такого в стандарте не добьешься.
Если поставить как я написал выше то сервер будет всегда 31/32 (если конечно его реальные игроки полностью не забьют), стоит у тебя 31 бот, подключился 1 игрок, кикнулся 1 бот, подключился еще один, кикнулся еще один, вышел 1 игрок, добавился 1 бот.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 13.9.2014, 13:53
Сообщение #5


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Цитата(Bloo @ 13.9.2014, 12:45) *
CH0CAPIC, Все понял как ты хочешь. Такого в стандарте не добьешься.
Если поставить как я написал выше то сервер будет всегда 31/32 (если конечно его реальные игроки полностью не забьют), стоит у тебя 31 бот, подключился 1 игрок, кикнулся 1 бот, подключился еще один, кикнулся еще один, вышел 1 игрок, добавился 1 бот.

Если бы за это не удаляли сервера из gametracker-а...)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 15.9.2014, 18:42
Сообщение #6


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Может кто-нибудь помочь?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя zippel
сообщение 15.9.2014, 18:47
Сообщение #7


Стаж: 17 лет

Сообщений: 918
Благодарностей: 105
Полезность: 1

Юзай под ботов, там все это существует еще с 90х годов..
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 17.9.2014, 15:49
Сообщение #8


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

У меня нет всех .pwf файлов для моих карт. Мне нужно отредактировать именно этот плагин.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 17.9.2014, 16:27
Сообщение #9
Стаж: 11 лет

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Цитата(zippel @ 15.9.2014, 18:47) *
Юзай под ботов, там все это существует еще с 90х годов..

Только один бот жрет процессор за 10 игроков
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 20.9.2014, 8:36
Сообщение #10


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Может кто-нибудь помочь?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 24.9.2014, 14:25
Сообщение #11


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Ребят, есть тут кто? Срочно нужна помощь по этому плагину...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 24.9.2014, 14:28
Сообщение #12


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Разве такая функция в плагине не реализована?


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 24.9.2014, 14:30
Сообщение #13


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Цитата(Fred Perry @ 24.9.2014, 13:28) *
Разве такая функция в плагине не реализована?

Цитата(CH0CAPIC @ 13.9.2014, 12:25) *
Да и дело в том, что плагин даже при пустом сервере кикает ботов, когда подсоединяется игрок.

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 24.9.2014, 14:30
Сообщение #14


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Fred Perry, ему нужно что бы на сервере было всего 3-4 бота, и удалялись они только когда сервер забивается до 31 игрока и по одному.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя soroka-beloboka
сообщение 24.9.2014, 15:42
Сообщение #15
Стаж: 14 лет

Сообщений: 257
Благодарностей: 47
Полезность: 32

помогу с одним ботом

Код:

#include <amxmodx>
#include <cstrike>
#include <fakemeta>

#define PLUGIN "bot"
#define VERSION "1.0"
#define AUTHOR "soroka"

new pl

public plugin_init() {
createBot()
register_plugin(PLUGIN, VERSION, AUTHOR)
pl = get_playersnum(1)
}

public client_connect(id) if(pl >= 31) server_cmd("kick HLTV")

public createBot() {

new Bot = engfunc(EngFunc_CreateFakeClient, "HLTV")
dllfunc(MetaFunc_CallGameEntity, "player", Bot)
set_pev(Bot, pev_flags, FL_FAKECLIENT)
set_pev(Bot, pev_model, "")
set_pev(Bot, pev_viewmodel2, "")
set_pev(Bot, pev_modelindex, 0)
set_pev(Bot, pev_renderfx, kRenderFxNone)
set_pev(Bot, pev_rendermode, kRenderTransAlpha)
set_pev(Bot, pev_renderamt, 0.0)
cs_set_user_team(Bot,CS_TEAM_SPECTATOR)

}



дальше сам

Отредактировал: soroka-beloboka, - 24.9.2014, 15:43
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 24.9.2014, 16:59
Сообщение #16


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Цитата(soroka-beloboka @ 24.9.2014, 14:42) *
помогу с одним ботом

Код:

#include <amxmodx>
#include <cstrike>
#include <fakemeta>

#define PLUGIN "bot"
#define VERSION "1.0"
#define AUTHOR "soroka"

new pl

public plugin_init() {
createBot()
register_plugin(PLUGIN, VERSION, AUTHOR)
pl = get_playersnum(1)
}

public client_connect(id) if(pl >= 31) server_cmd("kick HLTV")

public createBot() {

new Bot = engfunc(EngFunc_CreateFakeClient, "HLTV")
dllfunc(MetaFunc_CallGameEntity, "player", Bot)
set_pev(Bot, pev_flags, FL_FAKECLIENT)
set_pev(Bot, pev_model, "")
set_pev(Bot, pev_viewmodel2, "")
set_pev(Bot, pev_modelindex, 0)
set_pev(Bot, pev_renderfx, kRenderFxNone)
set_pev(Bot, pev_rendermode, kRenderTransAlpha)
set_pev(Bot, pev_renderamt, 0.0)
cs_set_user_team(Bot,CS_TEAM_SPECTATOR)

}



дальше сам

Не работает sad.gif
Может быть изменить в оригинале эти строчки? Ну, где-то указать Код:
if(pl >= 31)
здесь:

Код:
public ServerStatus()
{
if ( !get_pcvar_num(pAuto) ) return
if ( checkingStatus || changingBots ) return

checkingStatus = true
new rnd

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

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

//Set the team if we need to for this mod
set_team(id)

if (get_user_team(id) > 0) {
server_cmd("kick #%d",get_user_userid(id))
is_user_ffbot[id] = false
botCount--
}
}
}

new pnum = get_playersnum(1)
new maxplayers = get_maxplayers()
new ff_players = get_pcvar_num(pPlayers)
new Float:botDelay = get_pcvar_float(pDelay)

if (ff_players > maxplayers - 2) {
ff_players = maxplayers - 2
set_pcvar_num(pPlayers, 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
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fred Perry
сообщение 24.9.2014, 17:31
Сообщение #17


Иконка группы

Стаж: 16 лет

Сообщений: 6594
Благодарностей: 2370
Полезность: 813

Цитата(Bloo @ 24.9.2014, 14:30) *
Fred Perry, ему нужно что бы на сервере было всего 3-4 бота, и удалялись они только когда сервер забивается до 31 игрока и по одному.

Надо у плагине сделать проверку, чтобы бота выкидовало если онлайн > 27
Аналогично и добавлять, если онлайн меньше 31


Гнилой фашистской нечисти
Загоним пулю в лоб,
Отродью человечества
Сколотим крепкий гроб!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 24.9.2014, 17:33
Сообщение #18


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Цитата(Fred Perry @ 24.9.2014, 16:31) *
Надо у плагине сделать проверку, чтобы бота выкидовало если онлайн > 27
Аналогично и добавлять, если онлайн меньше 31

С удовольствием бы сделал это, но условия ff_players и pnum связаны между собой, что собственно и мешает мне вставить правильно проверку.

Отредактировал: CH0CAPIC, - 24.9.2014, 17:36
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 24.9.2014, 18:49
Сообщение #19


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

Цитата(CH0CAPIC @ 24.9.2014, 18:33) *
С удовольствием бы сделал это, но условия ff_players и pnum связаны между собой, что собственно и мешает мне вставить правильно проверку.



Если кто-нибудь возмётся за этот плагин, то он пригодится многим.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 26.9.2014, 17:53
Сообщение #20


Стаж: 12 лет

Сообщений: 388
Благодарностей: 19
Полезность: < 0

Мне лишь бы парвильно подставить проверку в этот плагин и убрать связь с ff_players и pNum.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: