AMX MOD X
Четверг, 28.03.2024, 21:25:10



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

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

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Вопросы по fakemeta (тут их будет куча, так чувствую :))
Вопросы по fakemeta
JohnJДата: Вторник, 05.12.2006, 23:02:39 | Сообщение # 1
Лейтенант
Группа: Скриптеры
Сообщений: 65
Репутация: 4
Статус: Не в сети
Поскольку, как я уже где-то писал, для меня fakemeta - тёмный лес, считаю, что пора пробивать дорогу к свету )
В общем первый вопрос:
Посмотрев плагин No Name Change by VEN, я увидел что в функции возвращались не стандартные PLUGIN_HANDLED и PLUGIN_CONTINUE, а FM_... константы.
Посмотрев в fakemeta.ini, я обнаружил, что такого рода констант, которые могут быть возвращены фукцией - 4
#define FMRES_HANDLED 2
#define FMRES_SUPERCEDE 4
#define FMRES_IGNORED 1
#define FMRES_OVERRIDE 3
Там же написано, что их надо использовать в forward-функциях, вместо стандартных. Но что каждая из этих 4х констант означает, мне осталось непонятным... ну HANDLED по соответствию можно понять, а остальные...
 
VENДата: Среда, 06.12.2006, 13:43:05 | Сообщение # 2
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
На будущее - такие вопросы нужно задавать не в "отладке", а в "кодинге".

FMRES_* - аналогичны MetaMod's MRES_*.

MRES_IGNORED - "я ничего не делал"
MRES_HANDLED - "я сделал что-то"
MRES_OVERRIDE - позволяет изменить результат (return value)
MRES_SUPERCEDE - подавляет call

Для FakeMeta фактически необходимы:
FMRES_SUPERCEDE - актуальна только для pre hooks, в некотором роде аналог PLUGIN_HANDLED
FMRES_IGNORED - в некотором роде аналог PLUGIN_CONTINUE

*MRES_HANDLED и *MRES_OVERRIDE в подавляющем большинстве случаев актуальны только для MM plugins.

Например, в некоторых случаях возврат FMRES_OVERRIDE не отвечает фактическому предназначению MRES_OVERRIDE.

Сообщение отредактировал VEN - Среда, 06.12.2006, 13:52:22
 
slogicДата: Среда, 06.12.2006, 23:51:49 | Сообщение # 3
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
У меня тоже вопросик созрел. Если мы вызываем функцию движка, одним из аргументов которой является строка типа sz, обязательно ли я должен создавать такую строку в Pawn с пом. engfunc(EngFunc_AllocString, string[])?

И по поводу возвращаемого результата.
Quote (VEN)
MRES_OVERRIDE - позволяет изменить результат (return value)

Резльтат чего?

Сообщение отредактировал AlMod - Вторник, 16.01.2007, 06:55:33
 
VENДата: Четверг, 07.12.2006, 12:06:13 | Сообщение # 4
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote
Если мы вызываем функцию движка, одним из аргументов которой является строка типа sz, обязательно ли я должен создавать такую строку в Pawn с пом. engfunc(EngFunc_AllocString, string[])?
Нет, native функция сама вычисляет pointer из sz.

Quote
Резльтат чего?
Function call return result value.
Но как я уже сказал, FMRES_OVERRIDE - странная штука.
Например, при попытке изменения GetGameDescription return value FMRES_OVERRIDE не применяло изменение, спасало только FMRES_SUPERCEDE.

Сообщение отредактировал VEN - Четверг, 07.12.2006, 12:07:54
 
slogicДата: Четверг, 07.12.2006, 12:23:36 | Сообщение # 5
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (VEN)
Нет, native функция сама вычисляет pointer из sz.

Зачем тогда KWo делает это в плагине item_mode для CSDM? Опытный же малый.

Quote (VEN)
Например, при попытке изменения GetGameDescription return value FMRES_OVERRIDE не применяло изменение, спасало только FMRES_SUPERCEDE.

Если ты что-то изменил, разве не надо возвращать FMRES_HANDLED? А то каша какая-то получается.

И на счет результата я опять не понял. Ты эже в return указываешь как раз одну из этих констант. О каком результате отработки фукнции может идти речь?

 
VENДата: Четверг, 07.12.2006, 12:48:33 | Сообщение # 6
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
У KWo некторый опыт есть, согласен. Но, вероятно, имеется ввиду CreateNamedEntity, которая "берет" не sz а ipsz, прототип: (int className).

Quote
Если ты что-то изменил, разве не надо возвращать FMRES_HANDLED?
Что-то, за исключением return value. :]
Для MetaMod'a MRES_OVERRIDE означает буквально "необходимо применить изменение return value", MRES_HANDLED - ничего конкретного для MetaModa не означает, это всего лишь нотификация для других MM plugins: "другой плагин делал тут что-то".

Quote
И на счет результата я опять не понял. Ты эже в return указываешь как раз одну из этих констант. О каком результате отработки фукнции может идти речь?
Произошла путаница с "hook return" и "call return" - две разные вещи.
hook - наша Pawn функция для перехвата call'a соответствующей eng/dll функции.

В hook мы возращаем как бы флаг (*MRES_*) для MetaModa, на основании флагов MetaMod или его плагины будут решать, что им делать: подавлять, игнорировать, видоизменять и т.д. данный call.
Но также до возвращения одного из т.н. флагов в нашем hook мы можем задать значение call result, в частности в FakeMeta это делается с помощью forward_return native.

Сообщение отредактировал VEN - Четверг, 07.12.2006, 12:58:00
 
slogicДата: Понедельник, 15.01.2007, 17:15:05 | Сообщение # 7
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (slogic)
Например, при попытке изменения GetGameDescription return value FMRES_OVERRIDE не применяло изменение, спасало только FMRES_SUPERCEDE.

Почитал как устроен METAMOD. Порядок вызова metamod плагинов становится в этом случае важным. Это учитывалось?
 
VENДата: Понедельник, 15.01.2007, 17:50:28 | Сообщение # 8
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Т.к. GetGameDesc. вызывался только из моего плагина, не вижу смысла в "порядке".
 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » Вопросы по fakemeta (тут их будет куча, так чувствую :))
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024