Igor_Antonov
Умник
Здравствуйте, пользователи Pawno-Info.Ru!
В этом мануале, Вы узнаете, как можно обрадовать бомжей на вашем SAMP проекте и предоставить им возможность собирать бутылки, банки, коробки (мусор вообщем) в мусорных контейнерах. Сначала рассмотрим алгоритм работы скрипта:
1) Загрузка координат мусорных контейнеров
2) Создание 3Д текстов в загруженных координах
3) Игрок нажимает ЛКМ, находясь у мусорников
4) Игроку выводиться меню, созданное на текстдравах версии SAMP 0.3x
И так приступим, в начало мода добавим
Cоздадим следущие переменные игрока в конец enum pInfo добавляем:
Используя Ctrl+F ищем OnPlayerLogin, ко всем ini_getInteger({...}) добавляем
Используя Ctrl+F ищем OnPlayerUpdateRl, ко всем ini_setInteger({...}) добавляем
Используя Ctrl+F ищем OnGameModeInit, добавляем в пределах public'a LoadTrash();
Ниже public'a или можете в конец мода вставляем
В public OnPlayerKeyStateChange вставляем код:
В конец мода:
В public OnPlayerConnect вставляем:
В public OnPlayerClickTextDraw добавляем:
Ко всем new добавляем
Всё готово, ниже скрины всего того, что мы делали, вам лишь остаётся придумать, как игроки смогут обменять, полученные в мусорниках вещи на деньги.
Внимание! Файл trash.ini поместить в папку scriptfiles сервера и перезапустить мод для проверки работоспособноси скрипта!
Работоспособность не проверена (т.к изначально данный скрипт писался под MySql и переводился на mxINI во время создания темы).
Обо всех ошибках пишите будем решать совместно.
Модераторам: Об удалении темы хотя бы сообщайте!
В этом мануале, Вы узнаете, как можно обрадовать бомжей на вашем SAMP проекте и предоставить им возможность собирать бутылки, банки, коробки (мусор вообщем) в мусорных контейнерах. Сначала рассмотрим алгоритм работы скрипта:
1) Загрузка координат мусорных контейнеров
2) Создание 3Д текстов в загруженных координах
3) Игрок нажимает ЛКМ, находясь у мусорников
4) Игроку выводиться меню, созданное на текстдравах версии SAMP 0.3x
И так приступим, в начало мода добавим
PHP:
#define MAX_TRASH 256
PHP:
pBut,
pBanka,
pKorobka,
pSumka
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]);
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]);
Ниже 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);
}
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);
}
}
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);
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);
}
}
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 во время создания темы).
Обо всех ошибках пишите будем решать совместно.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Модераторам: Об удалении темы хотя бы сообщайте!
Последнее редактирование:
