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

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

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

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

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Выбор между двумя авто-балансами

, Что же выбрать ?:)
staff2517
сообщение 6.10.2014, 13:52
Сообщение #1
Стаж: 12 лет

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

Всем привет нашел в инете два плагина (autoteambalance)
Подскажите какой из них использовать?
instant_autoteambalance_nocrash
/* AMX Mod X Plugin
*
* © Copyright 2008, ConnorMcLeod
* This file is provided as is (no warranties).
*
*/

#include <amxmodx>
#include <fakemeta>

#define BALANCE_IMMUNITY ADMIN_RCON

#define MAX_PLAYERS 32

#define PEV_PDATA_SAFE 2

#define CENTER_PRINT 4

#define OFFSET_TEAM 114
#define OFFSET_DEFUSE_PLANT 193
#define HAS_DEFUSE_KIT (1<<16)
#define OFFSET_INTERNALMODEL 126

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

public plugin_init()
{
register_plugin("Instant AutoTeamBalance", "0.3.0", "ConnorMcLeod")

g_pcvarEnable = register_cvar("iatb_active", "1")
g_pcvarImmune = register_cvar("iatb_admins_immunity", "1")

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

register_message(get_user_msgid("TextMsg"), "Message_TextMsg")
}

public plugin_cfg()
{
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 Message_TextMsg(MsgId, MsgDest, MsgEnt)
{
if(!get_pcvar_num(g_pcvarEnable))
return PLUGIN_CONTINUE

if(MsgDest != MSG_ALL)
return PLUGIN_CONTINUE

if(get_msg_args() != 2)
return PLUGIN_CONTINUE

if(get_msg_arg_int(1) != CENTER_PRINT)
return PLUGIN_CONTINUE

static szArg2[8]
get_msg_arg_string(2, szArg2, 7)
if(szArg2[1] != 'A' || szArg2[6] != 'T')
return PLUGIN_CONTINUE

switch( balance_teams() )
{
case 1:
{
return PLUGIN_CONTINUE
}
case 2:
{
return PLUGIN_HANDLED
}
default:
{
return PLUGIN_CONTINUE
}
}
return PLUGIN_CONTINUE
}

cs_set_user_team(id, team)
{
if(pev_valid(id) != PEV_PDATA_SAFE)
{
return 0
}

switch(team)
{
case 1:
{
set_pdata_int(id, OFFSET_DEFUSE_PLANT, get_pdata_int(id, OFFSET_DEFUSE_PLANT) & ~HAS_DEFUSE_KIT)
set_pdata_int(id, OFFSET_TEAM, 1)
set_pdata_int(id, OFFSET_INTERNALMODEL, 4)
}
case 2:
{
engclient_cmd(id, "drop", "weapon_c4")
set_pdata_int(id, OFFSET_TEAM, 2)
set_pdata_int(id, OFFSET_INTERNALMODEL, 6)
}
}

dllfunc(DLLFunc_ClientUserInfoChanged, id, engfunc(EngFunc_GetInfoKeyBuffer, id))

return 1
}

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

for(id = 1; id <= g_iMaxPlayers; id++)
{
if(!is_user_connected(id))
{
continue
}

if(is_user_hltv(id))
{
continue
}

if(pev_valid(id) != PEV_PDATA_SAFE)
{
continue
}

switch( get_pdata_int(id, OFFSET_TEAM) )
{
case 1:
{
aTeams[aTerro][aNum[aTerro]++] = id
}
case 2:
{
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 (iCount ? 1 : 0)
}

if( cs_set_user_team(iLast, iCheck ? 1 : 2) )
{
bTransfered[iLast] = true
iCount++
iTimes--
}
}
return 2
}

Второй с вашего форума
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_BAN

#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", "Teams Auto Balanced")

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
}


Отредактировал: staff2517, - 6.10.2014, 13:52
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
XyLiGaN
сообщение 6.10.2014, 14:00
Сообщение #2
Стаж: 13 лет
Город: Югорск

Сообщений: 11668
Благодарностей: 6450
Полезность: 1052

Меценат Меценат

staff2517,
Чувак) Вообще всё мимо)
Ставь эту версию плагина автобаланса, не прогадаешь)
https://c-s.net.ua/forum/ipb.html?s=&sh...st&p=548039
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Nebo
сообщение 6.10.2014, 14:02
Сообщение #3


Стаж: 13 лет
Город: Казань

Сообщений: 3181
Благодарностей: 1015
Полезность: 701

И стандарт норм.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
XyLiGaN
сообщение 6.10.2014, 14:04
Сообщение #4
Стаж: 13 лет
Город: Югорск

Сообщений: 11668
Благодарностей: 6450
Полезность: 1052

Меценат Меценат

Nebo,
А фикшенный-то куда лучше ;)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nebo
сообщение 6.10.2014, 14:14
Сообщение #5


Стаж: 13 лет
Город: Казань

Сообщений: 3181
Благодарностей: 1015
Полезность: 701

XyLiGaN, но...
Цитата
Есть какая-то вероятность, что могут быть кики некоторых игроков с причиной 'Reliable channel overflowed'. Этот момент нуждается в тщательном тестировании.

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
XyLiGaN
сообщение 6.10.2014, 14:16
Сообщение #6
Стаж: 13 лет
Город: Югорск

Сообщений: 11668
Благодарностей: 6450
Полезность: 1052

Меценат Меценат

Nebo,
Вот именно, что
Цитата
Какая-то вероятность
Цитата
нуждается в тщательном тестировании.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nixon
сообщение 6.10.2014, 14:20
Сообщение #7


Стаж: 12 лет

Сообщений: 399
Благодарностей: 192
Полезность: 589

Второй плагин как раз таки тот, который кинул хулиган во 2 посту.
Пользуйся вторым плагином.

Отредактировал: Nixon, - 6.10.2014, 14:21
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
staff2517
сообщение 6.10.2014, 14:37
Сообщение #8
Стаж: 12 лет

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

Цитата(XyLiGaN @ 6.10.2014, 14:00) *
staff2517,
Чувак) Вообще всё мимо)
Ставь эту версию плагина автобаланса, не прогадаешь)
https://c-s.net.ua/forum/ipb.html?s=&sh...st&p=548039

Спасибо.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 6.10.2014, 15:12
Сообщение #9
Стаж: 14 лет
Город: Moscow

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

Цитата(Nixon @ 6.10.2014, 16:20) *
Второй плагин как раз таки тот, который кинул хулиган во 2 посту.

Не-а, не такой.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
XyLiGaN
сообщение 6.10.2014, 15:16
Сообщение #10
Стаж: 13 лет
Город: Югорск

Сообщений: 11668
Благодарностей: 6450
Полезность: 1052

Меценат Меценат

Safety1st,
Ага, они просто пропустили немного
Цитата
/**
* It is modified by Safety1st plugin not the original!
* See one here: https://forums.alliedmods.net/showthread.php?t=79556
*
* Changes are:
* - fixed appearing 'Auto-Team Balance next round' on the screen, thx to ConnorMcLeod.
*/
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nixon
сообщение 6.10.2014, 15:16
Сообщение #11


Стаж: 12 лет

Сообщений: 399
Благодарностей: 192
Полезность: 589

Я имел ввиду второй плагин и этот https://forums.alliedmods.net/showthread.php?t=79556?t=79556
Вроде бы как одинаковые pardon.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: