AMX MOD X
Четверг, 05.12.2024, 00:09:04



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

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

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
Как организовать межплагиновое взаимодействие?
bohdan4ikДата: Воскресенье, 01.11.2009, 01:51:25 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 10
Репутация: 0
Статус: Не в сети
Что имеем: несколько плагинов, которые должны иметь доступ к определенному флагу пользователя (админ-флаги не предлагать, т.к. есть несколько условий, по которым вычисляется действительность флага, плюс, нужно оперативно отвечать на изменение значения этого флага)
Чего не имеем: достаточного уровня знаний Pawn и опыта программирования на оном.
Что нужно: получить универсальную функцию, возвращающую действительность флага.
Текущие вопросы: А есть ли аналог static переменных в Pawn? Будут ли все плагины использовать один и тот же адрес памяти (переменную; если ответ на предыдущий вопрос положителен), если они все подключают заголовочный файл с ее определением? Как отследить смену карты (для того, чтоб освободить ресурсы)? Нужно ли вобще освобождать ресурсы (дескриптор файла, в данном случае, т.к. используем nvault для хранения дополнительных значений) или это произойдет автоматически? Отличается ли создание подключаемого файла от создания "обычного" (вопрос глуп, да, но я уже не знаю чего и ожидать)?
З.Ы.: Этот (http://amxmodx.ucoz.ru/forum/9-3463-1) вариант, похоже, не подходит.


 
LtRATДата: Воскресенье, 01.11.2009, 02:38:37 | Сообщение # 2
Сержант
Группа: Пользователи
Сообщений: 33
Репутация: 1
Статус: Не в сети
А кто этот флаг и каким образом будет изменять ? И насколько оперативно надо реагировать на изменения...
Может проще перевычислять данный флаг в других плагинах - кто его знает =)

Если отбросить низкоуровневые реализации того что надо, остается два способа:
1) через forward функции, аля эвенты
2) через создание собственных native функций, которые могут вызывать другие плагины, собственно тут и передаем запрашиваемое значение (реализация этого как раз описана в "неподходящей" теме)

static нету :)
Насчет объектов которые требуется уничтожать вручную... Поскольку в nvault просто нету соответствующих native функций для этого, то он все должен делать сам :)

>>Как отследить смену карты
Вообще говоря можно и вправду отслеживать смену карты :) но в данном случае воспользоваться forward plugin_end() из amxmodx.inc

 
bohdan4ikДата: Воскресенье, 01.11.2009, 03:56:25 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 10
Репутация: 0
Статус: Не в сети
Спасибо, будем думать:)

upd:
В ходе небольшого експеримента, было выявлено, что nvault_open открывает файл один раз, независимо от кол-ва вызовов функции в том случае, если имя файла одинаковое (а это значит, что мы можем смело добавлять в plugin_end вызов функции nvault_close, без боязни утечек памяти). Если в одном месте закрыть файл - к нему пропадет доступ со всех мест (указатель на БД сбрасывается в ноль).
Мое решение: создание подключаемого файла, в котором определена функция примерно следующего содержания:

Code
#include "nvault"

stock bool:is_user_someflag(id) {
  new some = nvault_open("some...O_o")
/*
         some checks and putting boolean into result.
*/
  return result
}

Далее просто подключаем сей файл в нужный плагин и делаем необходимые правки:)




Сообщение отредактировал bohdan4ik - Воскресенье, 01.11.2009, 04:41:26
 
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024