Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Система компаний для сервера самп

JIEON_COJIORS

Изучающий
Пользователь
Регистрация
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 */;
Версия Mysql: R39-6
 
Сверху Снизу