AMX MOD X
Четверг, 22.01.2026, 20:20:11



Приветствую Вас Гость | RSS
[ Главная ] [ Плагин к myAC - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: slogic, AlMod  
Плагин к myAC
X-factorДата: Воскресенье, 18.01.2009, 13:32:17 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 58
Репутация: 2
Статус: Не в сети
Привет всем скриптерам!!!!
Есть проблема с плагом!!! Чучуть переделал плаг для античита 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
Репутация: 70
Статус: Не в сети
Ты сначало его кикаешь потом пытаешсь ип узнать
Поставь server_cmd("kick #%d %s", userid, REASON) в самый низ функции delayed_kick


http://romanov4400.mybrute.com
 
X-factorДата: Воскресенье, 18.01.2009, 14:46:23 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 58
Репутация: 2
Статус: Не в сети
Спасибо попробую!!! Но почему оно первый раз, когда заходит игрок работает?
 
PomanoBДата: Воскресенье, 18.01.2009, 14:47:42 | Сообщение # 4
Генералиссимус
Группа: Cупер-модеры
Сообщений: 1313
Репутация: 70
Статус: Не в сети
Не знаю)

http://romanov4400.mybrute.com
 
X-factorДата: Воскресенье, 18.01.2009, 20:14:41 | Сообщение # 5
Лейтенант
Группа: Пользователи
Сообщений: 58
Репутация: 2
Статус: Не в сети
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
Репутация: 16
Статус: Не в сети
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
Репутация: 2
Статус: Не в сети
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
Репутация: 16
Статус: Не в сети
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
Репутация: 2
Статус: Не в сети
DaTa
Да втом то идело, что функцию set_task я изучал из уже готовых плагинов, и в них именно такое построение идёт, правда там есть remove_task, и уже сталкивался с проблемой, когда писал плагин для бана, который при бане даёт в руки игрока пингвина и мотд сообщение выскакивает каждые 4 секунды, и по истечению 20 секунд игрок банится. Проблема была в том, что когда время бана истекало и игроку, который был забанен вновь дался в руки пингвин и мотд сообщение (когда он опять зашол на сервер). И я вставил в код функцию remove_task! И всё стало нормально.
Я это к чему, да к тому, что естественно я и здесь пробовал вставлять remove_task, но так, как это не бан, а кик, и ещё плагин для античита, то игрок спокойненько при повторном заходе играет себе без клиента античита!!! Мне это неподходит!!! Да, я незнаю всех ньюансов, секретов и тд и тп програмирования, но если бы я их знал, задавал бы я вопросы?

ЗЫ: Тесты плагина я провожу один, то есть у меня 2 компа подключенные по лан, и можеш поверить, что никто неуспевает выйти из игры!!!)

 
DaTaДата: Пятница, 23.01.2009, 16:54:33 | Сообщение # 10
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
Короче, дай последнюю версию кода и скажи, что тебе надо от плагина :D
 
X-factorДата: Пятница, 23.01.2009, 18:17:00 | Сообщение # 11
Лейтенант
Группа: Пользователи
Сообщений: 58
Репутация: 2
Статус: Не в сети
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
Репутация: 16
Статус: Не в сети
Quote (X-factor)
Что нужно: ну как видно из кода, что если ип прописан в файле whitelist.txt или запущен клиент, то плаг не должен работать! Если же нет то дать в руки пингвина и мотд сообщение, которое каждые 4 секунды вылазит и по истечению KICKTIME игрока кикает, а всем клиентам пишется в левом углу красным urPok Nick [IP:xxx.xxx.xxx] KICKED u3 CePBePa. Естественно, что бы при повторном заходе всё работало как и при первом заходе, а не так: urPok [IP:] KICKED u3 CePBePa.

ЗЫ: Я тут немного проэксперементировал и попробовал функцию read_argv - результат: вместо ника пишет имя сервера, а ип правильно пишет, при повторном заходе тоже пишет имя сервера и ип правильный!!! Нада, что бы ник был всегда!!! Прошу помочь!!!


Добавил выбрасывание бомбы перед забиранием оружия. Сравнения айпи и считывание с файла не оптимизированы - лень. Тестировать не на чем, так что это будет твое задание :D

ЗЫ отредактируй дефайны

Прикрепления: myAC_kicker1.sma (2.5 Kb)
 
X-factorДата: Суббота, 24.01.2009, 13:41:08 | Сообщение # 13
Лейтенант
Группа: Пользователи
Сообщений: 58
Репутация: 2
Статус: Не в сети
DaTa
СПАСИБО!

Красава, всё правильно зделал, всё работает как нада и айпи нормально читается с whitelist.ini!!! Да, класно, когда шариш все ньансы и алгоритм построения!!! Я вот тоже хочю уметь, но не с чего учится!!! Учебиков по PAWN(SMALL) немогу нигде найти на русском!!!

Только я так и не понял, почему в моем плаге небрались имена и айпишники, делал впринципе также! Правда там алгоритм построения был нетакой, наверное из-за этого?

Есть вопрос для себя, что бы я знал, а то часто встречается, а я не знаю зачем оно нужно:
if( !is_user_alive(id) ) - зачем здесь знак восклецания?

id -=TASK_KICK - почему -=?

!= - что это значит?

ЗЫ: если можна и если есть воопще ссылочки на разные символы в языке PAWN (что они означают и их приминение). Был бы очень благодарен!!! Пробывал искать, но безрезультатно!!!(

 
dArkДата: Суббота, 24.01.2009, 15:39:58 | Сообщение # 14
Подполковник
Группа: Cупер-модеры
Сообщений: 126
Репутация: 1
Статус: Не в сети
! - оператор инвертирования... Т.е. логическое <не>

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
Репутация: 70
Статус: Не в сети
X-factor, читай книжки по C в Pawn всё почти также

http://romanov4400.mybrute.com
 
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

AMX Mod X Russian Community © 2006-2026