#pragma
Компетентный
Доброго времени суток форум!
Хочу поделиться с вами системой мусорных баков.
Суть такова. Игрок подходит к мусорному баку, нажимает кнопку ALT, и рандомно находит еду, чем собственно пополняет сытость или здоровье.
ПРИСТУПИМ
Ко всем переменным добавим переменную таймера, которая будут хранить его ID.Хочу поделиться с вами системой мусорных баков.
Суть такова. Игрок подходит к мусорному баку, нажимает кнопку ALT, и рандомно находит еду, чем собственно пополняет сытость или здоровье.
ПРИСТУПИМ
PHP:
new TrashTimer[MAX_PLAYER];
PHP:
#define TRASH_TEXT "Мусорный бак\nНажмите [ ALT ]"
#define MAX_TRASH (7)
#define TRASH_OBJECT (1345)
PHP:
static const TrashInfo[MAX_TRASH][4] = {
/* X Y Z A*/
{1162.66504, -1761.55530, 13.34980, 89.99999},
{1410.96045, -1716.00952, 13.29405, 84.17999},
{1764.65918, -1906.39929, 13.30363, 179.99995},
{1974.91711, -1451.63123, 13.33228, 0.00000},
{-1980.91663, 121.65891, 27.43907, -90.42000},
{-2634.46484, 630.87225, 14.20443, 0.00000},
{2794.02686, 1303.98474, 10.65669, 180.05995}
};
PHP:
for(new index; index < sizeof(TrashInfo); index++) // Пеербераем массив TrashInfo
{
CreateObject(TRASH_OBJECT, TrashInfo[index][0], TrashInfo[index][1], TrashInfo[index][2], 0.00000, 0.00000, TrashInfo[index][3]); // Создаем объект мусорки
Create3DTextLabel(TRASH_TEXT, -1, TrashInfo[index][0], TrashInfo[index][1], TrashInfo[index][2]+1, 5.0, 0); // Создаем текст над мусоркой
}
PHP:
if(newkeys & KEY_WALK)
{
for(new index; index < sizeof(TrashInfo); index++)
{
if(!IsPlayerInRangeOfPoint(playerid, 1.5, TrashInfo[index][0], TrashInfo[index][1], TrashInfo[index][2])) continue; // Проверяем находится ли игрок рядом с баком
if(/* Ваш массив сытости или здоровья */ >= 100)
return SendClientMessage(playerid, -1, "Вы не голодны!");
if(GetPVarInt(playerid, "eat_time") > gettime())
return SendClientMessage(playerid, -1, "Бесплатная еда доступна раз в минуту"); // Ограничение использование бака раз в минуту.
TrashTimer[playerid] = SetTimerEx("@_random_foods", 1000*5, false, "i", playerid); // Запускаем таймер на 5 секунд
ApplyAnimation(playerid, "GANGS", "smkcig_prtl" , 4.1, 0, 0, 0, 0, 0, 0); // Проигрываем анимацию.
SetPlayerFacingAngle(playerid, TrashInfo[index][3]); // Поворачиваем игрока по направлению бака.
SetPlayerChatBubble(playerid, "копается в мусорном баке", -1, 30.0, 10000); // Выводим сообщения над игроком
}
}
PHP:
if(TrashTimer[playerid])
{
KillTimer(TrashTimer[playerid]);
TrashTimer[playerid] =-1;
}
Код:
PHP:
@_random_foods(playerid);
@_random_foods(playerid)
{
static const // Массив с названием содержимого мусорного бака.
random_messsage_food[][] =
{
"Гнилую капусту",
"Тухлые помидоры",
"Пиццу с муравьями",
"Кусочек хлеба",
"Сало",
"Марковь"
};
new
string[73],
rand = random(sizeof(random_messsage_food)); // Рандомно выбираем, содержимое из массива random_messsage_food
KillTimer(TrashTimer[playerid]);
TrashTimer[playerid] =-1;
format(string, sizeof(string), "%s находит в мусорном баке %s", /* Массив с именем игрока */, random_messsage_food[rand]); // Выводим сообщения в чат
ProxDetector(playerid, 20.0, -1, string);
ApplyAnimation(playerid, "FOOD", "EAT_Burger", 4.0, 0, 0, 0, 0, 0, 1); // Проигрываем анимацию
/* Тут ваш массив сытости или здоровья */ += 25.0; // Дабаваляем сытости игроку.
// Пример PlayerInfo[playerid][pSatiety] += 25.0;
PlayerPlaySound(playerid, 32200, 0.0, 0.0, 0.0); // Проигрываем звук.
SetPVarInt(playerid, "eat_time", gettime()+60); // Дабавляем время в Pvar, у меня здесь +60 сек, то есть минута.
return true;
}
PHP:
ProxDetector(playerid, Float:max_range, color, const string[], Float:max_ratio = 1.6)
{
new
Float:pos_x,
Float:pos_y,
Float:pos_z,
Float:range,
Float:range_ratio,
Float:range_with_ratio,
clr_r, clr_g, clr_b,
Float:color_r, Float:color_g, Float:color_b;
if (!GetPlayerPos(playerid, pos_x, pos_y, pos_z)) {
return false;
}
color_r = float(color >> 24 & 0xFF);
color_g = float(color >> 16 & 0xFF);
color_b = float(color >> 8 & 0xFF);
range_with_ratio = max_range * max_ratio;
foreach (new i : Player) {
if (!IsPlayerStreamedIn(playerid, i)) {
continue;
}
range = GetPlayerDistanceFromPoint(i, pos_x, pos_y, pos_z);
if (range > max_range) {
continue;
}
range_ratio = (range_with_ratio - range) / range_with_ratio;
clr_r = floatround(range_ratio * color_r);
clr_g = floatround(range_ratio * color_g);
clr_b = floatround(range_ratio * color_b);
SendClientMessage(i, (color & 0xFF) | (clr_b << 8) | (clr_g << 16) | (clr_r << 24), string);
}
SendClientMessage(playerid, color, string);
return true;
}
Скриншоты
Вот собственно и всё)
Последнее редактирование:
