Sign in to follow this  
Followers 0
BigPaulo

Проблема с системой бизнесов

8 posts in this topic

Установил себе систему бизнесов на сервер DM,Drift. Через РКОН ставлю сам бизнес, купая его мне высвечивается ошибка о недостатке средств на счету, а на счету у меня есть данная сумма. ПОмогите вот вся система бизнеса.

Спойлер

// ========================================================================== //

// ~~~~~~~~~~~~~~~ ДИНАМИЧЕСКАЯ СИСТЕМА БИЗНЕСОВ ОТ REMARION ~~~~~~~~~~~~~~~~ //
// ___________________Переделал и исправил баги Roman_Zomse _________________ //
// ========================================================================== //

#include <a_samp>

#include <streamer>
#include <MXini>

#undef MAX_PLAYERS
#define MAX_PLAYERS 51 //максимум игроков на сервере + 1 (если 50 игроков, то пишем 51 !!!)

#define BUS_MAX 300 //максимум бизнесов на сервере (от 1 до 300)
#define BUS_PLAY 2 //максимум бизнесов, сколько может купить один игрок (от 1 до 5)
#define BUS_DAY 3 //число суток, сколько бизнес "закреплён" за игроком без права перекупки (от 1 до 5)

#if (BUS_MAX < 1)
    #undef BUS_MAX
    #define BUS_MAX 1
#endif
#if (BUS_MAX > 300)
    #undef BUS_MAX
    #define BUS_MAX 300
#endif
#if (BUS_PLAY < 1)
    #undef BUS_PLAY
    #define BUS_PLAY 1
#endif
#if (BUS_PLAY > 5)
    #undef BUS_PLAY
    #define BUS_PLAY 5
#endif
#if (BUS_DAY < 1)
    #undef BUS_DAY
    #define BUS_DAY 1
#endif
#if (BUS_DAY > 5)
    #undef BUS_DAY
    #define BUS_DAY 5
#endif

forward LoadBusSystem();//загрузка системы бизнесов
forward UnloadBusSystem();//выгрузка системы бизнесов
forward DatCor();//коррекция даты
forward TimCor();//коррекция времени
forward ReadCorTime();//чтение файла cortime.ini
forward dopfunction(per);//функция дальнего вызова для чтения коррекции времени
forward OneMin();//1-минутный таймер

new timecor[8];//переменная коррекции времени 2
new CorTime[5];//переменная коррекции времени 1
new RealName[MAX_PLAYERS][MAX_PLAYER_NAME];//реальный ник игрока
new playspabs[MAX_PLAYERS];//спавн игрока
new playIDbus[MAX_PLAYERS];//ИД бизнеса для игрока
new DelayPickup[MAX_PLAYERS];//задержка вызовов паблика пикапов
new buscount[BUS_MAX];//0- бизнес не создан, 1- бизнес создан
new busidplay[BUS_MAX];//-600- если владелец бизнеса офф-лайн, ИД игрока- если владелец бизнеса он-лайн
new busmoney[BUS_MAX];//счётчик минут бизнеса (если игрок он-лайн)
new busname[BUS_MAX][64];//название бизнеса
new busplayname[BUS_MAX][MAX_PLAYER_NAME];//имя владельца бизнеса
new buscost[BUS_MAX];//стоимость бизнеса
new busminute[BUS_MAX];//через сколько минут бизнес будет приносить доход
new busincome[BUS_MAX];//доход от бизнеса
new busday[BUS_MAX];//дата окончания срока без права перекупки
new Float:buscordx[BUS_MAX];//координаты бизнеса
new Float:buscordy[BUS_MAX];
new Float:buscordz[BUS_MAX];
new PickupID[BUS_MAX];//массив ИД пикапов
new MapIconID[BUS_MAX];//массив ИД мап-иконок
new Text3D:Nbus[BUS_MAX];//массив ИД 3D-текстов
new timeronemin;//переменная 1-минутного таймера

public OnFilterScriptInit()
{
    LoadBusSystem();//загрузка системы бизнесов
    timeronemin = SetTimer("OneMin", 59981, 1);//запуск 1-минутного таймера
    return 1;
}

public OnFilterScriptExit()
{
    KillTimer(timeronemin);//остановка 1-минутного таймера
    UnloadBusSystem();//выгрузка системы бизнесов
    return 1;
}

public OnPlayerConnect(playerid)
{
    playspabs[playerid] = 0;//игрок не заспавнился
    playIDbus[playerid] = -600;//не существующий ИД бизнеса для игрока
    new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    strdel(RealName[playerid], 0, MAX_PLAYER_NAME);//очистить реальный ник игрока
    new aa333[64];//доработка для использования Русских ников
    format(aa333, sizeof(aa333), "%s", pname);//доработка для использования Русских ников
    strcat(RealName[playerid], aa333);//запомнить реальный ник игрока (доработка для использования Русских ников)
//    strcat(RealName[playerid], pname);//запомнить реальный ник игрока
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    playspabs[playerid] = 0;//игрок не заспавнился
    for(new j; j < BUS_MAX; j++)//цикл для всех бизнесов
    {
        if(buscount[j] == 1 && strcmp(RealName[playerid], busplayname[j], false) == 0)//если бизнес существует,
        {//и это бизнес игрока, то:
            busidplay[j] = -600;//даём бизнесу несуществующий ИД игрока
            busmoney[j] = 0;//обнуляем счётчик минут бизнеса
        }
    }
    return 1;
}

public OnPlayerSpawn(playerid)
{
    if(playspabs[playerid] == 0)//если игрок ещё не заспавнился, то:
    {
        for(new j; j < BUS_MAX; j++)//цикл для всех бизнесов
        {
            if(buscount[j] == 1 && strcmp(RealName[playerid], busplayname[j], false) == 0)//если бизнес существует,
            {//и это бизнес игрока, то:
                busidplay[j] = playerid;//даём бизнесу ИД он-лайн игрока - владельца бизнеса
                busmoney[j] = 0;//обнуляем счётчик минут бизнеса
            }
        }
    }
    playspabs[playerid] = 1;//игрок заспавнился
    return 1;
}

stock ini_GetKey( line[] )
{
    new keyRes[256];
    keyRes[0] = 0;
    if ( strfind( line , "=" , true ) == -1 ) return keyRes;
    strmid( keyRes , line , 0 , strfind( line , "=" , true ) , sizeof( keyRes) );
    return keyRes;
}

stock ini_GetValue( line[] )
{
    new valRes[256];
    valRes[0]=0;
    if ( strfind( line , "=" , true ) == -1 ) return valRes;
    strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) );
    return valRes;
}

strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[30];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    new idx;
    idx = 0;
    new string[256];
    new sendername[MAX_PLAYER_NAME];
    new cmd[256];
    new tmp[256];
    cmd = strtok(cmdtext, idx);
    if(strcmp(cmd, "/helpbus", true) == 0)
    {
        if(IsPlayerAdmin(playerid))
        {
            SendClientMessage(playerid, 0x00FFFFFF, " -------------------------- Система бизнесов -------------------------- ");
            SendClientMessage(playerid, 0x00FFFFFF, "   /helpbus - помощь по командам BusSystem");
            SendClientMessage(playerid, 0x00FFFFFF, "   /createbus - создать бизнес");
            SendClientMessage(playerid, 0x00FFFFFF, "   /removebus - удалить бизнес по его ID");
            SendClientMessage(playerid, 0x00FFFFFF, "   /removebusall - удалить все бизнесы");
            SendClientMessage(playerid, 0x00FFFFFF, "   /gotobus - телепортироваться к бизнесу по его ID");
            SendClientMessage(playerid, 0x00FFFFFF, "   /reloadbus - перезагрузка системы бизнесов");
            SendClientMessage(playerid, 0x00FFFFFF, " --------------------------------------------------------------------------------- ");
        }
        else
        {
            SendClientMessage(playerid, 0xFF0000FF, " У Вас нет прав на использование этой команды !");
        }
        return 1;
    }
    if(strcmp(cmd, "/createbus", true) == 0)
    {
        if(IsPlayerAdmin(playerid))
        {
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid, 0x00FFFFFF, " Используйте: /createbus [стоимость(100-2000000 $)] [число минут, через");
                SendClientMessage(playerid, 0x00FFFFFF, " которое бизнес будет приносить доход(10-120)] [доход от бизнеса");
                SendClientMessage(playerid, 0x00FFFFFF, " за минуты он-лайн игры(100-2000000 $)] [название бизнеса(от 3 до 32 символов)]");
                return 1;
            }
            new para1 = strval(tmp);
            if(para1 < 100 || para1 > 2000000)
            {
                SendClientMessage(playerid, 0xFF0000FF, " Стоимость от 100 $ до 2000000 $ !");
                return 1;
            }
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid, 0xFF0000FF, " /createbus [стоимость] [число минут] [доход] [название бизнеса] !");
                return 1;
            }
            new para2 = strval(tmp);
            if(para2 < 10 || para2 > 120)
            {
                SendClientMessage(playerid, 0xFF0000FF, " Число минут от 10 до 120 !");
                return 1;
            }
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid, 0xFF0000FF, " /createbus [стоимость] [число минут] [доход] [название бизнеса] !");
                return 1;
            }
            new para3 = strval(tmp);
            if(para3 < 100 || para3 > 2000000)
            {
                SendClientMessage(playerid, 0xFF0000FF, " Доход от 100 $ до 2000000 $ !");
                return 1;
            }
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            new result[128];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
            {
                result[idx - offset] = cmdtext[idx];
                idx++;
            }
            result[idx - offset] = EOS;
            if(strlen(result) < 3 || strlen(result) > 32)
            {
                SendClientMessage(playerid, 0xFF0000FF, " Название от 3 до 32 символов !");
                return 1;
            }
            if(GetPlayerInterior(playerid) != 0 || GetPlayerVirtualWorld(playerid) != 0)
            {
                SendClientMessage(playerid, 0xFF0000FF, " Бизнес можно создать только в 0-м интерьере, и на основной карте !");
                return 1;
            }
            new para4 = 0;
            new para5 = 0;
            while(para4 < BUS_MAX)
            {
                if(buscount[para4] == 0)
                {
                    para5 = 1;
                    break;
                }
                para4++;
            }
            if(para5 == 0)
            {
                SendClientMessage(playerid, 0xFF0000FF, " Превышен лимит создания бизнесов !");
                SendClientMessage(playerid, 0xFF0000FF, " Для продолжения - увеличьте максимум бизнесов на сервере !");
                return 1;
            }
            buscount[para4] = 1;//создаём бизнес
            GetPlayerPos(playerid, buscordx[para4], buscordy[para4], buscordz[para4]);//задаём координаты бизнеса
            strdel(busname[para4], 0, 64);//задаём название бизнеса
            strcat(busname[para4], result);
            strdel(busplayname[para4], 0, MAX_PLAYER_NAME);//удаляем имя владельца бизнеса
            strcat(busplayname[para4], "*** INV_PL_ID");
            buscost[para4] = para1;//задаём стоимость бизнеса
            busminute[para4] = para2;//задаём, через сколько минут бизнес будет приносить доход
            busincome[para4] = para3;//задаём доход от бизнеса
            busday[para4] = 0;//даём бизнесу право на его перекупку (покупку)

            new file, f[256];//запись бизнеса в файл
            format(f, 256, "bussystem/%i.ini", para4);
            file = ini_createFile(f);
            if(file == INI_OK)
            {
                ini_setString(file, "BusName", busname[para4]);
                ini_setString(file, "PlayName", busplayname[para4]);
                ini_setInteger(file, "Cost", buscost[para4]);
                ini_setInteger(file, "Minute", busminute[para4]);
                ini_setInteger(file, "Income", busincome[para4]);
                ini_setInteger(file, "Day", busday[para4]);
                ini_setFloat(file, "CordX", buscordx[para4]);
                ini_setFloat(file, "CordY", buscordy[para4]);
                ini_setFloat(file, "CordZ", buscordz[para4]);
                ini_closeFile(file);
            }

            PickupID[para4] = CreateDynamicPickup(1274, 1, buscordx[para4], buscordy[para4], buscordz[para4], 0, 0, -1, 100.0);//создаём пикап бизнеса
            MapIconID[para4] = CreateDynamicMapIcon(buscordx[para4], buscordy[para4], buscordz[para4], 52, -1, 0, 0, -1, 200.0);//создаём мап-иконку бизнеса
            format(string, sizeof(string), "Бизнес: %s\nID: %d", busname[para4], para4);
            Nbus[para4] = Create3DTextLabel(string, 0x00FF00FF, buscordx[para4], buscordy[para4], buscordz[para4]+0.70, 50, 0, 1);//создаём 3D-текст бизнеса
            GetPlayerName(playerid, sendername, sizeof(sendername));
            printf("[BusSystem] Админ %s [%d] создал бизнес ID: %d .", sendername, playerid, para4);
            format(string, sizeof(string), " Бизнес ID: %d успешно создан.", para4);
            SendClientMessage(playerid, 0xFFFF00FF, string);
        }
        else
        {
            SendClientMessage(playerid, 0xFF0000FF, " У Вас нет прав на использование этой команды !");
        }
        return 1;
    }
    if(strcmp(cmd, "/removebus", true) == 0)
    {
        if(IsPlayerAdmin(playerid))
        {
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid, 0x00FFFFFF, " Используйте: /removebus [ID бизнеса]");
                return 1;
            }
            new para1 = strval(tmp);
            format(string, sizeof(string), "bussystem/%i.ini", para1);
            if(fexist(string) || buscount[para1] == 1)//если файл или сам бизнес существует, то:
            {
                DestroyDynamicPickup(PickupID[para1]);//удаляем пикап бизнеса
                if(busday[para1] == 0)//если есть мап-иконка бизнеса, то:
                {
                    DestroyDynamicMapIcon(MapIconID[para1]);//удаляем мап-иконку бизнеса
                }
                Delete3DTextLabel(Nbus[para1]);//удаляем 3D-текст бизнеса
                if(fexist(string))//если файл существует, то:
                {
                    fremove(string);//удаляем файл
                }
                buscount[para1] = 0;//удаляем бизнес
                strdel(busplayname[para1], 0, MAX_PLAYER_NAME);//удаляем имя владельца бизнеса
                strcat(busplayname[para1], "*** INV_PL_ID");
                PickupID[para1] = -600;//задаём несуществующий ID-номер пикапа для бизнеса
                GetPlayerName(playerid, sendername, sizeof(sendername));
                printf("[BusSystem] Админ %s [%d] удалил бизнес ID: %d .", sendername, playerid, para1);
                format(string, sizeof(string), " Бизнес ID: %d успешно удалён.", para1);
                SendClientMessage(playerid, 0xFF0000FF, string);
            }
            else//если ни файл, и ни сам бизнес не существуют, то:
            {
                SendClientMessage(playerid, 0xFF0000FF, " Бизнеса с таким ID не существует !");
            }
        }
        else
        {
            SendClientMessage(playerid, 0xFF0000FF, " У Вас нет прав на использование этой команды !");
        }
        return 1;
    }
    if(strcmp(cmd, "/removebusall", true) == 0)
    {
        if(IsPlayerAdmin(playerid))
        {
            new para1 = 0;
            for(new i; i < BUS_MAX; i++)
            {
                format(string, sizeof(string), "bussystem/%i.ini", i);
                if(fexist(string) || buscount == 1)//если файл или сам бизнес существует, то:
                {
                    para1 = 1;
                    DestroyDynamicPickup(PickupID);//удаляем пикап бизнеса
                    if(busday == 0)//если есть мап-иконка бизнеса, то:
                    {
                        DestroyDynamicMapIcon(MapIconID);//удаляем мап-иконку бизнеса
                    }
                    Delete3DTextLabel(Nbus);//удаляем 3D-текст бизнеса
                    if(fexist(string))//если файл существует, то:
                    {
                        fremove(string);//удаляем файл
                    }
                    buscount = 0;//удаляем бизнес
                    strdel(busplayname, 0, MAX_PLAYER_NAME);//удаляем имя владельца бизнеса
                    strcat(busplayname, "*** INV_PL_ID");
                    PickupID = -600;//задаём несуществующий ID-номер пикапа для бизнеса
                }
            }
            if(para1 == 1)
            {
                GetPlayerName(playerid, sendername, sizeof(sendername));
                printf("[BusSystem] Админ %s [%d] удалил все бизнесы.", sendername, playerid);
                SendClientMessage(playerid, 0xFF0000FF, " Все бизнесы были успешно удалены.");
            }
            else
            {
                SendClientMessage(playerid, 0xFF0000FF, " На сервере не создано ни одного бизнеса !");
            }
        }
        else
        {
            SendClientMessage(playerid, 0xFF0000FF, " У Вас нет прав на использование этой команды !");
        }
        return 1;
    }
    if(strcmp(cmd, "/gotobus", true) == 0)
    {
        if(IsPlayerAdmin(playerid))
        {
            tmp = strtok(cmdtext, idx);
            if(!strlen(tmp))
            {
                SendClientMessage(playerid, 0x00FFFFFF, " Используйте: /gotobus [ID бизнеса]");
                return 1;
            }
            new para1 = strval(tmp);
            if(buscount[para1] == 1)//если бизнес существует, то:
            {
                SetPlayerPos(playerid, buscordx[para1], buscordy[para1]+2, buscordz[para1]+1);
                GetPlayerName(playerid, sendername, sizeof(sendername));
                printf("[BusSystem] Админ %s [%d] телепортировался к бизнесу ID: %d .", sendername, playerid, para1);
                format(string, sizeof(string), " Вы телепортировались к бизнесу ID: %d .", para1);
                SendClientMessage(playerid, 0x00FF00FF, string);
            }
            else//если бизнес не существуют, то:
            {
                SendClientMessage(playerid, 0xFF0000FF, " Бизнеса с таким ID не существует !");
            }
        }
        else
        {
            SendClientMessage(playerid, 0xFF0000FF, " У Вас нет прав на использование этой команды !");
        }
        return 1;
    }
    if(strcmp(cmd, "/reloadbus", true) == 0)
    {
        if(IsPlayerAdmin(playerid))
        {
            GetPlayerName(playerid, sendername, sizeof(sendername));
            printf("[BusSystem] Админ %s [%d] начал перезагрузку системы бизнесов.", sendername, playerid);
            format(string, sizeof(string), " Админ %s [%d] начал перезагрузку системы бизнесов.", sendername, playerid);
            SendClientMessageToAll(0xFF0000FF, string);
            SetTimerEx("reloadbus1", 1000, 0, "i", playerid);
        }
        else
        {
            SendClientMessage(playerid, 0xFF0000FF, " У Вас нет прав на использование этой команды !");
        }
        return 1;
    }
    return 0;
}

forward reloadbus1(playerid);
public reloadbus1(playerid)
{
    UnloadBusSystem();//выгрузка системы бизнесов
    SetTimerEx("reloadbus2", 1000, 0, "i", playerid);
    return 1;
}

forward reloadbus2(playerid);
public reloadbus2(playerid)
{
    LoadBusSystem();//загрузка системы бизнесов
    SetTimerEx("reloadbus3", 1000, 0, "i", playerid);
    return 1;
}

forward reloadbus3(playerid);
public reloadbus3(playerid)
{
    new string[256];
    new sendername[MAX_PLAYER_NAME];
    GetPlayerName(playerid, sendername, sizeof(sendername));
    printf("[BusSystem] Админ %s [%d] перезагрузил систему бизнесов.", sendername, playerid);
    format(string, sizeof(string), " Админ %s [%d] перезагрузил систему бизнесов.", sendername, playerid);
    SendClientMessageToAll(0xFF0000FF, string);
    return 1;
}

public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
    if(DelayPickup[playerid] == 0)
    {
        DelayPickup[playerid]++;
        return 1;
    }
    if(DelayPickup[playerid] == 1)
    {
        DelayPickup[playerid]++;
        return 1;
    }
    if(DelayPickup[playerid] == 2)
    {
        DelayPickup[playerid] = 0;
    }
    if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
    {
        new para1 = 0;
        new para2 = 0;
        while(para1 < BUS_MAX)
        {
            if(PickupID[para1] == pickupid)
            {
                para2 = 1;
                break;
            }
            para1++;
        }
        if(para2 == 1)
        {
            new string[2048];
            playIDbus[playerid] = para1;//запоминаем ИД бизнеса для игрока
            if(busday[para1] == 0 && strcmp(RealName[playerid], busplayname[para1], false) != 0)
            {//если у бизнеса есть право на его перекупку, и этот бизнес не игрока, то:
                format(string, sizeof(string), "{ADFF2F}Название бизнеса: %s\nСтоимость бизнеса: %d $\n\nЭтот бизнес будет Вам приносить доход: %d $\
                \nкаждые %d минут Вашего он-лайн отыгранного времени.\n\nВнимание ! Через %d суток, со дня покупки этого бизнеса,\
                \nэтот бизнес сможет перекупить любой другой игрок !", busname[para1], buscost[para1], busincome[para1],
                busminute[para1], BUS_DAY);
                ShowPlayerDialog(playerid, 8001, 0, "Информация.", string, "Купить", "Отмена");
            }
            if(busday[para1] != 0 && strcmp(RealName[playerid], busplayname[para1], false) != 0)
            {//если у бизнеса нет права на его перекупку, и этот бизнес не игрока, то:
                format(string, sizeof(string), "{ADFF2F}Название бизнеса: %s\nВладелец бизнеса: %s\nСтоимость бизнеса: %d $", busname[para1],
                busplayname[para1], buscost);
                ShowPlayerDialog(playerid, 8000, 0, "Информация.", string, "OK", "");
            }
            if(strcmp(RealName[playerid], busplayname[para1], false) == 0)
            {//если этот бизнес - бизнес игрока, то:
                format(string, sizeof(string), "{ADFF2F}Название бизнеса: %s\nСтоимость бизнеса: %d $\n\nЭтот бизнес Вам приносит доход: %d $\
                \nкаждые %d минут Вашего он-лайн отыгранного времени.\n\nВы хотите продать этот бизнес ?", busname[para1], buscost[para1],
                busincome[para1], busminute[para1]);
                ShowPlayerDialog(playerid, 8002, 0, "Информация.", string, "Продать", "Отмена");
            }
        }
    }
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 8000)
    {
        playIDbus[playerid] = -600;//не существующий ИД бизнеса для игрока
        return 1;
    }
    if(dialogid == 8001)
    {
        if(response)
        {
            new string[256];
            if(GetPlayerMoney(playerid) > buscost[playIDbus[playerid]])//если у игрока недостаточно денег, то:
            {
                ShowPlayerDialog(playerid, 8000, 0, "Информация.", "{ADFF2F}У Вас недостаточно денег для покупки этого бизнеса !", "OK", "");
                return 1;
            }
            new para1 = 0;
            for(new i; i < BUS_MAX; i++)//подсчёт числа уже купленных бизнесов
            {
                if(buscount == 1 && strcmp(RealName[playerid], busplayname, false) == 0) { para1++; }
            }
            if(para1 >= BUS_PLAY)
            {
                format(string, sizeof(string), "{ADFF2F вас уже есть %d бизнеса !   Что бы купить этот бизнес -\
                \nпродайте хотя бы один из своих существующих бизнесов !", para1);
                ShowPlayerDialog(playerid, 8000, 0, "Информация.", string, "OK", "");
                return 1;
            }
            GivePlayerMoney(playerid, - buscost[playIDbus[playerid]]);//списывание денег со счёта игрока
            gettime(timecor[0], timecor[1]);
            getdate(timecor[2], timecor[3], timecor[4]);
            TimCor();//коррекция времени
            DatCor();//коррекция даты
            new per22;//вычисление даты окончания срока без права перекупки
            per22 = BUS_DAY + timecor[4];
            if(per22 > 28 && timecor[7] == 0 && timecor[3] == 2)
            {
                per22 = per22 - 28;
            }
            if(per22 > 29 && timecor[7] == 1 && timecor[3] == 2)
            {
                per22 = per22 - 29;
            }
            if(per22 > 30 && (timecor[3] == 4 || timecor[3] == 6 || timecor[3] == 9 || timecor[3] == 11))
            {
                per22 = per22 - 30;
            }
            if(per22 > 31 && (timecor[3] == 1 || timecor[3] == 3 || timecor[3] == 5 || timecor[3] == 7 || timecor[3] == 8 || timecor[3] == 10 || timecor[3] == 12))
            {
                per22 = per22 - 31;
            }
            busidplay[playIDbus[playerid]] = playerid;//даём бизнесу ИД он-лайн игрока - владельца бизнеса
            busmoney[playIDbus[playerid]] = 0;//обнуляем счётчик минут бизнеса
            strdel(busplayname[playIDbus[playerid]], 0, MAX_PLAYER_NAME);//изменение имени владельца бизнеса
            strcat(busplayname[playIDbus[playerid]], RealName[playerid]);
            busday[playIDbus[playerid]] = per22;//изменение даты окончания срока без права перекупки
            new file, f[256];//записываем изменения в файл
            format(f, 256, "bussystem/%i.ini", playIDbus[playerid]);
            file = ini_openFile(f);
            if(file == INI_OK)
            {
                ini_setString(file, "PlayName", busplayname[playIDbus[playerid]]);
                ini_setInteger(file, "Day", busday[playIDbus[playerid]]);
                ini_closeFile(file);
            }
            DestroyDynamicMapIcon(MapIconID[playIDbus[playerid]]);//удаляем мап-иконку бизнеса
            printf("[BusSystem] Игрок %s [%d] купил бизнес %s .", RealName[playerid], playerid, busname[playIDbus[playerid]]);
            format(string, sizeof(string), " Игрок %s [%d] купил бизнес %s .", RealName[playerid], playerid, busname[playIDbus[playerid]]);
            SendClientMessageToAll(0x00FFFFFF, string);
            playIDbus[playerid] = -600;//не существующий ИД бизнеса для игрока
        }
        else
        {
            playIDbus[playerid] = -600;//не существующий ИД бизнеса для игрока
        }
        return 1;
    }
    if(dialogid == 8002)
    {
        if(response)
        {
            new string[256];
            GivePlayerMoney(playerid, buscost[playIDbus[playerid]]);//возврат денег игроку
            busidplay[playIDbus[playerid]] = -600;//даём бизнесу несуществующий ИД игрока
            busmoney[playIDbus[playerid]] = 0;//обнуляем счётчик минут бизнеса
            strdel(busplayname[playIDbus[playerid]], 0, MAX_PLAYER_NAME);//изменение имени владельца бизнеса
            strcat(busplayname[playIDbus[playerid]], "*** INV_PL_ID");
            if(busday[playIDbus[playerid]] != 0)//если бизнес без права его перекупки, то:
            {
                MapIconID[playIDbus[playerid]] = CreateDynamicMapIcon(buscordx[playIDbus[playerid]], buscordy[playIDbus[playerid]],
                buscordz[playIDbus[playerid]], 52, -1, 0, 0, -1, 200.0);//создаём мап-иконку бизнеса
            }
            busday[playIDbus[playerid]] = 0;//изменение даты окончания срока без права перекупки
            new file, f[256];//записываем изменения в файл
            format(f, 256, "bussystem/%i.ini", playIDbus[playerid]);
            file = ini_openFile(f);
            if(file == INI_OK)
            {
                ini_setString(file, "PlayName", busplayname[playIDbus[playerid]]);
                ini_setInteger(file, "Day", busday[playIDbus[playerid]]);
                ini_closeFile(file);
            }
            printf("[BusSystem] Игрок %s [%d] продал бизнес %s .", RealName[playerid], playerid, busname[playIDbus[playerid]]);
            format(string, sizeof(string), " Игрок %s [%d] продал бизнес %s .", RealName[playerid], playerid, busname[playIDbus[playerid]]);
            SendClientMessageToAll(0x00FFFFFF, string);
            playIDbus[playerid] = -600;//не существующий ИД бизнеса для игрока
        }
        else
        {
            playIDbus[playerid] = -600;//не существующий ИД бизнеса для игрока
        }
        return 1;
    }
    return 0;
}

public DatCor()
{
    new Float:flyear;
    timecor[3] = timecor[3] + CorTime[3];//обработка месяца
    timecor[5] = 0;//перенос на год
    if(timecor[3] < 1)
    {
        timecor[3] = 12 + timecor[3];
        timecor[5] = -1;//перенос на год
    }
    if(timecor[3] > 12)
    {
        timecor[3] = timecor[3] - 12;
        timecor[5] = 1;//перенос на год
    }
    timecor[2] = timecor[2] + CorTime[4] + timecor[5];//обработка года
    flyear = float(timecor[2]);
    flyear = floatdiv(flyear, 4);
    flyear = floatfract(flyear);
    if(flyear != 0){timecor[7] = 0;}//НЕ високосный год
    if(flyear == 0){timecor[7] = 1;}//високосный год
    timecor[4] = timecor[4] + CorTime[2] + timecor[6];//обработка числа
    timecor[5] = 0;//перенос на месяц
    if(timecor[4] < 1 && timecor[3] == 3 && timecor[7] == 0)
    {
        timecor[4] = 28 + timecor[4];
        timecor[5] = -1;//перенос на месяц
    }
    if(timecor[4] < 1 && timecor[3] == 3 && timecor[7] == 1)
    {
        timecor[4] = 29 + timecor[4];
        timecor[5] = -1;//перенос на месяц
    }
    if(timecor[4] < 1 && (timecor[3] == 5 || timecor[3] == 7 || timecor[3] == 10 || timecor[3] == 12))
    {
        timecor[4] = 30 + timecor[4];
        timecor[5] = -1;//перенос на месяц
    }
    if(timecor[4] < 1 && (timecor[3] == 2 || timecor[3] == 4 || timecor[3] == 6 || timecor[3] == 8 || timecor[3] == 9 || timecor[3] == 11 || timecor[3] == 1))
    {
        timecor[4] = 31 + timecor[4];
        timecor[5] = -1;//перенос на месяц
    }
    if(timecor[4] > 28 && timecor[3] == 2 && timecor[7] == 0)
    {
        timecor[4] = timecor[4] - 28;
        timecor[5] = 1;//перенос на месяц
    }
    if(timecor[4] > 29 && timecor[3] == 2 && timecor[7] == 1)
    {
        timecor[4] = timecor[4] - 29;
        timecor[5] = 1;//перенос на месяц
    }
    if(timecor[4] > 30 && (timecor[3] == 4 || timecor[3] == 6 || timecor[3] == 9 || timecor[3] == 11))
    {
        timecor[4] = timecor[4] - 30;
        timecor[5] = 1;//перенос на месяц
    }
    if(timecor[4] > 31 && (timecor[3] == 1 || timecor[3] == 3 || timecor[3] == 5 || timecor[3] == 7 || timecor[3] == 8 || timecor[3] == 10 || timecor[3] == 12))
    {
        timecor[4] = timecor[4] - 31;
        timecor[5] = 1;//перенос на месяц
    }
    timecor[3] = timecor[3] + timecor[5];//коррекция месяца
    timecor[5] = 0;//перенос на год
    if(timecor[3] < 1)
    {
        timecor[3] = 12 + timecor[3];
        timecor[5] = -1;//перенос на год
    }
    if(timecor[3] > 12)
    {
        timecor[3] = timecor[3] - 12;
        timecor[5] = 1;//перенос на год
    }
    timecor[2] = timecor[2] + timecor[5];//коррекция года
    return 1;
}

public TimCor()
{
    timecor[1] = timecor[1] + CorTime[1];//обработка минут
    timecor[5] = 0;//перенос на час
    if(timecor[1] < 0)
    {
        timecor[1] = 60 + timecor[1];
        timecor[5] = -1;//перенос на час
    }
    if(timecor[1] > 59)
    {
        timecor[1] = timecor[1] - 60;
        timecor[5] = 1;//перенос на час
    }
    timecor[0] = timecor[0] + CorTime[0] + timecor[5];//обработка часов
    timecor[6] = 0;//перенос на день
    if(timecor[0] < 0)
    {
        timecor[0] = 24 + timecor[0];
        timecor[6] = -1;//перенос на день
    }
    if(timecor[0] > 23)
    {
        timecor[0] = timecor[0] - 24;
        timecor[6] = 1;//перенос на день
    }
    return 1;
}

public ReadCorTime()
{
    new string[256];
    format(string,sizeof(string),"data/cortime.ini");
    if(fexist(string))//если файл существует, то:
    {
        new File: UserFile = fopen(string, io_read);//чтение файла
        new key[ 256 ] , val[ 256 ];
        new Data[ 256 ];
        while ( fread( UserFile , Data , sizeof( Data ) ) )
        {
            key = ini_GetKey( Data );
            if( strcmp( key , "hour" , true ) == 0 ) { val = ini_GetValue( Data ); CorTime[0] = strval( val ); }
            if( strcmp( key , "minute" , true ) == 0 ) { val = ini_GetValue( Data ); CorTime[1] = strval( val ); }
            if( strcmp( key , "day" , true ) == 0 ) { val = ini_GetValue( Data ); CorTime[2] = strval( val ); }
            if( strcmp( key , "month" , true ) == 0 ) { val = ini_GetValue( Data ); CorTime[3] = strval( val ); }
            if( strcmp( key , "year" , true ) == 0 ) { val = ini_GetValue( Data ); CorTime[4] = strval( val ); }
        }
        fclose(UserFile);
    }
    return 1;
}

public dopfunction(per)
{
    ReadCorTime();
    return 1;
}

public OneMin()//1-минутный таймер
{
    for(new i; i < BUS_MAX; i++)//цикл для всех бизнесов
    {
        if(buscount == 1 && busidplay != -600)//если бизнес существует,
        {//и его владелец он-лайн, то:
            if(IsPlayerConnected(busidplay) && playspabs[busidplay] == 1 &&
            strcmp(RealName[busidplay], busplayname, false) == 0)//дополнительная проверка на коннект игрока,
            {//спавн игрока, и его ник (в случае некорректного отключения от скрипта, или если игрок не заспавнился)
                busmoney++;//прибавляем счётчик минут бизнеса
                if(busmoney >= busminute)//если счётчик минут больше или равен минуте дохода от бизнеса, то:
                {
                    busmoney = 0;//обнуляем счётчик минут бизнеса
                    GivePlayerMoney(busidplay, busincome);//прибавление дохода к счёту игрока
                    new string[256];
                    printf("[BusSystem] Игрок %s [%d] получил доход %d $ от своего бизнеса %s .", RealName[busidplay], busidplay, busincome, busname);
                    format(string, sizeof(string), " Игрок %s [%d] получил доход %d $ от своего бизнеса %s .", RealName[busidplay], busidplay, busincome, busname);
                    SendClientMessageToAll(0x00FFFFFF, string);
                }
            }
        }
    }
    return 1;
}

public LoadBusSystem()//загрузка системы бизнесов
{
    CorTime[0] = 0;//обнуление коррекции времени
    CorTime[1] = 0;
    CorTime[2] = 0;
    CorTime[3] = 0;
    CorTime[4] = 0;

    new count = 0;
    new file, f[256];//чтение всех бизнесов
    for(new i; i < BUS_MAX; i++)
    {
        PickupID = -600;//задаём несуществующий ID-номер пикапа для бизнеса
        format(f, 256, "bussystem/%i.ini", i);
        file = ini_openFile(f);
        if(file == INI_OK)
        {
            count++;
            buscount = 1;//бизнес создан (сущесвует)
            ini_getString(file, "BusName", busname);
            ini_getString(file, "PlayName", busplayname);
            ini_getInteger(file, "Cost", buscost);
            ini_getInteger(file, "Minute", busminute);
            ini_getInteger(file, "Income", busincome);
            ini_getInteger(file, "Day", busday);
            ini_getFloat(file, "CordX", buscordx);
            ini_getFloat(file, "CordY", buscordy);
            ini_getFloat(file, "CordZ", buscordz);
            ini_closeFile(file);
        }
        else
        {
            buscount = 0;//бизнес не создан (не сущесвует)
            strdel(busplayname, 0, MAX_PLAYER_NAME);//удаляем имя владельца бизнеса
            strcat(busplayname, "*** INV_PL_ID");
            busday = 0;//даём бизнесу право на его перекупку (покупку)
        }
    }
    print(" ");
    printf(" %d бизнесов загружено.", count);

    ReadCorTime();//чтение коррекции времени
    gettime(timecor[0], timecor[1]);
    getdate(timecor[2], timecor[3], timecor[4]);
    TimCor();//коррекция времени
    DatCor();//коррекция даты
    new string[256];
    for(new i; i < BUS_MAX; i++)
    {
        busidplay = -600;//владелец бизнеса офф-лайн
        busmoney = 0;//обнуляем счётчик минут бизнеса
        if(busday == timecor[4])//если реальная дата равна дате окончания срока без права перекупки, то:
        {
            busday = 0;//даём бизнесу право на его перекупку,
            format(f, 256, "bussystem/%i.ini", i);//и записываем изменения в файл
            file = ini_openFile(f);
            if(file == INI_OK)
            {
                ini_setInteger(file, "Day", busday);
                ini_closeFile(file);
            }
        }
        if(buscount == 1)//если бизнес создан, то:
        {
            PickupID = CreateDynamicPickup(1274, 1, buscordx, buscordy, buscordz, 0, 0, -1, 100.0);//создаём пикап бизнеса
            if(busday == 0)//если у бизнеса есть право на его перекупку, то:
            {
                MapIconID = CreateDynamicMapIcon(buscordx, buscordy, buscordz, 52, -1, 0, 0, -1, 200.0);//создаём мап-иконку бизнеса
            }
            format(string, sizeof(string), "Бизнес: %s\nID: %d", busname, i);
            Nbus = Create3DTextLabel(string, 0x00FF00FF, buscordx, buscordy, buscordz+0.70, 50, 0, 1);//создаём 3D-текст бизнеса
        }
    }

    new pname[MAX_PLAYER_NAME];//прочитать реальные ники всех игроков
    new aa333[64];//доработка для использования Русских ников
    for(new i; i < MAX_PLAYERS; i++)
    {
        playspabs = 0;//игрок не заспавнился
        playIDbus = -600;//не существующий ИД бизнеса для игрока
        if(IsPlayerConnected(i))//если игрок в коннекте, то:
        {
            GetPlayerName(i, pname, sizeof(pname));
            strdel(RealName, 0, MAX_PLAYER_NAME);//очистить реальный ник игрока
            format(aa333, sizeof(aa333), "%s", pname);//доработка для использования Русских ников
            strcat(RealName, aa333);//запомнить реальный ник игрока (доработка для использования Русских ников)
//            strcat(RealName, pname);//запомнить реальный ник игрока
            if(GetPlayerState(i) != 0)//если игрок уже заспавнился, то:
            {
                playspabs = 1;//игрок заспавнился
                for(new j; j < BUS_MAX; j++)//цикл для всех бизнесов
                {
                    if(buscount[j] == 1 && strcmp(RealName, busplayname[j], false) == 0)//если бизнес существует,
                    {//и это бизнес игрока, то:
                        busidplay[j] = i;//даём бизнесу ИД он-лайн игрока - владельца бизнеса
                        busmoney[j] = 0;//обнуляем счётчик минут бизнеса
                    }
                }
            }
        }
    }
    print("\n--------------------------------------");
    print("     BusSystem успешно загружена! ");
    print("--------------------------------------\n");
    return 1;
}

public UnloadBusSystem()//выгрузка системы бизнесов
{
    for(new i; i < BUS_MAX; i++)
    {
        if(buscount == 1)//если бизнес существует, то:
        {
            DestroyDynamicPickup(PickupID);//удаляем пикап бизнеса
            if(busday == 0)//если есть мап-иконка бизнеса, то:
            {
                DestroyDynamicMapIcon(MapIconID);//удаляем мап-иконку бизнеса
            }
            Delete3DTextLabel(Nbus);//удаляем 3D-текст бизнеса
        }
        buscount = 0;//бизнес не создан (не сущесвует)
        strdel(busplayname, 0, MAX_PLAYER_NAME);//удаляем имя владельца бизнеса
        strcat(busplayname, "*** INV_PL_ID");
        busidplay = -600;//владелец бизнеса офф-лайн
        busmoney = 0;//обнуляем счётчик минут бизнеса
        PickupID = -600;//задаём несуществующий ID-номер пикапа для бизнеса
    }
    return 1;
} 

 

 

Edited by odosenok
Причина: Поправил код.

Заметка от Jawn , создано

Как правильно выкладывать большой код?

Share this post


Link to post
Share on other sites

У тебя скорее всего стоит система античита на деньги, по этому пишет что у тебя не ма денег, попробуй вставить систему в мод ... Или же покажи античит я может придумаю чет 

