Доступ к архиву

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

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

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

Мусорные контейнеры в San-Andreas [GM: RLS]

Статус
В этой теме нельзя размещать новые ответы.

Igor_Antonov

Умник
Здравствуйте, пользователи Pawno-Info.Ru!

В этом мануале, Вы узнаете, как можно обрадовать бомжей на вашем SAMP проекте и предоставить им возможность собирать бутылки, банки, коробки (мусор вообщем) в мусорных контейнерах. Сначала рассмотрим алгоритм работы скрипта:


1) Загрузка координат мусорных контейнеров
2) Создание 3Д текстов в загруженных координах
3) Игрок нажимает ЛКМ, находясь у мусорников
4) Игроку выводиться меню, созданное на текстдравах версии SAMP 0.3x

И так приступим, в начало мода добавим
PHP:
#define MAX_TRASH            256
Cоздадим следущие переменные игрока в конец enum pInfo добавляем:
PHP:
pBut,
pBanka,
pKorobka,
pSumka
Используя Ctrl+F ищем OnPlayerLogin, ко всем ini_getInteger({...}) добавляем
PHP:
ini_getInteger(File,"But",PlayerInfo[playerid][pBut]);
ini_getInteger(File,"Banka",PlayerInfo[playerid][pBanka]);
ini_getInteger(File,"Korobka",PlayerInfo[playerid][pKorobka]);
ini_getInteger(File,"Sumka",PlayerInfo[playerid][pSumka]);
Используя Ctrl+F ищем OnPlayerUpdateRl, ко всем ini_setInteger({...}) добавляем
PHP:
ini_setInteger(File,"But",PlayerInfo[playerid][pBut]);
ini_setInteger(File,"Banka",PlayerInfo[playerid][pBanka]);
ini_setInteger(File,"Korobka",PlayerInfo[playerid][pKorobka]);
ini_setInteger(File,"Sumka",PlayerInfo[playerid][pSumka]);
Используя Ctrl+F ищем OnGameModeInit, добавляем в пределах public'a LoadTrash();

Ниже public'a или можете в конец мода вставляем
PHP:
stock LoadTrash()
{
     new file = ini_openFile("Trash.ini"), str_1[256], str_2[4][64];
     if(file)
     {
           for(new i = 0; i < sizeof(TrashInfo); i++)
           {
                 split(str_1, str_2, ',');
                 TrashInfo[i][PosX] = floatstr(str_2[1]);
                 TrashInfo[i][PosY] = floatstr(str_2[2]);
                 TrashInfo[i][PosZ] = floatstr(str_2[3]);
                 TrashInfo[i][But]       = random(2)+1;
                 TrashInfo[i][Banka]    = random(1)+1;
                 TrashInfo[i][Korobka] = random(2);
                 TrashInfo[i][Sumka]   = random(1)+1;
                 Create3DTextLabel("{ffff00}Мусорный ящик\nнажмите {ffffff}ЛКМ{ffff00} для просмотра содержимого", -1, TrashInfo[i][PosX],                       TrashInfo[i][PosY], TrashInfo[i][PosZ], 45.0, 0, 0);
           }           
     }     
     ini_closeFile(file);
}
В public OnPlayerKeyStateChange вставляем код:
PHP:
    if(newkeys == KEY_FIRE)
	{
	    for(new t = 0; t < sizeof(TrashInfo); t++)
	    {
	    	if(IsPlayerInRangeOfPoint(playerid, 2.0, TrashInfo[t][PosX], TrashInfo[t][PosY], TrashInfo[t][PosZ]))
	    	{
	    	    if(GetPVarInt(playerid, "Trash_View_ID") != 0) return 1;
		    ShowTrashMenuForPlayer(playerid, t);
	            break;
		}
    	    }
	}
В конец мода:
PHP:
stock ShowTrashMenuForPlayer(playerid, id)
{
	for(new f = 0; f < 6; f++)
	{
		switch(f)
		{
			case 1: TextDrawSetPreviewModel(Musor[f], 1484);
			case 2: TextDrawSetPreviewModel(Musor[f], 2647);
			case 3: TextDrawSetPreviewModel(Musor[f], 928);
			case 4: TextDrawSetPreviewModel(Musor[f], 2805);
		}
		TextDrawShowForPlayer(playerid, Musor[f]);
	}
        for(new i = 0; i < 4; i++)
	{
		PlayerTextDrawShow(playerid, Musor_[i]);
	}
	SelectTextDraw(playerid, COLOR_BLUE);
	SetPVarInt(playerid, "Trash_View_ID", id);
	UpdateTrashMenuForPlayer(playerid);
	return 1;
}
stock HideTrashMenuForPlayer(playerid)
{
    for(new f = 0; f < 6; f++) TextDrawHideForPlayer(playerid, Musor[f]);
    for(new i = 0; i < 4; i++) PlayerTextDrawHide(playerid, Musor_[i]);
    CancelSelectTextDraw(playerid);
    DeletePVar(playerid, "Trash_View_ID");
}

stock UpdateTrashMenuForPlayer(playerid)
{
	new text[32];
	for(new i = 0; i < 4; i++)
	{
	    switch(i)
	    {
		    case 0: format(text, sizeof(text), "~w~%d", TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][tBut]);
		    case 1: format(text, sizeof(text), "~w~%d", TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][tBanka]);
		    case 2: format(text, sizeof(text), "~w~%d", TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][tKorobka]);
		    case 3: format(text, sizeof(text), "~w~%d", TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][tSumka]);
		}
		PlayerTextDrawSetString(playerid, Musor_[i], text);
	}
}
В public OnPlayerConnect вставляем:
PHP:
        Musor[0] = TextDrawCreate(55, 165, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~");
	TextDrawAlignment(Musor[0], 0);
	TextDrawUseBox(Musor[0], 1);
	TextDrawBoxColor(Musor[0], COLOR_GREY);
	TextDrawTextSize(Musor[0], 595.0, 110.0);
	
 	for(new i = 1; i < 5; i++)
 	{
		Musor[i] = TextDrawCreate(60+(140*(i-1)), 170, "~n~");
		TextDrawFont(Musor[i], TEXT_DRAW_FONT_MODEL_PREVIEW);
		TextDrawUseBox(Musor[i], 1);
		TextDrawTextSize(Musor[i], 110.0, 110.0);
		TextDrawSetSelectable(Musor[i], 1);

                Musor_[i] = CreatePlayerTextDraw(playerid, 60+(140*b), 170, "~w~0");
	        PlayerTextDrawFont(playerid, Musor_[i], 1);
	        PlayerTextDrawTextSize(playerid, Musor_[i], 1.3, 50.0);
	}
	
 	Musor[5] = TextDrawCreate(550, 286, "Cancel");
	TextDrawAlignment(Musor[5], 2);
	TextDrawFont(Musor[5], 1);
	TextDrawUseBox(Musor[5], 1);
	TextDrawSetShadow(Musor[5], 0);
	TextDrawBackgroundColor(Musor[5], COLOR_GREY);
	TextDrawBoxColor(Musor[5], 0x4A5A6BFF);
	TextDrawTextSize(Musor[5], 1.9, 50.0);
	TextDrawSetSelectable(Musor[5], 1);
В public OnPlayerClickTextDraw добавляем:
PHP:
for(new i = 1; i < 6; i++)
	{
		if(clickedid == Musor[i])
		{
		    switch(i)
		    {
		        case 1:
		        {
		        	if(TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][But] == 0) return 1;
		        	if(PlayerInfo[playerid][pSumka] != 1) return SendClientMessage(playerid, COLOR_GREY, "У Вас нет сумки");
				TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][But] --;
                                PlayerInfo[playerid][pBut] ++;
     	                }
		        case 2:
		        {
		        	if(TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][Banka] == 0) return 1;
		        	if(PlayerInfo[playerid][pSumka] != 1) return SendClientMessage(playerid, COLOR_GREY, "У Вас нет сумки");
				TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][Banka] --;
                                PlayerInfo[playerid][pBanka] ++;
		        }
		        case 3:
		        {
		        	if(TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][Korobka] == 0) return 1;
		        	if(PlayerInfo[playerid][pSumka] != 1) return SendClientMessage(playerid, COLOR_GREY, "У Вас нет сумки");
				TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][Korobka] --;
                                PlayerInfo[playerid][pKorobka] ++;
		        }
		        case 4:
		        {
		        	if(TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][Sumka] == 0) return 1;
		        	if(PlayerInfo[playerid][pSumka] == 1) return SendClientMessage(playerid, COLOR_GREY, "У Вас уже есть сумка");
				TrashInfo[GetPVarInt(playerid, "Trash_View_ID")][Sumka] --;
                                PlayerInfo[playerid][pSumka] ++;
			}
		        case 5: HideTrashMenuForPlayer(playerid);
		    }
		    UpdateTrashMenuForPlayer(playerid);
		}
	}
Ко всем new добавляем
PHP:
new Text:Musor[6], PlayerText:Musor_[4];

enum tInfo
{
	Float:PosX,
	Float:PosY,
	Float:PosZ,
	But,
	Banka,
	Korobka,
	Sumka,
};

new TrashInfo[MAX_TRASH][tInfo];
Всё готово, ниже скрины всего того, что мы делали, вам лишь остаётся придумать, как игроки смогут обменять, полученные в мусорниках вещи на деньги.

Внимание! Файл trash.ini поместить в папку scriptfiles сервера и перезапустить мод для проверки работоспособноси скрипта!

Работоспособность не проверена (т.к изначально данный скрипт писался под MySql и переводился на mxINI во время создания темы).

Обо всех ошибках пишите будем решать совместно.




Модераторам: Об удалении темы хотя бы сообщайте!
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу