PDA

Просмотр полной версии : [Мануал] Мусорные баки для бомжей



Jack_Shepard
07.02.2017, 19:41
Доброго времени мои дорогие друзья!
Сделал систему мусорных баков для себя, и решил выложить её сюда может кому и пригодится.
Можно использовать на респах для пропитание бомжей.




Где нибудь в начале мода добавим константу и enum.


enum e_MUSOR_INFO
{
m_text[33],
m_id,
Float: m_x,
Float: m_y,
Float: m_z,
Float: m_a
}

static const m_info[][e_MUSOR_INFO] = {
{"Мусорный бак #1\nНажмите [ ALT ]", 1345, 1162.67163, -1764.05139, 13.36153, -90.00002}, // Ls Автовогзал
{"Мусорный бак #2\nНажмите [ ALT ]", 1345, 1445.02893, -1743.53162, 13.25893, 0.00000}, // мерия LS
{"Мусорный бак #3\nНажмите [ ALT ]", 1345, 1766.54126, -1906.41931, 13.26053, 0.00000}, // жд вокзал LS
{"Мусорный бак #5\nНажмите [ ALT ]", 1345, -2017.93311, -89.97948, 35.09048, 89.99998} // автошкола SF
};


Подробнее

static const m_info[][e_MUSOR_INFO] = {
{/*3d текст над баком*/, /*ид бака*/, /*координата X*/, /*координата Y*/, /*координата Z*/, /*координата A*/},
//Для того чтобы добавить новый бак, просто добавьте сюда новую строчку, и заполните необходимыми данными!
};



Теперь в public OnGameModeInit() добавим цикл, который будет загружать наши баки.


for(new m; m < sizeof(m_info); m++)
{
CreateObject(m_info[m][m_id], m_info[m][m_x], m_info[m][m_y], m_info[m][m_z], 0.00000, 0.00000, m_info[m][m_a]); // создаём баки
Create3DTextLabel(m_info[m][m_text], 0xFFFF00AA, m_info[m][m_x], m_info[m][m_y], m_info[m][m_z]+1, 5.0, 0); // создаём текст над баками
}

В public OnPlayerKeyStateChange


if(newkeys & KEY_WALK)
{
for(new m; m < sizeof(m_info); m++)
{
if(!IsPlayerInRangeOfPoint(playerid, 2.0, m_info[m][m_x], m_info[m][m_y], m_info[m][m_z])) continue;

if(GetPVarInt(playerid, "food") != 0)
return SendClientMessage(playerid, -1, "У вас уже есть еда в руках");

static const fmt_str[] = "* %s копается в мусорном баке"; // выводим текст на экран
new str[sizeof fmt_str + MAX_PLAYER_NAME],
playername[MAX_PLAYER_NAME];


GetPlayerName(playerid, playername, sizeof(playername)); // узнаём ник игрока

SetTimer("RandomFoods", 5000, false); // запускаем таймер на 4 секунды
ApplyAnimation(playerid, "GANGS", "smkcig_prtl" , 4.1, 0, 0, 0, 0, 0, 0); // включаем анимацию для игрока
SetPlayerFacingAngle(playerid, m_info[m][m_a]+180); // поворачеваем игрока к баку если повёрнут жопой :D

format(str, sizeof(str), fmt_str, playername); // форматируем текст
ProxDetector(playerid, 20.0, 0xC2A2DAAA, str);
}
}
if(GetPVarInt(playerid, "food") == 1)
{
if(newkeys & KEY_FIRE)
{
//ваша переменная хп, или сытости
SetPlayerChatBubble(playerid, "Кушает...", -1, 15, 2000); // выводим сообщения над игроком
ApplyAnimation(playerid, "FOOD", "EAT_Burger", 4.0, 0, 0, 0, 0, 0, 1); // включаем анимацию для игрока
if(IsPlayerAttachedObjectSlotUsed(playerid, 1)) RemovePlayerAttachedObject(playerid, 1); // удаляем объект с игрока
DeletePVar(playerid, "food"); // удоляем PVar
}
}

Где нибудь в конце мода добавим паблик.

forward RandomFood(playerid);
public RandomFood(playerid)
{
static const
fmt_str[] = "* %s находит в мусорном баке %s", // выводим текст в чат
random_messsage_food[][] = // выводим рандомный текст в чат
{
"Гнилую капусту",
"Тухлые помидоры",
"Пиццу с муравьями",
"Кусочек хлеба",
"Бургер",
"Пюре"
};
new str[sizeof fmt_str + MAX_PLAYER_NAME],
playername[MAX_PLAYER_NAME],
rand = random(sizeof(random_messsage_food));

GetPlayerName(playerid, playername, sizeof(playername)); // узнаём ник игрока

format(str, sizeof(str), fmt_str, playername, random_messsage_food[rand]); // форматируем текст
ProxDetector(playerid, 20.0, 0xC2A2DAAA, str);

ClearAnimations(playerid); // удаляем анимацию.
SetPVarInt(playerid, "food", 1); // записываем в PVar значения 1
SetPlayerAttachedObject(playerid, 1, 2703, 6, 0.033999, 0.048000, 0.002000, 0.000000,
25.099998, -105.700027, 0.699000, 0.809999, 0.794000); // атачим объект к игроку
return true;
}

ProхDetector (если не имеется у вас)


ProxDetector(playerid, Float:max_range, color, 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 0;
}

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;

#if defined foreach
foreach (new i : Player) {
#else
for (new i = GetPlayerPoolSize(); i != -1; i--) {
#endif
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 1;
}





https://www.youtube.com/watch?v=3q4_G8k_EQ4&feature=youtu.be

Вот и всё, может пригодится кому)))
Автор: Jack_Shepard

vovandolg
07.02.2017, 19:44
аха) ради прикола добавить ему дилдак к руке который он хавает))
Мусорка же:pardon:

Jack_Shepard
07.02.2017, 19:51
аха) ради прикола добавить ему дилдак к руке который он хавает))
Мусорка же:pardon:

Добавил ему гамбургер)) больше не чего не нашёл))