Share this post


Link to post
Share on other sites

Сейчас попробую. в мод вставить.

Если не будет скину античит

Share this post


Link to post
Share on other sites
1 минуту назад, BigPaulo сказал:

Сейчас попробую. в мод вставить.

Если не будет скину античит

Тебе в любом случае нужна будет изменить GetPlayerMoney на функцию античита, покажи мне любую команду где используются проверка на деньги из мода .

Share this post


Link to post
Share on other sites

Удалил последнее сообщение автора за нарушение правил форума. Выкладывайте код правильно.

Share this post


Link to post
Share on other sites
Спойлер

new swper, locmoney, locmoney22, locscore, locscore22;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
         if(IsPlayerConnected(i))
         {
            if(autorepair == 1 && GetPlayerState(i) == 2)//если авторемонт включен,
            {//И игрок на месте водителя, то:
                 new car = GetPlayerVehicleID(i);
                 RepairVehicle(car);
                 SetVehicleHealth(car, 1000);
             }
            if(gPlayerLogged == 1)
            {
                locmoney = GetPlayerMoney(i);
                locscore = GetPlayerScore(i);
                if(GetPVarInt(i, "MonControl") == 2)
                {
                    moneycontrol = locmoney;
                    SetPVarInt(i, "MonControl", 0);
                }
                if(GetPVarInt(i, "MonControl") == 1)
                {
                    SetPVarInt(i, "MonControl", 2);
                }
                if(GetPVarInt(i, "MonControl") == 0)
                {
                    locmoney22 = locmoney - moneycontrol;
                    if(locmoney22 > 100000 || locmoney22 < -10000000)
                    {
                        swper = 2;//чит на деньги
                        moneycontrol22 = 1;
                    }

 

Заметка от Jawn , создано

Еще раз посмотрите внимательно, что находится по ссылке, оставленной мной постом выше (для этого нажмите на слово правильно)

Share this post


Link to post
Share on other sites

Еще только сейчас заметил, оно покупат тогда как денег нет

 

Share this post


Link to post
Share on other sites

по моему, просто нужно вшивать данный скрипт в мод, т.к разная система денег

 

Edited by Zishka

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • danko
      By danko
      Выдает вот такую ошибку и всё по нулям, базу нормально установил
       
    • Zerno303
      By Zerno303


      Просмотр файла Продажа мода Race RP.
      -------------------------------------------------------------------------------------------------------------------
      ВАЖНО!
      Перед покупкой лучше спросите лишний раз, чем потом кидать претензии в мою сторону!
      -------------------------------------------------------------------------------------------------------------------
      Доброго времени суток! Этот мод подойдёт по основу и даже под открытие.
      9 уровней админки.
      Лидерки: Мэрия, ГУВД, УГИБДД, ФСБ, Больница, Автошкола, Южная ОПГ, Арзамасская ОПГ, Армия, Лыткаринская ОПГ, Батыревская ОПГ,, RECORD FM и Спецназ.
      Работы: Городской склад, Шахта, Лесопилка и Автомеханик.
      crmp 0.3e
      Мод без сборки(Сборка не нужна). 
      Мод-пак есть. Если понадобится пишите в лс.
      Добавил Zerno303 Добавлено 16.10.2021 Категория Моды Автор Zerno303  
    • Zerno303
      By Zerno303
      -------------------------------------------------------------------------------------------------------------------
      ВАЖНО!
      Перед покупкой лучше спросите лишний раз, чем потом кидать претензии в мою сторону!
      -------------------------------------------------------------------------------------------------------------------
      Доброго времени суток! Этот мод подойдёт по основу и даже под открытие.
      9 уровней админки.
      Лидерки: Мэрия, ГУВД, УГИБДД, ФСБ, Больница, Автошкола, Южная ОПГ, Арзамасская ОПГ, Армия, Лыткаринская ОПГ, Батыревская ОПГ,, RECORD FM и Спецназ.
      Работы: Городской склад, Шахта, Лесопилка и Автомеханик.
      crmp 0.3e
      Мод без сборки(Сборка не нужна). 
      Мод-пак есть. Если понадобится пишите в лс.
    • panda1999
      By panda1999
      Публикация В Google Play
      Публикация приложения в Google Play Market на мой аккаунт разработчика.

      Имею большой опыт в публикации различных приложений и сервисов. Помогу пройти модерацию приложения.

      По статистике приложения проходят модерацию в течение 2-х (двух) дней после публикации.

      Это важно! Я, как владелец аккаунта Google Play Developer, вправе удалить приложение со своего аккаунта без ведома уведомления заказчика, если приложение или связанные с ним любые ресурсы будут нарушать правила Google Play, а также, если на приложение будет оставлено более трёх отрицательных отзывов, которые указывают на не правомерную деятельность приложения или любых связанных с ним ресурсами.

      ЕСЛИ У ВАС возникнут ЛЮБЫЕ вопросы пишите!

      С радостью проконсультирую!))

      Нужно для заказа:
      1. Файл приложения в формате . aab.

      С августа 2021 года все приложения в Google Play будут публиковаться в формате Android App Bundle (AAB) вместо старого APK.

      2. Название приложения (макс. длина текста 50 символов).

      3. Краткое описание (макс. длина текста 80 символов).

      4. Полное описание приложения (макс. длина текста 4000 символов).

      5. Значок приложения.

      PNG или JPEG

      512х512 пкс

      До 1 Мб

      6. Картинка для описания.

      PNG или JPEG

      1024x500 пкс

      До 1 Мб

      7. Скриншоты 2-8 шт.
      Принимаем QIWI
      Принимаем Карта банка.
      Если вас заинтересовало, обращайтесь ко мне в л\с. Вконтакте
    • panda1999
      By panda1999
      Ищу команду для открытие Торговой площадки Котороя готова вложиться на разработку писать в лс на сайте или вк https://vk.com/panda131999
      Скрин шот главной страницы