- Регистрация
- 27 Авг 2015
- Сообщения
- 357
- Лучшие ответы
- 0
- Репутация
- 188
PHP:
#define FILTERSCRIPT
#include <a_samp>
#include <a_mysql>
#include <sscanf2>
#include <streamer>
#include <foreach>
#include <dc_cmd>
#define CREATE_COST 50000 // Стоимость создания компании
#define MAX_COMPANY_NAME 32
#define SQL_HOST "localhost"
#define SQL_USER "root"
#define SQL_PASSWORD ""
#define SQL_DBNAME "company"
new SQLHandle;
enum _:e_dialogids // Диалоги
{
d_company = 7500,
d_create_company,
d_company_menu,
d_company_close,
d_company_name,
d_company_workers,
d_company_workers_1,
d_company_balance,
d_office_enter,
d_pizza_job,
}
// Компании
enum _company_stats
{
c_id,
c_name[32],
c_owner[MAX_PLAYER_NAME],
c_balance,
c_type,
c_status,
c_office,
c_save,
}
new company[10][_company_stats];
static const type_names[6][24] = // Меняем тип компании
{
"Не выбран",
"Транспортное агенство",
"Механики",
"Инкассация",
"Торговцы пиццей",
"Уборщики"
};
//Офисы
enum _office
{
o_id,
Float:o_pos_x,
Float:o_pos_y,
Float:o_pos_z,
Float:o_pos_a,
o_owner,
bool:o_lock,
o_price,
o_class,
}
new office[10][_office] = {
{0, 1211.5135,-1750.2375,13.5941,38.1336,0,false, 23000, 0},
{1, 1330.1895,-1559.0479,13.5469,128.3041,0,false, 23000,0},
{2, 1419.3374,-1607.2747,13.5469,268.8590,0,false, 23000, 0},
{3, 1419.1687,-1623.9064,13.5469,271.1620,0,false, 23000, 0},
{4, 1419.1680,-1640.2906,13.5469,274.1231,0,false, 23000, 0},
{5, 1411.5525,-1699.6573,13.5395,236.1232,0,false, 23000, 0},
{6, 1378.3621,-1753.1891,14.1406,271.2326,0,false, 23000, 0},
{7, 1325.8979,-1741.8683,13.5469,0.7920,0,false, 23000, 0},
{8, 1322.1058,-1746.4478,13.5469,93.0773,0,false, 23000, 0},
{9, 1322.1083,-1645.1824,13.5469,89.3169,0,false, 23000, 0}
};
//Данные игрока
new player_job[MAX_PLAYERS],
player_rating[MAX_PLAYERS],
player_name[MAX_PLAYERS][MAX_PLAYER_NAME],
player_cash[MAX_PLAYERS],
office_id[MAX_PLAYERS];
public OnPlayerConnect(playerid)
{
GetPlayerName(playerid,player_name[playerid],MAX_PLAYER_NAME);
player_cash[playerid] = 100000;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(GetPVarInt(playerid, "job_pizza") > 0)
{
DeletePVar(playerid, "pizza_buy");
DeletePVar(playerid, "player_transfer");
DeletePVar(playerid, "player_price");
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
SendClientMessage(playerid, 0xFF6347AA, "Вы погибли рабочий день завершён.");
DeletePVar(playerid, "pizza_buy");
DeletePVar(playerid, "player_transfer");
DeletePVar(playerid, "player_price");
DeletePVar(playerid, "job_pizza");
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case d_pizza_job:
{
if(!response) return true;
if( company [ player_job[playerid] ][ c_type ] == 4) // Торговцы пиццей
{
switch(GetPVarInt(playerid, "job_pizza"))
{
case 0:
{
SetPVarInt(playerid, "job_pizza", 1);
SendClientMessage(playerid, 0x27C400FF, "Вы начали рабочий день Развозчика пиццы.");
SendClientMessage(playerid, 0x27C400FF, "Команды:");
SendClientMessage(playerid, -1, "/sellpizza [ид игрока] [цена] - Предложить игроку купить у вас пиццу.");
SendClientMessage(playerid, -1, "/offpizza - Чтобы отменить предложение.");
SetPlayerSkin(playerid, 167); /*Выдаём временный скин*/
}
case 1:
{
SetPlayerSkin(playerid, 86); // выдаём прежней скин
SendClientMessage(playerid, 0xFF6347AA, "Вы закончили рабочий день.");
DeletePVar(playerid, "job_pizza");
DeletePVar(playerid, "pizza_buy");
DeletePVar(playerid, "player_transfer");
DeletePVar(playerid, "player_price");
}
}
}
}
case d_office_enter:
{
if(!response) return 1;
new id = office_id[playerid];
office_id[playerid] = 0;
if(office[ id ][o_owner] == 0) // Нажал купить
{
if(player_job[playerid] == 0) return SendClientMessage(playerid,0xE88732FF,"Офис продается для предприятий, у вас его нет!");
if(!strcmp(company[ player_job[playerid] ][c_owner], player_name[playerid] ))
{
if(player_cash[playerid] < office[ id ][o_price]) return SendClientMessage(playerid,0xE88732FF,"Недостаточно средств!");
office[ company[ player_job[playerid] ][ c_office ] ][ o_owner ] = 0;
save_office( company[ player_job[playerid] ][ c_office ] );
company[ player_job[playerid] ][ c_office ] = id;
office[ id ][ o_owner ] = player_job[playerid];
save_office( company[ player_job[playerid] ][ c_office ] );
SetPlayerPos(playerid, 29.9329,42.5169,1000.0859);
SetPlayerFacingAngle(playerid,0.0000);
SetPlayerVirtualWorld(playerid, id );
company[ player_job[playerid] ][c_save] = true;
new str[90];
format(str,sizeof(str), "[C] %s приобрел новый офис. (Найти её можно командой /office)",player_name[playerid]);
company_chat(player_job[playerid], str);
save_company(player_job[playerid]);
return 1;
}
else return SendClientMessage(playerid,0xE88732FF,"Офис покается для предприятий, у вас его нет!");
}
else //Нажал войти
{
if(office[ id ][ o_lock ] && player_job[playerid] != office[ id ][ o_owner ]) return SendClientMessage(playerid,0xE88732FF,"Офис закрыт на ключ!");
if( office[ id ][ o_class] == 0)
{
SetPlayerPos(playerid, 29.9329,42.5169,1000.0859+1);
SetPlayerFacingAngle(playerid,0.0);
}
SetPlayerVirtualWorld(playerid, id );
}
}
case d_create_company:
{
if(!response) return 1;
if(player_cash[playerid] < CREATE_COST) return SendClientMessage(playerid,0xE88732FF,"Недостаточно средств!");
for(new i=1; i < sizeof(company); i++)
{
if(i >= sizeof(company))
{
SendClientMessage(playerid,0xE88732FF, "В штате превышен лимит на частные предприятия!");
break;
}
if(company[i][c_id] != 0) continue;
new _office_id = -1;
for(new id; id < sizeof(office); id++)
{
if(office[ id ][ o_owner ] == 0)
{
_office_id = id;
break;
}
}
if(_office_id == -1) return SendClientMessage(playerid,0xE88732FF, "В штате превышен лимит на частные предприятия! (Не хватает офисов)");
office[ _office_id ][ o_owner] = i;
company[ i ][ c_office ] = _office_id;
company[i][c_id] = i;
format(company[i][c_name],32,"Новая компания");
format(company[i][c_owner],24,player_name[playerid]);
new query[128];
mysql_format(SQLHandle, query, sizeof(query), "INSERT INTO company SET ID=%d, Owner='%e'",i,player_name[playerid]);
mysql_tquery(SQLHandle, query, "", "");
SendClientMessage(playerid,0xE88732FF, "Поздравляем! Ваша компания открыта. Теперь вы частный предприниматель!");
SendClientMessage(playerid,0xE88732FF, "Штат выделил вам офис. (Чтобы найти его используйте /office)");
player_job[playerid] = i;
player_rating[playerid] = 0;
player_cash[playerid] -= CREATE_COST;
company[ i ][c_save] = true;
save_company( i );
break;
}
}
case d_company:
{
if(!response) return 1;
new id = company[listitem][c_office];
SetPlayerCheckpoint(playerid, office[id][o_pos_x], office[id][o_pos_y], office[id][o_pos_z], 2.0);
SendClientMessage(playerid,0xE88732FF, "Офис компании отмечен в GPS. (Красная метка на карте)!");
}
case d_company_menu:
{
if(!response) return 1;
switch(listitem)
{
case 0,3: cmd::mycompany(playerid,"");
case 1:
{
company[ player_job[playerid] ][ c_type ] ++;
if(company[ player_job[playerid] ][ c_type ] >= sizeof(type_names)) company[ player_job[playerid] ][ c_type ] = 0;
company[ player_job[playerid] ][ c_save ] = true;
cmd::mycompany(playerid,"");
}
case 2:
{
company[ player_job[playerid] ][ c_status] = !company[ player_job[playerid] ][ c_status];
cmd::mycompany(playerid,"");
company[ player_job[playerid] ][ c_save ] = true;
}
case 4:
{
ShowPlayerDialog(playerid,d_company_name,DIALOG_STYLE_INPUT,!"{858585}Смена названия",!"{FFFFFF}Как вы хотите назвать свою компанию?\n\n\
{858585}Обратите внимание, что название не должно содержать более 32 симловов",!"Поменять",!"Назад");
}
case 5:
{
new str[400]="Сотрудник\tРейтинг";
foreach(new i:Player)
{
format(str,sizeof(str),"%s\n%s(%i)\t%i",str,player_name[i],i,player_rating[i]);
}
ShowPlayerDialog(playerid,d_company_workers,DIALOG_STYLE_TABLIST_HEADERS,!"{858585}Сотрудники онлайн:", str, !"Управлять",!"Закрыть");
}
case 7:
{
ShowPlayerDialog(playerid, d_company_close, DIALOG_STYLE_MSGBOX, !" ", !"{FFFFFF}Вы собираетесь закрыть свою компанию.\n\n\
{858585}Вы подтверждаете свои действия?",!"Да",!"Нет");
}
case 6:
{
new str[160];
format(str,sizeof(str), "{FFFFFF}Баланс компании составляет: {858585}%i\n\
- Положить на счет({858585}$5000{FFFFFF})\n\
- Снять со счета({858585}$5000{FFFFFF})\n\
- Снять все деньги со счета", company[ player_job[playerid] ][c_balance] );
return ShowPlayerDialog(playerid,d_company_balance, DIALOG_STYLE_LIST,"{858585}Счет компании:",str,!"Выбрать","Назад");
}
}
}
case d_company_balance:
{
if(!response) return cmd::mycompany(playerid,"");
if(listitem == 1)
{
if(player_cash[playerid] < 5000) SendClientMessage(playerid, 0x0858585FF, "Недостаточно средств на вашем личном счете!");
else player_cash[playerid] -= 5000,company[ player_job[playerid] ][c_balance] += 5000;
}
else if(listitem == 2)
{
if(company[ player_job[playerid] ][c_balance] < 5000) SendClientMessage(playerid, 0x0858585FF, "Недостаточно средств на счету у компании!");
else player_cash[playerid] += 5000,company[ player_job[playerid] ][c_balance] -= 5000;
}
else if(listitem == 3)
{
player_cash[playerid] += company[ player_job[playerid] ][c_balance];
company[ player_job[playerid] ][c_balance] = 0;
}
company[ player_job[playerid] ][ c_save ] = true;
new str[160];
format(str,sizeof(str), "{FFFFFF}Баланс компании составляет: {858585}%i\n\
- Положить на счет({858585}$5000{FFFFFF})\n\
- Снять со счета({858585}$5000{FFFFFF})\n\
- Снять все деньги со счета", company[ player_job[playerid] ][c_balance] );
return ShowPlayerDialog(playerid,d_company_balance, DIALOG_STYLE_LIST,"{858585}Счет компании:",str,!"Выбрать","Назад");
}
case d_company_workers:
{
if(!response) return cmd::mycompany(playerid,"");
return ShowPlayerDialog(playerid,d_company_workers_1,DIALOG_STYLE_INPUT,!"{858585}Управение:", "{FFFFFF}Введите ID игрока, которого хотите уволить:", !"Уволить",!"Закрыть");
}
case d_company_workers_1:
{
if(!response) return cmd::mycompany(playerid,"");
if(!strlen(inputtext) || strlen(inputtext) > 32)
return ShowPlayerDialog(playerid,d_company_workers_1,DIALOG_STYLE_INPUT,!"{32cd32}Управение:", "{FFFFFF}Введите ID игрока, для взаимодействия:", !"Управлять",!"Закрыть");
if(!IsPlayerConnected(strval(inputtext))) return SendClientMessage(playerid, 0x0858585FF, "Игрок не найден!");
if(player_job[ strval(inputtext)] != player_job[playerid]) return SendClientMessage(playerid, 0x0858585FF, "Игрок не работает на вас!");
player_job[ strval(inputtext) ] = 0;
new str[42 + MAX_PLAYER_NAME + MAX_PLAYER_NAME];
format(str,sizeof(str), "[C] %s выгнал сотрудника %s из компании!", player_name[playerid], player_name[ strval(inputtext) ] );
company_chat(player_job[playerid], str);
cmd::mycompany(playerid,"");
}
case d_company_name:
{
if(!response) return cmd::mycompany(playerid,"");
if(!strlen(inputtext) || strlen(inputtext) > 32)
return ShowPlayerDialog(playerid,d_company_name,DIALOG_STYLE_MSGBOX,!"{32cd32}Смена названия",!"{FFFFFF}Как вы хотите назвать свою компанию?\n\n\
{858585}Обратите внимание, что название не должно содержать более 32 симловов",!"Поменять",!"Назад");
company[ player_job[playerid] ][ c_save ] = true;
format(company[player_job[playerid]][c_name], 32, inputtext);
SendClientMessage(playerid,0xE88732FF,"Название компании успешно изменено!");
new str[40 + MAX_PLAYER_NAME + MAX_COMPANY_NAME];
format(str,sizeof(str),"[C] %s поменял название компании на %s",player_name[playerid], inputtext);
company_chat(player_job[playerid], str);
return cmd::mycompany(playerid,"");
}
case d_company_close:
{
if(!response) return cmd::mycompany(playerid,"");
new id = player_job[playerid];
new query[64];
mysql_format(SQLHandle, query, sizeof(query), "DELETE FROM company WHERE ID=%d", id);
mysql_tquery(SQLHandle, query, "", "");
company[ id ][c_id] = 0;
player_cash[playerid] += company[ id ][c_balance];
SendClientMessage(playerid,0xE88732FF, "Ваше предприятие закрыто. Все деньги на счете переведены вам!");
SendClientMessage(playerid,0xE88732FF, "Сотрудников компании известили!");
foreach(new i: Player)
{
if(player_job[i] == id)
{
player_job[i] = 0;
if(playerid != i) SendClientMessage(i,0xE88732FF, "Компания на которую вы работали была закрыта!");
}
}
}
}
return 1;
}
CMD:mycompany(playerid, params[])
{
if(player_job[playerid] == 0) return 1;
if(!strcmp(company[ player_job[playerid] ][c_owner], player_name[playerid] ))
{
new str[500],
workers,
id = player_job[playerid];
foreach(new i: Player)
{
if(player_job[i] == player_job[playerid]) workers++;
}
format(str,sizeof(str),"{32cd32}Информация:\t \n\
{FFFFFF}Баланс: {32cd32}$%i\t{FFFFFF}Занятие: {32cd32}%s{FFFFFF}\n\
Сотрудников онлайн: {32cd32}%i чел.{FFFFFF}\tТрудоустройство: {32cd32}%s\n\
{E88732}Управление:\t \n\
- Название компании\t \n\
- Сотрудники\t \n\
- Счет\t \n\
{E88732}- Закрыть компанию\t \n\
{858585}Чтобы поменять способ трудоустройства или род занятия,\n{858585}нажмите на строку с соотвествующей информацией\t ",
company[ id ][c_balance], type_names[ company[ id ][c_type] ],workers,
(company[ id ][c_status]) ? ("Собеседования"):("Открытое"));
ShowPlayerDialog(playerid,d_company_menu, DIALOG_STYLE_TABLIST, company[ id ] [c_name], str ,"Выбрать","Закрыть");
}
else SendClientMessage(playerid,-1,"Вы не владелец этой компании");
return 1;
}
CMD:ccompany(playerid, params[])
{
ShowPlayerDialog(playerid, d_create_company, DIALOG_STYLE_MSGBOX, !" ", !"{FFFFFF}Вы собираетесь открыть свою компанию.\n\
Вам придется платить налоги штату.\n\
Если компания будет работать в убытик, вы обанкротитесь, а компанию закроет государство:\n\n\
Стоимость данной операции составляет: {E88732}$"#CREATE_COST"\n\n\
{858585}Вы подтверждаете свои действия?",!"Да",!"Нет");
return 1;
}
CMD:office(playerid)
{
if(player_job[playerid] == 0) return 1;
new id = company[ player_job[playerid] ][ c_office ];
SetPlayerCheckpoint(playerid, office[id][o_pos_x], office[id][o_pos_y], office[id][o_pos_z],2.0);
return 1;
}
CMD:c(playerid,params[])
{
if(sscanf(params, "s[80]", params)) return SendClientMessage(playerid, 0xE88732FF, "USAGE: {FFFFFF}/c [TEXT]");
new str[112];
format(str,sizeof(str),"[C] %s: %s",player_name[playerid],params);
company_chat(player_job[playerid],str);
return 1;
}
CMD:saveall(playerid)
{
for(new i; i < sizeof(company); i++) save_company(i);
for(new i; i < sizeof(office); i++) save_office(i);
return 1;
}
CMD:invite(playerid,params[])
{
if(player_job[playerid] == 0) return 1;
if(!strcmp(company[ player_job[playerid] ][c_owner], player_name[playerid] ))
{
if(sscanf(params, "i", params[0])) return SendClientMessage(playerid, 0xE88732FF, "USAGE: {FFFFFF}/cinvite [ID]");
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, 0xE88732FF, "Игрок не найден!");
if(player_job[params[0]] != 0) return SendClientMessage(playerid, 0xE88732FF, "Человек уже устроен в другой компании!");
player_job[params[0]] = player_job[playerid];
new str[38 + MAX_PLAYER_NAME+MAX_PLAYER_NAME];
format(str,sizeof(str),"[C] %s принял нового сотрудника: %s",player_name[playerid], player_name[params[0]]);
company_chat(player_job[playerid], str);
}
else SendClientMessage(playerid,-1,"Вы не владелец этой компании");
return 1;
}
CMD:uninvite(playerid,params[])
{
if(player_job[playerid] == 0) return 1;
if(!strcmp(company[ player_job[playerid] ][c_owner], player_name[playerid] ))
{
if(sscanf(params, "i", params[0])) return SendClientMessage(playerid, 0xE88732FF, "USAGE: {FFFFFF}/cinvite [ID]");
if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, 0xE88732FF, "Игрок не найден!");
if(player_job[params[0]] != player_job[playerid]) return SendClientMessage(playerid, 0xE88732FF, "Человек не из вашей компании!");
player_job[params[0]] = 0;
new str[38 + MAX_PLAYER_NAME+MAX_PLAYER_NAME];
format(str,sizeof(str),"[C] %s уволил сотрудника: %s",player_name[playerid], player_name[params[0]]);
company_chat(player_job[playerid], str);
}
else SendClientMessage(playerid,-1,"Вы не владелец этой компании");
return 1;
}
CMD:olock(playerid,params[])
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, 29.9329,42.5169,1000.0859) && GetPlayerVirtualWorld(playerid) != 0)
{
if(player_job[playerid] != office[ GetPlayerVirtualWorld(playerid) ][ o_owner ]) return SendClientMessage(playerid, 0xE88732FF, "[i] У вас нет ключа от этого офиса!");
office[ GetPlayerVirtualWorld(playerid) ][ o_lock ] = !office[ GetPlayerVirtualWorld(playerid) ][ o_lock ];
GameTextForPlayer(playerid,(office[ GetPlayerVirtualWorld(playerid) ][ o_lock ]) ? ("~r~locked"):("~g~unlocked"),3000,3);
PlayerPlaySound(playerid, 25800, 0.0, 0.0, 0.0);
}
return 1;
}
CMD:job(playerid)
{
if(player_job[playerid] == 0) return true;
if( company [ player_job[playerid] ][ c_type ] == 4) // Торговцы пиццей
{
ShowPlayerDialog(playerid, d_pizza_job, DIALOG_STYLE_MSGBOX, "Торговец пиццей",(GetPVarInt(playerid, "job_pizza")) ? ("Вы хотите закончить работу торговец пиццей?"):
("Вы хотите начать работу торговец пиццей?"), !"Да",!"Нет");
}
return 1;
}
CMD:sellpizza(playerid, params[])
{
static const
fmt_str0[] = "Вы предложили %s купить у вас пиццу за %d$",
fmt_str1[] = "%s предлагает вам купить пиццу за %d$";
new str[sizeof fmt_str0 + MAX_PLAYER_NAME + 4];
if(GetPVarInt(playerid, "job_pizza") != 1) return true;
if(GetPVarInt(playerid, "player_price") > 0)
return SendClientMessage(playerid, -1, "Вы уже предлагаете кому-то что-то купить!");
if(sscanf(params, "id", params[0], params[1]))
return SendClientMessage(playerid, -1, "Используйте /sellpizza [ид] [цена]");
if(params[1] < 1 || params[1] > 1000)
return SendClientMessage(playerid, -1, "Цена от 1$ до 1000$");
if(!IsPlayerConnected(params[0]))
return SendClientMessage(playerid, -1, "Такого игрока нет!");
if(IsPlayerInAnyVehicle(params[0]))
return SendClientMessage(playerid, -1, "Игрок находитесь в машине!");
format(str, sizeof(str), fmt_str0, player_name[params[0]], params[1]); // PlayerInfo[playerid][pName] меняем на свою
SendClientMessage(playerid, 0xE88732FF, str);
format(str, sizeof(str), fmt_str1, player_name[playerid], params[1]); // PlayerInfo[playerid][pName] меняем на свою
SendClientMessage(params[0], 0xE88732FF, str);
SendClientMessage(params[0], 0xE88732FF, "Чтобы согласиться на предложение, используйте {FFFFFF}'Y'{E88732}, отказаться {FFFFFF}'N'!");
SetPVarInt(params[0],"player_transfer", playerid);
SetPVarInt(playerid,"player_transfer", params[0]);
SetPVarInt(playerid,"player_price", params[1]);
SetPVarInt(params[0],"player_price",params[1]);
return 1;
}
CMD:offpizza(playerid)
{
DeletePVar(GetPVarInt(playerid,"player_transfer"), "player_transfer");
DeletePVar(GetPVarInt(playerid,"player_transfer"), "player_price");
DeletePVar(playerid, "player_price");
DeletePVar(playerid, "player_transfer");
SendClientMessage(playerid, 0xE88732FF, "Вы отменили предложение!");
return 1;
}
CMD:jobid(playerid,params[])
{
new current;
if(sscanf(params, "i", current)) return SendClientMessage(playerid, 0xE88732FF, "USAGE: {FFFFFF}/jobid [#]");
player_job[playerid] = current;
SendClientMessage(playerid,-1,"Успешно");
return 1;
}
CMD:clist(playerid)
{
new str[400] = "Компания\tЗанятие\tТрудоустройство";
for(new i; i < sizeof(company); i++)
{
if(company[i][c_id] == 0) continue;
format(str,sizeof(str), "%s\n%s\t{E88732}%s{FFFFFF}\t%s",str,company[i][c_name],type_names[ company[ i ][ c_type ] ], (company[ i ][c_status]) ? ("Собеседования"):("Открытое"));
}
if(strlen(str) < 40) return ShowPlayerDialog(playerid, 0000, DIALOG_STYLE_MSGBOX,!"Список компаний:", !"{E88732}Нет действующих компаний в штате!",!"Закрыть","");
return ShowPlayerDialog(playerid, d_company, DIALOG_STYLE_TABLIST_HEADERS,!"Список компаний:", str,!"Найти","Закрыть");
}
forward load_company();
public load_company()
{
new rows = cache_num_rows();
if(rows)
{
new id, loaded;
while(loaded < rows)
{
id = cache_get_field_content_int(loaded, "ID");
if(id > sizeof(company)) continue;
company[id][c_id] = id;
cache_get_field_content(loaded, "Name", company[id][c_name], .max_len = MAX_COMPANY_NAME);
cache_get_field_content(loaded, "Owner", company[id][c_owner], .max_len = MAX_PLAYER_NAME);
company[id][c_type] = cache_get_field_content_int(loaded, "Type");
company[id][c_balance] = cache_get_field_content_int(loaded, "Balance");
company[id][c_status] = cache_get_field_content_int(loaded, "Status");
company[id][c_office] = cache_get_field_content_int(loaded, "Office");
loaded++;
}
printf(" [Company System] Загружено из базы данных %d компаний.", loaded);
}
return 1;
}
stock save_company(id)
{
if(!company[id][c_save]) return 1;
new query[256];
mysql_format(SQLHandle, query, sizeof(query), "UPDATE company SET Name='%e', Owner='%e', Type=%i, Balance=%d, Status=%d, Office=%d WHERE ID=%d",
company[id][c_name],company[id][c_owner],company[id][c_type],company[id][c_balance],company[id][c_status],company[id][c_office], company[id][c_id]);
mysql_tquery(SQLHandle, query, "", "");
company[id][c_save] = false;
return 1;
}
stock company_chat(id,text[])
{
foreach(new i: Player)
{
if(id != player_job[i]) continue;
SendClientMessage(i, 0xE88732FF,text);
}
}
forward load_offices();
public load_offices()
{
new rows = cache_num_rows();
if(sizeof(office) > rows)
{
for(new loaded = rows; loaded < sizeof(office); loaded++)
{
new query[128];
mysql_format(SQLHandle, query, sizeof(query), "INSERT INTO office SET ID=%d",office[ loaded ][ o_id ]);
mysql_tquery(SQLHandle, query, "", "");
}
}
if(rows)
{
new current;
for(new loaded; loaded < sizeof(office); loaded++)
{
if(loaded >= sizeof(office)) continue;
office[loaded][o_id] = cache_get_field_content_int(loaded, "ID");
office[loaded][o_owner] = cache_get_field_content_int(loaded, "Owner");
if(office[loaded][o_class] == 0) // 1 - класс
{
CreateDynamicPickup(1275, 1,31.9809,32.0808,1000.0850, loaded);
CreateDynamic3DTextLabel("Трудоустройство\n{FFFFFF}Нажмите ALT, для взаимодействия", 0xE88732FF, 31.9809,32.0808,1000.0850+0.35, 15.0, .testlos = loaded);
CreateDynamic3DTextLabel("Выход\n{FFFFFF}Нажмите ALT, для взаимодействия\n(Чтобы закрыть офис, используйте /olock)", 0xE88732FF, 29.9329,42.5169,1000.0859+0.35, 15.0, .testlos = loaded);
}
CreateDynamicPickup(1210, 1, office[loaded][o_pos_x], office[loaded][o_pos_y], office[loaded][o_pos_z]);
CreateDynamicMapIcon(office[loaded][o_pos_x], office[loaded][o_pos_y], office[loaded][o_pos_z], 31, 0);
CreateDynamic3DTextLabel("Офис\n{FFFFFF}Нажмите ALT, для взаимодействия", 0xE88732FF, office[loaded][o_pos_x], office[loaded][o_pos_y], office[loaded][o_pos_z]+0.35, 15.0, .testlos = 1);
current++;
}
printf(" [Office System] Загружено из базы данных %d офис(ов).", current);
}
return 1;
}
stock save_office(id)
{
new query[256];
mysql_format(SQLHandle, query, sizeof(query), "UPDATE office SET Owner=%i WHERE ID=%d",
office[id][o_owner], id);
mysql_tquery(SQLHandle, query, "", "");
return 1;
}
public OnFilterScriptExit()
{
for(new i; i < sizeof(company); i++) save_company(i);
mysql_close(SQLHandle);
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
DisablePlayerCheckpoint(playerid);
return 1;
}
public OnFilterScriptInit()
{
DisableInteriorEnterExits();
SQLHandle = mysql_connect(SQL_HOST, SQL_USER, SQL_DBNAME, SQL_PASSWORD);
mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_HTML);
mysql_set_charset("cp1251");
if(mysql_errno() != 0)
{
print(" Can't connect to MySQL.");
return 1;
}
mysql_tquery(SQLHandle, "SELECT * FROM company", "load_company", "");
mysql_tquery(SQLHandle, "SELECT * FROM office", "load_offices", "");
CreateDynamicObject(19378, 38.37000, 41.89000, 999.00000, 0.00000, 90.00000, 0.00000);
CreateDynamicObject(19378, 38.37060, 32.26450, 999.00000, 0.00000, 90.00000, 0.00000);
CreateDynamicObject(19378, 27.87260, 32.26450, 999.00000, 0.00000, 90.00000, 0.00000);
CreateDynamicObject(19378, 27.86880, 41.90000, 999.00000, 0.00000, 90.00000, 0.00000);
CreateDynamicObject(19358, 22.72280, 32.27110, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 33.10410, 29.05930, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 22.72280, 35.47890, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 22.72280, 38.69000, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 22.72280, 41.90000, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 24.24000, 27.54000, 1000.84003, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(19358, 24.24000, 27.54000, 1000.84003, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(19358, 24.25520, 43.18150, 1000.84003, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(19358, 27.45600, 27.55300, 1000.84003, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(19358, 30.66000, 27.55300, 1000.84003, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(19358, 33.84054, 27.55761, 1000.84003, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(19358, 22.72280, 29.05930, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 33.10410, 32.27110, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 22.72280, 35.47890, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 33.10410, 35.47890, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 33.10410, 38.69000, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 33.10410, 41.90000, 1000.84003, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19358, 24.25520, 27.55300, 1000.84003, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(19358, 27.45600, 43.18150, 1000.84003, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(19358, 30.66000, 43.18150, 1000.84003, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(19358, 33.84050, 43.16160, 1000.84003, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(1569, 29.21470, 43.11560, 999.08557, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(14455, 22.10590, 27.67700, 1000.65961, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(14455, 27.85997, 27.67697, 1000.65961, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(1705, 28.62019, 34.05582, 999.06598, 0.00000, 0.00000, -15.06000);
CreateDynamicObject(1714, 27.86260, 30.38240, 999.08679, 0.00000, 0.00000, 180.00000);
CreateDynamicObject(2184, 28.95569, 32.46917, 999.08728, 0.00000, 0.00000, 180.00000);
CreateDynamicObject(2190, 27.15368, 32.39522, 999.86151, 0.00000, 0.00000, 4.00000);
CreateDynamicObject(2811, 31.13203, 42.50349, 999.08661, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(2811, 28.82920, 42.46620, 999.08661, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(2825, 28.66204, 31.97801, 999.86047, 0.00000, 0.00000, -104.38003);
CreateDynamicObject(2202, 32.51117, 30.55148, 999.08539, 0.00000, 0.00000, -90.00000);
CreateDynamicObject(2161, 32.98070, 34.03740, 1000.43884, 0.00000, 0.00000, -90.00000);
CreateDynamicObject(2161, 32.97870, 35.36660, 999.09082, 0.00000, 0.00000, -90.00000);
CreateDynamicObject(2161, 32.98070, 34.03740, 999.09082, 0.00000, 0.00000, -90.00000);
CreateDynamicObject(2161, 32.97870, 35.36660, 1000.42853, 0.00000, 0.00000, -90.00000);
CreateDynamicObject(2164, 33.01468, 32.49195, 999.06989, 0.00000, 0.00000, -90.00000);
CreateDynamicObject(1723, 23.51629, 42.54107, 999.08600, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(1724, 26.88564, 41.62007, 999.08588, 0.00000, 0.00000, -90.00000);
CreateDynamicObject(1724, 26.89209, 40.36493, 999.08588, 0.00000, 0.00000, -90.00000);
CreateDynamicObject(1723, 25.53385, 38.37599, 999.08600, 0.00000, 0.00000, 180.00000);
CreateDynamicObject(2069, 26.86627, 42.49629, 999.10132, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(2069, 26.92299, 38.39777, 999.10132, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(1818, 23.86817, 39.97588, 999.08618, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(1486, 24.02109, 40.94822, 999.72882, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(1808, 32.75803, 40.64501, 999.08813, 0.00000, 0.00000, -90.00000);
CreateDynamicObject(2110, 32.49409, 38.69324, 999.08759, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(2342, 32.56007, 38.53936, 1000.00116, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(19172, 22.75970, 40.19320, 1001.36041, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(19172, 22.81400, 40.47020, 1001.18762, 0.00000, 0.00000, 90.00000);
CreateDynamicObject(18652, 22.79930, 40.45160, 1001.93848, 0.00000, 0.00000, 0.00000);
CreateDynamicObject(1705, 26.25432, 33.82211, 999.06598, 0.00000, 0.00000, 15.06000);
CreateDynamicObject(19377, 27.87410, 32.26200, 1002.59302, 0.00000, 90.00000, 0.00000);
CreateDynamicObject(19377, 27.87410, 41.89850, 1002.59302, 0.00000, 90.00000, 0.00000);
return 1;
}
public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
{
SetPlayerPosFindZ(playerid, fX, fY, fZ);
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if((newkeys & KEY_WALK))
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, 29.9329,42.5169,1000.0859))
{
new id = GetPlayerVirtualWorld(playerid);
SetPlayerPos(playerid, office[ id ][o_pos_x],office[ id ][o_pos_y],office[ id ][o_pos_z]);
SetPlayerFacingAngle(playerid, office[id][o_pos_a]);
SetPlayerVirtualWorld(playerid, 0);
return true;
}
if(IsPlayerInRangeOfPoint(playerid, 2.0, 31.9809,32.0808,1000.0850))
{
new id = office[GetPlayerVirtualWorld(playerid)][o_owner];
if(player_job[playerid] == id && !strcmp(company[ player_job[playerid] ][c_owner], player_name[playerid] ))
return SendClientMessage(playerid,0xE88732FF, "Вы не можете покинуть собственную компанию!");
if(player_job[playerid] == id)
{
player_job[playerid] = 0;
new str[48 + MAX_PLAYER_NAME+MAX_PLAYER_NAME];
format(str,sizeof(str),"[C] %s ушел из компании!",player_name[playerid]);
company_chat(player_job[playerid], str);
return true;
}
if(company[ id ][ c_status ]) return SendClientMessage(playerid,0x858585FF, "Устроиться в компанию можно только через собеседование!");
{
player_job[playerid] = id;
new str[50 + MAX_PLAYER_NAME+MAX_PLAYER_NAME];
format(str,sizeof(str),"[C] %s устроился в компанию!",player_name[playerid]);
company_chat(player_job[playerid], str);
}
return true;
}
if(GetPlayerVirtualWorld(playerid) == 0)
{
for(new id; id < sizeof(office); id++)
{
if(!IsPlayerInRangeOfPoint(playerid, 2.0, office[id][o_pos_x], office[id][o_pos_y], office[id][o_pos_z])) continue;
new str[176];
if(office[id][o_owner] != 0)
{
format(str,sizeof(str),"{FFFFFF}Офис: {E88732}%i{FFFFFF}\n\
Компания: {E88732}%s{FFFFFF}\n\
Класс офиса: {E88732}%i{FFFFFF}\n\n\
Вы желаете войти?", id, company[ office[ id ][o_owner] ][c_name], office[id][o_class]+1);
}
else
{
format(str,sizeof(str),"{FFFFFF}Офис: {E88732}%i{FFFFFF}\n\
Класс офиса: {E88732}%i{FFFFFF}\n\
Стоимость: {E88732}$%i{FFFFFF}\n\n\
Вы желаете приобрести офис?",id, office[ id ][ o_class ]+1, office[id ][o_price]);
}
ShowPlayerDialog(playerid, d_office_enter, DIALOG_STYLE_MSGBOX, !"{E88732}Информация:",str,!"Да",!"Нет");
office_id[playerid] = id;
break;
}
}
}
if(newkeys == KEY_YES)
{
if(GetPVarInt(playerid, "player_price") > 0)
{
static const
fmt_str0[] = "Вы приняли предложения от %s купить у него пиццу за %d$",
fmt_str1[] = "%s купил у вас пиццу за %d$",
fmt_str2[] = "[C] %s совершил сделку на $%d";
new
str[sizeof fmt_str0 + MAX_PLAYER_NAME + 4],
i = GetPVarInt(playerid, "player_transfer"),
price = GetPVarInt(playerid, "player_price");
if(player_cash[playerid] < price) //player_cash[playerid] меняем на свою
return SendClientMessage(playerid, -1, "У вас нет столько денег");
format(str, sizeof(str), fmt_str0, player_name[i], price); //player_name[i] меняем на свою
SendClientMessage(playerid, 0x27C400FF, str);
format(str, sizeof(str), fmt_str1, player_name[playerid], price); //player_name[playerid] меняем на свою
SendClientMessage(i, 0x27C400FF, str);
player_cash[i] += price/2; // player_cash[i] меняем на свою
format(str, sizeof(str), fmt_str2, player_name[i], price); //player_name[playerid] меняем на свою
company_chat(player_job[i], str);
company[ player_job[i] ][ c_balance ] += price/2; //Прибавляем половину выручки на счет компании
player_rating[i]++; //Прибавляем рейтинг игрока в компании
player_cash[playerid] -= price; // player_cash[playerid] меняем на свою
ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 1, 0, 0, 1, 1, 1);
SetPlayerAttachedObject(playerid, 1, 2814, 5, 0.027999, 0.000000, 0.182000, -79.400093, -9.600002, 14.400002, 1.000000, 1.000000, 1.000000);
SetPlayerSpecialAction (playerid, SPECIAL_ACTION_CARRY);
SetPVarInt(playerid, "pizza_buy", 1);
DeletePVar(playerid, "player_transfer");
DeletePVar(playerid, "player_price");
DeletePVar(i, "player_transfer");
DeletePVar(i, "player_price");
}
}
if(newkeys == KEY_NO)
{
if(GetPVarInt(playerid, "player_price") > 0)
{
new i = GetPVarInt(playerid, "player_transfer");
SendClientMessage(playerid, 0xFF6347AA, "Вы отказались от покупки!");
SendClientMessage(i, 0xFF6347AA, "Игрок отказался покупать у вас пиццу!");
GameTextForPlayer(i, "~r~NO", 1500, 1);
DeletePVar(playerid, "player_transfer");
DeletePVar(playerid, "player_price");
DeletePVar(i, "player_transfer");
DeletePVar(i, "player_price");
}
}
if(newkeys == KEY_FIRE)
{
if(GetPVarInt(playerid, "pizza_buy") == 1)
{
//....
//.... здесь добавим переменную вашего хп / сытости
//....
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_NONE);
ApplyAnimation(playerid, "FOOD", "EAT_Burger", 4.0, 0, 1, 1, 0, 0, 1);
if(IsPlayerAttachedObjectSlotUsed(playerid, 1)) RemovePlayerAttachedObject(playerid, 1);
DeletePVar(playerid, "pizza_buy");
}
}
return 1;
}
PHP:
-- phpMyAdmin SQL Dump
-- version 3.5.1
-- ссылка удалена
--
-- Хост: 127.0.0.1
-- Время создания: Апр 17 2020 г., 02:36
-- Версия сервера: 5.5.25
-- Версия PHP: 5.3.13
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- База данных: `company`
--
-- --------------------------------------------------------
--
-- Структура таблицы `company`
--
CREATE TABLE IF NOT EXISTS `company` (
`ID` int(4) NOT NULL,
`Name` varchar(32) NOT NULL DEFAULT 'Новая компания',
`Balance` int(11) NOT NULL,
`Status` int(3) NOT NULL,
`Type` int(1) NOT NULL,
`Owner` varchar(30) NOT NULL,
`Office` int(3) NOT NULL DEFAULT '-1'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `company`
--
INSERT INTO `company` (`ID`, `Name`, `Balance`, `Status`, `Type`, `Owner`, `Office`) VALUES
(1, 'Новая компания', 0, 0, 0, 'Leon_Willson', 0),
(2, 'Новая компания', 0, 0, 0, 'Leon_Willson', 1);
-- --------------------------------------------------------
--
-- Структура таблицы `office`
--
CREATE TABLE IF NOT EXISTS `office` (
`ID` int(3) NOT NULL,
`Owner` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `office`
--
INSERT INTO `office` (`ID`, `Owner`) VALUES
(0, 1),
(1, 0),
(2, 0),
(3, 0),
(4, 0),
(5, 0),
(6, 0),
(7, 0),
(8, 0),
(9, 0);
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;