Инфо из fakemeta.inc:
/* Sets an integer from private data. _linuxdiff is added into the _Offset if it's used on a linux server. */
native set_pdata_int(_index,_Offset,_Value,_linuxdiff=5);
Синтаксис:
set_pdata_int(_index,_Offset,_Value,_linuxdiff=5)
- _index - id entity ( объект/игрок)
- _Offset - Изменяемый оффсет
- _Value - Присваиваемое значение
- _linuxdiff=5 - смещение для linux
Тип функции:
Native
Пример:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#define OFFSET_MONEY 115
#define PLUGIN "[fakemeta.inc] set_pdata_int"
#define VERSION "1.0"
#define AUTHOR "Admin"
new g_msgMoney
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /setm","set_money")
g_msgMoney = get_user_msgid("Money")
}
public set_money(id){
new money = 777
set_pdata_int(id,OFFSET_MONEY,money)
message_begin(MSG_ONE, g_msgMoney, {0, 0, 0}, id)
write_long(money)
write_byte( 1 )
message_end()
}
Описание:
Синтаксис достаточно простой и в примере все наглядно видно, хочу только пояснить почему тут добавлено еще немного кода.
Если вы выполните функцию без посылки клиенту сообщения об обновлении денег, то фактически изменение произойдет, но на экране игрока денег не увеличится, и измениться только при следующем HUD обновлении. Это происходит потому что изменения вносятся непосредственно в память.
(Грубый пример: У вас есть кошелек, вы его оставили дома, а кто то доложил или вытащил денег и пока вы не откроете и не пересчитаете деньги, вы не узнаете о изменении их количества.)