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

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

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

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

Подправить плагин (Многим пригодится)

, Instant autoteambalance
Статус пользователя specific
сообщение 15.7.2014, 15:46
Сообщение #1
Стаж: 14 лет

Сообщений: 97
Благодарностей: 4
Полезность: 35

Всем привет.
Должгое, многомесячное ожидание когда же всетаки выйдет новый плагин балансировки комманд не принесло результатов. Но с балансировкой комманд нужно хоть что-то делать. В связи с этим пришла в голову мысль подправить уже существующий Instant AutoTeamBalance так, чтоб трансформировались не те игроки, которые последними зашли на сервер, а рандомно выбирался игрок из команды и трансформировался.
Серого вещества на самостоятельную реализацию данной затеи не хватило, поэтому решил прибегнуть к помощи одаренных личностей.
Думаю данный фикс плагина будет востребован среди его пользователей.
Заранее спасибо всем, кто уделил время данной теме :)

Исходник
Код:
/*	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 PLUGIN "Instant AutoTeamBalance"
#define AUTHOR "ConnorMcLeod"
#define VERSION "1.2.0"

#define BALANCE_IMMUNITY ADMIN_RCON

#define MAX_PLAYERS 32

enum {
aTerro,
aCt
}

new bool:g_bImmuned[MAX_PLAYERS+1]

new Float:g_fJoinedTeam[MAX_PLAYERS+1] = {-1.0, ...}

new g_iMaxPlayers
new g_pcvarEnable, g_pcvarImmune, g_pCvarMessage

// true when connected and not a HLTV
new bool:g_bValid[MAX_PLAYERS+1]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

g_pcvarEnable = register_cvar("iatb_active", "1")
g_pcvarImmune = register_cvar("iatb_admins_immunity", "1")
g_pCvarMessage = register_cvar("iatb_message", "Команды автоматически сбалансированы")

register_logevent("LogEvent_JoinTeam", 3, "1=joined team")

register_event("TextMsg", "Auto_Team_Balance_Next_Round", "a", "1=4", "2&#Auto_Team")

g_iMaxPlayers = get_maxplayers()
}

public LogEvent_JoinTeam()
{
new loguser[80], name[32], id
read_logargv(0, loguser, 79)
parse_loguser(loguser, name, 31)
id = get_user_index(name)

g_fJoinedTeam[id] = get_gametime()
}

public client_authorized(id)
{
g_bImmuned[id] = bool:(get_user_flags(id) & BALANCE_IMMUNITY)
}

public client_putinserver(id)
{
g_bValid[id] = bool:!is_user_hltv(id)
}

public client_disconnect(id)
{
g_bValid[id] = false
}

public Auto_Team_Balance_Next_Round()
{
if(!get_pcvar_num(g_pcvarEnable))
return

if( balance_teams() )
{
new szMessage[128]
get_pcvar_string(g_pCvarMessage, szMessage, charsmax(szMessage))
client_print(0, print_center, szMessage)
}
}

cs_set_user_team_custom(id, CsTeams:iTeam)
{
switch(iTeam)
{
case CS_TEAM_T:
{
if( cs_get_user_defuse(id) )
{
cs_set_user_defuse(id, 0)
// set body to 0 ?
}
}
case CS_TEAM_CT:
{
if( user_has_weapon(id, CSW_C4) )
{
engclient_cmd(id, "drop", "weapon_c4")
}
}
}

cs_set_user_team(id, iTeam)

return 1
}

balance_teams()
{
new aTeams[2][MAX_PLAYERS], aNum[2], id

for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!g_bValid[id])
{
continue
}

switch( cs_get_user_team(id) )
{
case CS_TEAM_T:
{
aTeams[aTerro][aNum[aTerro]++] = id
}
case CS_TEAM_CT:
{
aTeams[aCt][aNum[aCt]++] = id
}
default:
{
continue
}
}
}

new iCheck
new iTimes = aNum[aCt] - aNum[aTerro]

if(iTimes > 0)
{
iCheck = aCt
}
else if(iTimes < 0)
{
iCheck = aTerro
}
else
{
return 0
}

iTimes = abs(iTimes/2)

new bool:bTransfered[MAX_PLAYERS+1],
bool:bAdminsImmune = bool:get_pcvar_num(g_pcvarImmune)

new iLast, iCount
while( iTimes > 0 )
{
iLast = 0
for(new i=0; i <aNum[iCheck]; i++)
{
id = aTeams[iCheck][i]
if( g_bImmuned[id] && bAdminsImmune )
{
continue
}
if(bTransfered[id])
{
continue
}
if(g_fJoinedTeam[id] > g_fJoinedTeam[iLast])
{
iLast = id
}
}

if(!iLast)
{
return 0
}

cs_set_user_team_custom(iLast, iCheck ? CS_TEAM_T : CS_TEAM_CT)

bTransfered[iLast] = true
iCount++
iTimes--
}
return 1
}

Прикрепленные файлы:
Прикрепленный файл  instant_autoteambalance.sma ( 3,85 килобайт ) Кол-во скачиваний: 4
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя 9art
сообщение 15.7.2014, 15:49
Сообщение #2


Стаж: 12 лет

Сообщений: 991
Благодарностей: 534
Полезность: 843

Цитата
выбирался игрок из команды и трансформировался

В кого?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 15.7.2014, 15:51
Сообщение #3


Стаж: 12 лет

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

specific, чем PTB не устраивает?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
andreiwiz
сообщение 15.7.2014, 15:51
Сообщение #4
Стаж: 11 лет

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

csdm_autoteambalance, чем вам не подходит?) выбирает рандомно)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя specific
сообщение 15.7.2014, 16:39
Сообщение #5
Стаж: 14 лет

Сообщений: 97
Благодарностей: 4
Полезность: 35

Цитата(9art @ 15.7.2014, 16:49) *
В кого?

Другими словами: Игрок из команды в которой большьшинство перемещался в команду в которой меньшенство с целью сравнять количество игроков в командах (auteteambalance 1). Да и вы вроде не первый день на форуме, думаю понимаете функцию плагина (и даже знаете его).

Цитата(Bloo @ 15.7.2014, 16:51) *
specific, чем PTB не устраивает?

Отказался от него. Не устраивает его "интеллектуальная" балансировка.

Цитата(andreiwiz @ 15.7.2014, 16:51) *
csdm_autoteambalance, чем вам не подходит?) выбирает рандомно)

А он разве подойдет для паблик мода?

Отредактировал: specific, - 15.7.2014, 16:42
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
andreiwiz
сообщение 15.7.2014, 16:42
Сообщение #6
Стаж: 11 лет

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

specific,
ну попробуй я думаю подойдёт, только если изменять будешь, то наверное надо будет удалить строчку Код:
#include < csdm >
либо закинуть инклуд в папку:)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя specific
сообщение 15.7.2014, 16:44
Сообщение #7
Стаж: 14 лет

Сообщений: 97
Благодарностей: 4
Полезность: 35

andreiwiz,
Спасибо, попробую конечно, однако меня еще смущает то, что он проверяет количество игроков после каждого убийства, а не как в других плагинах в конце раунда. Не создаст ли это лишней нагрузки на сервер?
Судя по тому, что много советов и никто не решился сделать то, что указано в теле темы - это сложно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
andreiwiz
сообщение 15.7.2014, 16:45
Сообщение #8
Стаж: 11 лет

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

andreiwiz,
вот держи архив, уже скомпилированный.
PS. на счёт нагрузки незнаю, у меня стоит на csdm, всё норм, единственное, некоторые не обращают внимания что их перекинуло, и стреляют по своим как бе:) а хотя оповещение есть)


Отредактировал: andreiwiz, - 15.7.2014, 16:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 15.7.2014, 16:47
Сообщение #9


Стаж: 12 лет

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

specific, как раз такие его интеллектуальная балансировка правильная в отличии от балансировки тупо по кол-ву игроков и рандомом. Никакого баланса по сути нет. Это конечно вам решать но я никогда не понимал прикола когда в одной команде играют все сильные игроки и в другой нубики и их рвут без зазрения совести всю дорогу...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя nsgenn
сообщение 15.7.2014, 16:47
Сообщение #10


Стаж: 13 лет

Сообщений: 885
Благодарностей: 561
Полезность: 667

лучше сравнивать именно скилы и балансировать мощность оружия
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя specific
сообщение 15.7.2014, 16:58
Сообщение #11
Стаж: 14 лет

Сообщений: 97
Благодарностей: 4
Полезность: 35

Bloo,
Я пользовался PTB почти год, менял его конфиг всеми мыслимыми и не мыслимыми вариантами, в итоге получалось примерно так:
Допустим в Команде Т есть игрок, у которого высокий скил, и он решает. Плагин видит его высокий скил, и то что КТ всасывают раунд за раундом.
В итоге плагин тупо перекидывает этого игрока за КТ, и получается та же самая ситауация, только наоборот.
Вторая причина моего отказа это регулярные жалобы игроков на то, что плагин портит баланс (парадокс, но это так - сами игроки жаловались). В итоге я не осилил настройку этого плагина так, чтоб было всё ок, и создал тему, где просил помощи в его настройке, но и там мне сказали что лучше не мучаться, потому что этот плагин Г :)

nsgenn,
Слышал о таком плагине, но мне кажется что получится ситуация равная той, о которой я написал выше. Да и не каждый игрок будет доволен тому, что его оружие стало слабее тупо из-за того, что он опытный игрок)

andreiwiz,
Спасибо. Затестирую - отпишу результат.

Но тема по прежнему актуальна.

Отредактировал: specific, - 15.7.2014, 16:57
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
andreiwiz
сообщение 15.7.2014, 17:07
Сообщение #12
Стаж: 11 лет

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

specific,
вот это в server.cfg поставь mp_tkpunish 0 :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 15.7.2014, 17:22
Сообщение #13
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(specific @ 15.7.2014, 18:58) *
В итоге я не осилил настройку этого плагина так, чтоб было всё ок

Вы, наверное, 1-й, кто признался.
Сам мучался с настройкой + пришлось частично плагин перепилить. Сейчас в принципе всем доволен.

Цитата(specific @ 15.7.2014, 18:58) *
и создал тему, где просил помощи в его настройке, но и там мне сказали что лучше не мучаться, потому что этот плагин Г :)

Я вот даже его аналогов не знаю...

Цитата(specific @ 15.7.2014, 18:58) *
nsgenn,
Слышал о таком плагине, но мне кажется что получится ситуация равная той, о которой я написал выше.

Пробовал у себя такое на первых порах. Никто из игроков и админов не одобрил, а изменения игрового процесса такого рода опытные игроки палят на 1-2.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 15.7.2014, 17:43
Сообщение #14


Стаж: 12 лет

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

specific, не знаю, вам, не вам но конфиг уже вроде кидал этот. Все прекрасно балансирует, как кол-во игроков, так и скилл команд. Первое время конечно были возмущения от игроков типа "че меня кидает" и т.д., но довольно быстро все привыкли и оценили реальную пользу от плагина.
PTB
// Чтобы PTB работал должным образом нужно поставить 0
mp_autoteambalance 0
mp_limitteams 1

// Показ информациооных сообщений о перемещении
// 0 - выключено
// 1 - показывать в чате
// 2 - показывать hud сообщения
// 3 - будет показаны все сообщения
ptb_saychat 1

// Перемещение 1 - оригинальное, 2 или 3 - агрессивное перемещение
ptb_transfer_type 1

// Включение/выключение ( 1 : 0 ) иммунитета админа от перемещений
ptb_switch_immunity 0

// Включение/выключение ( 1 : 0 ) иммунитета админа от ограничении команды
ptb_limitjoin_immunity 0

// Здесь вы выбираете кокой флаг должин быть у Админа против перемещения
ptb_immunity_level ""

// Здесь вы выбираете какой должен быть у Админа флаг для доступа к настройкам PTB
ptb_access_level "g"

// Включить/выключить (1 :0) показываний перемещений HLSW в чате
ptb_show_in_hlsw 1


// team selection control (выбор управление)
amx_ptb limitjoin off // WTJ ограничение
amx_ptb limitafter 0 // раунда после которого начинается ограничение
amx_ptb limitmin 0 // минимум игроков на карта для ограничение выбора команды
amx_ptb maxsize 16 // Максимальный размер команды
amx_ptb maxdiff 2 // Максимальная разница игроков
amx_ptb autorounds 3 // Количество раундов выбирается игроками
amx_ptb wtjauto 3 // Скока попыток до включения автовыбора команды
amx_ptb wtjkick 0 // После нескольких попыток выбора команды кикать
amx_ptb kick off // Вкл/выкл кик
amx_ptb savewtj on // Вкл/выкл сохранение в логах

// team balancing actions ( балансирование )
amx_ptb switch on // Вкл/выкл перемещение игроков
amx_ptb switchafter 3 // после скольки раундов начнётся перемещение
amx_ptb switchmin 5 // скока игроков должно для смены команды
amx_ptb switchfreq 2 // замены могут быть каждые ( раундов )
amx_ptb playerfreq 10 // игрок может быть перемещен каждые ( раундов )
amx_ptb forceswitch 0 // После скольки попыток принудительная смена команды
amx_ptb deadonly off // вкл/выкл перемещение только мертвых

// messages (good to have on when debugging if you use statsx dont have them on) - ( сообщения )
amx_ptb tellwtj off // Сообщения о WTJ
amx_ptb announce off // Объявления
amx_ptb sayok off // ^"OK^" сообщения
amx_ptb typesay off // HUD сообщения


//team strength limits ( ограничение )
amx_ptb maxstreak 3 // Максимальное количество побед подряд
amx_ptb maxscore 3 // Максимальная разница в очках
amx_ptb minrating 1.5 // Минимальный рейтинг
amx_ptb maxrating 2.0 // Максимальный рейтинг
amx_ptb superrating 3.0 // Сверхвысокий рейтинг
amx_ptb maxincidents 50 // Максимум ошибок игрока перед понижением рейтинга
amx_ptb scaledown 2 // Коэффициент понижения рейтинга

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя specific
сообщение 15.7.2014, 17:51
Сообщение #15
Стаж: 14 лет

Сообщений: 97
Благодарностей: 4
Полезность: 35

Safety1st,
А на ваш конфиг (исходник) посмотреть можно, или это конфеденциальная информация? ))
Bloo,
Спасибо, буду эксперементировать.

Отредактировал: specific, - 15.7.2014, 17:52
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 15.7.2014, 17:52
Сообщение #16
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Юзать чужие конфиги PTB - это очень глупо.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 15.7.2014, 17:57
Сообщение #17


Стаж: 12 лет

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

Safety1st, ну мало ли, а вдруг) По сути паблик он и в Африке паблик)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя specific
сообщение 15.7.2014, 18:01
Сообщение #18
Стаж: 14 лет

Сообщений: 97
Благодарностей: 4
Полезность: 35

Safety1st,
В первую очередь для ознакомления и понимания где я допускал ошибки. Не думаю что это глупо.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 15.7.2014, 18:20
Сообщение #19
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

В первую очередь такие сервера должны совпадать числом слотов ;)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя nsgenn
сообщение 15.7.2014, 22:05
Сообщение #20


Стаж: 13 лет

Сообщений: 885
Благодарностей: 561
Полезность: 667

ну а как насчет без ослабления у сильных, но с усилением для слабых?
гранату можно ослабить - ее действие не заметно.
уменьшить действие флеша
выдавать бронь - ну это уже по желанию
можно еще поиграться с ценовой политикой.
мне кажется что именно баланс скиллов - очень перспективно
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: