<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://forumrolevayanet.rolevaya.ru/export.php?type=rss" rel="self" type="application/rss+xml" />
		<title>Обсуждение игровой аудитории</title>
		<link>https://forumrolevayanet.rolevaya.ru/</link>
		<description>Обсуждение игровой аудитории</description>
		<language>ru-ru</language>
		<lastBuildDate>Sat, 16 Dec 2017 23:46:07 +0300</lastBuildDate>
		<generator>MyBB/mybb.ru</generator>
		<item>
			<title>Принцип работы METAMOD</title>
			<link>https://forumrolevayanet.rolevaya.ru/viewtopic.php?pid=17#p17</link>
			<description>&lt;p&gt;&lt;strong&gt;Для успешной разработки плагинов любая среда, для которой предназначены ваши плагины, предоставляет набор функций, называемый API. HL1 предоставляет две группы таких функций: функции движка и функции мода (т.е. DLL).&lt;br /&gt;Принцип работы METAMOD (кстати, т.к. он прописывается в liblist.gam, правильнее считать его модом, т.е. плагином для HL, в то время как, например, AXN - на самом деле плагин для METAMOD, а не для HL) заключается в перехвате вызовов функций API и выполнении следующей последовательности действий: &lt;br /&gt;1) для каждого загруженного METAMOD плагина проверить, зарегистриована ли данная API-функция в самом плагине, и в случае успеха вызвать ее; &lt;br /&gt;2) вызвать настоящую функцию API (из DLL или движка) &lt;br /&gt;3) для каждого загруженного METAMOD плагина проверить, зарегистрирована ли Post-версия данной API-функций в самом плагине, и в случае успеха вызвать ее.&lt;/p&gt;
						&lt;p&gt;У каждого METAMOD плагина есть возможность повлиять на реальную функцию API двумя способами: &lt;br /&gt;1) заблокировать вызов API-фунцкии (SUPERCEDE); &lt;br /&gt;2) разрешить вызов API-фунцкии, но заменить ее результат (OVERRIDE), т.е. возвращаемое значение если, конечно, оно существует.&lt;/p&gt;
						&lt;p&gt;Каким образом METAMOD определяет, нужно ли блокировать вызов или подменять возвращаемый результат API-функции? Для этого каждый METAMOD плагин обязан вернуть META-результат (META_RESULT), и, в зависимости от его значения, METAMOD решает, что делать с оригинальной API-функцией. Если METAMOD плагин ничего не возвращает, то в консоль сервера будет выдана ошибка. Однако, при программировании плагинов под AMX/X 1.76b, я, однажды, забыл вернуть FMRES_IGNORED и никакой ошибки не было. Видимо AMX/X по умолчанию возвращает FMRES_IGNORED, если в скрипте не указано возвращаемое значение.&lt;/p&gt;
						&lt;p&gt;Очень важный момент при блокировании оригинальной API функции заключается в том, что в остальных METAMOD плагинах, в которых зарегистирована Pre версия данной функции API, она все равно будет выполнена. Т.о. неважно, в каком порядке описаны METAMOD плагины в файле plugins.ini. Post версия в случае блокирования оригинальной функции API, само собой, вызываться не будет ни для одного плагина.&lt;/p&gt;
						&lt;p&gt;Ярким и в то же время неявным примером реализации Pre и Post версий функций API можно назвать систему событий в AMX/X. Все события, зарегистрированные с помощью register_message(), являются Pre версией API функции MessageBegin, которая вызывается при посылке сообщения. Поэтому такие сообщения можно реально заблокировать (используя интерфейсы в message.inc) и клиенты их не получат от сервера. Реализация Post версии функции API, как вы, может быть, уже догадались, заключается в старых добрых событиях, зарегистрированных с помощью register_event(). Многие программисты AMX/X в теле таких обработчиков событий ошибочно возвращают результат PLUGIN_HANDLED, стараясь заблокировать событие. Но это действие не имеет смысла, т.к. реальная функция API уже вызвана и клиенты получили свои сообщения. Более того, возвращение какого-либо значения в таком обработчике вообще не нужно.&lt;/p&gt;
						&lt;p&gt;В заключеннии, предлагаю рассмотреть пример, как используются Pre и Post версии функций API с помощью интерфейсов модуля Fakemeta.&lt;/strong&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Mr.Freeman)</author>
			<pubDate>Sat, 16 Dec 2017 23:46:07 +0300</pubDate>
			<guid>https://forumrolevayanet.rolevaya.ru/viewtopic.php?pid=17#p17</guid>
		</item>
		<item>
			<title>Система Бессмертия</title>
			<link>https://forumrolevayanet.rolevaya.ru/viewtopic.php?pid=16#p16</link>
			<description>&lt;p&gt;&lt;strong&gt;При спавне игрока ему будет выдан режим бессмертия после того как он нанесёт урон другому игроку оно будет выключено до следующего респавна&lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;в public OnPlayerUpdate&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 10.5em&quot;&gt;&lt;pre&gt;if(GetPVarInt(playerid, &amp;quot;GMode&amp;quot;) == 1) 
{ 
        SetPlayerHealth(playerid, 2000000000); 
        SetPlayerArmour(playerid, 2000000000); 
}  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
						&lt;p&gt;в public OnPlayerSpawn&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 7.5em&quot;&gt;&lt;pre&gt;SendClientMessage(playerid, COLOR_WHITE, &amp;quot;Вам выдан режим бога, как только вы нанесете кому-либо урон, он будет отключен&amp;quot;); 
