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

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

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

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

История благодарностей участнику Fintok ::: Спасибо сказали: 294
Дата поста: В теме: За сообщение: Спасибо сказали:
23.8.2015, 20:05 Yet Another Voteban
Finalls, пробуй
[attachment=35367:yet_anot...v1.52_m2.zip]
Finalls
23.8.2015, 15:55 Yet Another Voteban
Finalls, нужно было вставлять перед скобкой } на 612 строке
Finalls
23.8.2015, 0:37 Set_user_health
soneekk, флаг b в функции get_players получает индекс только мертвых игроков.
Fred Perry, можно, так как функция get_players изменяет им значение.
Fred Perry, soneekk
22.8.2015, 18:12 SameID
floricus, соль не защищает от одинаковых authid на сервере.
Если злоумышленник будет знать реальный authid жертвы, то он сможет его подменить и в итоге получится дубль.

KPOCT, ничего страшного, попробуй тогда такой вариант.
Насчет BanIP fakes, не знаю, не видел его.

Код:
#include <amxmodx>

#define PLUGIN "Anti Double AuthID"
#define VERSION "0.2"
#define AUTHOR "Fintok!"

#define MAX_PLAYERS 32

new bool:g_bIsPlayer[MAX_PLAYERS + 1]
new g_szAuthIDs[MAX_PLAYERS + 1][35]
new Trie:g_tAuthIDs

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

g_tAuthIDs = TrieCreate()
}

public client_putinserver(id)
{
if(!(g_bIsPlayer[id] = bool:(!is_user_bot(id) && !is_user_hltv(id))))
return

get_user_authid(id, g_szAuthIDs[id], charsmax(g_szAuthIDs[]))

if(!is_valid_authid(g_szAuthIDs[id]))
return

if(!TrieKeyExists(g_tAuthIDs, g_szAuthIDs[id]))
TrieSetCell(g_tAuthIDs, g_szAuthIDs[id], id)
else
server_cmd("kick #%i ^"На сервере уже есть игрок с этим SteamID^"", get_user_userid(id))
}

public client_disconnect(id)
{
if(!g_bIsPlayer[id])
return

static iUserId
TrieGetCell(g_tAuthIDs, g_szAuthIDs[id], iUserId)

if(iUserId == id)
TrieDeleteKey(g_tAuthIDs, g_szAuthIDs[id])

g_szAuthIDs[id][0] = '^0'
}

public plugin_end()
TrieDestroy(g_tAuthIDs)

stock is_valid_authid(const szAuthID[])
{
static const szAuthIDs[][] = { "STEAM_ID_LAN", "STEAM_ID_PENDING", "VALVE_ID_LAN", "VALVE_ID_PENDING", "STEAM_666:88:666" }

for(new i = 0; i <= charsmax(szAuthIDs); i++)
{
if(equali(szAuthID, szAuthIDs[i]))
return false
}
return true
}
Puwok, Solo, TarikYuzkiv
7.8.2015, 0:16 Плагин: Самый умный
Bloo, там все гораздо проще, парсинг текста из файла осуществяется в переменную размером всего 64 символа.
Bloo
1.8.2015, 17:38 Новое форматирование строки
kolobok1, не работает, потому что по стандарту в меню всего 7 пунктов, а пункты 8 - назад, 9 - дальше, 0 - выход.
Так что надо делить на 7, а не на 8. А в данном случае нужно делить на 6, так как добавляется сразу 2 пункта, Имя игрока и Время

Замени в последнем коде который предложил voed
Код:
if((i+1 % 8) == 0)
--->
Код:
if(!((i+1) % 6))
Lena1978, voed
1.8.2015, 15:37 помогите удалить функцию с плагина
bbuzzy, замени в коде

Код:

id = (i + 1);
switch(_:cs_get_user_team(id))
--->
Код:
id = (i + 1);

if(get_user_flags(id) & ADMIN_IMMUNITY)
continue;

switch(_:cs_get_user_team(id))
bbuzzy
1.8.2015, 11:57 помогите удалить функцию с плагина
bbuzzy, пробуй
Cкрытый текст
Код:
#include <amxmodx>
#include <cstrike>

#define TIME_VALID_ADD 15.0 // Длительность защиты игрока от плагина, когда он только зашёл на сервер.
#define TIME_SPECT_CHECK 30.0 // Интервал между проверками зрителей, чем меньше значение, тем больше нагрузка на сервер.
#define MIN_PLAYERS_CHECK 20 // Минимальное количество игроков, когда включается функция проверки зрителей.

#pragma semicolon 1

#define MSG_SEND_AUDIO 100

#define TASK_VALID_ADD 759846
#define TASK_SPECT_CHECK 645986

#define BIT_VALID(%1,%2) ((%1) & (1 << ((%2) - 1)))
#define BIT_ADD(%1,%2) ((%1) |= (1 << ((%2) - 1)))
#define BIT_SUB(%1,%2) ((%1) &= ~(1 << ((%2) - 1)))
#define BIT_NOT_VALID(%1,%2) (~(%1) & (1 << ((%2) - 1)))

#define _BIT_VALID(%1,%2) ((%1) & (1 << (%2)))
#define _BIT_ADD(%1,%2) ((%1) |= (1 << (%2)))
#define _BIT_SUB(%1,%2) ((%1) &= ~(1 << (%2)))
#define _BIT_NOT_VALID(%1,%2) (~(%1) & (1 << (%2)))

new g_iBitClientValid;
new g_iMaxPlayers;

public plugin_init()
{
register_plugin("Afk Control", "0.1 Final", "Freedo.m");
register_menucmd(register_menuid("Afk Menu"), 1, "Handle_AfkMenu");
g_iMaxPlayers = get_maxplayers();
set_task(TIME_SPECT_CHECK, "SpectatorCheck", TASK_SPECT_CHECK, _, _, "b");
}

public client_putinserver(id)
{
if(is_user_bot(id) || is_user_hltv(id)) return;
set_task(TIME_VALID_ADD, "ClientValidAdd", id+TASK_VALID_ADD);
}

public client_disconnect(id)
{
if(task_exists(id+TASK_VALID_ADD)) remove_task(id+TASK_VALID_ADD);
if(task_exists(id)) remove_task(id);
BIT_SUB(g_iBitClientValid, id);
}

public ClientValidAdd(id)
{
id -= TASK_VALID_ADD;
BIT_ADD(g_iBitClientValid, id);
}

public SpectatorCheck()
{
if(get_playersnum() < MIN_PLAYERS_CHECK) return;
new id;
for(new i; i < g_iMaxPlayers; i++)
{
if(_BIT_VALID(g_iBitClientValid, i))
{
id = (i + 1);
switch(_:cs_get_user_team(id))
{
case 0: AfkPunishment(id);
case 3:
{
Show_AfkMenu(id);
SendAudio(id, "events/tutor_msg.wav");
set_task(10.0, "AfkPunishment", id);
}
}
}
}
}

public Show_AfkMenu(id)
{
new szMenu[256], iLen = formatex(szMenu, charsmax(szMenu), "\y[AFK-spectr] Вы наблюдаете за игрой?^nЕсли Вы не АФК нажмите 1.^nУ Вас 10 сек. для ответа.^n^n");
formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wДа! Я не АФК!");
return show_menu(id, 1, szMenu, 10, "Afk Menu");
}

public Handle_AfkMenu(id)
{
remove_task(id);
return PLUGIN_HANDLED;
}

public AfkPunishment(id)
{
server_cmd("kick #%d Вы были кикнуты из-за нахождения в зрителях.", get_user_userid(id));
}

stock SendAudio(id, szDirSound[])
{
message_begin(MSG_ONE_UNRELIABLE, MSG_SEND_AUDIO, _, id);
write_byte(id);
write_string(szDirSound);
write_short(100);
message_end();
}
bbuzzy
28.7.2015, 19:42 Нубские вопросы по скриптингу
Пора бы уже выучить операции сравнения и логические операции, а то так дело далеко не уйдет.

