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

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

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

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

13 страниц V   1 2 ... 11 12 »

[Бесплатно] Скриптинг

Статус пользователя proff_q
сообщение 24.1.2014, 0:26
Сообщение #1
Стаж: 14 лет

Сообщений: 357
Благодарностей: 263
Полезность: 804

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

P.S. Опыт программирования у меня слабый. Не все плагины будут написаны, а только те, что будут мне по силам и мозгам.
P.S.S. Мой уровень знаний в программировании не позволяет мне изготавливать плагины за $, поэтому не нужно мне писать в личку/скайп/вк, я не буду отвечать на ваши сообщение, что хуже, вы можете оказаться в черном списке. Все общение будет проходить в данной теме, поэтому прошу вас писать объемные и информативные сообщения, благо не разводить флуд.

i
Уведомление:
Перенес в соответсвтвующий раздел
// Fred Perry
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 10 раз
   Цитировать сообщение
Статус пользователя adva
сообщение 24.1.2014, 1:11
Сообщение #2


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

Стаж: 12 лет

Сообщений: 2543
Благодарностей: 1676
Полезность: 819

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

Привет, если сможешь помоги..
Если потребуется денежка скажи.

По плагину:
Оставить только из функций:
amx_retrymsg - message which is displayed after reconnect to user ( default: "No retry allowed here, %s" ) *
amx_retrytime - time in seconds to determine if retry was used ( default: 30 )
amx_retrykickmsg - reason when kicked ( default: "DO NOT USE RETRY COMMAND" )
Добавить :
Квары на иммунитет, чтобы не кикало и не ждали):
иммунитет для admin_immunity 1/0
иммунитет для admin_ban 1/0
иммунитет для ADMIN_LEVEL_H 1/0

исходник
Код
/*
NO RETRY 1.10

Plugin by Priski

Usage :
kicks and/or notifies users if they use retry

CVARS :
amx_retrytime     - time in seconds to determine if retry was used ( default: 15 )
amx_retrykick     - set to 1 if you want to kick retry users ( default: 0 )
amx_retryshow     - set to 0 if you want to disable public announces about use of retry ( default: 0 )
amx_retrychat     - show usage in playerchat ( default: 1 )
amx_retrymsg     - message which is displayed after reconnect to user ( default: "No retry allowed here, %s" ) *
amx_retrykickmsg - reason when kicked ( default: "DO NOT USE RETRY COMMAND" )
amx_retrychatmsg - message in playerchat ( default: "%s was kicked: reconnect in %t seconds" ) *

* NOTE:
%s = players name
%t = same as in amx_retrytime

Changelog :

1.16 / 2005-10-17
- added new feature cvars:
  amx_retrychat & amx_retrychatmsg
- better functionality
- hudmessages only to user who triggered

1.10 / 2005-08-17
- whole code rewritten
- bugs fixed

1.00 / 2005-08-15
- first release


*/
#include <amxmodx>
#include <amxmisc>

#define MAX_PLAYERS 32

new pID[MAX_PLAYERS][22]

public plugin_init() {
    register_plugin("No retry","1.16","Priski")
    register_cvar("amx_retrytime","60")
    register_cvar("amx_retrykick","0")
    register_cvar("amx_retryshow","0")
    register_cvar("amx_retrychat","1")
    
    // %s is the player name, %t is amx_retrytime
    register_cvar("amx_retrymsg","No retry allowed here, %s")
    register_cvar("amx_retrykickmsg","Too fast reconnect is not allowed")
    register_cvar("amx_retrychatmsg","%s was kicked: reconnect in %t seconds")
        
    return PLUGIN_HANDLED
}

public client_putinserver(id) {
    // no bots or admin immunity users
    if ((is_user_bot(id)) || (get_user_flags(id)&ADMIN_IMMUNITY)) {
        return PLUGIN_HANDLED
    }
    
    // gather info
    new ip[22]
    get_user_ip(id,ip,21)
    
    for(new i = 1; i < MAX_PLAYERS; i++) {
        if (equal(ip, pID[i], 21)) {
            
            new name[34]
            get_user_name(id, name, 33)
            
            if (get_cvar_num("amx_retryshow")) {
                new uID[1]
                uID[0] = id
                set_task(2.0,"showMsg", id, uID, 1)
            }
            
            if (get_cvar_num("amx_retrychat")) {
                new txt[128]
                get_cvar_string("amx_retrychatmsg", txt, 127)
                new sec[6]
                num_to_str(get_cvar_num("amx_retrytime"),sec, 5)
                
                replace(txt, 127, "%s", name)
                replace(txt, 127, "%t", sec)
                
                client_print( 0, print_chat, "[AMXX] %s", txt)
            }
                        
            if (get_cvar_num("amx_retrykick")) {
                new uID[1]
                uID[0] = get_user_userid(id)
                                
                // delayed kick
                set_task(7.0,"kick",77,uID,1)
                
            }
            
            break
        }
    }
    
    return PLUGIN_HANDLED;
}

public client_disconnect(id) {
    // no bots or admin immunity users are in list
    if ((is_user_bot(id)) || (get_user_flags(id)&ADMIN_IMMUNITY)) {
    return PLUGIN_HANDLED; }

    // gather info
    new ip[22]
    get_user_ip(id,ip,21)
    new found = 0;
    
    for(new i = 1; i < MAX_PLAYERS; i++) {
        if (equal(ip, pID[i], 21)) {
            // this user has been already kicked
            found = 1
            break
        }
    }
    
    if (found == 0) {
        for(new i = 1; i < MAX_PLAYERS; i++) {
            if (pID[i][0] == 0) {    // found empty slot
                get_user_ip(id, pID[i], 21)
                new aID[1]
                aID[0] = i
                set_task( get_cvar_float("amx_retrytime"), "cleanID", (id + MAX_PLAYERS),aID,1)
                        
                break
            }
        }
    }
    return PLUGIN_HANDLED;
}


public cleanID(i[]) {
    pID[i[0]][0] = 0
}

public showMsg(pID[]) {
    new txt[128]
    get_cvar_string("amx_retrymsg", txt, 127)
    
    new playername[34]
    get_user_name(pID[0], playername, 33)
    
    new sec[6]
    num_to_str(get_cvar_num("amx_retrytime"),sec, 5)
    
    replace(txt, 127, "%s", playername)
    replace(txt, 127, "%t", sec)
    
    set_hudmessage(255, 255, 255, 0.05, 0.72, 0, 5.0, 10.0, 2.0, 0.15, 3)
    show_hudmessage(pID[0],txt)
}

public kick(id[]) {
    new txt[128]
    get_cvar_string("amx_retrykickmsg", txt, 127)
    server_cmd("kick #%d ^"%s^"", id[0], txt)
}


Отредактировал: adva, - 24.1.2014, 19:49
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 24.1.2014, 9:05
Сообщение #3
Стаж: 14 лет

Сообщений: 357
Благодарностей: 263
Полезность: 804

adva,
Держи
UPD Просьба в следующий раз вставлять код в тег pawn
Код:
#include <amxmodx>
#include <amxmisc>

#define MAX_PLAYERS 32

new pID[MAX_PLAYERS][22]
new a, b, t

public plugin_init() {
register_plugin("No retry", "1.17", "Priski")
register_cvar("amx_retrytime", "60")
register_cvar("amx_retrymsg", "No retry allowed here, %s")
register_cvar("amx_retrykickmsg", "Too fast reconnect is not allowed")

a = register_cvar("amx_immunity_a", "0") // Иммунитет флаг a
b = register_cvar("amx_immunity_b", "0") // Иммунитет флаг b
t = register_cvar("amx_immunity_t", "0") // Иммунитет флаг t
}

public client_putinserver(id) {

if(get_pcvar_num(a) && get_user_flags(id) & ADMIN_IMMUNITY || get_pcvar_num(b) && get_user_flags(id) & ADMIN_BAN || get_pcvar_num(t) && get_user_flags(id) & ADMIN_LEVEL_H) {
return PLUGIN_HANDLED
}

new ip[22]
get_user_ip(id,ip,21)

for(new i = 1; i < MAX_PLAYERS; i++) {
if (equal(ip, pID[i], 21)) {

new uID[1]
uID[0] = get_user_userid(id)

set_task(7.0, "kick", 77, uID, 1)

break
}
}
return PLUGIN_HANDLED
}

public client_disconnect(id) {
if(get_pcvar_num(a) && get_user_flags(id) & ADMIN_IMMUNITY || get_pcvar_num(b) && get_user_flags(id) & ADMIN_BAN || get_pcvar_num(t) && get_user_flags(id) & ADMIN_LEVEL_H) {
return PLUGIN_HANDLED
}

new ip[22]
get_user_ip(id,ip,21)
new found = 0;

for(new i = 1; i < MAX_PLAYERS; i++) {
if (equal(ip, pID[i], 21)) {
found = 1
break
}
}

if (found == 0) {
for(new i = 1; i < MAX_PLAYERS; i++) {
if (pID[i][0] == 0) { // found empty slot
get_user_ip(id, pID[i], 21)
new aID[1]
aID[0] = i
set_task(get_cvar_float("amx_retrytime"), "cleanID", (id + MAX_PLAYERS), aID, 1)

break
}
}
}
return PLUGIN_HANDLED
}

public cleanID(i[]) {
pID[i[0]][0] = 0
}

public kick(id[]) {
new txt[128]
get_cvar_string("amx_retrykickmsg", txt, 127)
server_cmd("kick #%d ^"%s^"", id[0], txt)
}


Отредактировал: proff_q, - 24.1.2014, 11:12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Bambuc
сообщение 24.1.2014, 9:14
Сообщение #4


Стаж: 13 лет

Сообщений: 1743
Благодарностей: 577
Полезность: 593

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

исправить ошибку
L 01/24/2014 - 05:11:09: Start of error session.
L 01/24/2014 - 05:11:09: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20140124.log")
L 01/24/2014 - 05:11:09: Invalid player id -1979943283
L 01/24/2014 - 05:11:09: [AMXX] Run time error 10 (plugin "amxbans_main.amxx") (native "client_print") - debug not enabled!
L 01/24/2014 - 05:11:09: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 01/24/2014 - 05:15:21: Invalid player id -1979943283
L 01/24/2014 - 05:15:21: [AMXX] Run time error 10 (plugin "amxbans_main.amxx") (native "client_print") - debug not enabled!
L 01/24/2014 - 05:15:21: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 01/24/2014 - 09:35:37: Start of error session.
L 01/24/2014 - 09:35:37: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20140124.log")
L 01/24/2014 - 09:35:37: Invalid player id -1979943283
L 01/24/2014 - 09:35:37: [AMXX] Run time error 10 (plugin "amxbans_main.amxx") (native "client_print") - debug not enabled!
L 01/24/2014 - 09:35:37: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 01/24/2014 - 10:19:36: Start of error session.
L 01/24/2014 - 10:19:36: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20140124.log")
L 01/24/2014 - 10:19:36: Invalid player id -1979943283
L 01/24/2014 - 10:19:36: [AMXX] Run time error 10 (plugin "amxbans_main.amxx") (native "client_print") - debug not enabled!
L 01/24/2014 - 10:19:36: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).


Исходник
Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <sqlx>
#include <time>

#define AUTHOR "Larte Team"
#define PLUGIN_NAME "AMXBans: Main"
#define VERSION "Gm 1.6"
#define DATE "14:25 26.04.2011"

#define PREFIX "!y[!tAMXBans!y]"

#define AMXBANS_VERSION "1.6"

//#define UNBAN_GAME_DEL // раскомментировать для удаления бана при разбане
#define SET_NAMES_UTF8 // закомментировать, если русские причины банов нормально отображались и в ранних версиях

#include "include/amxbans_core.inc"

#include "include/amxbans/global_vars.inl"
#include "include/amxbans/color_chat.inl"
#include "include/amxbans/init_functions.inl"
#include "include/amxbans/check_player.inl"
#include "include/amxbans/check_flag.inl"
#include "include/amxbans/menu_stocks.inl"
#include "include/amxbans/menu_ban.inl"
#include "include/amxbans/menu_disconnected.inl"
#include "include/amxbans/menu_history.inl"
#include "include/amxbans/menu_flag.inl"
#include "include/amxbans/cmd_ban.inl"
#include "include/amxbans/cmd_unban.inl"
#include "include/amxbans/web_handshake.inl"
#include "include/amxbans/reason_checker.inl"

#pragma dynamic 16384

public plugin_init()
{
register_plugin(PLUGIN_NAME, VERSION, AUTHOR)
register_cvar("amxbans_version", VERSION, FCVAR_SERVER | FCVAR_EXTDLL | FCVAR_UNLOGGED| FCVAR_SPONLY)

register_dictionary("amxbans.txt")
register_dictionary("common.txt")
register_dictionary("time.txt")

register_clcmd("amx_banmenu", "cmdBanMenu", ADMIN_BAN, "- displays ban menu")
register_clcmd("amxbans_custombanreason", "setCustomBanReason", ADMIN_BAN, "- configures custom ban message")
register_clcmd("amx_banhistorymenu", "cmdBanhistoryMenu", ADMIN_BAN, "- displays banhistorymenu")
register_clcmd("amx_bandisconnectedmenu", "cmdBanDisconnectedMenu", ADMIN_BAN, "- displays bandisconnectedmenu")
register_clcmd("amx_flaggingmenu","cmdFlaggingMenu", ADMIN_BAN, "- displays flagging menu")

register_srvcmd("amx_sethighbantimes", "setHighBantimes")
register_srvcmd("amx_setlowbantimes", "setLowBantimes")
register_srvcmd("amx_setflagtimes", "setFlagTimes")

register_concmd("amx_reloadreasons", "cmdFetchReasons", ADMIN_CFG)

pcvar_serverip = register_cvar("amxbans_server_address", "")
pcvar_server_nick = register_cvar("amxbans_servernick", "")
pcvar_discon_in_banlist = register_cvar("amxbans_discon_players_saved", "10")
pcvar_complainurl = register_cvar("amxbans_complain_url", "www.yoursite.com")
pcvar_debug = register_cvar("amxbans_debug", "0")
pcvar_add_mapname = register_cvar("amxbans_add_mapname_in_servername", "0")
pcvar_flagged_all = register_cvar("amxbans_flagged_all_server","1")
pcvar_show_in_hlsw = register_cvar("amxbans_show_in_hlsw", "1")
pcvar_show_hud_messages = register_cvar("amxbans_show_hud_messages", "1")
pcvar_higher_ban_time_admin = register_cvar("amxbans_higher_ban_time_admin", "n")
pcvar_admin_mole_access = register_cvar("amxbans_admin_mole_access", "r")
pcvar_show_name_evenif_mole = register_cvar("amxbans_show_name_evenif_mole", "1")
pcvar_custom_statictime = register_cvar("amxbans_custom_statictime", "1440")
pcvar_show_prebanned = register_cvar("amxbans_show_prebanned", "1")
pcvar_show_prebanned_num = register_cvar("amxbans_show_prebanned_num", "2")
pcvar_default_banreason = register_cvar("amxbans_default_ban_reason", "unknown")
pcvar_offset = register_cvar("amxbans_time_offset", "0")
pcvar_snapshot = register_cvar("amxbans_snapshot", "1")
pcvar_bantype = register_cvar("amxbans_bantype", "0")
pcvar_flag = register_cvar("amxbans_check_flag", "1")
pcvar_history = register_cvar("amxbans_history_menu", "1")
pcvar_activity = get_cvar_pointer("amx_show_activity")
pcvar_hostname = get_cvar_pointer("hostname")

register_concmd("amx_ban", "cmdBan", ADMIN_BAN, "<time in mins> <steamID or nickname or #authid or IP> <reason>")
register_concmd("amx_banip", "cmdBan", ADMIN_BAN, "<time in mins> <steamID or nickname or #authid or IP> <reason>")
register_concmd("amx_unban", "cmdUnBan", ADMIN_BAN, "<steamID or IP>")

register_srvcmd("amx_list", "cmdLst", ADMIN_RCON, "sends playerinfos to web")

g_coloredMenus = colored_menus()
g_MyMsgSync = CreateHudSyncObj()

g_banReasons = ArrayCreate(128, 7)
g_banReasons_Bantime = ArrayCreate(1, 7)

g_disconPLname = ArrayCreate(32, 1)
g_disconPLauthid = ArrayCreate(35, 1)
g_disconPLip = ArrayCreate(22, 1)

g_AReplaceInd = ArrayCreate(64, 1)
g_AReplace = ArrayCreate(64, 1)
g_ReplaceInd = ArrayCreate(64, 1)
g_Replace = ArrayCreate(64, 1)

plnum = get_maxplayers()

for(new i = 1; i <= plnum; i++)
{
set_user_state(i, PDATA_DISCONNECTED)
}

new configsDir[64]
get_configsdir(configsDir, 63)

server_cmd("exec %s/amxbans.cfg", configsDir)

color_chat_init()
load_replaces()

return PLUGIN_CONTINUE
}

stock create_forwards()
{
MFHandle[Ban_MotdOpen] = CreateMultiForward("amxbans_ban_motdopen", ET_IGNORE, FP_CELL)
MFHandle[Player_Flagged] = CreateMultiForward("amxbans_player_flagged", ET_IGNORE, FP_CELL, FP_CELL, FP_STRING)
MFHandle[Player_UnFlagged] = CreateMultiForward("amxbans_player_unflagged", ET_IGNORE, FP_CELL)
return PLUGIN_CONTINUE
}

public addMenus()
{
new szKey[128]

if(get_pcvar_num(pcvar_flag))
{
format(szKey, 127, "%L", LANG_SERVER, "ADMMENU_FLAGGING")
AddMenuItem(szKey, "amx_flaggingmenu", ADMIN_BAN, PLUGIN_NAME)
}

if(get_pcvar_num(pcvar_discon_in_banlist))
{
format(szKey, 127, "%L", LANG_SERVER, "ADMMENU_DISCONNECTED")
AddMenuItem(szKey, "amx_bandisconnectedmenu", ADMIN_BAN, PLUGIN_NAME)
}

if(get_pcvar_num(pcvar_history))
{
format(szKey, 127, "%L", LANG_SERVER, "ADMMENU_HISTORY")
AddMenuItem(szKey, "amx_banhistorymenu", ADMIN_BAN, PLUGIN_NAME)
}

return PLUGIN_CONTINUE
}

public amxbans_sql_initialized(Handle:sqlTuple, const dbPrefix[])
{
if(g_SqlX != Empty_Handle)
{
if(get_pcvar_num(pcvar_debug) >= 1)
{
log_amx("[AMXBans Notice] DB Info Tuple from amxbans_core initialized twice! Maybee used command amx_realoadadmins.")
}
return PLUGIN_CONTINUE
}

copy(g_dbPrefix, 31, dbPrefix)

get_user_ip(0, playerData[0][playerIp], 21, 1)

g_SqlX = sqlTuple

if(get_pcvar_num(pcvar_debug) >= 1)
{
log_amx("[AMXBans] Received DB Info Tuple from amxbans_core: %d | %s", sqlTuple, g_dbPrefix)
}

if(g_SqlX == Empty_Handle)
{
log_amx("[AMXBans Error] DB Info Tuple from amxbans_main is empty! Trying to get a valid one.")
new host[64], user[64], pass[64], db[64]

get_cvar_string("amx_sql_host", host, 63)
get_cvar_string("amx_sql_user", user, 63)
get_cvar_string("amx_sql_pass", pass, 63)
get_cvar_string("amx_sql_db", db, 63)

g_SqlX = SQL_MakeDbTuple(host, user, pass, db)

get_cvar_string("amx_sql_prefix", g_dbPrefix, 31)
}

create_forwards()

set_task(0.1, "banmod_online")
set_task(0.25, "load_reasons")

if(!get_pcvar_num(pcvar_offset))
{
set_task(0.5, "get_offset")
}

return set_task(2.0, "addMenus")
}

public get_higher_ban_time_admin_flag()
{
new flags[24]
get_pcvar_string(pcvar_higher_ban_time_admin, flags, 23)

return read_flags(flags)
}

public get_admin_mole_access_flag()
{
new flags[24]
get_pcvar_string(pcvar_admin_mole_access, flags, 23)

return read_flags(flags)
}

public delayed_kick(id)
{
id -= 200

if(is_user_disconnected(id))
{
return PLUGIN_HANDLED
}

if(get_pcvar_num(pcvar_debug) >= 1)
{
log_amx("[AMXBANS DEBUG] Delayed Kick ID: <%d>", id)
}

add_user_state(id, PDATA_KICKED)

return server_cmd("kick #%d %L", get_user_userid(id), id, "KICK_MESSAGE")
}


stock SQL_Error(Handle:query, const error[], errornum, failstate)
{
new qstring[1024]
SQL_GetQueryString(query, qstring, 1023)

if(failstate == TQUERY_CONNECT_FAILED)
{
log_amx("%L", LANG_SERVER, "TCONNECTION_FAILED")
}
else if (failstate == TQUERY_QUERY_FAILED)
{
log_amx("%L", LANG_SERVER, "TQUERY_FAILED")
}
log_amx("%L", LANG_SERVER, "TQUERY_MSG", error, errornum)
log_amx("%L", LANG_SERVER, "TQUERY_STATEMENT", qstring)

return SQL_FreeHandle(query)
}

public client_authorized(id)
{
if(id > 201)
{
id -= 201
}
else
{
get_user_name(id, playerData[id][playerName], 31)
get_user_authid(id, playerData[id][playerSteamid], 33)
get_user_ip(id, playerData[id][playerIp], 21, 1)
}

if(g_SqlX == Empty_Handle)
{
return set_task(1.0, "client_authorized", id + 201)
}

set_user_state(id, PDATA_CONNECTING)

if(is_user_admin(id))
{
add_user_state(id, PDATA_ADMIN)
if(get_user_flags(id) & ADMIN_IMMUNITY)
{
add_user_state(id, PDATA_IMMUNITY)
}
}

return set_task(0.25, "check_player", id + 203)
}

public client_putinserver(id)
{
if(id > 202)
{
id -= 202
}
else
{
remove_user_state(id, PDATA_CONNECTING)

if(is_user_hltv(id))
{
add_user_state(id, PDATA_HLTV)
}
if(is_user_bot(id))
{
add_user_state(id, PDATA_BOT)
}

add_user_state(id, PDATA_CONNECTED)
}

if(g_SqlX == Empty_Handle)
{
return set_task(1.0, "client_putinserver", id + 202)
}

if(get_user_state(id, PDATA_IMMUNITY))
{
return PLUGIN_HANDLED
}

check_player_post(id)
disconnect_remove_player(id)

return PLUGIN_CONTINUE
}

public client_disconnect(id)
{
if(!get_user_state(id, PDATA_KICKED) && !get_user_state(id, PDATA_IMMUNITY))
{
disconnected_add_player(id)
}

remove_task(id + 200)
remove_task(id + 201)
remove_task(id + 202)
remove_task(id + 203)
remove_task(id + 204)

return set_user_state(id, PDATA_DISCONNECTED)
}

public client_infochanged(id)
{
if(!get_user_state(id, PDATA_CONNECTED))
{
return PLUGIN_CONTINUE
}

get_user_info(id, "name", playerData[id][playerName], 31)

return PLUGIN_CONTINUE
}

public setHighBantimes()
{
new arg[32]
new argc = read_argc() - 1
g_highbantimesnum = argc

if(argc < 1 || argc > 14)
{
log_amx("[AMXBANS] You have more than 14 or less than 1 bantimes set in amx_sethighbantimes")
log_amx("[AMXBANS] Loading default bantimes")
return loadDefaultBantimes(1)
}

new i = 0
new num[32], flag[32]
while(i < argc)
{
read_argv(i + 1, arg, 31)
parse(arg, num, 31, flag, 31)

if(equali(flag, "m"))
{
g_HighBanMenuValues[i] = str_to_num(num)
}
else if(equali(flag, "h"))
{
g_HighBanMenuValues[i] = (str_to_num(num) * 60)
}
else if(equali(flag, "d"))
{
g_HighBanMenuValues[i] = (str_to_num(num) * 1440)
}
else if(equali(flag, "w"))
{
g_HighBanMenuValues[i] = (str_to_num(num) * 10080)
}
i++
}

return PLUGIN_HANDLED
}

public setLowBantimes()
{
new arg[32]
new argc = read_argc() - 1
g_lowbantimesnum = argc

if(argc < 1 || argc > 14)
{
log_amx("[AMXBANS] You have more than 14 or less than 1 bantimes set in amx_setlowbantimes")
log_amx("[AMXBANS] Loading default bantimes")
return loadDefaultBantimes(2)
}

new i = 0
new num[32], flag[32]
while(i < argc)
{
read_argv(i + 1, arg, 31)
parse(arg, num, 31, flag, 31)

if(equali(flag, "m"))
{
g_LowBanMenuValues[i] = str_to_num(num)
}
else if(equali(flag, "h"))
{
g_LowBanMenuValues[i] = (str_to_num(num) * 60)
}
else if(equali(flag, "d"))
{
g_LowBanMenuValues[i] = (str_to_num(num) * 1440)
}
else if(equali(flag, "w"))
{
g_LowBanMenuValues[i] = (str_to_num(num) * 10080)
}
i++
}

return PLUGIN_HANDLED
}

public plugin_end()
{
ArrayDestroy(g_banReasons)
ArrayDestroy(g_banReasons_Bantime)

ArrayDestroy(g_disconPLname)
ArrayDestroy(g_disconPLauthid)
ArrayDestroy(g_disconPLip)

ArrayDestroy(g_AReplaceInd)
ArrayDestroy(g_AReplace)

ArrayDestroy(g_ReplaceInd)
ArrayDestroy(g_Replace)

return PLUGIN_CONTINUE
}

public setFlagTimes()
{
new arg[32]
new argc = read_argc() - 1
g_flagtimesnum = argc
if(argc < 1 || argc > 14)
{
log_amx("[AMXBANS] You have more than 14 or less than 1 flagtimes set in amx_setflagtimes")
log_amx("[AMXBANS] Loading default flagtimes")
return loadDefaultBantimes(3)
}

new i = 0
new num[32], flag[32]
while(i < argc)
{
read_argv(i + 1, arg, 31)
parse(arg, num, 31, flag, 31)

if(equali(flag, "m"))
{
g_FlagMenuValues[i] = str_to_num(num)
}
else if(equali(flag, "h"))
{
g_FlagMenuValues[i] = (str_to_num(num) * 60)
}
else if(equali(flag, "d"))
{
g_FlagMenuValues[i] = (str_to_num(num) * 1440)
}
else if(equali(flag, "w"))
{
g_FlagMenuValues[i] = (str_to_num(num) * 10080)
}
i++
}

return PLUGIN_HANDLED
}

stock loadDefaultBantimes(num)
{
if(num == 1 || num == 0)
{
server_cmd("amx_sethighbantimes 5 60 240 600 6000 0")
}
if(num == 2 || num == 0)
{
server_cmd("amx_setlowbantimes 5 30 60 480 600 1440")
}
if(num == 3 || num == 0)
{
server_cmd("amx_setflagtimes 60 240 600 1440 10080 40320 90720 0")
}

return PLUGIN_CONTINUE
}

stock mysql_escape_string(dest[], len)
{
replace_all(dest, len, "\\", "\\\\")
replace_all(dest, len, "\0", "\\0")
replace_all(dest, len, "\n", "\\n")
replace_all(dest, len, "\r", "\\r")
replace_all(dest, len, "\x1a", "\Z")
replace_all(dest, len, "'", "\'")
replace_all(dest, len, "^"", "\^"")

return 1
}

stock mysql_get_username_safe(id, dest[], len)
{
copy(dest, len, playerData[id][playerName])
return mysql_escape_string(dest, len)
}

stock mysql_get_servername_safe(dest[], len)
{
get_pcvar_string(pcvar_hostname, dest, len)
return mysql_escape_string(dest, len)
}


Отредактировал: Bambuc, - 24.1.2014, 9:20
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 24.1.2014, 9:24
Сообщение #5
Стаж: 14 лет

Сообщений: 357
Благодарностей: 263
Полезность: 804

Bambuc,
Вам нужно включить режим отладки для плагина amxbans_main. Для этого пропишите в файле plugins.ini без кавычек "amxbans_main.amxx debug".

UPD: Кстати гугл полезная вещь, на форуме amxbans уже обсуждали данную ошибку.
Цитата
Скачать Фикс ошибки!
cmd_ban.inl и color_chat.inl закинуть в папку scripting/include/amxbans/ с заменой.
Закомментировать строку в amxbans_main.sma color_chat_init, и откомпилировать с заменой.
P.S в архиве уже выполнены эти действия, можете просто заменить файлы.

Скачать:Прикрепленный файл  amxbans_fix_by_errors.rar ( 99,63 килобайт ) Кол-во скачиваний: 43


Отредактировал: proff_q, - 24.1.2014, 9:34
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bambuc
сообщение 24.1.2014, 9:37
Сообщение #6


Стаж: 13 лет

Сообщений: 1743
Благодарностей: 577
Полезность: 593

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

Цитата(proff_q @ 24.1.2014, 9:24) *
Bambuc,
Вам нужно включить режим отладки для плагина amxbans_main. Для этого пропишите в файле plugins.ini без кавычек "amxbans_main.amxx debug".

UPD: Кстати гугл полезная вещь, на форуме amxbans уже обсуждали данную ошибку.

Скачать:Прикрепленный файл  amxbans_fix_by_errors.rar ( 99,63 килобайт ) Кол-во скачиваний: 43

smile.gif Дак я искал,даже тему создавал.
Спасибо!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя C4acTbe
сообщение 24.1.2014, 9:41
Сообщение #7


Стаж: 13 лет

Сообщений: 880
Благодарностей: 408
Полезность: 706

Цитата(Bambuc @ 24.1.2014, 9:37) *
smile.gif Дак я искал,даже тему создавал.
Спасибо!

Если не трудно отпишись потом, помогло или нет.

Отредактировал: C4acTbe, - 24.1.2014, 9:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 24.1.2014, 9:59
Сообщение #8
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

