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

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

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

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

13 страниц V  « 2 3 4 ... 11 12 »

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

Статус пользователя IORoK
сообщение 25.1.2014, 19:33
Сообщение #41


Стаж: 14 лет

Сообщений: 274
Благодарностей: 73
Полезность: 199

Буду рад если поможешь - https://c-s.net.ua/forum/topic58359.html
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 25.1.2014, 19:56
Сообщение #42
Стаж: 14 лет

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

sllrdp,
Код:
public fwHamPlayerSpawnPost( id ) {
if(zp_get_user_zombie(id) && (get_user_flags(id) & ADMIN_RESERVATION))
return PLUGIN_HANDLED
else {
g_has_unlimited_clip[id] = true
set_pev(id,pev_armorvalue, 100.0)
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Aikido
сообщение 25.1.2014, 20:22
Сообщение #43


Стаж: 12 лет

Сообщений: 287
Благодарностей: 326
Полезность: 1102

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

Спасибо за помощь, уже решил проблему if(zp_get_user_zombie(id) != 1
Так как он не должен быть зомби ( то есть human) , но иметь флаг b чтобы получить армор и клип.


proff_q,
Можете помочь еще этим плагином? У меня так и не получилось с server_query...

Вот тема:
https://c-s.net.ua/forum/topic58038s0.html?...mp;#entry522460

Отредактировал: sllrdp, - 25.1.2014, 20:30
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bambuc
сообщение 26.1.2014, 9:27
Сообщение #44


Стаж: 13 лет

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

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

Йоу.
Тот самый amxbans_eror
Скрытый текст
L 01/26/2014 - 03:42:36: Start of error session.
L 01/26/2014 - 03:42:36: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20140126.log")
L 01/26/2014 - 03:42:36: Invalid array handle provided (0)
L 01/26/2014 - 03:42:36: [AMXX] Displaying debug trace (plugin "amxbans_main.amxx")
L 01/26/2014 - 03:42:36: [AMXX] Run time error 10: native error (native "ArraySize")
L 01/26/2014 - 03:42:36: [AMXX] [0] reason_checker.inl::check_reason (line 45)
L 01/26/2014 - 03:42:36: [AMXX] [1] cmd_ban.inl::cmd_ban_ (line 286)
L 01/26/2014 - 03:42:36: Invalid array handle provided (0)
L 01/26/2014 - 03:42:36: [AMXX] Displaying debug trace (plugin "amxbans_main.amxx")
L 01/26/2014 - 03:42:36: [AMXX] Run time error 10: native error (native "ArraySize")
L 01/26/2014 - 03:42:36: [AMXX] [0] reason_checker.inl::check_reason (line 45)
L 01/26/2014 - 03:42:36: [AMXX] [1] cmd_ban.inl::cmd_ban_ (line 286)
L 01/26/2014 - 03:42:36: Invalid array handle provided (0)
L 01/26/2014 - 03:42:36: [AMXX] Displaying debug trace (plugin "amxbans_main.amxx")
L 01/26/2014 - 03:42:36: [AMXX] Run time error 10: native error (native "ArraySize")
L 01/26/2014 - 03:42:36: [AMXX] [0] reason_checker.inl::check_reason (line 45)
L 01/26/2014 - 03:42:36: [AMXX] [1] cmd_ban.inl::cmd_ban_ (line 286)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 26.1.2014, 11:41
Сообщение #45
Стаж: 14 лет

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

Bambuc,
Попробуй так, замени файлы и скомпилируй плагин.
Прикрепленный файл  Desktop.rar ( 5,72 килобайт ) Кол-во скачиваний: 9


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

Отредактировал: proff_q, - 26.1.2014, 11:46
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Aikido
сообщение 26.1.2014, 17:32
Сообщение #46


Стаж: 12 лет

Сообщений: 287
Благодарностей: 326
Полезность: 1102

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

proff_q, Конечно, нет проблем.

Нужно добавить функцию сканирования сервера на который идет редирект, и если сервер 32/32, тогда редирект больше не идет на него. Вот исходный код:

Код:
#include <amxmodx>

new const PLUGIN[] = "Simple Redirect"
new const VERSION[] = "1.1"
new const AUTHOR[] = "BigBaller vs. jsn"

new g_MaxPlayers, p_MaxPlayers
new g_AdminImm, p_AdminImm
new g_ServerIP, p_ServerIP[16]
new g_ServerPort, p_ServerPort
new g_ServerPw, p_ServerPw[32]

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

g_MaxPlayers = register_cvar("amx_rd_maxplayers", "31")
g_AdminImm = register_cvar("amx_rd_adminimm", "1")
g_ServerIP = register_cvar("amx_rd_server", "")
g_ServerPort = register_cvar("amx_rd_serverport", "")
g_ServerPw = register_cvar("amx_rd_serverpw", "")
}

public plugin_cfg()
{
p_MaxPlayers = get_pcvar_num(g_MaxPlayers)
p_AdminImm = get_pcvar_num(g_AdminImm)
get_pcvar_string(g_ServerIP, p_ServerIP, 15)
p_ServerPort = get_pcvar_num(g_ServerPort)
get_pcvar_string(g_ServerPw, p_ServerPw, 31)
}

public client_authorized(id)
{
if (p_AdminImm && get_user_flags(id) & ADMIN_RESERVATION)
return

if (get_playersnum() < p_MaxPlayers)
return

if (p_ServerPw[0] == '^0')
client_cmd(id, "echo ^"[AMXX] Simple Redirection - Set Password to %s^"; password %s", p_ServerPw, p_ServerPw)

client_cmd(id, "echo ^"[AMXX] Simple Redirection - Redirecting ^"; Connect %s:%d", p_ServerIP, p_ServerPort, p_ServerIP, p_ServerPort)
client_cmd(id, "echo ^"[AMXX] Simple Redirection - Redirecting ^"; connect %s:%d", p_ServerIP, p_ServerPort, p_ServerIP, p_ServerPort)
}

Safetist помог с источниками откуда можно взять примеры, но так и не получается, завариваю кашу вместо нормального функционального плагина...

Цитата(Safety1st @ 15.1.2014, 1:48) *
Учитесь по примерам.
Плагин 1
Плагин 2
Гайд по Server Queries


Отредактировал: sllrdp, - 26.1.2014, 17:32
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Bambuc
сообщение 26.1.2014, 17:38
Сообщение #47


Стаж: 13 лет

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

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

Цитата(proff_q @ 26.1.2014, 11:41) *
Bambuc,
Попробуй так, замени файлы и скомпилируй плагин.
Прикрепленный файл  Desktop.rar ( 5,72 килобайт ) Кол-во скачиваний: 9


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

йа короч фрешбанпоставил пока-что
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sambo
сообщение 26.1.2014, 17:41
Сообщение #48


Стаж: 14 лет

Сообщений: 847
Благодарностей: 200
Полезность: 477

Можно его подправить
ссылка
_https://forums.alliedmods.net/showthread.php?t=140821

Редирект сервер падает если основной полный .
Так же редирект сервер падает если на основном сервере используется плагин бесконечного раунда. Плагин выводит два бота которые висят в спектре . Сервер падает после строк "кент кик бот" .
Он выводит у себя на редирект сервере этих ботов но не может их кикнуть. В последнем посте там инфа по этому поводу.

Отредактировал: sambo, - 26.1.2014, 17:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя kentavrius
сообщение 26.1.2014, 17:51
Сообщение #49


Стаж: 17 лет

Сообщений: 951
Благодарностей: 167
Полезность: 423

Добрый день. Не нашел такого плагина, думаю в паблике нет. Игрок играет набивает очки и деньги, затем уходит в наблюдатели и после возвращение за команду, у него остается дефолтная сумма денег. Можно написать плагин который будет сохранять-возвращать деньги данному игроку.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 26.1.2014, 18:52
Сообщение #50
Стаж: 14 лет

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

sllrdp,
Тестируйте, теоретически должен работать. Не забудьте про const SERVER_ADDRESS.
Код:
#include <amxmodx>
#include <server_query>

new const PLUGIN[] = "Simple Redirect"
new const VERSION[] = "1.1"
new const AUTHOR[] = "BigBaller vs. jsn"
new const SERVER_ADDRESS[] = ""

new g_MaxPlayers, p_MaxPlayers
new g_AdminImm, p_AdminImm
new g_ServerIP, p_ServerIP[16]
new g_ServerPort, p_ServerPort
new g_ServerPw, p_ServerPw[32]

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

g_MaxPlayers = register_cvar("amx_rd_maxplayers", "31")
g_AdminImm = register_cvar("amx_rd_adminimm", "1")
g_ServerIP = register_cvar("amx_rd_server", "")
g_ServerPort = register_cvar("amx_rd_serverport", "")
g_ServerPw = register_cvar("amx_rd_serverpw", "")
}

public plugin_cfg()
{
p_MaxPlayers = get_pcvar_num(g_MaxPlayers)
p_AdminImm = get_pcvar_num(g_AdminImm)
get_pcvar_string(g_ServerIP, p_ServerIP, 15)
p_ServerPort = get_pcvar_num(g_ServerPort)
get_pcvar_string(g_ServerPw, p_ServerPw, 31)
}

public client_authorized(id)
{
ServerInfo(SERVER_ADDRESS, "redirect")
return PLUGIN_HANDLED
}

public redirect(const szServer[], _A2A_TYPE, const Response[], len, success, latency)
{
if(!success)
return;

new szName[64], szMap[64], szDirectory[64], szDescription[64]
new iPlayers = 0
new iMaxPlayers = 0

ServerResponseParseInfo(Response, szName, 63, szMap, 63, szDirectory, 63, szDescription, 63, iPlayers, iMaxPlayers)

new name[32]
read_data(3, name, 31)
new id = get_user_index(name)

if (iPlayers == iMaxPlayers)
return

if (p_AdminImm && get_user_flags(id) & ADMIN_RESERVATION)
return

if (get_playersnum() < p_MaxPlayers)
return

if (p_ServerPw[0] == '^0')
client_cmd(id, "echo ^"[AMXX] Simple Redirection - Set Password to %s^"; password %s", p_ServerPw, p_ServerPw)

client_cmd(id, "echo ^"[AMXX] Simple Redirection - Redirecting ^"; Connect %s:%d", p_ServerIP, p_ServerPort)
client_cmd(id, "echo ^"[AMXX] Simple Redirection - Redirecting ^"; connect %s:%d", p_ServerIP, p_ServerPort)
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 26.1.2014, 20:03
Сообщение #51
Стаж: 14 лет

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

kentavrius,
Единственный алгоритм, который пришел в голову.
Код:
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>

new Money[33]
new bool:has_money[33]

public plugin_init() {
register_clcmd("chooseteam", "clcmd_changeteam")
register_clcmd("jointeam", "clcmd_changeteam")

RegisterHam(Ham_Spawn, "player", "spawn")
}

public client_putinserver(id) {
has_money[id] = false
}

public spawn(id) {
if(has_money[id]) {
cs_set_user_money(id, Money[id])

has_money[id] = false
return PLUGIN_CONTINUE
}
else
return PLUGIN_CONTINUE

return PLUGIN_CONTINUE
}

public clcmd_changeteam(id) {

if (cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
return PLUGIN_CONTINUE
else {
Money[id] = cs_get_user_money(id)
has_money[id] = true

return PLUGIN_CONTINUE
}

return PLUGIN_CONTINUE
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Aikido
сообщение 26.1.2014, 20:20
Сообщение #52


Стаж: 12 лет

Сообщений: 287
Благодарностей: 326
Полезность: 1102

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

proff_q, выдает ошибку

//AMXXPC compile.exe
// by the AMX Mod X Dev Team


//// simple_redirect.sma
// E:\CS Server\Rezervat\Redirecte-CS_new\cstrike\addons\amxmodx\scripting\simpl
e_redirect.sma(37) : error 017: undefined symbol "ServerInfo"
// E:\CS Server\Rezervat\Redirecte-CS_new\cstrike\addons\amxmodx\scripting\simpl
e_redirect.sma(50) : error 017: undefined symbol "ServerResponseParseInfo"
//
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя C1_
сообщение 26.1.2014, 20:32
Сообщение #53


Стаж: 18 лет

Сообщений: 978
Благодарностей: 401
Полезность: 830

Суть плагина: когда попадаешь гранатой в игрока, она наносит урон.
Что нужно доработать:
1) ATAC не реагирует, если убьёшь своего (не предлагает наказать)
2) Нет записи в лог ( log_message("..." killed "..." with "...") ) (нужно например для psychostats)

Скрытый текст
Код:
#include <amxmodx>  
#include <fakemeta>

#define MINSPEED 400.0

new gCurrentNade, c_he, c_flash, c_smoke, c_ff

new const he_model[] = "models/w_hegrenade.mdl"
new const flash_model[] = "models/w_flashbang.mdl"
new const smoke_model[] = "models/w_smokegrenade.mdl"
new const metal_sound[] = "weapons/ric_metal-1.wav"
new const flesh_sound[] = "player/bhit_flesh-1.wav"

public plugin_init()
{
register_plugin("Grenades Are Heavy", "1.01 fakemeta", "AssKicR, AlexBreems")

register_event("HLTV", "newRound", "a", "1=0", "2=0")
register_forward(FM_Touch, "touch")

c_he = register_cvar("amx_heimpactdmg","10")
c_flash = register_cvar("amx_fbimpactdmg","10")
c_smoke = register_cvar("amx_sgimpactdmg","10")
c_ff = register_cvar("amx_obeyff", "1")
}

public plugin_precache()
{
precache_sound(metal_sound)
precache_sound(flesh_sound)
}

public newRound()
gCurrentNade=0


public touch(ptr, ptd)
{
if(pev_valid(ptr) && ptd!=0 && ptr!=0)
{
static ptrname[32], ptdname[32], ptrModel[32], ptrOwner
static bool:HitFriend, ObeyFF, FFOn
pev(ptr, pev_classname, ptrname, 31)
pev(ptd, pev_classname, ptdname, 31)

if(equal(ptrname, "grenade") && equal(ptdname, "player"))
{
if(gCurrentNade != ptr)
{
gCurrentNade=ptr
ptrOwner = pev(ptr, pev_owner)

HitFriend=false
ObeyFF = get_pcvar_num(c_ff) ? 1:0
FFOn = get_cvar_num("mp_friendlyfire") ? 1:0

if(!FFOn && ObeyFF)
{
if(get_user_team(ptd) == get_user_team(ptrOwner))
HitFriend=true
}

if(!HitFriend)
{
pev(ptr, pev_model, ptrModel, 31)

static Float:Vel[3], Float:speed
pev(ptr, pev_velocity, Vel)
speed = vector_length(Vel)

if(speed>MINSPEED)
{
if(equali(ptrModel, he_model))
{
emit_sound(ptr, CHAN_ITEM, metal_sound, 0.7, ATTN_NORM, 0, PITCH_NORM)
emit_sound(ptd, CHAN_BODY, flesh_sound, 0.7, ATTN_NORM, 0, PITCH_NORM)
ImpactDamage(ptd,ptr)
ScreenShake(ptd, 14, 14, 14)
ExtraDamage(ptd, ptrOwner, get_pcvar_float(c_he), "hegrenade")
}else
if(equali(ptrModel, flash_model))
{
emit_sound(ptr, CHAN_ITEM, metal_sound, 0.7, ATTN_NORM, 0, PITCH_NORM)
emit_sound(ptd, CHAN_BODY, flesh_sound, 0.7, ATTN_NORM, 0, PITCH_NORM)
ImpactDamage(ptd,ptr)
ScreenShake(ptd, 14, 14, 14)
ExtraDamage(ptd, ptrOwner, get_pcvar_float(c_flash), "flashbang")
}else
if(equali(ptrModel, smoke_model))
{
emit_sound(ptr, CHAN_ITEM, metal_sound, 0.7, ATTN_NORM, 0, PITCH_NORM)
emit_sound(ptd, CHAN_BODY, flesh_sound, 0.7, ATTN_NORM, 0, PITCH_NORM)
ImpactDamage(ptd,ptr)
ScreenShake(ptd, 14, 14, 14)
ExtraDamage(ptd, ptrOwner, get_pcvar_float(c_smoke), "smokegrenade")
}
}
}
}
}
}
}

public ExtraDamage(id, attacker, Float:damage, weaponDescription[])
{
if(is_user_alive(id))
{
new Float:newHealth = pev(id, pev_health) - damage

if(newHealth<1.0)
{
user_silentkill(id)

if(get_user_team(id) == get_user_team(attacker))
set_pev(attacker, pev_frags, pev(attacker, pev_frags)-1.0)
else
set_pev(attacker, pev_frags, pev(attacker, pev_frags)+1.0)

make_deathmsg(attacker, id, 0, weaponDescription)

refresh_scoreboard(attacker)
refresh_scoreboard(id)
}

set_pev(id, pev_health, newHealth)
}
}

stock ScreenShake(id, amplitude, duration, frequency)
{
if(is_user_alive(id))
{
message_begin(MSG_ONE, 97, {0,0,0}, id)
write_short(1<<amplitude)
write_short(1<<duration)
write_short(1<<frequency)
message_end()
}
}

stock ImpactDamage(id, grenadeid)
{
if(is_user_alive(id))
{
new Float:gorigin[3], origin[3]
pev(grenadeid, pev_origin, gorigin)
origin[0]=floatround(gorigin[0])
origin[1]=floatround(gorigin[1])
origin[2]=floatround(gorigin[2])

message_begin(MSG_ONE, 71, {0,0,0}, id)
write_byte(30) // dmg_save
write_byte(30) // dmg_take
write_long(0) // visibleDamageBits
write_coord(origin[0]) // damageOrigin.x
write_coord(origin[1]) // damageOrigin.y
write_coord(origin[2]) // damageOrigin.z
message_end()
}
}

stock refresh_scoreboard(id)
{
message_begin(MSG_ALL, 85)
write_byte(id)
write_short(get_user_frags(id))
write_short(get_user_deaths(id))
write_short(0)
write_short(get_user_team(id))
message_end()
}


Отредактировал: C1_, - 26.1.2014, 20:34
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
exec1337
сообщение 26.1.2014, 20:37
Сообщение #54
Стаж: 13 лет

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

proff_q, интересно, на сколько вас хватит :)

Вы хоть спасибку то тыкаете за плугины. Он же врямя/силы тратит...
ТС, а вы платно помогаете с кодингом?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 26.1.2014, 20:51
Сообщение #55
Стаж: 14 лет

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

sllrdp,
Код:
#include <server_query>

Инклуд закиньте Прикрепленный файл  server_query.rar ( 2,62 килобайт ) Кол-во скачиваний: 5


exec1337,
Надолго хватит, я не буду торопиться, если люди хотят бесплатной помощи, пусть ждут. Например, некоторые функции для меня незнакомы и мне нужно время для ознакомления с ними.
Цитата
P.S.S. Мой уровень знаний в программировании не позволяет мне изготавливать плагины за $,
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
exec1337
сообщение 26.1.2014, 21:02
Сообщение #56
Стаж: 13 лет

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

proff_q, это я видел, но пока ещё не было не одного ТЗ, которое вы бы не 'утянули'
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя proff_q
сообщение 26.1.2014, 21:09
Сообщение #57
Стаж: 14 лет

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

exec1337,
Так по сути ничего сложного и не было. На самом деле, скриптингу уже некуда дальше идти, все, что можно было, уже реализовали, может кусками в разных плагинах, но функции уж точно все были использованы, так что гугл + копипаст + мозг = результат.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 26.1.2014, 21:15
Сообщение #58
Стаж: 12 лет

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

насчет гранаты, если не логгирует то вот пример

Код:


if(get_user_team(id) != get_user_team(i)) {
user_silentkill(i)
make_deathmsg(id,i,0,"grenade")
}



http://amxxmodx.ru/core/message_stocksinc/...tve-igroka.html

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


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Aikido
сообщение 26.1.2014, 21:25
Сообщение #59


Стаж: 12 лет

Сообщений: 287
Благодарностей: 326
Полезность: 1102

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

proff_q, протестил не тестовые сервера, не редиректит с первого на второго если на сканируемом сервере ( то есть второй ) 31/32.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя TarikYuzkiv
сообщение 26.1.2014, 21:36
Сообщение #60
Стаж: 13 лет

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

Из-за плагина падает сервер. Никакой последовательности падений не наблюдается.

Возможно что-то с mysql'ом связано, лично я в этом мало что понимаю.

Скрытый текст
Код
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>
#include <sqlx>
#include <colorchat>

#define PLUGIN "Amx Registration"
#define VERSION "1.3"
#define AUTHOR "SerejQa"

new bool:registered[33] = {false, ...}
new bool:new_password[33] = {true, ...}
new Handle:db_players
new password_field[8]
new table_name[32]
new password_length

new const FLAG[] = "o"

// ================================================================================
=================

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    //Commands
    //register_clcmd("say /register", "register_nickname", -1, "- register your nickname")
    //register_clcmd("say /remove", "remove_nickname", -1, "- remove your nickname's password")
    //register_clcmd("say /status", "db_nickname_status", -1, "- nickname's status (registered or not)")
    //register_clcmd("say /pwchange", "change_password", -1, "- change password for your nickname")
    register_clcmd("say /reg", "rns_menu", -1, "- register") //Kreedz main menu
    register_clcmd("say /reginfo", "showinfo", -1, "- register") //Kreedz main menu
    register_clcmd("say_team /reginfo", "showinfo", -1, "- register") //Kreedz main menu
    register_clcmd("regamenu", "rns_menu", -1, "- register") //Kreedz main menu
    register_concmd("NN_password", "set_password", -1, "<password>")
    
    //Menu
    register_menucmd(register_menuid("RNS Menu"), 1023, "actionRNS_Menu")
    
    //Cvars
    register_cvar("amx_reg_password_field", "^"_nn^"")
    register_cvar("amx_reg_table", "amx_players")
    register_cvar("amx_reg_password_length", "16")
    register_cvar("amx_reg_db_type", "mysql")
    register_cvar("amx_reg_db_host", "127.0.0.1")
    register_cvar("amx_reg_db_user", "root")
    register_cvar("amx_reg_db_pass", "")
    register_cvar("amx_reg_db_name", "amx")
    
    RegisterHam(Ham_Spawn, "player", "HamSpawn")

    //Dictionary
    register_dictionary("amx_registration.txt")
}

// ================================================================================
=================
// Initialize a database when all configuration files have been loaded
// ================================================================================
=================

public plugin_cfg()
{
    new type[12]
    
    SQL_GetAffinity(type, 11)
    if(equali(type, "sqlite")) SQL_SetAffinity("sqlite")
    set_task(0.1, "db_init")
}

// ================================================================================
=================
// Database functions
// ================================================================================
=================

public db_init()
{
    static host[32], user[32], pass[32], name[32], type[12]
    new query[300]
    
    get_cvar_string("amx_reg_password_field", password_field, 7)
    get_cvar_string("amx_reg_table", table_name, 31)
    password_length = get_cvar_num("amx_reg_password_length")
    get_cvar_string("amx_reg_db_host", host, 31)
    get_cvar_string("amx_reg_db_user", user, 31)
    get_cvar_string("amx_reg_db_pass", pass, 31)
    get_cvar_string("amx_reg_db_name", name, 31)
    get_cvar_string("amx_reg_db_type", type, 11)
    
    db_players = SQL_MakeDbTuple(host, user, pass, name)
    
    //Creating table (if table isn't exists)
    //Structure: id (auto), username, password, registration date, userip, steamid
    if(equali(type, "sqlite"))
    {
        formatex(query, 299, "CREATE TABLE IF NOT EXISTS %s (\
        id INTEGER,\
        username VARCHAR(32) NOT NULL DEFAULT '',\
        password VARCHAR(32) NOT NULL DEFAULT '',\
        date VARCHAR(10) NOT NULL DEFAULT '',\
        ip VARCHAR(20) NOT NULL DEFAULT '',\
        steamid VARCHAR(32) NOT NULL DEFAULT '',\
        PRIMARY KEY (id))", table_name)
    }
    else
    {
        formatex(query, 299, "CREATE TABLE IF NOT EXISTS `%s` (\
        `id` int(12) NOT NULL auto_increment,\
        `username` varchar(32) default NULL,\
        `password` varchar(32) default NULL,\
        `date` varchar(10) default NULL,\
        `ip` varchar(20) default NULL,\
        `steamid` varchar(32) default NULL,\
        PRIMARY KEY (`id`))", table_name)
    }
    
    SQL_ThreadQuery(db_players, "db_generic_handler", query)
}

