Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Система закладок

#Djuga

Специалист
Здравствуйте уважаемые пользователи портала

Сегодня я для вас решил сделать копию системы с крупного проекта, это "Система закладок"​

[HR][/HR]

Описание

Система закладок. По всему району гетто, вы сможете найти пачки с наркотиками, которые будут рандомно размещены
возле кустов, мусорок, лавочек и других мест закрытых для глаз обычных людей. Местоположение точек, никогда не изменяется, по этому их придется выучить, а обновление части закладок будет происходить каждые 30 минут. С каждой точки, вы сможете получить до 8 единиц товара.

[HR][/HR]

1. Ко всем константам:

PHP:
const MAX_DRUGS = 1;
MAX_DRUGS - максимальное количество закладок на сервере.

2. Ко всем enum:

PHP:
enum drugS_ENUM
{
	bool:dStatus,
	Float:dPosX,
	Float:dPosY,
	Float:dPosZ,
	dObject
}

new drugInfo[MAX_DRUGS][drugS_ENUM] = 
{
	{true, 0.000, 0.000, 2.000}
};
[HR][/HR]

bool:dStatus, - Статус закладки, после поднятия, статус меняется на false, дабы игрок не смог много раз поднимать наркоту.
Float:dPosX - Позиция закладки X.
Float:dPosY - Позиция закладки Y.
Float:dPosZ - Позиция закладки Z.
dObject - Объект, который после поднятия закладки - исчезает.

[HR][/HR]

3. В коллбэк OnGameModeInit:

PHP:
CreateDrugsPackages();
[HR][/HR]

CreateDrugsPackages
- Создание закладок при запуске сервера

[HR][/HR]

4. Ко всем стокам:

PHP:
CreateDrugsPackages()
{
	for(new i; i < MAX_DRUGS; i++)
	{
		drugInfo[i][dObject] = CreateObject(1580, drugInfo[i][dPosX], drugInfo[i][dPosY], drugInfo[i][dPosZ], 0.000, 0.000, 0.000);

		drugInfo[i][dStatus] = true;
	}
        return SetTimer("@__CreateDrugPackage", 1800*1000, false);
}
[HR][/HR]

for(new i; i < MAX_DRUGS; i++) - Создаём цикл на MAX_DRUGS итераций.

drugInfo[dObject] = CreateObject... - Создаём объект на заданных координатах.

drugInfo[dStatus] = true - Даём доступ на поднимание закладки.

return SetTimer("@__CreateDrugPackage", 1800*1000, false) - Устанавливаем таймер на 30 минут, для респавна закладок.


[HR][/HR]

5. Ко всем коллбэкам:

PHP:
@__CreateDrugPackage();
@__CreateDrugPackage() return CreateDrugsPackages();
[HR][/HR]

@__CreateDrugPackage() return CreateDrugsPackages() - Вызываем сток для спавна закладок.

[HR][/HR]

6. В коллбэк OnPlayerKeyStateChange:

PHP:
if(newkeys == KEY_WALK)
	{
		for(new i; i < MAX_DRUGS; i++)
		{
			if(IsPlayerInRangeOfPoint(playerid, 2, drugInfo[i][dPosX], drugInfo[i][dPosY], drugInfo[i][dPosZ]))
			{
				if(drugInfo[i][dStatus] == false)
					continue;

                                new
					string[12],
					amount = random(8);

				SendClientMessage(playerid, -1, (amount == 0) ? ("Вы ничего не нашли.") : ("Вы нашли наркотики!"));

				format(string, sizeof string, "~r~Drugs +%d", amount);

				GameTextForPlayer(playerid, string, 5000, 6);

				ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 5.1, 0, 0, 1, 0, 2000, 1);

                                //PlayerInfo[playerid][pDrugs] += amount; Пример выдачи наркотиков

				drugInfo[i][dStatus] = false;

				DestroyObject(drugInfo[i][dObject]);

				break;
			}
		}	
	}
[HR][/HR]

if(newkeys == KEY_WALK) - Проверяем на какую клавишу нажал игрок, сейчас она ALT

for(new i; i < MAX_DRUGS; i++) - Задаём цикл, на N итераций

if(IsPlayerInRangeOfPoint(playerid, 1, drugInfo[dPosX], drugInfo[dPosY], drugInfo[dPosZ])) - Проверяем находиться ли игрок рядом с закладкой

if(drugInfo[dStatus] == false) continue; - Если статус закладки равен false, пропускаем итерацию.

SendClientMessage - Отправляем сообщение в чат.

string[12], - массив, который в дальнейшем будет использоваться при форматировании текста.
amount = random(8); - переменная, которой присваиваем рандомное число, от 0 до 8.

format(string, sizeof string, "~r~Drugs +%d", amount); - форматируем текст.

GameTextForPlayer(playerid, string, 5000, 6); - Выводим текст на экран.

ApplyAnimation(playerid, "BOMBER", "BOM_Plant_Loop", 5.1, 0, 0, 1, 0, 2000, 1); - Присваиваем игроку анимацию.

drugInfo[dStatus] = false; - Делаем статус закладки false.

DestroyObject(drugInfo[dObject]); - Удаляем объект.

break; - Прекращаем работу цикла.

[HR][/HR]



[HR][/HR]


[HR][/HR]

При размещении на других порталах, указывайте автора - #Djuga.​
 
Последнее редактирование:
Сверху Снизу