#iDanny
Новичок
Всем привет
В недавном опросе проведенной в группе портала, большинство юзеров захотели копию системы попрошайничества с проекта Arizona RolePlay. Данная версия скрипта была сделана на скорую руку и требует оптимизации, которая будет сделана и залито сюда в скором времени.
Необходимые плагины:
- streamer (
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!)
- dc_cmd (
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!)
Описание системы:
Данная команда позволит игрокам до 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 на аризоне, и у Вас есть аккаунт в мафии и желание помочь усовершенствовать скрипт, напишите мне ВКонтакте.
- Если нашли недоработку - напишите в коментах.
- Скачать скомпилированный скрипт:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Скриншоты:
Последнее редактирование:
