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

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

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

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

AntiBlock v1.2 by pic0

, Игроки пробегают через своих в начале раунда.
Статус пользователя wopox3
сообщение 15.5.2014, 0:12
Сообщение #1


Стаж: 13 лет

Сообщений: 333
Благодарностей: 222
Полезность: 902

Исходная тема: http://amxmodx.su/forum/viewtopic.php?f=5&t=2371
Прикрепленный файл  antiblock.sma ( 4,4 килобайт ) Кол-во скачиваний: 74


Antiblock v1.2 by pic .sma
Код:

#include <amxmodx>
#include <fakemeta>

#define TASKID 367280

new bool:g_bSolid[33]
new bool:g_bHasSemiclip[33]
new Float:g_fOrigin[33][3]

new g_Time
new g_Work

new const Float:size[][3] =
{
{0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
{0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
{0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
{0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
{0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}
}

public plugin_init()
{
register_plugin("AntiBlock", "1.2", "pic")

g_Time = register_cvar("antiblock_time", "5.0")

register_forward(FM_PlayerPreThink, "fwdPlayerPreThink")
register_forward(FM_PlayerPostThink, "fwdPlayerPostThink")
register_forward(FM_AddToFullPack, "fwdAddToFullPack_Post", 1)

register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
}

public event_round_start()
{
if (task_exists(TASKID))
remove_task(TASKID)

g_Work = true
set_task(get_pcvar_float(g_Time), "reset_state", TASKID)
}

public reset_state()
{
g_Work = false
checkstuck
}

public checkstuck()
{
static players[32], num, player
get_players(players, num, "ach")
static Float:origin[3]
static Float:mins[3]
static Float:vec[3]
static o,i
for(i=0; i<num; i++)
{
player = players[i]
pev(player, pev_origin, origin)
if (!is_hull_vacant(origin, player))
{
pev(player, pev_mins, mins)
for (o=0; o < sizeof size; ++o)
{
vec[0] = origin[0] - mins[0] * size[o][0]
vec[1] = origin[1] - mins[1] * size[o][1]
vec[2] = origin[2] - mins[2] * size[o][2]
if (is_user_alive(player) && is_hull_vacant(vec, player))
{
engfunc(EngFunc_SetOrigin, player, vec)
o = sizeof size
}
}
}
}
}

public fwdPlayerPreThink(plr)
{
if(!g_Work)
return FMRES_IGNORED

static i, players[32], num, player, last_think
get_players(players, num, "ach")

if(last_think > plr)
{
for(i=0; i<num; i++)
{
player = players[i]
if(is_user_alive(player))
{
g_bSolid[player] = pev(player, pev_solid) == SOLID_SLIDEBOX ? true : false
pev(player, pev_origin, g_fOrigin[player])
}
else
g_bSolid[player] = false
}
}
last_think = plr
if(g_bSolid[plr])
{
for(i=0; i<num; i++)
{
player = players[i]
if(g_bSolid[player] && player != plr && get_user_team(player) == get_user_team(plr))
{
set_pev(player, pev_solid, SOLID_NOT)
g_bHasSemiclip[player] = true
}
}
}
return FMRES_IGNORED
}

public fwdPlayerPostThink(plr)
{
if(!g_Work)
return

static i, players[32], num, player
get_players(players, num, "ach")

for(i=0; i<num; i++)
{
player = players[i]
if(g_bHasSemiclip[player])
{
set_pev(player, pev_solid, SOLID_SLIDEBOX)
g_bHasSemiclip[player] = false
}
}
}

public fwdAddToFullPack_Post(es_handle, e, ent, host, hostflags, player, pset)
{
if(player && g_Work)
{
if(g_bSolid[host] && g_bSolid[ent])
set_es(es_handle, ES_Solid, SOLID_NOT)
}
return FMRES_IGNORED
}

public plugin_end()
{
if(task_exists(TASKID))
remove_task(TASKID)

g_Work = false
}

stock bool:is_hull_vacant(const Float:origin[3],id)
{
static tr
engfunc(EngFunc_TraceHull, origin, origin, 0, pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, tr)
if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
return true

return false
}



С плагином всё в порядке, но я бы хотел его немного изменить.

Подскажите, как правильнее вставить проверку на количество игроков.
Тоесть, не нужно включать антиблок, если игроков допустим меньше 80% от maxplayers?

Отредактировал: wopox3, - 15.5.2014, 0:38
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   Цитировать сообщение
Esecman
сообщение 15.5.2014, 9:03
Сообщение #2
Стаж: 12 лет

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

Код:

new i
new iGet = get_playersnum()
for(i = 0; i <= iGet; ++i) {
if(iGet < значение) return PLUGIN_HANDLED
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 15.5.2014, 9:15
Сообщение #3


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Esecman, фак мой мозг, зачем вам в этом коде переменная i ?


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
6yxoudbdarg
сообщение 15.5.2014, 9:18
Сообщение #4
Стаж: 13 лет

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

Цитата(wopox3 @ 15.5.2014, 1:12) *
Исходная тема: http://amxmodx.su/forum/viewtopic.php?f=5&t=2371
Прикрепленный файл  antiblock.sma ( 4,4 килобайт ) Кол-во скачиваний: 74


Antiblock v1.2 by pic .sma
Код:

#include <amxmodx>
#include <fakemeta>

#define TASKID 367280

new bool:g_bSolid[33]
new bool:g_bHasSemiclip[33]
new Float:g_fOrigin[33][3]

new g_Time
new g_Work

new const Float:size[][3] =
{
{0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},
{0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},
{0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},
{0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},
{0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}
}

public plugin_init()
{
register_plugin("AntiBlock", "1.2", "pic")

g_Time = register_cvar("antiblock_time", "5.0")

register_forward(FM_PlayerPreThink, "fwdPlayerPreThink")
register_forward(FM_PlayerPostThink, "fwdPlayerPostThink")
register_forward(FM_AddToFullPack, "fwdAddToFullPack_Post", 1)

register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
}

public event_round_start()
{
if (task_exists(TASKID))
remove_task(TASKID)

g_Work = true
set_task(get_pcvar_float(g_Time), "reset_state", TASKID)
}

public reset_state()
{
g_Work = false
checkstuck
}

public checkstuck()
{
static players[32], num, player
get_players(players, num, "ach")
static Float:origin[3]
static Float:mins[3]
static Float:vec[3]
static o,i
for(i=0; i<num; i++)
{
player = players[i]
pev(player, pev_origin, origin)
if (!is_hull_vacant(origin, player))
{
pev(player, pev_mins, mins)
for (o=0; o < sizeof size; ++o)
{
vec[0] = origin[0] - mins[0] * size[o][0]
vec[1] = origin[1] - mins[1] * size[o][1]
vec[2] = origin[2] - mins[2] * size[o][2]
if (is_user_alive(player) && is_hull_vacant(vec, player))
{
engfunc(EngFunc_SetOrigin, player, vec)
o = sizeof size
}
}
}
}
}

public fwdPlayerPreThink(plr)
{
if(!g_Work)
return FMRES_IGNORED

static i, players[32], num, player, last_think
get_players(players, num, "ach")

if(last_think > plr)
{
for(i=0; i<num; i++)
{
player = players[i]
if(is_user_alive(player))
{
g_bSolid[player] = pev(player, pev_solid) == SOLID_SLIDEBOX ? true : false
pev(player, pev_origin, g_fOrigin[player])
}
else
g_bSolid[player] = false
}
}
last_think = plr
if(g_bSolid[plr])
{
for(i=0; i<num; i++)
{
player = players[i]
if(g_bSolid[player] && player != plr && get_user_team(player) == get_user_team(plr))
{
set_pev(player, pev_solid, SOLID_NOT)
g_bHasSemiclip[player] = true
}
}
}
return FMRES_IGNORED
}

public fwdPlayerPostThink(plr)
{
if(!g_Work)
return

static i, players[32], num, player
get_players(players, num, "ach")

for(i=0; i<num; i++)
{
player = players[i]
if(g_bHasSemiclip[player])
{
set_pev(player, pev_solid, SOLID_SLIDEBOX)
g_bHasSemiclip[player] = false
}
}
}

public fwdAddToFullPack_Post(es_handle, e, ent, host, hostflags, player, pset)
{
if(player && g_Work)
{
if(g_bSolid[host] && g_bSolid[ent])
set_es(es_handle, ES_Solid, SOLID_NOT)
}
return FMRES_IGNORED
}

public plugin_end()
{
if(task_exists(TASKID))
remove_task(TASKID)

g_Work = false
}

stock bool:is_hull_vacant(const Float:origin[3],id)
{
static tr
engfunc(EngFunc_TraceHull, origin, origin, 0, pev(id, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN, id, tr)
if (!get_tr2(tr, TR_StartSolid) && !get_tr2(tr, TR_AllSolid) && get_tr2(tr, TR_InOpen))
return true

return false
}



С плагином всё в порядке, но я бы хотел его немного изменить.

Подскажите, как правильнее вставить проверку на количество игроков.
Тоесть, не нужно включать антиблок, если игроков допустим меньше 80% от maxplayers?

и нафига? что тебе это даст меньше нагрузку хДДДДДДДД
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Esecman
сообщение 15.5.2014, 9:19
Сообщение #5
Стаж: 12 лет

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

Код:
/* Вычисление %-игроков

* get_playersnum() - 100 %
* x - iProcent

*/

#include <amxmodx>

new iProcent

public plugin_init() {
register_plugin("Get Players Num", "1.0", "Esecman")
iProcent = register_cvar("percent_players", "80")
set_task(1.0, "iFunc", _, _, 0, "b")
}

public iFunc(id) {

new i
new iGet = get_playersnum()
new percent_players = (get_playersnum() * get_pcvar_num(iProcent)) / 100
for(i = 0; i <= iGet; ++i) {
if(iGet < percent_players) return PLUGIN_HANDLED // Stop the plugin
}

return PLUGIN_CONTINUE
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 15.5.2014, 9:21
Сообщение #6


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Esecman, напишите
Код
while(iGet<get_playersnum())
тоже плагин остановит.
Зачем вам тут i? зачем цикл?


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
XyLiGaN
сообщение 15.5.2014, 9:22
Сообщение #7
Стаж: 13 лет
Город: Югорск

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

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

6yxoudbdarg,
при чем тут нагрузка? когда мало народу то плагин не нужен и все ходят спокойно и не толпятся и не подпирают на респе, а когда много народу то плагин актуален... вот зачем ему нужно переделать...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя wopox3
сообщение 9.10.2014, 11:24
Сообщение #8


Стаж: 13 лет

Сообщений: 333
Благодарностей: 222
Полезность: 902

Цитата(XyLiGaN @ 15.5.2014, 10:22) *
6yxoudbdarg,
при чем тут нагрузка? когда мало народу то плагин не нужен и все ходят спокойно и не толпятся и не подпирают на респе, а когда много народу то плагин актуален... вот зачем ему нужно переделать...



Правильно подмечено.
Так же хотелось бы добавить антологичной логики в некоторые плагины, но корректного кода для проверки я не получил. Возможно не там ищу =).
Возмоно есть подобный код в AFK менеджерах?

P.S: sorry за ап)

Отредактировал: wopox3, - 9.10.2014, 11:24
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 9.10.2014, 11:59
Сообщение #9


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

при входе\выходе игрока нужно проверять. Если плагинов много то резонно сделать один который будет выстреливать форвард с числом игроков сейчас на сервере ну и в каждом плагине уже решать много это или мало.


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя wopox3
сообщение 11.10.2014, 15:03
Сообщение #10


Стаж: 13 лет

Сообщений: 333
Благодарностей: 222
Полезность: 902

mazdan, я ни разу не писал форварды. Не могли бы кинуть гайд или что есть, по написанитю и внедрению.

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