сразу что бросилось в глаза
Код:
 if(get_cvar_num("amx_immunity_a") && get_user_flags(id) & ADMIN_IMMUNITY 


>

Код:
 

new flag_a

flag_a = register_cvar("amx_immunity_a","0")


if(get_pcvar_num(flag_a) ( условие странное, ты проверяешь значение самого квара без указания == ???? ) && (get_user_flags(id) & ADMIN_IMMUNITY ) ||

а еще лучше trie а еще проще if (!cmd_access ...



Отредактировал: csnet, - 24.1.2014, 10:06


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bambuc
сообщение 24.1.2014, 10:03
Сообщение #9


Стаж: 13 лет

Сообщений: 1743
Благодарностей: 577
Полезность: 593

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

Цитата(C4acTbe @ 24.1.2014, 9:41) *
Если не трудно отпишись потом, помогло или нет.

Вроде бы нету ошибок,но вот с русской причиной проблема... не отоброжается
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 24.1.2014, 10:14
Сообщение #10
Стаж: 14 лет

Сообщений: 357
Благодарностей: 263
Полезность: 804

csnet,
Тем не менее, get_cvar_num("amx_immunity_a"), получаю значение переменной, 0 - пропускает, 0< иммунитет работает.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 24.1.2014, 10:18
Сообщение #11
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

да я про скобки в основном get_user_flags(id) & ADMIN_IMMUNITY > (get_user_flags(id) & ADMIN_IMMUNITY )
if(get_cvar_num( чтото ) лишь подтвердит наличие квара но не конкретного числа

Скрытый текст
попробуй (get_user_flags(id) & (ADMIN_IMMUNITY|ADMIN_BAN|ADMIN_LEVEL_H))


Отредактировал: csnet, - 24.1.2014, 10:25


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 24.1.2014, 10:23
Сообщение #12
Стаж: 14 лет

Сообщений: 357
Благодарностей: 263
Полезность: 804

Я не понимаю, что ты хочешь этим сказать. В плагине все работает. Так как там тяжко проверить, вот простой код.
Код:
#include <amxmodx>
#include <amxmisc>

public plugin_init() {
register_plugin("No retry", "1.17", "Priski")

register_cvar("amx_immunity_a", "0") // Иммунитет флаг a

register_clcmd("say /1", "hello")
}

public hello(id) {
if(get_cvar_num("amx_immunity_a") && get_user_flags(id) & ADMIN_IMMUNITY) {
return PLUGIN_HANDLED
}

new name[32]
get_user_name(id, name, 31)
client_print(id,print_chat, "Hello %s!!!",name)

return PLUGIN_HANDLED
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 24.1.2014, 10:39
Сообщение #13
Стаж: 14 лет
Город: Moscow

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

proff_q, алгоритм верный, но никогда не юзайте get_cvar_* для собственных cvar'ов плагина: это затратная операция по сравнению с давным-давно принятыми pcvars. Про них csnet и говорит.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 24.1.2014, 10:52
Сообщение #14
Стаж: 14 лет

Сообщений: 357
Благодарностей: 263
Полезность: 804

Safety1st,
Я конечно благодарен за ваши советы, но будьте добрый, если говорите A, то договаривайте и B.
Почему я не могу юзать get_cvar? Например, мне проще сделать проверку в одной строке, нежели расписывать на три.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 24.1.2014, 11:04
Сообщение #15
Стаж: 14 лет
Город: Moscow

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

Юзайте get_pcvar_num, результат одинаков. register_cvar возвращает cvar pointer, указатель в памяти на конкретный cvar, по нему значение cvar'а читается сразу. Чтобы получить значение cvar'а через get_cvar_*, выполняется поиск по всему списку cvar'ов.

Раньше только второе и было, теперь использование pcvar'ов - это требование ко всем плагинам.
Цитата
Release 1.70
Release Date: March 04, 2006
Changelog:
...
## Added new, much faster "pcvar" natives for dealing with cvars.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 24.1.2014, 11:14
Сообщение #16
Стаж: 14 лет

Сообщений: 357
Благодарностей: 263
Полезность: 804

Safety1st,
Такую помощь в разы приятнее получать, спасибо!

Обновил первый код.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
exec1337
сообщение 24.1.2014, 19:26
Сообщение #17
Стаж: 13 лет

Сообщений: 6490
Благодарностей: 2558
Полезность: 491

proff_q, с векторами работаете?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 24.1.2014, 19:43
Сообщение #18
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

с ними мало кто работает
примеров на xs и то не много, в основном stock разные


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя fitamin4ik
сообщение 24.1.2014, 19:49
Сообщение #19
Стаж: 15 лет

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

Помоги пожалуйста, с системой уровней

ошибка - L 01/24/2014 - 19:46:44: [AMXX] Run time error 4: index out of bounds
L 01/24/2014 - 19:46:44: [AMXX] [0] level_system.sma::fw_PlayerKilled (line 143)

Скрытый текст
Код:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <nvault>
#include <colorstatus.inc>

#define PLUGIN "Level System"
#define VERSION "2.1"
#define AUTHOR "heka" // fixed by Good_Hash

// Version 2.1b :
// Added:
// zp_level_save_by 1/0 - Save by STEAM_ID ( 0 ) ::: Save by NICK ( 1 )
// default : 1.


new const Level_Exp[4] = {50, 100, 300, 400}
new const g_TRank[4][] =
{
"a", "b", "c", "d"
};

new const g_CTRank[4][] =
{
"a", "b", "c", "d"
};
new g_level[33]
new g_exp[33]
new g_vault, g_save_type

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

RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
g_vault = nvault_open("jb_level_system")
g_save_type = register_cvar("level_save_by", "0")
register_forward(FM_PlayerPreThink, "OnPlayerPreThink")
register_forward(FM_Sys_Error, "fw_ServerDown");
register_forward(FM_GameShutdown, "fw_ServerDown");
register_forward(FM_ServerDeactivate, "fw_ServerDown");

initColorStatus();
}

public plugin_natives()
{
register_native("get_user_level", "native_get_user_level", 1)
register_native("set_user_level", "native_set_user_level", 1)

register_native("get_user_exp", "native_get_user_exp", 1)
register_native("set_user_exp", "native_set_user_exp", 1)
}

public client_connect(id)
{
if ( is_user_bot(id) )
return

g_level[id] = 0

LoadData(id)
}

public client_disconnect(id)
{
SaveData(id)

g_exp[id] = 0
g_level[id] = 0
}

public fw_ServerDown()
{
new MaxPlayers = get_maxplayers();
for(new i = 0; i <= MaxPlayers; i++)
{
if(is_user_connected(i))
SaveData(i)
}
}

public plugin_end()
{
nvault_close(g_vault)
}

public SaveData(id)
{
new AuthID[35]
if ( get_pcvar_num(g_save_type) )
{
get_user_name(id, AuthID, 32)
replace_all(AuthID, 255, "#", "[r]")
}
else
get_user_authid(id,AuthID,34)

new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s",AuthID)
format(vaultdata,255,"%i#%i#",g_exp[id],g_level[id])
nvault_set(g_vault,vaultkey,vaultdata)
return PLUGIN_CONTINUE
}
public LoadData(id)
{
new AuthID[35]
if ( get_pcvar_num(g_save_type) )
{
get_user_name(id, AuthID, 32)
replace_all(AuthID, 255, "#", "[r]")
}
else
get_user_authid(id,AuthID,34)

new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s",AuthID)
format(vaultdata,255,"%i#%i#",g_exp[id],g_level[id])
nvault_get(g_vault,vaultkey,vaultdata,255)

replace_all(vaultdata, 255, "#", " ")

new playerxp[32], playerlevel[32]

parse(vaultdata, playerxp, 31, playerlevel, 31)

g_exp[id] = str_to_num(playerxp)
g_level[id] = str_to_num(playerlevel)

return PLUGIN_CONTINUE
}

public fw_PlayerKilled(victim, attacker)
{
if(!is_user_connected( victim ))
return;

if(attacker == victim || !attacker)
return;

if(g_exp[attacker] <= Level_Exp[g_level[attacker]] && g_level[attacker] <= 4)
{
g_exp[attacker]+= 1
}
check_level(attacker)
}

public check_level(id)
{
new MAX_LVL = sizeof Level_Exp - 1;

if (g_exp[id] > Level_Exp[MAX_LVL] - 1 )
return PLUGIN_HANDLED;


if( g_exp[id] == Level_Exp[ g_level[id]])
{
if ( g_level[id] < MAX_LVL ) g_level[id]++
g_exp[id] = 0
}
while (g_exp[id] >= Level_Exp[g_level[id]])
{
g_level[id]++
if (cs_get_user_team(id) == CS_TEAM_T)
{
ChatColor(id, "!g[Jail]!yТы повысил свой авторитет, теперь ты !g%s", g_TRank[g_level[id]])
}
else if (cs_get_user_team(id) == CS_TEAM_CT)
{
ChatColor(id, "!g[Jail]!yТы повысил свой авторитет, теперь ты !g%s", g_CTRank[g_level[id]])
}
}
return PLUGIN_HANDLED;
}

public OnPlayerPreThink(id)
{
if(is_user_alive(id))
{
if (cs_get_user_team(id) == CS_TEAM_T)
{
makeStatusText(id,YELLOW_STATUS,0.0,"[Звание: %s] [Опыт: %d / %d]", g_TRank[g_level[id]], g_exp[id], Level_Exp[g_level[id]]);
}
else if (cs_get_user_team(id) == CS_TEAM_CT)
{
makeStatusText(id,YELLOW_STATUS,0.0,"[Звание: %s] [Опыт: %d / %d]", g_CTRank[g_level[id]], g_exp[id], Level_Exp[g_level[id]]);
}
}
}

public native_get_user_exp(id)
{
return g_exp[id];
}

public native_set_user_exp(id, amount)
{
g_exp[id] = amount;
}

public native_get_user_level(id)
{
return g_level[id];
}

public native_set_user_level(id, amount)
{
g_level[id] = amount;
}

stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)

replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!r", "^3")
replace_all(msg, 190, "!b", "^0")

if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), {0,0,0}, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}


Отредактировал: fitamin4ik, - 24.1.2014, 19:53
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 24.1.2014, 20:00
Сообщение #20
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

попробуй так -

Код:
public fw_PlayerKilled(victim, attacker)
{
if(!is_user_alive( victim ) || attacker == victim || !attacker)
return;

if(g_exp[attacker] < Level_Exp[g_level[attacker]] && g_level[attacker] <= 4)
{
g_exp[attacker]+= 1
}
check_level(attacker)
}


Отредактировал: csnet, - 24.1.2014, 20:04


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
13 страниц V   1 2 ... 11 12 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 4 гостей читают эту тему: