AMX MOD X
Пятница, 03.05.2024, 14:08:10



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

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

  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Блокировка команд клиента (Блокировать надоне всегда.)
Блокировка команд клиента
DaTaДата: Воскресенье, 13.12.2009, 21:39:10 | Сообщение # 16
Генерал-полковник
Группа: Cупер-модеры
Сообщений: 1025
Репутация: 16
Статус: Не в сети
В общем ради интереса написал плагин
Quote
public test(id)
{
if(  id  )
return 1;
}

пропустил через AmxxDump, получил
Quote
No module data detected.
0x00000008 public test(id)
codestart  codeend    address    type         name
0x00000008 0x0000003C 0x0000000C local    val id
0x00000008 0x0000003C 0x00000008 public       test

0x8                        PROC              ; public test(id)
0xC                       BREAK              ; test2.sma:0
0x10                      BREAK              ; test2.sma:2
0x14                 LOAD.S.pri  0xC         ; id
0x1C                       JZER  0x34        ; jump_0
0x24                      BREAK              ; test2.sma:3
0x28                  CONST.pri  0x1         ; signed=1 float=0.000000

0x30                       RETN
0x34                   ZERO.pri              ; target:jump_0
0x38                       RETN
file: test2.sma


Перед последним возвратом
Quote
public test(id)
{
if(  id  )
return 1;
//который находиться здесь
}

выполняется ZERO.pri, что обнуляет реестр pri в котором храниться возвращаемое значение.
Так как PLUGIN_CONTINUE == 0, то твой плагин скомпилируется как
Quote
public plugin_init(){
register_clcmd("say /start","desable")
}
public desable(id){
if(id==test[id]||id==test3[id]){
ColorChat(id,GREEN, "You are in a duel. Command disabled.");
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}

Но я не рекомендую первый вариант, потому что другие скриптеры могут не понять код, можешь сам сбиться с толку и в следующих версиях компилятора могут произойти изменения, которые не дадут скомпилироваться. И вообще варнинги - это ламерство, не красиво :D

_______
Если плагин не будет возвращать значение

Quote
public test(id)
{
if(  id  )
return;
}

Quote
No module data detected.
0x00000008 public test(id)
codestart  codeend    address    type         name
0x00000008 0x00000038 0x0000000C local    val id
0x00000008 0x00000038 0x00000008 public       test

0x8                        PROC              ; public test(id)
0xC                       BREAK              ; test2.sma:0
0x10                      BREAK              ; test2.sma:2
0x14                 LOAD.S.pri  0xC         ; id
0x1C                       JZER  0x30        ; jump_0
0x24                      BREAK              ; test2.sma:3
0x28                   ZERO.pri
0x2C                       RETN
0x30                   ZERO.pri              ; target:jump_0
0x34                       RETN
file: test2.sma


Аналогично - тут даже пустая инструкция return возвращает 0.
 
tavotДата: Понедельник, 14.12.2009, 02:50:11 | Сообщение # 17
Генерал-майор
Группа: Пользователи
Сообщений: 256
Репутация: 3
Статус: Не в сети
DaTa,
Спасибо )
Сделал без варнинга, так как то что я писал что у меня работает когда мой плагин ниже основного - это моя ошибка.

Сейчас занят боее важным - устранением кучи мелких багов, как с ними закончу, вернусь к этой теме.

 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Блокировка команд клиента (Блокировать надоне всегда.)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

AMX Mod X Russian Community © 2006-2024