Код
< — Меньше
> — Больше
== — Равно
!= — Не равно
>= — Больше либо равно
=> — Меньше либо равно
&& — Логическое И
|| — Логическое ИЛИ
! — Логическое НЕ (Отрицание)


Цитата(LaFA @ 28.7.2015, 19:09) *
Нужно чтобы функция не работала, если за кт живо 2 человека.

Код:
if(fnGetAliveCTsR() != 2) 


Код:
fnGetAliveCTsR()
{
static iPlayers[32], iNum

get_players(iPlayers, iNum, "ae", "CT")

return iNum
}
LaFA
18.7.2015, 14:36 /me только после смерти...
ncux0Zz, достаточно убрать из кода возврат функции return PLUGIN_HANDLED

Код
return PLUGIN_HANDLED - Плагин остановит операцию, т.е. заблокирует пересылку функции в движок
return PLUGIN_CONTINUE - Плагин продолжит работать, т.е. не будет блокировать пересылку функции в движок


Код:
public cmdMe(id)
{
if (!SayMe)
{
client_print(id, print_chat, "%L", id, "DISABLED_MSG")
return PLUGIN_HANDLED
}

if (is_user_alive(id))
{
client_print(id, print_chat, "Вы не можете использовать ^"/me^" пока живы.")
return PLUGIN_HANDLED
}

format_kill_vinfo(id, 0, g_sBuffer)
client_print(id, print_chat, "* %s", g_sBuffer)

return PLUGIN_CONTINUE
}
ncux0Zz
18.7.2015, 14:01 Деньги. Глобальный FAQ.
Bloo,
Цитата
На данный момент на стороне оператора Мегафон фиксируется сбой в доставке sms подтверждений. Проблема уже взята в работу и специалисты делают всё возможное для того, чтобы устранить её как можно скорее.
A1on3, Bloo
17.7.2015, 15:21 Золотой дигл и НЕ-граната
Fullserver, мне вот интересно, и как же это будет работать?
Код:

#define m_bitsDamageType 76

#define DMG_GRENADE (1<<24)

!(m_bitsDamageType & DMG_GRENADE)
Fullserver, Lena1978, Stimul1
16.7.2015, 14:13 Золотой дигл и НЕ-граната
Lena1978, в исходнике замени функцию fw_TakeDamage на

Код:
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if(attacker != inflictor || !is_valid_player(attacker) || victim == attacker
|| damage_type & DMG_HEGRENADE)
return HAM_IGNORED

if((get_user_weapon(attacker) == CSW_DEAGLE) && g_HasDg[attacker])
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmgmultiplier))
return HAM_HANDLED
}
return HAM_IGNORED
}
Lena1978, Safety1st
10.7.2015, 15:16 Квест на ключики от анти-читов.
1716, ахаха, сильно, загадка для детей не умеющих считать
Ответ 4 кружочка crazy.gif
Bloo
8.7.2015, 14:23 Yet Another Voteban
ThePhoenix, скорее всего что-то ты не так сделал, ну да ладно.
[attachment=34341:yet_anot..._voteban.sma]
kenZZo, ThePhoenix
7.7.2015, 14:26 Yet Another Voteban
ThePhoenix,
1. Кнопки
Строка 499
Код:
new menu[ 256 ], len, keys = MENU_KEY_1 + MENU_KEY_2 + MENU_KEY_3 + MENU_KEY_4
--->
Код:
new menu[ 256 ], len, keys = MENU_KEY_5 + MENU_KEY_6

Строка 518
Код:
if( key == 4 )
--->
Код:
if( key == 5 )

Ланг файл
Код:
VOTEBAN_MENU_NO_YES = \w1. Нет^n2. Нет^n3. Нет^n4. \rДа
--->
Код:
VOTEBAN_MENU_NO_YES = \w5. \rДа^n\w6. Нет


2. Только VIP
Вставить между 36-37 строкой
Код:
g_pcvar_vip_access,


Вставить между 84-85 строкой
Код:
g_pcvar_vip_access =       	register_cvar( "yav_vip_access", "m" )


Строка 630
Код:
new user_flags, flags[ 2 ][ 23 ], temp[ 190 ]
--->
Код:
new user_flags, flags[ 3 ][ 23 ], temp[ 190 ]


Строка 642
Код:
get_pcvar_string( g_pcvar_admin_access, flags[ 0 ], 22 )
get_pcvar_string( g_pcvar_time_access, flags[ 1 ], 22 )
--->
Код:
get_pcvar_string( g_pcvar_admin_access, flags[ 0 ], 22 )
get_pcvar_string( g_pcvar_vip_access, flags[ 1 ], 22 )
get_pcvar_string( g_pcvar_time_access, flags[ 2 ], 22 )


Добавить после 649 строки
Код:
if(flags[ 1 ][ 0 ] && !(user_flags & read_flags( flags[ 1 ] ) ) )
{
format( temp, charsmax( temp ), "^1[^4%s^1] %L", MSGS_PREFIX, id, "VOTEBAN_ONLY_VIP" )
yav_print_color( id, temp )
return 0
}


Строка 658
Код:
if( flags[ 1 ][ 0 ] && ( user_flags & read_flags( flags[ 1 ] ) ) )

--->
Код:
if( flags[ 2 ][ 0 ] && ( user_flags & read_flags( flags[ 2 ] ) ) )


Добавить в ланг файл
Код:
VOTEBAN_ONLY_VIP = Вотебан доступен только VIP игрокам!
kenZZo, Safety1st, tenb63rus, ThePhoenix
1.7.2015, 15:38 Меню: пункты на другой странице
Fraig, да, именно так

Проверка на 2 флага:
Код:
if(get_user_flags(id) & (ADMIN_IMMUNITY | ADMIN_BAN))
Fraig
1.7.2015, 15:29 Меню: пункты на другой странице
Fraig, дальше по порядку добавляй пункты и указывай их номера в функции, вторая страница добавиться автоматически.
з.ы. не нужно цитировать большие сообщения

Ах да забыл, нужно еще указывать номер пункта в menu_additem
Код:
menu_additem(AdminMenu, "Обнулить счет", 1)
menu_additem(AdminMenu, "Меню бонусов", 2)
Fraig
1.7.2015, 15:11 Меню: пункты на другой странице
Fraig,
Код:
public admin_menu(id, menu, item) 
{
if(item == MENU_EXIT)
return PLUGIN_HANDLED

new szData[6], szName[64], iAccess, iCallback
menu_item_getinfo(menu, item, iAccess, szData, charsmax(szData), szName, charsmax(szName), iCallback)

new iKey = str_to_num(szData)

switch(iKey)
{
case 1: client_cmd(id,"say /rs")
case 2: client_cmd(id,"say /anew")
case 3: client_cmd(id,"say /reply")
case 4: client_cmd(id,"say /warn")
case 5: client_cmd(id,"amx_mute2")
case 6: client_cmd(id,"amx_kickmenu")
case 7: client_cmd(id,"amx_ssmenu")
case 8: client_cmd(id,"fb_menu")
case 9: client_cmd(id,"amx_votemapmenu")
}
return PLUGIN_HANDLED
}
Fraig
25.6.2015, 17:00 SHOWKEYS (help)
medusa, что бы сообщения не накладывались, нужно использовать очистку каналов.
Т.е. перед отправкой нового сообщения нужно отправить 8 пустых сообщений, метод конечно ватный, но других вариантов вроде бы нет

Код:
public send_dhudmsg(id)
{
clear_dhudmsg(id)

set_dhudmessage(0, 255, 0, -1.0, -1.0, 2, 1.0, 1.0, 0.1, 1.0, false)
show_dhudmessage(id, "Мое сообщение")
}

stock clear_dhudmsg(id)
{
for(new i = 0; i < 8; i++)
show_dhudmessage(id, "")
}
Bloo, medusa

11 страниц V   1 2 ... 9 10 »