|
Форум » Counter-Strike 1.6 » Сервер Counter-Strike 1.6 » CreateMultiForward - с чем его едят? (Разложу по полочкам и на примерах)) |
CreateMultiForward - с чем его едят? |
Дата: Воскресенье, 22.07.2018, 20:58 | Сообщение # 1
Профи-ветеран
Offline
![]()
В одной теме натолкнулся на небольшую трудность некоторых скриптеров, вроде да же тема специально была создана, так вот, решил закрыть этот вопрос, для начала поговорим о Pre и Post. Наверно часто сталкивались с такими методами и функциями в которых присутствует такое окончание, и сейчас мы научимся подобное реализовывать
![]() Для начала создадим MultiForward, начнем с глобальной переменной. new MultiForward в функцию plugin_init() добавим такую строчку MultiForward = CreateMultiForward("new_function",ET_IGNORE,FP_CELL) Таким образом мы создали Multi Forward, который будет отлавливать использование функции new_function, то есть в своём плагине создаём функцию public new_function(obj), где obj это параметр, который будет получен из основного плагина, где и зарегистрирован Multi Forward. Вернемся к основному плагину, где мы еще не завершили создание. Допустим у нас есть функция public csdm_PostSpawn(id), тем кто занимается csdm модом, то они в курсе, что это и как он работает. Вот и пришли к моменту, когда мы будем обсуждать, что такое pre и post. Pre - значит, что функция выполниться в начале или где то в середине функции, а Post только в конце, это только вам на заметку, если хотите облегчить работу другим пользователям вашего плагина. Вернемся к плагину, для того, что бы форвард сработал в функцию csdm_PostSpawn(id) (это наш пример) ExecuteForward, у него 3 параметра. Первый параметр это глобальная переменная в нашем случае MultiForward, второй параметр это возвращаемый из new_function значение в return, например return 3 и тд, многие используют PLUGIN_HANDLED, CONTINUE и тд. Третий параметр, это параметр который мы отправим в другую функцию, назавем его param, в другой функции он будет иметь вид такой new_function(param). Если не понятно, то вот простой пример. public csdm_PostSpawn(id) { new answer; ExecuteForward(MultiForward, answer, id) } Мы обратились к форварду через MultiForward, получили ответ answer и отправили параметр. Если что то не понятно, пишите. Заранее извиняюсь за оформление, я не умею оформлять) UPD: Если хотите передать в функцию больше параметров то после ET_IGNORE добавляйте тип данных в CreateMultiForward, а выглядеть это будет так: MultiForward = CreateMultiForward("new_function",ET_IGNORE,FP_CELL,FP_CELL), то есть мы будем отправлять в другой плагин два целых числа, так же нам нужно в форвард передать несколько переменных, допустим есть 2 объекта, это игрок и entity, то ExecuteForward будет иметь примерный вид ExecuteForward(MultiForward, answer, id, entity) а в функции отлова он будет иметь такой вид new_function(id, entity) название переменных не имеет значения, хоть да же так new_function(baba, droid), но следует помнить и знать одно, что мы получаем. А именно, что первый параметр это id игрока, а второй id объекта. Существует несколько типов передаваемых данных, которые нужно указать в CreateMultiForward, а именно: FP_CELL - целые числа FP_FLOAT - числа с плавающей запятой, например 0.23 или 14.65 и тд. FP_STRING - строки, такие как целые предложения, например: Москва не сразу строилась FP_ARRAY - уже целые массивы данных, это могут быть и целые и дробные и строки, возможно да же все сразу, но уже в одном многомерном пространстве Думаю на этом всё ![]()
Сообщение отредактировал pro100web - Воскресенье, 22.07.2018, 22:09
|
Дата: Воскресенье, 22.07.2018, 21:21 | Сообщение # 2
![]()
Новичкам будет полезно +1
|
Дата: Воскресенье, 22.07.2018, 22:04 | Сообщение # 3
Профи-ветеран
Offline
![]()
Oldwarx, дополнил небольшой информацией
|
Дата: Понедельник, 23.07.2018, 19:59 | Сообщение # 4
Любитель
Offline
![]()
Как раз то, что я искал, спасибо
|
| |||
| |||