Место для рекламы.

Реклама на сайте: vk.com/magicowru
Реклама в группе: vk.com/nikita55222
Стать модератором портала: (КЛИК)

[Мануал] Система попрашайничества [Arizona RP] [/beg]

PawnDev

Пользователь
Пользователь
Регистрация
29.03.2018
Сообщения
21
Репутация
0
#1
Всем привет

В недавном опросе проведенной в группе портала, большинство юзеров захотели копию системы попрошайничества с проекта Arizona RolePlay. Данная версия скрипта была сделана на скорую руку и требует оптимизации, которая будет сделана и залито сюда в скором времени.

Необходимые плагины:

Описание системы:
Данная команда позволит игрокам до 4 уровня получать каждые 40 секунд по 10$, или 15$ при попрошайничестве под покровительство мафии.
Команды:
/beg - начать / завершить попрошайничать
/minvite - взять игрока под покровительство мафии (для мафии).


Начинаем,

Ко всем глобальным переменным:​

PHP:
static str_beg_info[] = " \n \n{FFFFFF}Вы начали попрошайничать деньги. Каждые 40 секунд вы будете получать по 10$.\
	\nА если вы будете под руководством мафии, то сможете получать до 15$ в 40 секунд!\
	\nДля того чтобы подключится к бизнесу мафии, достаточно найти одного их представителя\
	\n \n{e8793e}Попрошайничать вы можете даже в афк, это даст вам возможность заработать деньги,\
	\nпока вы занимаетесь делами в реальной жизни. Попрошайничать можно до 24 часов афк!\n ";

enum pInfo
{
	pBeg[5],
	pLevel,
	pMoney,
	pMembers
};
new PlayerInfo[MAX_PLAYERS][pInfo];
В OnPlayerConnect:​
PHP:
	PlayerInfo[playerid][pBeg][0] = -1;
	PlayerInfo[playerid][pBeg][3] = 0;
В OnPlayerDisconnect:​
PHP:
	if(PlayerInfo[playerid][pBeg][1])
	{
	    PlayerInfo[playerid][pBeg][1] = 0;
	    DestroyDynamicObject(PlayerInfo[playerid][pBeg][2]);
	    DestroyDynamicObject(PlayerInfo[playerid][pBeg][2]+1);
	}
В OnPlayerSpawn:​
PHP:
	if(PlayerInfo[playerid][pBeg][0] == -1 && PlayerInfo[playerid][pLevel] < 4
		&& PlayerInfo[playerid][pMoney] < 20000 && !PlayerInfo[playerid][pMembers])
	{
		PlayerInfo[playerid][pBeg][0] = 0;
		SendClientMessage(playerid, -1, !"{DFCFCF}>>>{DC4747} Пока вы малоимущий {DFCFCF}(до 4-го уровня){DC4747}, на улице вы можете попрошайничать деньги.");
		SendClientMessage(playerid, -1, !"{DC4747}Используйте команду {DFCFCF}/beg{DC4747}, чтобы поставить табличку и банку для денег!");
	}
B OnPlayerKeyStateChange:​
PHP:
	if(PlayerInfo[playerid][pBeg][1])
	{
	    ApplyAnimation(playerid, !"BEACH", !"ParkSit_W_loop", 4.1, 0, 1, 1, 1, 1);
	}
Ко всем командам:​
PHP:
CMD:beg(playerid)
{
	if(PlayerInfo[playerid][pLevel] > 4 || PlayerInfo[playerid][pMoney] > 20000 || PlayerInfo[playerid][pMembers])
	{
		SendClientMessage(playerid, -1, !"{DFCFCF}>>>{DC4747} Данная команда доступна малоимущийм игрокам {DFCFCF}(до 4-го уровня){DC4747}.");
	    return 1;
	}
    if(!PlayerInfo[playerid][pBeg][1])
	{
		if(IsPlayerInRangeOfPoint(playerid, 50.0, 1755.4108,-1893.7559,13.5567))
		{
			SendClientMessage(playerid, 0xDC4747FF, !"[Ошибка] {FFFFFF}На территории спавна, нельзя просить деньги!");
			return 1;
		}
		
		if(IsPlayerInAnyVehicle(playerid))
		{
		    SendClientMessage(playerid, -1, !"Покиньте транспорт!");
		    return 1;
		}
		
		if(PlayerInfo[playerid][pBeg][0] > gettime())
		{
			SendClientMessage(playerid, 0xAA3333FF, !"[Ошибка] {FFFFFF}Попрошайничать можно раз в 10 секунд!");
			return 1;
		}

	    new
	        tmpobjid,
			Float:pos_x,
			Float:pos_y,
			Float:pos_z,
			Float:angle;

		GetPlayerPos(playerid, pos_x, pos_y, pos_z);
		GetXYInFrontOfPlayer(playerid, pos_x, pos_y, 1.0);
		GetPlayerFacingAngle(playerid, angle);
		
		tmpobjid = CreateDynamicObject(2599, pos_x, pos_y, pos_z-0.6, 0.0, 0.0, angle, -1, -1, -1, 300.0, 300.0);
		SetDynamicObjectMaterial(tmpobjid, 0, 14603, !"bikeskool", !"motel_wall3", 0x00000000);//пока не придумал способ "борьбы" с background color in SetDynamicObjectMaterialText
		SetDynamicObjectMaterialText(tmpobjid, 0, !"Подайте\nбомжу на\nлечение", 60, !"Calibri", 20, 0, -1, 0x00087978, 1);

		GetXYInFrontOfPlayer(playerid, pos_x, pos_y, 2.0);
		CreateDynamicObject(11744, pos_x, pos_y, pos_z-0.9, 0.0, 0.0, angle, -1, -1, -1, 300.0, 300.0);
		Streamer_Update(playerid);
		
		ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, !"Псс Инфа!", str_beg_info, !"Понял", !"");

		PlayerInfo[playerid][pBeg][0] = 10 + gettime();
		PlayerInfo[playerid][pBeg][1] = 1;
		PlayerInfo[playerid][pBeg][2] = tmpobjid;
		PlayerInfo[playerid][pBeg][4] = 0;
		
		TogglePlayerControllable(playerid, 0);
		ApplyAnimation(playerid, !"BEACH", !"ParkSit_W_loop", 4.1, 0, 1, 1, 1, 1);

		GameTextForPlayer(playerid, !"successfull", 5000, 1);
		return SendClientMessage(playerid, -1, !">> {FAAC58}Используйте {FFFFFF}/beg{FAAC58}, чтобы закончить попрошайничать!");
	}
	
	TogglePlayerControllable(playerid, 1);

	DestroyDynamicObject(PlayerInfo[playerid][pBeg][2]);
    DestroyDynamicObject(PlayerInfo[playerid][pBeg][2]+1);

	PlayerInfo[playerid][pBeg][1] = 0;
	ApplyAnimation(playerid, !"CARRY", !"crry_prtial", 4.0, 0, 0, 0, 0, 0);
	
	return SendClientMessage(playerid, -1, !">> {73B461}Вы забрали табличку и перестали {FFFFFF}попрошайничать.");
}

COMMAND:minvite(playerid, params[])
{
// Если вы хотите помочь доработать эту команду, и у Вас есть аккаунт
// в мафии, напишите в лс: vk.com/x.co_der
// ибо команда создана по собственным соображениям.
	if(PlayerInfo[playerid][pMembers] != 20){ // если игрок НЕ состоит в мафии (пишите ид фракции мафия)
	    return 1;
	}
	if(isnull(params))
	{
	    SendClientMessage(playerid, -1, !"Используйте команду: /minvite [id игрока]");
	    return 1;
	}
	
	new
	    targetid = strval(params),
		string[128];

	if(0 == IsPlayerConnected(targetid) || playerid == targetid)
	{
	    SendClientMessage(playerid, -1, !"Данный игрок не подключён");
	    return 1;
	}
	if(PlayerInfo[playerid][pLevel] > 4 || PlayerInfo[playerid][pMoney] > 20000 || PlayerInfo[playerid][pMembers])
	{
	    SendClientMessage(playerid, -1, !"Данный игрок не подключён");
	    return 1;
	}
	GetPlayerName(targetid, string, sizeof string);
	strcat(string, " теперь попрошайничает под Вашим покровительством.");
	SendClientMessage(playerid, -1, string);
	
	string[0] = EOS;
	GetPlayerName(playerid, string, sizeof string);
	strcat(string, " взял Вас под покровительство мафии.");
	return SendClientMessage(targetid, -1, string);
}
В секундный паблик:​
PHP:
	new money, string[12];
	for(new i; i < MAX_PLAYERS; i++)
	{
	    if(0 == IsPlayerConnected(i)) continue;
	    if( ++ PlayerInfo[i][pBeg][4] >= 40 && PlayerInfo[i][pBeg][1])
	    {
	        if(!PlayerInfo[i][pBeg][3])
	        {
	            string = "money + 10";
	            money = 10;
	        }
	        else
	        {
	            string = "money + 15";
	            money = 15;
	        }

	        GameTextForPlayer(i, string, 5000, 1);
	        GivePlayerMoney(i, money);
	        PlayerInfo[i][pBeg][4] = 0;
	        
	    }
	}
Ко всем stock (если нету):​
PHP:
stock GetXYInFrontOfPlayer(playerid, &Float:q, &Float:w, Float:distance)
{
	new Float:a;
	GetPlayerPos(playerid, q, w, a);
	GetPlayerFacingAngle(playerid, a);
	q += (distance * floatsin(-a, degrees));
	w += (distance * floatcos(-a, degrees));
	return 1;
}
На этом все, желающим посмотреть как все выглядит - скриншоты прикреплены ниже.

Дополнительно:
  • Если знаете как "устроено" команда /minvite на аризоне, и у Вас есть аккаунт в мафии и желание помочь усовершенствовать скрипт, напишите мне ВКонтакте.
  • Если нашли недоработку - напишите в коментах.
  • Скачать скомпилированный скрипт: Яндекс.Диск

Скриншоты:
Если не открывает: Открыть альбом (ссылка).