[Include] [INC] Глобальные переменные (GVar)
#1

Глобальные переменные (GVar)
29/03/2010, v0.1.1
Описание:
- Скриптовый механизм, который позволяет создавать/изменять глобальные переменные,
общие для всех загруженных скриптов сервера.
- Также можно использовать как динамически выделяемые переменные или хранилища строк, массивов, чисел.
- INC основан на PAWN функциях set/get/delete/existproperty
- Описание функций дано прямо в коде в нужных местах.
- Проведено только частичное тестирование.

Как использовать:
- положить этот код в файл gvar.inc в папку pawno/include
- в начало вашего скрипта добавить #include <gvar>
- использовать функции для создания/правки/удаления глобальных переменных

Код:
- pastebin: http://pastebin.com/1JRwL1bn

[code=gvar.inc]/*
ЕДИНЫЕ ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ для всех загруженных скриптов сервера.
также могут использоваться как динамически выделяемые переменые.


(!) ВНИМАНИЕ: используйте для числовых и строковых переменных разные имена,
иначе Вас ожидают весьма непредвиденные последствия

(!) ВНИМАНИЕ: в вашем главном скрипте нигде не должны использоваься
фунции set/get/delete/existproperty c первым параметром, равным 0,
иначе Вас ожидают накладки с неправильными значениями


(?) Это INC файл для серверных скриптов мультиплеера SA-MP
(!) MX_Master, 29/03/2010, v0.1.1
*/

#define MAX_GVAR_STRINGS 20000000
#define ABSTRACT_MACHINE 0




//
// создает/изменяет числовое значение глобальной переменной
// всегда вернет 0
//
// gvarName (строка) имя глобальной переменной пример: "money"
// gvarValue (число) значение глобальной переменной пример: 123456
//
stock SetGVarInt ( gvarName[], gvarValue )
{
return setproperty( ABSTRACT_MACHINE, gvarName, gvarValue );
}

//
// вернет числовое значение глобальной переменной
// вернет 0, если глоб. переменная не существует
//
// gvarName (строка) имя глобальной переменной пример: "money"
//
stock GetGVarInt ( gvarName[] )
{
return getproperty( ABSTRACT_MACHINE, gvarName );
}




//
// создает/изменяет дробное значение глобальной переменной
// всегда вернет 0
//
// gvarName (строка) имя глобальной переменной пример: "pos_x"
// gvarValue (Float) значение глобальной переменной пример: 1280.1516
//
stock SetGVarFloat ( gvarName[], Float: gvarValue )
{
return setproperty( ABSTRACT_MACHINE, gvarName, _: gvarValue );
}

//
// вернет дробное значение глобальной переменной
// вернет 0.0, если глоб. переменная не существует
//
// gvarName (строка) имя глобальной переменной пример: "pos_x"
//
stock Float: GetGVarFloat ( gvarName[] )
{
return Float: getproperty( ABSTRACT_MACHINE, gvarName );
}




//
// создает/изменяет строковое значение глобальной переменной
// всегда вернет 0
//
// gvarName (строка) имя глобальной переменной пример: "player_name"
// gvarValue (строка) значение глобальной переменной пример: "MX_Master"
//
stock SetGVarString ( gvarName[], gvarValue[] )
{
if ( existproperty(0,gvarName) )
return setproperty( ABSTRACT_MACHINE, _, getproperty(ABSTRACT_MACHINE,gvarName) + MAX_GVAR_STRINGS, gvarValue );
else
{
static index = MAX_GVAR_STRINGS * 2;
setproperty( ABSTRACT_MACHINE, _, ++index, gvarValue );
return setproperty( ABSTRACT_MACHINE, gvarName, index - MAX_GVAR_STRINGS );
}
}

//
// помещает в gvarValue строковое значение глобальной переменной
// вернет ИД глобальной переменной или 0, если она не существует
//
// gvarName (строка) имя глобальной переменной пример: "player_name"
// gvarValue (строка) сюда поместят значение, переменную создайте заренее
// maxsize (число) макс. размер возвращаемой строки пример: 32
// unpack (bool) если 0, то в gvarValue поместят упакованную строку пример: true
//
stock GetGVarString ( gvarName[], gvarValue[], maxsize = sizeof(gvarValue), bool: unpack = true )
{
getproperty( ABSTRACT_MACHINE, _, getproperty(ABSTRACT_MACHINE,gvarName) + MAX_GVAR_STRINGS, gvarValue );
if ( unpack ) strunpack( gvarValue, gvarValue, maxsize );
return getproperty(ABSTRACT_MACHINE,gvarName);
}




//
// удаляет глобальную переменную
// вернет ИД глобальной переменной или 0, если она не существует
//
// gvarName (строка) имя глобальной переменной пример: "money"
//
stock DeleteGVar ( gvarName[] )
{
if ( existproperty(ABSTRACT_MACHINE,gvarName) )
deleteproperty( ABSTRACT_MACHINE, _, getproperty(ABSTRACT_MACHINE,gvarName) + MAX_GVAR_STRINGS );
return deleteproperty( ABSTRACT_MACHINE, gvarName );
}

//
// узнает, существует ли глобальная переменная или нет
// вернет 1, если существует или 0, если ее нет
//
// gvarName (строка) имя глобальной переменной пример: "money"
//
stock IsSetGVar ( gvarName[] )
{
return existproperty( ABSTRACT_MACHINE, gvarName );
}




#undef MAX_GVAR_STRINGS
#undef ABSTRACT_MACHINE
[/code]
Reply
#2

Похожий с PVar механизм и функции, но без параметра playerid. Работоспособность зависит в первую очередь от функций set/get/delete/existproperty. Хотя я тоже мог накатать чет неправильно (:
Reply
#3

проверял?у меня property не работают с name != "" ,а у тебя всё по name как раз...точно работает?
Reply
#4

Хе, оперативно


Quote:

// эта строка ниже может вызывать WARNING сообщения компилятора
// не обращайте на это внимание, отключить это WARNING сообщение никак нельзя
return setproperty( ABSTRACT_MACHINE, gvarName, gvarValue );

Код:
  return setproperty( ABSTRACT_MACHINE, gvarName, _:gvarValue );
Reply
#5

Quote:
Originally Posted by [Kira
]
проверял?у меня property не работают с name != "" ,а у тебя всё по name как раз...точно работает?
канеш работает, на то я и мастер, чтобы придумывать что-то необычное (:
сделал правку/добавление/чтение только по имени, т.к. это удобнее всего

Quote:
Originally Posted by Zeex
Хе, оперативно

Quote:

// эта строка ниже может вызывать WARNING сообщения компилятора
// не обращайте на это внимание, отключить это WARNING сообщение никак нельзя
return setproperty( ABSTRACT_MACHINE, gvarName, gvarValue );

Код:
  return setproperty( ABSTRACT_MACHINE, gvarName, _:gvarValue );
ща подфиксю.. спс...
исправлено (:
Reply
#6

Quote:
Originally Posted by MX_Master
Quote:
Originally Posted by [Kira
]
проверял?у меня property не работают с name != "" ,а у тебя всё по name как раз...точно работает?
канеш работает, на то я и мастер, чтобы придумывать что-то необычное (:
сделал правку/добавление/чтение только по имени, т.к. это удобнее всего

Quote:
Originally Posted by Zeex
Хе, оперативно

Quote:

// эта строка ниже может вызывать WARNING сообщения компилятора
// не обращайте на это внимание, отключить это WARNING сообщение никак нельзя
return setproperty( ABSTRACT_MACHINE, gvarName, gvarValue );

Код:
  return setproperty( ABSTRACT_MACHINE, gvarName, _:gvarValue );
ща подфиксю.. спс...
исправлено (:
ну не такое уж оно и необычное (давным давно сделан инклуд by DracoBlue для работы с property,но там использовался хеш строки т.к. name != "" не пёрло...почему у тебя прёт не понимаю попробуй на 0.2х запустить это,может это в новом сервере просто исправлено,не верится что у меня не работало а у тебя вдруг заработало =/)
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)