|
Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/
|
Плагин к myAC
|
|
| X-factor | Дата: Воскресенье, 18.01.2009, 13:32:17 | Сообщение # 1 |
|
Лейтенант
Группа: Пользователи
Сообщений: 58
Статус: Не в сети
| Привет всем скриптерам!!!! Есть проблема с плагом!!! Чучуть переделал плаг для античита myAC, а именно добавил в руки пингвина вместо оружия и добавил server_cmd("amx_tsay red urPok %s [IP:%s] KICKED u3 CePBePa",name,ipa)!!! С пингвином проблем нет, а вот с amx_tsay есть, а именно, при первом заходе игрока кикает и всем вылазит сообщение в левом нижнем углу красным цветом: urPok NICK [IP:xxx.xxx.xxx] KICKED u3 CePBePa. Так я и хотел!!! Но при втором заходе его кикает, но сообщение уже выглядит так: urPok [IP:] KICKED u3 CePBePa!!! Непонимаю почему!!! Уже пробывал и так и сяк, и под отдельный set_task ставить с большим временем, что бы через 2 сек после кика показывало, но результат тот же!!! Вот код плага, подскажите в чем трабла плз: Code #include <amxmodx> #include <amxmisc> #include <engine> #include <fun>
#define PLUGIN "myAC.Kick" #define VERSION "1.1" #define AUTHOR "Wonder"
#define MAX_IPS 50 #define KICKTIME 35 #define REASON "[myAC] 3a/7yCTuTe KJlueHT myAC, a /7oToM CS1.6!!! Cka4aTb:http://cs-volia.at.ua"
new g_ips[MAX_IPS][16] new g_config[64] new g_ip
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) }
public plugin_precache() { precache_model("models/pingwin/myAC_pingwin.mdl") }
public plugin_cfg() { get_configsdir(g_config,63) format(g_config,63,"%s/whitelist.txt",g_config) load_settings() }
public delayed_kick(userid) {
server_cmd("kick #%d %s", userid, REASON) new ipa[16] get_user_ip(userid, ipa, 15, 1) new name[32] get_user_name(userid, name, 31) server_cmd("amx_tsay red urPok %s [IP:%s] KICKED u3 CePBePa",name,ipa) }
public kickmotd(id){ new name[32] get_user_name(id,name,31)
new clip, ammo, weapon = get_user_weapon(id, clip, ammo)
show_motd(id,"/addons/amxmodx/plugins/kickmotd.txt",name) set_task(4.0,"kickmotd",id) if(weapon==CSW_P228 || weapon==CSW_SCOUT || weapon==CSW_HEGRENADE || weapon==CSW_XM1014 || weapon==CSW_C4 || weapon==CSW_MAC10 || weapon==CSW_AUG || weapon==CSW_SMOKEGRENADE || weapon==CSW_ELITE || weapon==CSW_FIVESEVEN || weapon==CSW_UMP45 || weapon==CSW_SG550) { strip_user_weapons(id) entity_set_string(id,EV_SZ_viewmodel,"models/pingwin/myAC_pingwin.mdl") } else if(weapon==CSW_GALI || weapon==CSW_GALIL || weapon==CSW_FAMAS || weapon==CSW_USP || weapon==CSW_GLOCK18 || weapon==CSW_AWP || weapon==CSW_MP5NAVY || weapon==CSW_M249 || weapon==CSW_M3 || weapon==CSW_M4A1 || weapon==CSW_TMP || weapon==CSW_G3SG1 || weapon==CSW_FLASHBANG || weapon==CSW_DEAGLE || weapon==CSW_SG552 || weapon==CSW_AK47 || weapon==CSW_KNIFE || weapon==CSW_P90) { strip_user_weapons(id) entity_set_string(id,EV_SZ_viewmodel,"models/pingwin/myAC_pingwin.mdl") } return PLUGIN_HANDLED }
public client_connect(id){ new infoField[32] new ip[16]
get_user_ip(id,ip,15,1) for (new i=0; i<g_ip; ++i) { if (equal(ip,g_ips[i])) { return PLUGIN_CONTINUE } } get_user_info(id, "*myAC", infoField, 32)
if (strlen(infoField) <= 0) { new userid=get_user_userid(id) set_task(float(KICKTIME), "delayed_kick", userid) set_task(2.3, "kickmotd", userid) } return PLUGIN_CONTINUE }
public load_settings() { if (!file_exists(g_config)) { return PLUGIN_CONTINUE } new string[16],line,len while (read_file(g_config,line++,string,15,len)) { if (string[0]==';' || !len) continue copy(g_ips[g_ip],15,string) g_ip++ } return PLUGIN_CONTINUE }
|
| |
|
|
| PomanoB | Дата: Воскресенье, 18.01.2009, 14:35:27 | Сообщение # 2 |
 Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Ты сначало его кикаешь потом пытаешсь ип узнать Поставь server_cmd("kick #%d %s", userid, REASON) в самый низ функции delayed_kick
http://romanov4400.mybrute.com
|
| |
|
|
| X-factor | Дата: Воскресенье, 18.01.2009, 14:46:23 | Сообщение # 3 |
|
Лейтенант
Группа: Пользователи
Сообщений: 58
Статус: Не в сети
| Спасибо попробую!!! Но почему оно первый раз, когда заходит игрок работает?
|
| |
|
|
| PomanoB | Дата: Воскресенье, 18.01.2009, 14:47:42 | Сообщение # 4 |
 Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| Не знаю)
http://romanov4400.mybrute.com
|
| |
|
|
| X-factor | Дата: Воскресенье, 18.01.2009, 20:14:41 | Сообщение # 5 |
|
Лейтенант
Группа: Пользователи
Сообщений: 58
Статус: Не в сети
| PomanoB Не, тоже самое!!! Даже пробовал в отдельный сет таск на 2 секунды раньше, что бы сообщение красное вылазило, но опять же первый раз нормально, а дальше нехочет!!! Может нада чтото типа Code public client_disconnect(userid){ ... // тут команда, которая обновит даные клиента } Токо я незнаю какая нада команда!!!((( И в этом ли дело!!!
Сообщение отредактировал X-factor - Воскресенье, 18.01.2009, 20:15:32 |
| |
|
|
| DaTa | Дата: Понедельник, 19.01.2009, 01:16:07 | Сообщение # 6 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| Quote (X-factor) public client_disconnect(userid){ ... // тут команда, которая обновит даные клиента } Тут уже никакая команда не догонит клиента - он ушел с сервера. Попробуй в своем плагине поставить проверки is_user_connected - возможно он успевает выйти. Не выводит ли плагин каких-либо ошибок в консоль? Code public kickmotd(id){ new name[32] get_user_name(id,name,31)
new clip, ammo, weapon = get_user_weapon(id, clip, ammo)
show_motd(id,"/addons/amxmodx/plugins/kickmotd.txt",name) set_task(4.0,"kickmotd",id) Это рекурсия, функция будет вызываться каждые 4 секунды после кикнутого игрока, исправь.
|
| |
|
|
| X-factor | Дата: Четверг, 22.01.2009, 16:53:43 | Сообщение # 7 |
|
Лейтенант
Группа: Пользователи
Сообщений: 58
Статус: Не в сети
| DaTa Нет! никаких ошибок невыдает в консоль!!! Можно по подробней к чему именно приставлять проверку is_user_connected? Пробовал ее приставить так: Code if (is_user_connected(userid)){ set_task(float(KICKTIME), "deleyed_kick", userid) } Но оно наоборот невыполняло deleyed_kick воопще!!! Я попробовал на отдельный set_task, который срабатывает на 2 секунды раньше чем кик, поставить команду amx_tsay, но всё равно тоже самое!!! Ведь игрок же ещё на сервере, почему неберёт его даных, имени и ипа??? Да, и поподробней как изюавится от рекурсии!!! Пробовал уберать set_task(4.0,"kickmotd",id), но kickmotd вопще не выполнялся!!! Добавлено (2009-01-22, 4:53 Pm) --------------------------------------------- DaTa Ответь пожалуйста!!!!
|
| |
|
|
| DaTa | Дата: Пятница, 23.01.2009, 03:58:13 | Сообщение # 8 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| Quote (X-factor) Ответь пожалуйста!!!! Что тут отвечать? Если ты обратился в этот раздел, предполагается, что у тебя есть базовые навыки скриптинга. Значит ты можешь почитать описание функции set_task, посмотреть примеры в других плагинах и задуматься о ее работе. Ты должен понять, что игрок может выйти сразу же после того, как ты задал set_task и что set_task может выполнится для игрока, который уже отсутствует на сервере. Есть еще вариант решения - функция remove_task. Quote (X-factor) Да, и поподробней как изюавится от рекурсии!!! Пробовал уберать set_task(4.0,"kickmotd",id), но kickmotd вопще не выполнялся!!! Задумайся над фрагментом кода, поданном в моем сообщении выше.
|
| |
|
|
| X-factor | Дата: Пятница, 23.01.2009, 12:21:18 | Сообщение # 9 |
|
Лейтенант
Группа: Пользователи
Сообщений: 58
Статус: Не в сети
| DaTa Да втом то идело, что функцию set_task я изучал из уже готовых плагинов, и в них именно такое построение идёт, правда там есть remove_task, и уже сталкивался с проблемой, когда писал плагин для бана, который при бане даёт в руки игрока пингвина и мотд сообщение выскакивает каждые 4 секунды, и по истечению 20 секунд игрок банится. Проблема была в том, что когда время бана истекало и игроку, который был забанен вновь дался в руки пингвин и мотд сообщение (когда он опять зашол на сервер). И я вставил в код функцию remove_task! И всё стало нормально. Я это к чему, да к тому, что естественно я и здесь пробовал вставлять remove_task, но так, как это не бан, а кик, и ещё плагин для античита, то игрок спокойненько при повторном заходе играет себе без клиента античита!!! Мне это неподходит!!! Да, я незнаю всех ньюансов, секретов и тд и тп програмирования, но если бы я их знал, задавал бы я вопросы? ЗЫ: Тесты плагина я провожу один, то есть у меня 2 компа подключенные по лан, и можеш поверить, что никто неуспевает выйти из игры!!!)
|
| |
|
|
| DaTa | Дата: Пятница, 23.01.2009, 16:54:33 | Сообщение # 10 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| Короче, дай последнюю версию кода и скажи, что тебе надо от плагина
|
| |
|
|
| X-factor | Дата: Пятница, 23.01.2009, 18:17:00 | Сообщение # 11 |
|
Лейтенант
Группа: Пользователи
Сообщений: 58
Статус: Не в сети
| DaTa О, вот это я понимаю помощь!!! Вот код: Code #include <amxmodx> #include <amxmisc> #include <engine> #include <fun>
#define PLUGIN "myAC.Kick" #define VERSION "1.1" #define AUTHOR "Wonder"
#define MAX_IPS 50 #define KICKTIME 35 #define REASON "[myAC] 3a/7yCTuTe KJlueHT myAC, a /7oToM CS1.6!!! Cka4aTb:http://cs-volia.at.ua"
new g_ips[MAX_IPS][16] new g_config[64] new g_ip
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) }
public plugin_precache() { precache_model("models/pingwin/myAC_pingwin.mdl") }
public plugin_cfg() { get_configsdir(g_config,63) format(g_config,63,"%s/whitelist.txt",g_config) load_settings() }
public delayed_kick(userid) {
new ipa[16], name[32] get_user_ip(target, ipa, 15, 1) get_user_name(target, name, 31) server_cmd("amx_tsay red urPok %s [IP:%s] KICKED u3 CePBePa",name,ipa) server_cmd("kick #%d %s", userid, REASON) }
public kickmotd(id){ new name[32] get_user_name(id,name,31)
new clip, ammo, weapon = get_user_weapon(id, clip, ammo)
show_motd(id,"/addons/amxmodx/plugins/kickmotd.txt",name) set_task(4.0, "kickmotd", id) if(weapon==CSW_P228 || weapon==CSW_SCOUT || weapon==CSW_HEGRENADE || weapon==CSW_XM1014 || weapon==CSW_C4 || weapon==CSW_MAC10 || weapon==CSW_AUG || weapon==CSW_SMOKEGRENADE || weapon==CSW_ELITE || weapon==CSW_FIVESEVEN || weapon==CSW_UMP45 || weapon==CSW_SG550) { strip_user_weapons(id) entity_set_string(id,EV_SZ_viewmodel,"models/pingwin/myAC_pingwin.mdl") } else if(weapon==CSW_GALI || weapon==CSW_GALIL || weapon==CSW_FAMAS || weapon==CSW_USP || weapon==CSW_GLOCK18 || weapon==CSW_AWP || weapon==CSW_MP5NAVY || weapon==CSW_M249 || weapon==CSW_M3 || weapon==CSW_M4A1 || weapon==CSW_TMP || weapon==CSW_G3SG1 || weapon==CSW_FLASHBANG || weapon==CSW_DEAGLE || weapon==CSW_SG552 || weapon==CSW_AK47 || weapon==CSW_KNIFE || weapon==CSW_P90) { strip_user_weapons(id) entity_set_string(id,EV_SZ_viewmodel,"models/pingwin/myAC_pingwin.mdl") } return PLUGIN_CONTINUE }
public client_connect(id){ new infoField[32] new ip[16]
get_user_ip(id,ip,15,1) for (new i=0; i<g_ip; ++i) { if (equal(ip,g_ips[i])) { return PLUGIN_CONTINUE } } get_user_info(id, "*myAC", infoField, 32)
if (strlen(infoField) <= 0) { new userid=get_user_userid(id) set_task(float(KICKTIME), "delayed_kick", userid) set_task(2.3, "kickmotd", id) } return PLUGIN_CONTINUE }
public load_settings() { if (!file_exists(g_config)) { return PLUGIN_CONTINUE } new string[16],line,len while (read_file(g_config,line++,string,15,len)) { if (string[0]==';' || !len) continue copy(g_ips[g_ip],15,string) g_ip++ } return PLUGIN_CONTINUE }
public client_disconnect(id) { remove_task(id) return PLUGIN_CONTINUE } Что нужно: ну как видно из кода, что если ип прописан в файле whitelist.txt или запущен клиент, то плаг не должен работать! Если же нет то дать в руки пингвина и мотд сообщение, которое каждые 4 секунды вылазит и по истечению KICKTIME игрока кикает, а всем клиентам пишется в левом углу красным urPok Nick [IP:xxx.xxx.xxx] KICKED u3 CePBePa. Естественно, что бы при повторном заходе всё работало как и при первом заходе, а не так: urPok [IP:] KICKED u3 CePBePa. ЗЫ: Я тут немного проэксперементировал и попробовал функцию read_argv - результат: вместо ника пишет имя сервера, а ип правильно пишет, при повторном заходе тоже пишет имя сервера и ип правильный!!! Нада, что бы ник был всегда!!! Прошу помочь!!!
Сообщение отредактировал X-factor - Пятница, 23.01.2009, 18:30:28 |
| |
|
|
| DaTa | Дата: Суббота, 24.01.2009, 00:21:58 | Сообщение # 12 |
|
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Статус: Не в сети
| Quote (X-factor) Что нужно: ну как видно из кода, что если ип прописан в файле whitelist.txt или запущен клиент, то плаг не должен работать! Если же нет то дать в руки пингвина и мотд сообщение, которое каждые 4 секунды вылазит и по истечению KICKTIME игрока кикает, а всем клиентам пишется в левом углу красным urPok Nick [IP:xxx.xxx.xxx] KICKED u3 CePBePa. Естественно, что бы при повторном заходе всё работало как и при первом заходе, а не так: urPok [IP:] KICKED u3 CePBePa. ЗЫ: Я тут немного проэксперементировал и попробовал функцию read_argv - результат: вместо ника пишет имя сервера, а ип правильно пишет, при повторном заходе тоже пишет имя сервера и ип правильный!!! Нада, что бы ник был всегда!!! Прошу помочь!!! Добавил выбрасывание бомбы перед забиранием оружия. Сравнения айпи и считывание с файла не оптимизированы - лень. Тестировать не на чем, так что это будет твое задание ЗЫ отредактируй дефайны
|
| |
|
|
| X-factor | Дата: Суббота, 24.01.2009, 13:41:08 | Сообщение # 13 |
|
Лейтенант
Группа: Пользователи
Сообщений: 58
Статус: Не в сети
| DaTa СПАСИБО! Красава, всё правильно зделал, всё работает как нада и айпи нормально читается с whitelist.ini!!! Да, класно, когда шариш все ньансы и алгоритм построения!!! Я вот тоже хочю уметь, но не с чего учится!!! Учебиков по PAWN(SMALL) немогу нигде найти на русском!!! Только я так и не понял, почему в моем плаге небрались имена и айпишники, делал впринципе также! Правда там алгоритм построения был нетакой, наверное из-за этого? Есть вопрос для себя, что бы я знал, а то часто встречается, а я не знаю зачем оно нужно: if( !is_user_alive(id) ) - зачем здесь знак восклецания? id -=TASK_KICK - почему -=? != - что это значит? ЗЫ: если можна и если есть воопще ссылочки на разные символы в языке PAWN (что они означают и их приминение). Был бы очень благодарен!!! Пробывал искать, но безрезультатно!!!(
|
| |
|
|
| dArk | Дата: Суббота, 24.01.2009, 15:39:58 | Сообщение # 14 |
|
Подполковник
Группа: Cупер-модеры
Сообщений: 126
Статус: Не в сети
| ! - оператор инвертирования... Т.е. логическое <не> if(is_user_alive(id)) - если игрок живой, if(!is_user_alive(id)) - если игрок мёртв... != значит <не равно> id -= TASK_KICK это тоже самое что id = id - TASK_KICK в более оптимизированной и короткой форме.
|
| |
|
|
| PomanoB | Дата: Суббота, 24.01.2009, 17:40:19 | Сообщение # 15 |
 Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Статус: Не в сети
| X-factor, читай книжки по C в Pawn всё почти также
http://romanov4400.mybrute.com
|
| |
|
|
 | AMX Mod X Russian Community © 2006-2026  |  |
|
| |