SetPVarInt(playerid, &amp;quot;GMode&amp;quot;, 1);  
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;в public OnPlayerGiveDamage&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 18em&quot;&gt;&lt;pre&gt;public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart) 
{ 
        if(GetPVarInt(playerid, &amp;quot;GMode&amp;quot;) == 1) 
        { 
                SendClientMessage(playerid, COLOR_WHITE, &amp;quot;Режим бога был отключен&amp;quot;); 
                DeletePVar(playerid, &amp;quot;GMode&amp;quot;); 
                SetPlayerHealth(playerid, 100); 
                SetPlayerArmour(playerid, 100); 
        } 
        return 1; &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;}&amp;#160; &lt;/strong&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Mr.Freeman)</author>
			<pubDate>Sat, 16 Dec 2017 23:44:54 +0300</pubDate>
			<guid>https://forumrolevayanet.rolevaya.ru/viewtopic.php?pid=16#p16</guid>
		</item>
		<item>
			<title>Античит на деньги</title>
			<link>https://forumrolevayanet.rolevaya.ru/viewtopic.php?pid=15#p15</link>
			<description>&lt;p&gt;&lt;strong&gt;Приступим к написанию.&lt;/p&gt;
						&lt;p&gt;Система довольно таки простая, ничего сложного я в работе не увидел. В начале мода вписываем:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#include &amp;lt;mxINI&amp;gt;  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
						&lt;p&gt;Потом переходим в самый конец мода, и вписываем:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 27em&quot;&gt;&lt;pre&gt;stock GetMoney(playerid) 
{ 
        new money = GetPlayerMoney(playerid); 
        if(PlayerInfo[playerid][pCash] &amp;gt; money)  
        { 
                ResetPlayerMoney(playerid); 
                GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]); 
                return true; 
        } 
        else if(PlayerInfo[playerid][pCash] &amp;lt; money) 
        { 
                ResetPlayerMoney(playerid); 
                GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]); 
                return true; 
        } 
}  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
						&lt;p&gt;Далее ищем enum с функциями игрока. Как обычно, enum&#039;ы располагаются в начале мода для удобства поиска и смены переменных параметров игрока. У меня он обьявлен, как &amp;quot;pInfo&amp;quot;:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 13.5em&quot;&gt;&lt;pre&gt;enum pInfo 
{ 
    pKey[32], 
    pLevel 
} 

new PlayerInfo[MAX_PLAYERS][pInfo];  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
						&lt;p&gt;Ищем такой-же, или похожий enum, и вписываем туда:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;pCash,  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
						&lt;p&gt;Если у вас его все еще нету, мы должны создать его. Для этого вписываем в начало мода:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 12em&quot;&gt;&lt;pre&gt;enum pInfo 
{ 
    pCash 
} 

new PlayerInfo[MAX_PLAYERS][pInfo];  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Теперь мы должны создать функцию загрузки, сохранение и обновления параметров игрока. Для этого идем в конец мода и вписываем:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;stock LoadAccount(playerid) 
{ 
        new name[MAX_PLAYER_NAME]; 
        new string; 
        GetPlayerName(playerid, name, sizeof(name)); 
        format(string, sizeof(string), &amp;quot;%s.ini&amp;quot;, name); 
        if(fexist(string)) 
        { 
                format(string, sizeof(string), &amp;quot;Files/Players/%s.ini&amp;quot;, name); 
                new File = ini_openFile(string); 
                ini_getInteger(File,&amp;quot;Cash&amp;quot;,PlayerInfo[playerid][pCash]); 

                ini_closeFile(File); 
        } 
        else if(!fexist(string)) 
        { 
                format(string, sizeof(string), &amp;quot;%s.ini&amp;quot;, name); 
                new File = ini_createFile(string); 
                ini_setInteger(File,&amp;quot;Cash&amp;quot;,0); 
                ini_closeFile(File); 
        } 
        SpawnPlayer(playerid); 
} 

stock SaveAccount(playerid) 
{ 
        new name[MAX_PLAYER_NAME]; 
        GetPlayerName(playerid, name, sizeof(name)); 
        format(string2, sizeof(string2), &amp;quot;%s.ini&amp;quot;, name); 
        new File = ini_openFile(string2); 
        ini_setInteger(File,&amp;quot;Cash&amp;quot;,PlayerInfo[playerid][pCash]); 

     ini_closeFile (File); 
}  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;В public OnPlayerUpdate(playerid) вписываем:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;GetMoney(playerid);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
						&lt;p&gt;Если у вас уже есть паблик с загрузкой аккаунта, вписываем туда:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;ini_getInteger(File,&amp;quot;Cash&amp;quot;,PlayerInfo[playerid][pCash] 
);  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
						&lt;p&gt;И в паблик с сохранением вписываем:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;ini_setInteger(File,&amp;quot;Cash&amp;quot;,PlayerInfo[playerid][pCash] 
);  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Ах да, чуть не забыл. В public OnPlayerRequestClass:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;LoadAccount(playerid); &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
						&lt;p&gt;В public OnPlayerDisconnect:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;SaveAccount(playerid);  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Автор: Неизвестен.&lt;/strong&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Mr.Freeman)</author>
			<pubDate>Sat, 16 Dec 2017 23:42:39 +0300</pubDate>
			<guid>https://forumrolevayanet.rolevaya.ru/viewtopic.php?pid=15#p15</guid>
		</item>
		<item>
			<title>Увеличение скорости на машине</title>
			<link>https://forumrolevayanet.rolevaya.ru/viewtopic.php?pid=14#p14</link>
			<description>&lt;p&gt;&lt;strong&gt;Ко всем переменным:&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 12em&quot;&gt;&lt;pre&gt;new pickup[2];  
В паблик OnGameModeInit:
PHP код:(Выделить всё)
pickup[0] = CreatePickup(ид_пикапа, тип_пикапа, x, y, x, виртуальный_мир); 
pickup[1] = CreatePickup(ид_пикапа, тип_пикапа, x, y, x, виртуальный_мир);  
&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;В паблик OnPlayerPickUpPickup:&lt;/strong&gt;&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 21em&quot;&gt;&lt;pre&gt;
if(pickupid == pickup[0] || pickupid == pickup[1]) 
{ 
        new vehicleid = GetPlayerVehicleID(playerid); // получаем ид машины 
        if(vehicleid &amp;gt; 0) // Проверка что игрок в машине 
        { 
                if(GetPlayerState(pickupid) == PLAYER_STATE_DRIVER) // Проверка что игрок водитель 
                { 
                        SetVehicleVelocity(vehicleid, 70.0, 70.0, 0.2); 
                } 
        } 
}  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (Mr.Freeman)</author>
			<pubDate>Sat, 16 Dec 2017 23:40:15 +0300</pubDate>
			<guid>https://forumrolevayanet.rolevaya.ru/viewtopic.php?pid=14#p14</guid>
		</item>
		<item>
			<title>[Правила] Раздела &quot;Рынок&quot;</title>
			<link>https://forumrolevayanet.rolevaya.ru/viewtopic.php?pid=12#p12</link>
			<description>&lt;p&gt;&lt;strong&gt;Дорогие пользователи!&lt;br /&gt;В этой теме вы можете ознакомится с правилами рынка и далее вести свою рыночную беседу в соответствующих префиксах:o&lt;/p&gt;
						&lt;p&gt;При создании темы, её обязательно нужно оформить по форме, данной ниже:&lt;br /&gt;1. Что продаёте / покупаете / обмениваете : Текст.&lt;br /&gt;2. Цена на которую рассчитываете ( возможно указание договорной ): Цена / Вариант обмена&lt;br /&gt;3. Связь: Ваши данные, для связи с Вами.&lt;/p&gt;
						&lt;p&gt;Внимание:&lt;br /&gt;- Если Вы продаёте аккаунт/виртуальные средства SA:MP,Вам в разделы &amp;quot;Аккаунты/Виртуальные средства SA:MP&amp;quot;.&lt;br /&gt;- Если Вы предоставляете какие-либо услуги, Вам в раздел &amp;quot; Услуги &amp;quot;.&lt;br /&gt;- Если Вы ищете работника или предлагаете спонсорство/работу, Вам в раздел &amp;quot;Вакансии&amp;quot;.&lt;br /&gt;- Если Вы желаете заказать какую либо работу, Вам в раздел &amp;quot;Стол заказов&amp;quot;.&lt;br /&gt;- Если вы желаете приобрести какую либо работу, то Вам в раздел &amp;quot;Покупка&amp;quot;.&lt;/p&gt;
						&lt;p&gt;- Запрещены в названии темы лишние символы (!!!,???,и т.д...), иконки, а так же использование Caps Lock&#039;а.&lt;br /&gt;- Запрещено предоставлять услуги DDOS/покупать/продавать DDOS программы, а так же любое другое вредоносное ПО.&lt;br /&gt;- Запрещено предоставлять/размещать различные сайты ( Конкурирующие с нашим ), для рекламы Вы можете обратиться к Администраторам.&lt;/p&gt;
						&lt;p&gt;Просим соблюдать правила!&lt;br /&gt;Приятного времяпровождения. С уважением к вам, ваша Администрация.&lt;/strong&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (Mr.Freeman)</author>
			<pubDate>Sat, 16 Dec 2017 18:53:16 +0300</pubDate>
			<guid>https://forumrolevayanet.rolevaya.ru/viewtopic.php?pid=12#p12</guid>
		</item>
	</channel>
</rss>
