PHP код:
main()
{
print("\n----------------------------------");
print(" Мод : PlayMode");
print(" Автор мода Unreal");
print(" Автор вырезки : -WorcOut-");
print("----------------------------------\n");
}
Расписывать не буду , система интересная но код ужасен. 5/10
Работа на Mesql , но бд в моде не нашёл.
Нам потребуется include такие как
PHP код:
#include <streamer>// Include Streamer обьектов и много др
#include <progress>// ProgressBar
#include <a_mysql>
К #define Добавим ->
PHP код:
#define P:: PlayerInfo // Константа , у кого нету не добавляйте , просто мой мод нуждается в этом)
#define f(%1, format(%1,sizeof(%1), // Тот же format
#define publics:%0(%1) forward %0(%1); \
public %0(%1)// для удобсва
#define PRESSED(%0) \
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))// Клавиша
#define RELEASED(%0) \
(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0))) // Клавиша
#define gray 0xCECFCEFF // Цвета кто как хочет меняйте или нету
#define green 0x5AB200FF // Тоже самое
#define blue 0x319AFFFF // Тоже самое
#define GRAY "{d1d1d1}" // Тоже самое
К переменным мы добавим
PHP код:
//Работы
new Text:box_info[MAX_PLAYERS]; // TEXTDRAW BOX
new Text:pic_info[MAX_PLAYERS]; // TEXTDRAW PIC
new Text:col_info[MAX_PLAYERS]; // TEXTDRAW COL
new Text:text_info[MAX_PLAYERS]; // TEXTDRAW TEXT
// Каждый TEXTDRAW служит для определ определённого действия , где информация , где progress и тд
new perem[MAX_PLAYERS] = 2;
new TimerWood[MAX_PLAYERS];
new obj_lesop[MAX_PLAYERS];
new Text3D:derevo3d;
new drev;
new actor_job;
new wood_cars[MAX_VEHICLES];
new woodcar[4]; // Транспорт
// Что интерессное в моде системы нету ток привзяка
new MysqlConnect; // Mysql new у КАЖДОГО РАЗНЫЙ
new Bar:bar[MAX_PLAYERS]; // progress
new Float:derevo[][8] =
{
{1117.49158, -327.13339, 72.93900},
{1117.50281, -293.69238, 72.93900},
{1095.64612, -293.18683, 72.93900},
{1117.63904, -310.86496, 72.93900},
{1094.64380, -311.09174, 72.93900},
{1105.18042, -302.02374, 72.93900},
{1094.99402, -326.76443, 72.93900},
{1106.57153, -317.45139, 72.93900}
};// Где можно пилить
В enum перечисление игрока
PHP код:
pSkin, // Скин игрока
pCash, // Средства игрока
pMember // фракция игрока для проверки
В OnGameModeInit Кидаю код целиком
В него входит
[1] Бот
[2] Транспорт
[3] Обьекты
[PHP]actor_job = CreateActor(73, 1105.4738,-358.1184,73.9922,109.9661); // Actor as salesperson in Ammunation
ApplyActorAnimation(actor_job, "SMOKING", "M_SMKLEAN_LOOP", 4.1, true, false, false, false, 0);
Create3DTextLabel("Джерри {CECFCE}(Директор лесопилки)\nДля разговора нажмите Y", green, 1105.4738,-358.1184,73.9922+1.2, 15.0,0, 0);
//Лесопилка
woodcar[0] = AddStaticVehicleEx(478,1070.7389,-287.1755,73.9864,178.9092,59,1, 60);// walt
woodcar[1] = AddStaticVehicleEx(478,1067.1494,-287.0805,73.9869,178.9709,66,1, 60); // walt
woodcar[2] = AddStaticVehicleEx(478,1074.0715,-287.2300,73.9816,178.3501,66,1, 60); // walt
woodcar[3] = AddStaticVehicleEx(478,1077.4823,-287.3526,73.9779,178.0330,59,1, 60); //
В public OnPlayerEnterCheckpoint(playerid) Добавим
PHP код:
if(IsPlayerInRangeOfPoint(playerid,2.0, 1070.1499,-304.4284,73.9922) && GetPVarInt(playerid,"Rubayu") == 1)
{
RemovePlayerAttachedObject(playerid, 4);
SetPlayerAttachedObject(playerid, 1, 341, 6, 0.0000, 0.0000, 0.0000, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00);
DisablePlayerCheckpoint(playerid);
ApplyAnimation(playerid, "PED", "IDLE_tired", 4.1, 0, 1, 1, 0, 1);
SetPVarInt(playerid,"ProcWood",0);
SetPVarInt(playerid,"Rubayu",0);
obj_lesop[playerid] = CreateObject(1463, 1071.5858, -305.8881, 74.1987,0.0000, 4.0000, 11.00003);
MoveObject (obj_lesop[playerid], 1049.6357, -309.8443, 74.6587,3.0);
SetTimerEx("DROVA",7000,0,"i",Float:playerid);
}
Расписывать не буду скажу так тут проверка игрока в том месте , срабатывает оп анимация и дают ему дрова.)
Пошли кнопки + разговор с ботом
В OnPlayerKeyStateChange мы добавим
PHP код:
if (PRESSED(1024))//Зажали АЛЬТ при рубке дерева
{
if(GetPVarInt(playerid,"zavod") == 1 && GetPVarInt(playerid,"kgfor") == 2)
{
TimerWood[playerid] = SetTimerEx("Timer1", 50, 1,"i",Float:playerid);
}
if(GetPVarInt(playerid,"WoodJob") == 1 && GetPVarInt(playerid,"wood") == 0)
{
for(new i = 0; i < 8; i++)
{
if(IsPlayerInRangeOfPoint(playerid,3.0, derevo[i][0], derevo[i][1], derevo[i][2]))
{
TimerWood[playerid] = SetTimerEx("Timer1", 50, 1,"i",Float:playerid);
}
}
}
}
else if (RELEASED(1024))//Отжали АЛЬТ при рубке дерева
{
if(GetPVarInt(playerid,"WoodJob") == 1 || GetPVarInt(playerid,"zavod") == 1)
{
KillTimer(TimerWood[playerid]);
SetProgressBarValue(bar[playerid],0),UpdateProgressBar(bar[playerid],playerid);
perem[playerid] = 2;
ClearAnimations(playerid);
}
if(GetPVarInt(playerid,"WoodJob") == 1 && GetPVarInt(playerid,"Rubayu") == 1)
{
RemovePlayerAttachedObject(playerid, 1);
SetPlayerAttachedObject(playerid, 4, 1463, 1, 0.184699, 0.426247, 0.000000, 259.531341, 80.949592, 0.000000, 0.476124, 0.468181, 0.470769);
SetPlayerCheckpoint(playerid, 1070.1499,-304.4284,73.9922, 2.0);
ApplyAnimation(playerid,"CARRY","crry_prtial",4.1,0,1,1,1,1);
SetPVarInt(playerid,"Rubayu",1);
return 1;
}
}
if(newkeys & 65536 && IsPlayerInRangeOfPoint(playerid, 5.0, 1105.4738,-358.1184,73.9922))
{
new text[124];
f(text, "%s дровосека\n%s водителя\nИнформация о работе",(GetPVarInt(playerid,"WoodJob") == 0) ? ("{5AB200}Устроиться {ffffff}на работу") : ("{ff4f00}Уволиться {ffffff}с работы"),(GetPVarInt(playerid,"WoodJob_car") != 2) ? ("{5AB200}Устроиться {ffffff}на работу") : ("{ff4f00}Уволиться {ffffff}с работы"));
ShowPlayerDialog(playerid,73, DIALOG_STYLE_LIST,"Лесопилка:",text,"Выбрать","Отмена");
}
if(newkeys & KEY_JUMP || newkeys & KEY_SECONDARY_ATTACK || newkeys & KEY_FIRE || newkeys & KEY_SUBMISSION || newkeys & KEY_SPRINT)
{
if(GetPVarInt(playerid,"Rubayu") == 1)
{
if(GetPVarInt(playerid,"WoodJob") == 1)
{
RemovePlayerAttachedObject(playerid, 4);
DisablePlayerCheckpoint(playerid);
ApplyAnimation(playerid, "PED", "IDLE_tired", 4.1, 0, 1, 1, 0, 1);
SetPVarInt(playerid,"Rubayu",0);
SetPVarInt(playerid,"ProcWood",0);
KillTimer(TimerWood[playerid]);
SetPVarInt(playerid,"wood",0);
SetProgressBarValue(bar[playerid],0),UpdateProgressBar(bar[playerid],playerid);
SetPlayerAttachedObject(playerid, 1, 341, 6, 0.0000, 0.0000, 0.0000, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00);
perem[playerid] = 2;
SendClientMessage(playerid, 0xAFAFAFAA, "Вы уронили дрова.");
}
}
}
В OnDialogResponse Создаём case 1 кто ка хочет я проверял и в личном моде с 0 также и в FS
PHP код:
case 1:
{
if(!response) return 1;
if(listitem == 0)
{
if(GetPVarInt(playerid,"WoodJob") == 0)
{
if(GetPVarInt(playerid,"WoodJob_car") == 2) return SendClientMessage(playerid, gray, "Увольтесь сначала с работы водителя");
SetPVarInt(playerid,"WoodJob",1);
SetPlayerSkin(playerid, 133);
SetPlayerAttachedObject(playerid, 1, 341, 6, 0.0000, 0.0000, 0.0000, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00);
SetPlayerAttachedObject(playerid, 0, 18638, 2, 0.1709, 0.0020, 0.0010, 0.0000, 0.0000, 0.0000, 1.0000, 1.0000, 1.0000, 0, 0);
SendClientMessage(playerid, green, "Вы устроились на работу лесоруба");
SendClientMessage(playerid, gray, "В нижней части экрана показана информация о работе");
SetPVarInt(playerid,"Drov",0);
SetPVarInt(playerid,"ProcWood",0);
SetPVarInt(playerid,"Drova",0);
TD_JOB(playerid,1);
}
else
{
SetPVarInt(playerid,"ProcWood",0);
if(P::[playerid][pMember] == 0) SetPlayerSkin(playerid,P::[playerid][pSkin]);
RemovePlayerAttachedObject(playerid, 1);
RemovePlayerAttachedObject(playerid, 0);
new string[144];
f(string, "Вы cобрали дров %d кг Получено: %d$",GetPVarInt(playerid,"Drov"),GetPVarInt(playerid,"Drov")*2);
SendClientMessage(playerid, green, string);
P::[playerid][pCash] += GetPVarInt(playerid,"Drov")*2;
RemovePlayerAttachedObject(playerid, 4);
ApplyAnimation(playerid, "PED", "IDLE_tired", 4.1, 0, 1, 1, 0, 1);
SetPVarInt(playerid,"Drova",0);
SetPVarInt(playerid,"WoodJob",0);
DisablePlayerCheckpoint(playerid);
SetPVarInt(playerid,"Drov",0);
SetPVarInt(playerid,"Rubayu",0);
TD_JOB(playerid,3);
KillTimer(TimerWood[playerid]);
}
}
if(listitem == 1)
{
if(GetPVarInt(playerid,"WoodJob") == 1) return SendClientMessage(playerid, gray, "Увольтесь сначала с работы лесоруба");
if(GetPVarInt(playerid,"WoodJob_car") == 0)
{
SetPVarInt(playerid,"WoodJob_car",2);
SendClientMessage(playerid, gray, "Вы устроились на развозку дров, садитесь в Walton на парковке");
SetPVarInt(playerid, "wood_incar",0);
TD_JOB(playerid,2);
SetPlayerSkin(playerid, 133);
return 1;
}
if(GetPVarInt(playerid,"WoodJob_car") == 2)
{
EndPlayerCasualJob(playerid);
TD_JOB(playerid,3);
SetPVarInt(playerid, "wood_incar",0);
SetPVarInt(playerid,"WoodJob_car",0);
}
}
if(listitem == 2)
{
SendClientMessage(playerid, gray, "Лесопилка - это...");
SendClientMessage(playerid, gray, "Здесь вы...");
SendClientMessage(playerid, gray, "Для того чтобы...");
SendClientMessage(playerid, gray, "Пишите свою информацию!");
}
return 1;
}
Дальше пошли паблики и стоки расписать не буду кидаю целиком
PHP код:
stock dialog_load_les(playerid)
{
new string[256];
f(string, ""W"Для загрузки дров введите количество в поле ниже:\nУ вас дров загружено: "O"%d кг.\n"GRAY"(прим.:\n1 кг = 30$\n2. Нельзя зугрузить больше 500 кг. и меньше 1 кг.)\nПосле загрузки закройте диалог 'Закрыть'",GetPVarInt(playerid, "wood_incar"));
return ShowPlayerDialog(playerid, 58, DIALOG_STYLE_INPUT, "Загрузка дров", string,"Загрузить","Закрыть");
}
publics: DROVA(playerid)
{
new randderevo = 20 + random(60);
SetPVarInt(playerid, "Drova",GetPVarInt(playerid,"Drova")+randderevo);
drev += GetPVarInt(playerid,"Drova");
new string[144];
SetPVarInt(playerid,"wood",0);
SetPVarInt(playerid, "Drov",GetPVarInt(playerid,"Drov")+GetPVarInt(playerid,"Drova"));
format(string,sizeof(string),"ЛЕСОПИЛКА\n\nДревесины на складе: %d кг.\n"GRAY"Для закупки нажмите NUM 2",drev);
UpdateDynamic3DTextLabelText(derevo3d, green, string);
f(string, "Вы положили на склад %d кг древесины",GetPVarInt(playerid,"Drova"));
SendClientMessage(playerid, green, string);
SetPVarInt(playerid,"Rubayu",0);
SetPVarInt(playerid,"Drova",0);
format(string,sizeof(string),"%d",GetPVarInt(playerid,"Drov"));
TextDrawSetString(col_info[playerid],string);
return DestroyObject(obj_lesop[playerid]);
}
stock UpdateZavod()
{
new texts[256];
format(texts,sizeof(texts),"Количество древесины на складе: "G"%d кг\n"GRAY"Готовых продуктов: %d шт.",zdrov,zprod);
UpdateDynamic3DTextLabelText(dzavod,gray, texts);
format(texts,sizeof(texts),"Склад:\nСырье для переработки: %d кг.\nГотовых продуктов: %d шт.",zdrov,zprod);
UpdateDynamic3DTextLabelText(zavodinfo, gray, texts);
return 1;
}
publics: Timer1(i)
{
if(GetPVarInt(i,"WoodJob") == 1)
{
perem[i] ++;
SetProgressBarValue(bar[i],perem[i]);
UpdateProgressBar(bar[i], i);
ApplyAnimation(i, "CHAINSAW", "WEAPON_csaw", 4.1, 1, 0, 0, 0, 0);
if(perem[i] >= 100)
{
KillTimer(TimerWood[i]);
SetProgressBarValue(bar[i],0);
perem[i] = 2;
SetPVarInt(i,"wood",1),GameTextForPlayer(i, "Completed", 1000, 3);
if(GetPVarInt(i, "wood") == 1)
{
RemovePlayerAttachedObject(i, 1);
SetPlayerAttachedObject(i, 4, 1463, 1, 0.184699, 0.426247, 0.000000, 259.531341, 80.949592, 0.000000, 0.476124, 0.468181, 0.470769);
SetPlayerCheckpoint(i, 1070.1499,-304.4284,73.9922, 2.0);
ApplyAnimation(i,"CARRY","crry_prtial",4.1,0,1,1,1,1);
SetPVarInt(i,"Rubayu",1);
}
}
}
return 1;
}
//загрузка общих переменных
publics: other_l()
{
new rows;
new fields,other;
cache_get_data(rows,fields);
if(rows)
{
drev = cache_get_field_content_int(0, "drova");
other++;
}
printf("[Otherов загружено]: <%i>",other);
new texts[124];
format(texts,sizeof(texts),"ЛЕСОПИЛКА\n\nДревесины на складе: %d кг.\n"GRAY"Для закупки нажмите NUM 2",drev);
derevo3d = CreateDynamic3DTextLabel(texts,green,1050.2217,-313.2011,73.9931,10.0,INVALID_PLAYER_ID,INVALID_PLAYER_ID,0,-1,-1,-1,100.0);
return true;
}
publics: other_s()
{
new query[256];
mysql_format(MysqlConnect,query,sizeof(query),"UPDATE other SET `drova`='%i'",drev);
mysql_function_query(MysqlConnect, query, false,"","");
}
stock wood_car(vehicleid){
if(vehicleid >= woodcar[0]
&& vehicleid <= woodcar[3]) return true;
return 0;}
forward TD_JOB(playerid,job);
stock TD_JOB(playerid,job)
{
if(job == 3)
{
TextDrawSetString(col_info[playerid],"0");
TextDrawHideForPlayer(playerid,box_info[playerid]);
TextDrawHideForPlayer(playerid,pic_info[playerid]);
TextDrawHideForPlayer(playerid,col_info[playerid]);
TextDrawDestroy(text_info[playerid]);
HideProgressBarForPlayer(playerid, bar[playerid]);
return 1;
}
if(job == 1)
{
text_info[playerid] = TextDrawCreate(522.869934, 395.500091, "Pa—o¦a љpoўoceka:~n~Њoљoќљњ¦e k љepeўy њ џa›Їњ¦e ALT~n~Јo¦oЇ ®a o¦®ecњ¦e ®a ckћaљ");
TextDrawLetterSize(text_info[playerid], 0.106105, 0.993333);
TextDrawAlignment(text_info[playerid], 1);
TextDrawSetShadow(text_info[playerid], 0);
TextDrawColor(text_info[playerid], -1);
TextDrawSetOutline(text_info[playerid], 1);
TextDrawBackgroundColor(text_info[playerid], 51);
TextDrawFont(text_info[playerid], 2);
TextDrawSetProportional(text_info[playerid], 1);
TextDrawSetPreviewModel(pic_info[playerid], 1463);
bar[playerid] = CreateProgressBar(526.149353, 380.666564, 76.837524, 15.333374,blue, 100.0);
ShowProgressBarForPlayer(playerid, bar[playerid]);
}
if(job == 2)
{
text_info[playerid] = TextDrawCreate(522.869934, 380.500091, "1. Caљњ¦ec© ў ЈњkaЈ њ eџ›aќ¦e~n~®a ckћaљ ~g~(џa™pyџka /buy)~n~~w~2. ѓaћee eџ›aќ¦e ®a џaўoљ~n~љћ¬ ўЁ™pyџkњ ~g~(/gps)");
TextDrawLetterSize(text_info[playerid], 0.106105, 0.993333);
TextDrawAlignment(text_info[playerid], 1);
TextDrawSetShadow(text_info[playerid], 0);
TextDrawColor(text_info[playerid], -1);
TextDrawSetOutline(text_info[playerid], 1);
TextDrawBackgroundColor(text_info[playerid], 51);
TextDrawFont(text_info[playerid], 2);
TextDrawSetProportional(text_info[playerid], 1);
TextDrawSetPreviewModel(pic_info[playerid], 1463);
}
TextDrawShowForPlayer(playerid,box_info[playerid]);
TextDrawShowForPlayer(playerid,pic_info[playerid]);
TextDrawShowForPlayer(playerid,col_info[playerid]);
TextDrawShowForPlayer(playerid,text_info[playerid]);
return false;
}
stock EndPlayerCasualJob(playerid)
{
if(GetPVarInt(playerid, "WoodJob_car") == 2)
{
TD_JOB(playerid,3);
SetVehicleToRespawn(GetPVarInt(playerid, "car_id"));
if(P::[playerid][pMember] == 0) SetPlayerSkin(playerid,P::[playerid][pSkin]);
TogglePlayerControllable(playerid, 1);
KillTimer(GetPVarInt(playerid, "ExitCarTimer"));
DestroyObject(GetPVarInt(playerid, "OBJ"));
wood_cars[GetPVarInt(playerid, "car_id")] = 0;
SetPVarInt(playerid, "car_id", INVALID_VEHICLE_ID);
SetPVarInt(playerid, "wood_incar",0);
SetPVarInt(playerid, "WoodJob_car",0);
SendClientMessage(playerid, gray, "Вы уволены с работы");
}
}
Вот и всё как я и говорил писал Fs вот что вышло 450 строк
Кому нужен FS писать в LS снизу данные
Надеюсь буду спасибо , не зря и вырезал и создавал тему .