// ================================================================================
=================

public db_generic_handler(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
{
    return query_failed(failstate, error, errnum)
}

// ================================================================================
=================

public query_failed(failstate, error[], errnum)
{
    if(failstate == TQUERY_CONNECT_FAILED)
    {
        log_amx("[AMXX] Couldn't connect to database: %s", error)
        return 1
    }
    else if(failstate == TQUERY_QUERY_FAILED)
    {
        log_amx("[AMXX] Query failed: %s", error)
        return 1
    }
    
    if(errnum)
    {
        log_amx("[AMXX] Query Error: %s", error)
        return 1
    }
    
    return 0
}

// ================================================================================
=================

public db_login(id)
{
    new query[151]
    new username[32]
    new data[1]
    
    data[0] = id
    
    get_user_authid(id, username, 31)
    
    //Finding username in database
    formatex(query, 150, "SELECT id, username, password, date, ip, steamid FROM %s WHERE username=^"%s^"", table_name, username)
    SQL_ThreadQuery(db_players, "db_login_handler", query, data, 2)
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================

public db_save(id, pw[])
{
    new query[351]
    new username[32]
    new regdate[32]
    new userip[20]
    new authid[32]
    new data[1]
    new type[12]
    
    data[0] = id
    
    get_user_authid(id, username, 31)
    get_time("%d.%m.%Y", regdate, 31)
    get_user_ip(id, userip, 19, 1)
    get_user_name(id, authid, 31)
    
    //Writing user info to a database
    get_cvar_string("amx_reg_db_type", type, 11)
    
    if(equali(type, "sqlite"))
    {
        formatex(query, 350, "INSERT INTO %s (username, password, date, ip, steamid) values (^"%s^", ^"%s^", ^"%s^", ^"%s^", ^"%s^")", table_name, username, pw, regdate, userip, authid)
    }
    else
    {
        formatex(query, 350, "INSERT INTO %s (username, password, date, ip, steamid) values (^"%s^", md5(^"%s^"), ^"%s^", ^"%s^", ^"%s^")", table_name, username, pw, regdate, userip, authid)
    }
    
    SQL_ThreadQuery(db_players, "db_check_error_handler", query, data, 2)
    
    client_cmd(id, "setinfo ^"%s^" ^"%s^"", password_field, pw) //Prevent from kicking
    client_print(id, print_chat, "* %L", id, "NN_PW_CREATED")
    console_print(id, "=================================================")
    console_print(id, "|| %L", id, "NN_SUCCESS_MSG1")
    console_print(id, "|| %L", id, "NN_SUCCESS_MSG2", password_field, pw)
    console_print(id, "|| %L", id, "NN_SUCCESS_MSG3")
    console_print(id, "|| %L", id, "NN_SUCCESS_MSG4")
    console_print(id, "=================================================")
    registered[id] = true
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================

public db_remove(id)
{
    new query[351]
    new username[32]
    new data[1]
    
    data[0] = id
    
    get_user_authid(id, username, 31)
    
    //Deleting row contains user's data from database
    formatex(query, 350, "DELETE FROM %s WHERE username=^"%s^"", table_name, username)
    SQL_ThreadQuery(db_players, "db_check_error_handler", query, data, 2)
    
    client_print(id, print_chat, "* %L", id, "NN_REMOVED")
    registered[id] = false
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================
public HamSpawn(id)
{
    set_task(0.1, "Bonus_GiveUser", id)
}

public Bonus_GiveUser(id)
{
    if (registered[id] && is_user_alive(id))
    {
                new CsArmorType:ArmorType
                new iArmor = cs_get_user_armor(id, ArmorType)
        cs_set_user_money(id, cs_get_user_money(id) + 100)
                if(iArmor < 91){
                     cs_set_user_armor(id, iArmor + 10, ArmorType)
                }
    }
}
// ================================================================================
=================
public db_change_password(id, pw[])
{
    new query[101]
    new username[32]
    new data[1]
    new type[12]
    
    data[0] = id
    
    get_user_authid(id, username, 31)
    get_cvar_string("amx_reg_db_type", type, 11)
    
    //Rewrite password
    if(equali(type, "sqlite")) formatex(query, 100, "UPDATE %s SET password=^"%s^" WHERE username=^"%s^"", table_name, pw, username)
    else formatex(query, 100, "UPDATE %s SET password=md5(^"%s^") WHERE username=^"%s^"", table_name, pw, username)
    
    SQL_ThreadQuery(db_players, "db_check_error_handler", query, data, 2)
    
    client_cmd(id, "setinfo ^"%s^" ^"%s^"", password_field, pw) //Prevent from kicking
    console_print(id, "=================================================")
    console_print(id, "|| %L", id, "NN_SUCCESS_MSG1")
    console_print(id, "|| %L", id, "NN_SUCCESS_MSG2", password_field, pw)
    console_print(id, "|| %L", id, "NN_SUCCESS_MSG3")
    console_print(id, "|| %L", id, "NN_SUCCESS_MSG4")
    console_print(id, "=================================================")
    client_print(id, print_chat, "* %L", id, "NN_PW_UPDATED")
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================

public db_nickname_status(id)
{
    new query[151]
    new username[32]
    new data[1]
    
    data[0] = id
    
    get_user_authid(id, username, 31)
    
    formatex(query, 150, "SELECT id, username, password, date, ip, steamid FROM %s WHERE username=^"%s^"", table_name, username)
    SQL_ThreadQuery(db_players, "db_nickname_status_handler", query, data, 2)
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================

public db_login_handler(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
{
    new id = data[0]
    new type[12]
    
    if(SQL_NumResults(query) < 1) //If no results for a query
    {
        registered[id] = false
        
        return PLUGIN_HANDLED
    }
    
    if(!query_failed(failstate, error, errnum)) //Success
    {
        new client_password[34], db_client_password[34], md5_password[34]
        
        registered[id] = true
        
        get_user_info(id, password_field, client_password, 33) //Reading a password saved in client's config
        get_cvar_string("amx_reg_db_type", type, 11)
        
        if(equali(type, "sqlite")) copy(md5_password, 33, client_password) //Not encrypted password for sqlite
        else md5(client_password, md5_password) //Encrypting client's password :O
        
        SQL_ReadResult(query, 2, db_client_password, 65) //Reading a password saved in database
        
        if(!equal(md5_password, db_client_password)) //Compare two arguments
        {
            server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "NN_PW_INV")
        }
                else
                {
            new flag = read_flags(FLAG)
            set_user_flags(id, flag)
                }
    }
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================

public db_nickname_status_handler(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
{
    new id = data[0]
    
    if(SQL_NumResults(query) < 1) //If no results for a query
    {
        client_print(id, print_chat, "* %L", id, "NN_NOT_REG")
        
        return PLUGIN_HANDLED
    }
    
    if(!query_failed(failstate, error, errnum)) //Success
    {
        client_print(id, print_chat, "* %L", id, "NN_REG")
    }
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================

public db_check_error_handler(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
{
    new id = data[0]
    
    if(query_failed(failstate, error, errnum)) //Fail
    {
        client_print(id, print_chat, "* %L", id, "NN_DB_ERROR")
        
        return PLUGIN_HANDLED
    }
    
    return PLUGIN_CONTINUE
}

// ================================================================================
=================
// Check player if he authorized
// ================================================================================
=================

public client_authorized(id)
{
    if(is_user_bot(id) || is_user_hltv(id))
    {
        return PLUGIN_HANDLED
    }
    
    set_task(1.0, "db_login", id)
    
    return PLUGIN_CONTINUE
}

// ================================================================================
=================
// Send message to unregistered player
// ================================================================================
=================

public client_putinserver(id)
{
    if(is_user_bot(id) || is_user_hltv(id))
    {
        return PLUGIN_HANDLED
    }
    
    db_login(id)
    set_task(140.0, "message_reg", id , _,_, "b" )
    
    return PLUGIN_CONTINUE
}

// ================================================================================
=================

public message_reg(id)
{
    if(registered[id] || (!(get_user_flags(id) & ADMIN_LEVEL_G))) //If is user registered - do nothing
    {
        remove_task(id)
        
        return PLUGIN_HANDLED
    }
    
    //new text[128]
    
    //text[0] = 0x04
    //formatex(text[1], 126, "%L", id, "NN_CON_MSG")
    //client_print(id, print_chat, text)

        if(is_user_connected(id)){
        ColorChat(id, TEAM_COLOR, "^4[^3INFO^4] ^1Хотите халявные бонусы? Чтоб получить введите ^4/reg ^1в чате.")
                //client_print(id, print_chat, "1")
        }

    return PLUGIN_CONTINUE
}

// ================================================================================
=================
// Check player if he changed his info
// ================================================================================
=================

public client_infochanged(id)
{
    if(is_user_bot(id) || is_user_hltv(id))
    {
        return PLUGIN_HANDLED
    }
    
    set_task(1.0, "db_login", id)
    
    return PLUGIN_CONTINUE
}

// ================================================================================
=================
// Player disconnected
// ================================================================================
=================

public client_disconnect(id)
{
    registered[id] = false

        if( task_exists( id ) ){
                remove_task( id );
        }
}

// ================================================================================
=================
// say /register
// ================================================================================
=================

public register_nickname(id)
{
    //This option is only available for unregistered users
    if(registered[id])
    {
        client_print(id, print_chat, "* %L", id, "NN_ALR_REG")
        
        return PLUGIN_HANDLED
    }
    else
    {
        new_password[id] = true
        client_print(id, print_chat, "* %L", id, "NN_NEW_PW1")
        client_cmd(id, "messagemode NN_password")
    }
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================
// say /remove
// ================================================================================
=================

public remove_nickname(id)
{
    //This option is only available for registered users
    if(!registered[id])
    {
        client_print(id, print_chat, "* %L", id, "NN_NOT_REG")
        
        return PLUGIN_HANDLED
    }
    
    db_remove(id)
    
    return PLUGIN_HANDLED
}

public showinfo(id)
{
        if(get_user_flags(id) & ADMIN_LEVEL_G){
    show_motd(id, "reginfo.txt")
        }
}

// ================================================================================
=================
// say /pwchange
// ================================================================================
=================

public change_password(id)
{
    //This option is only available for registered users
    if(!registered[id])
    {
        client_print(id, print_chat, "* %L", id, "NN_NOT_REG")
        
        return PLUGIN_HANDLED
    }
    
    set_task(1.0, "task_password", id) //Prevent aliases :O
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================

public task_password(id)
{
    if(task_exists(id))
    {
        new_password[id] = false
        client_print(id, print_chat, "* %L", id, "NN_NEW_PW")
        client_cmd(id, "messagemode NN_password")
    }
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================

public set_password(id)
{
        if(get_user_flags(id) & ADMIN_LEVEL_G)
        {
    new pw[34]
    
    read_args(pw, sizeof(pw) - 1) //Read argument that player typed
    remove_quotes(pw)
    continue_setting_password(id, pw)

    }
    return PLUGIN_HANDLED
}

// ================================================================================
=================

continue_setting_password(id, pw[])
{
    if(strlen(pw) > password_length) //Maximum password length :O
    {
        client_print(id, print_chat, "* %L", id, "NN_PW_MAX_LENGTH", password_length)
        
        return PLUGIN_HANDLED
    }
    else if(strlen(pw) < 4) //Minimum password length :O
    {
        client_print(id, print_chat, "* %L", id, "NN_PW_MIN_LENGTH")
        
        return PLUGIN_HANDLED
    }
    
    //New registration or changing password
    new_password[id] ? db_save(id, pw) : db_change_password(id, pw)
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================
// RNS Menu
// ================================================================================
=================

public actionRNS_Menu(id, key)
{
    switch(key)
    {
        case 0:
        {
            register_nickname(id)
        }
        case 1:
        {
            change_password(id)
        }
        case 2:
        {
            remove_nickname(id)
        }
        case 3:
        {
            showinfo(id)
        }
        case 9:
        {
            return PLUGIN_HANDLED
        }
    }
    
    return PLUGIN_HANDLED
}

// ================================================================================
=================

public rns_menu(id)
{
        if(!(get_user_flags(id) & ADMIN_LEVEL_G))
       {
        client_print(id, print_chat, "%L", id, "CHATOFFRETURN")
        return
        }

    new menu[1024]
    new keys = MENU_KEY_0
    new len = format(menu, 1023, "\r%L^n%L^n^n", id, registered[id] ? "NN_MENU_REG" : "NN_MENU_NOTREG",  id, "NN_MENU")
    
    if(registered[id])
    {
        len += format(menu[len], 1023 - len, "\d1. %L^n", id, "NN_MENU_REGISTER")
        len += format(menu[len], 1023 - len, "\w2. %L^n", id, "NN_MENU_PWCHANGE")
        len += format(menu[len], 1023 - len, "\w3. %L^n", id, "NN_MENU_PWREMOVE")
        len += format(menu[len], 1023 - len, "\w4. %L^n", id, "NN_MENU_INFO1")
        
        keys |= MENU_KEY_2 | MENU_KEY_3 | MENU_KEY_4
    }
    else
    {
        len += format(menu[len], 1023 - len, "\w1. %L^n", id, "NN_MENU_REGISTER")
        len += format(menu[len], 1023 - len, "\d2. %L^n", id, "NN_MENU_PWCHANGE")
        len += format(menu[len], 1023 - len, "\d3. %L^n", id, "NN_MENU_PWREMOVE")
        len += format(menu[len], 1023 - len, "\w4. %L^n", id, "NN_MENU_INFO")
        
        keys |= MENU_KEY_1 | MENU_KEY_4
    }
    
    len += format(menu[len], 1023 - len, "^n\w0. %L", id, "EXIT")
    
    show_menu(id, keys, menu, -1, "RNS Menu")
}

// ================================================================================
=================


Буду благодарен за помощь. : )

Отредактировал: TarikYuzkiv, - 26.1.2014, 21:36
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
13 страниц V  « 2 3 4 ... 11 12 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: