BigPaulo

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

В теме 8 сообщений

Установил себе систему бизнесов на сервер 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;
} 

 

 

Отредактировано пользователем odosenok
Причина: Поправил код.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, BigPaulo сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Спойлер

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;
                    }

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Отредактировано пользователем Zishka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • sergeenko
      От sergeenko
      Как можно сделать худ, спидометр и т.д как на намальске, малиновке, и т.д. На этих проектах подключение происходит не по внешнему подключению, а по локальному (по сборке в игре). Возьмём к примеру Намальск - в сборке игры есть папка namalsk где есть hudimg.txd, в нём есть иконки, худ, спидометр, карта и т.д.
      Как это сделать? Тутора не нашёл
    • sergeenko
      От sergeenko
      Драсте, мне нужен тутор на плагин vehiclesIdFix (снятие лимитов машин), база сан андреас, а сборка крмп.
    • Vadik0
      От Vadik0
      Добрейшего дня суток!
      Я в поисках команды, для создания CRMP проекта на ПК.

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

      Что, касаемо критериев?
      1. В первую очередь, важна ваша ответственность, вежливость, коммуникабельность.
      2. Желание сделать свой вклад в будущее проекта.
      3. Ваш возраст строго 16+ (исключения возможны)
      4. Платёжеспособность (после отклика на моё предложение, я вам расскажу что и как)
      5. Наличие свободного времени (с каждым этапом развития проекта, каждый человек из команды будет само собой уделять большее количество времени)
      6. Наличие PC (не ниже среднего)
      7. Наличие Discord
      8. Наличие ВКонтакте, Telegram
      9. Наличие микрофона.

      Кого сейчас ищем?
      1. Разработчиков игры (мапперы, скриптеры, и т.д)
      2. WEB Разработчик (сделать сайт. С форумом я конечно справлюсь, но могут быть проблемы )
      3. Тестеры (нужны будут, когда будет готова игра. Пока такой потребности нет).

      Сообщество ВКонтакте уже имеется, Telegram канал тоже имеется, Discord соответственно тоже.

      Для связи со мной:
      1. ВКонтакте - ссылка на страницу (кликабельно)
      2. Telegram - ссылка на Telegram аккаунт (кликабельно)

      Попытка не пытка, попробовать всегда можно! Так или иначе, живём 1 раз. Жду всех!
    • Денис0403
      От Денис0403
      При вводе команды /fly спавнит в непонятном месте.
      Скрин: https://imgur.com/a/jOkD7sl
      cmd:fly(playerid) return SetPlayerFlyStatus(playerid, 2); #if defined _included_fly     #endinput #endif #define _included_fly static     Float:fly_x[MAX_PLAYERS],     Float:fly_y[MAX_PLAYERS],     Float:fly_z[MAX_PLAYERS],     Float:fly_a[MAX_PLAYERS],     fly_world[MAX_PLAYERS],     fly_int[MAX_PLAYERS],     bool:fly_spawn[MAX_PLAYERS],     fly_state[MAX_PLAYERS],     fly_object[MAX_PLAYERS],     fly_last_move[MAX_PLAYERS],     fly_mode[MAX_PLAYERS],     fly_last_ud[MAX_PLAYERS],     fly_last_lr[MAX_PLAYERS],     Float:fly_accelmul[MAX_PLAYERS]; enum {     CAMERA_MODE_NONE    = 0,     CAMERA_MODE_FLY     = 1,     CAMERA_MODE_REVERSE = 2 }; enum {     MOVE_FORWARD = 1,     MOVE_BACK,     MOVE_LEFT,     MOVE_RIGHT,     MOVE_FORWARD_LEFT,     MOVE_FORWARD_RIGHT,     MOVE_BACK_LEFT,     MOVE_BACK_RIGHT }; const     Float:MOVE_SPEED = 100.0,     Float:ACCEL_RATE = 0.03; public OnPlayerConnect(playerid) {     fly_x[playerid] = 0.0;     fly_y[playerid] = 0.0;     fly_z[playerid] = 0.0;     fly_a[playerid] = 0.0;     fly_world[playerid] = 0;     fly_int[playerid] = 0;     fly_state[playerid] = CAMERA_MODE_NONE;     fly_object[playerid] = -1,     bool:fly_spawn[playerid] = false;     fly_last_move[playerid] = 0;     fly_mode[playerid] = 0;     fly_last_ud[playerid] = 0;     fly_last_lr[playerid] = 0;     fly_accelmul[playerid] = 0.0;     #if defined _included_fly_OnPlayerConnect         return _included_fly_OnPlayerConnect(playerid);     #else         return 1;     #endif } #if defined _ALS_OnPlayerConnect     #undef OnPlayerConnect #else     #define _ALS_OnPlayerConnect #endif #define OnPlayerConnect _included_fly_OnPlayerConnect #if defined _included_fly_OnPlayerConnect     forward _included_fly_OnPlayerConnect(playerid); #endif stock SetPlayerFlyStatus(playerid, status = 2) {     if(status == CAMERA_MODE_FLY && fly_state[playerid] == CAMERA_MODE_FLY)         return true;     else if(status == CAMERA_MODE_NONE && fly_state[playerid] == CAMERA_MODE_NONE)         return true;     switch(status)     {         case CAMERA_MODE_NONE:         {             CancelEdit(playerid);             GetPlayerCameraPos(playerid, fly_x[playerid], fly_y[playerid], fly_z[playerid]);             TogglePlayerSpectating(playerid, false);             fly_state[playerid] = CAMERA_MODE_NONE;             fly_spawn[playerid] = true;                  }         case CAMERA_MODE_FLY:         {             GetPlayerPos(playerid, fly_x[playerid], fly_y[playerid], fly_z[playerid]);             fly_world[playerid] = GetPlayerVirtualWorld(playerid);             fly_int[playerid] = GetPlayerInterior(playerid);             GetPlayerFacingAngle(playerid, fly_a[playerid]);             fly_object[playerid] = CreatePlayerObject(playerid, 19300, fly_x[playerid], fly_y[playerid], fly_z[playerid], 0.0, 0.0, 0.0);             TogglePlayerSpectating(playerid, true);             AttachCameraToPlayerObject(playerid, fly_object[playerid]);             fly_state[playerid] = CAMERA_MODE_FLY;         }         case CAMERA_MODE_REVERSE:         {             if(fly_state[playerid] == CAMERA_MODE_NONE)                 return SetPlayerFlyStatus(playerid, CAMERA_MODE_FLY);             else                 return SetPlayerFlyStatus(playerid, CAMERA_MODE_NONE);         }         default:             return SendClientMessage(playerid, -1, "Your argument is not valid.") & 0;     }     return 1; } stock IsPlayerFlying(playerid)     return fly_state[playerid];      public OnPlayerDeath(playerid, killerid, reason) {     if(IsPlayerFlying(playerid))         SetPlayerFlyStatus(playerid, false);     #if defined _included_fly_OnPlayerDeath         return _included_fly_OnPlayerDeath(playerid, killerid, reason);     #else         return 1;     #endif } #if defined _ALS_OnPlayerDeath     #undef OnPlayerDeath #else     #define _ALS_OnPlayerDeath #endif #define OnPlayerDeath _included_fly_OnPlayerDeath #if defined _included_fly_OnPlayerDeath     forward _included_fly_OnPlayerDeath(playerid, killerid, reason); #endif public OnPlayerSpawn(playerid) {     if(fly_spawn[playerid] == true)         SetTimerEx("@OnPlayerSpawnEx", 100, false, "i", playerid);          #if defined _included_fly_OnPlayerSpawn         return _included_fly_OnPlayerSpawn(playerid);     #else         return 1;     #endif } #if defined _ALS_OnPlayerSpawn     #undef OnPlayerSpawn #else     #define _ALS_OnPlayerSpawn #endif #define OnPlayerSpawn _included_fly_OnPlayerSpawn #if defined _included_fly_OnPlayerSpawn     forward _included_fly_OnPlayerSpawn(playerid); #endif @OnPlayerSpawnEx(playerid); @OnPlayerSpawnEx(playerid) {     SetPlayerPos(playerid, fly_x[playerid], fly_y[playerid], fly_z[playerid]);     SetPlayerFacingAngle(playerid, fly_a[playerid]);     SetPlayerVirtualWorld(playerid, fly_world[playerid]);     SetPlayerInterior(playerid, fly_int[playerid]);     fly_spawn[playerid] = false;     return 1; } public OnPlayerUpdate(playerid) {     if(fly_state[playerid] == CAMERA_MODE_FLY)     {         new keys, ud, lr;         GetPlayerKeys(playerid, keys, ud, lr);                  if(fly_mode[playerid] && (GetTickCount() - fly_last_move[playerid] > 100))             MoveCamera(playerid);         if(fly_last_ud[playerid] != ud || fly_last_lr[playerid] != lr)         {             if((fly_last_ud[playerid] != 0 || fly_last_lr[playerid] != 0) && ud == 0 && lr == 0)             {                 StopPlayerObject(playerid, fly_object[playerid]);                 fly_mode[playerid] = 0;                 fly_accelmul[playerid] = 0.0;             }             else             {                 fly_mode[playerid] = GetMoveDirectionFromKeys(ud, lr);                 MoveCamera(playerid);             }         }         fly_last_ud[playerid] = ud;         fly_last_lr[playerid] = lr;         return 0;     }     #if defined _included_fly_OnPlayerUpdate         return _included_fly_OnPlayerUpdate(playerid);     #else         return 1;     #endif } #if defined _ALS_OnPlayerUpdate     #undef OnPlayerUpdate #else     #define _ALS_OnPlayerUpdate #endif #define OnPlayerUpdate _included_fly_OnPlayerUpdate #if defined _included_fly_OnPlayerUpdate     forward _included_fly_OnPlayerUpdate(playerid); #endif stock MoveCamera(playerid) {     new         Float:cam_pos_x, Float:cam_pos_y, Float:cam_pos_z,         Float:cam_front_x, Float:cam_front_y, Float:cam_front_z;              GetPlayerCameraPos(playerid, cam_pos_x, cam_pos_y, cam_pos_z);     GetPlayerCameraFrontVector(playerid, cam_front_x, cam_front_y, cam_front_z);     if(fly_accelmul[playerid] <= 1)         fly_accelmul[playerid] += ACCEL_RATE;     new         Float:speed = MOVE_SPEED * fly_accelmul[playerid],         Float:x, Float:y, Float:z;              GetNextCameraPosition(fly_mode[playerid], cam_pos_x, cam_pos_y, cam_pos_z, cam_front_x, cam_front_y, cam_front_z, x, y, z);     MovePlayerObject(playerid, fly_object[playerid], x, y, z, speed);     fly_last_move[playerid] = GetTickCount();     return 1; } stock GetNextCameraPosition     (         move_mode,         Float:cam_pos_x, Float:cam_pos_y, Float:cam_pos_z,         Float:cam_front_x, Float:cam_front_y, Float:cam_front_z,         &Float:x, &Float:y, &Float:z     ) {     new const         Float:change = 6000.0,         Float:pos_x = cam_front_x * change,         Float:pos_y = cam_front_y * change,         Float:pos_z = cam_front_z * change;     switch(move_mode)     {         case MOVE_FORWARD:         {             x = cam_pos_x + pos_x;             y = cam_pos_y + pos_y;             z = cam_pos_z + pos_z;         }         case MOVE_BACK:         {             x = cam_pos_x - pos_x;             y = cam_pos_y - pos_y;             z = cam_pos_z - pos_z;         }         case MOVE_LEFT:         {             x = cam_pos_x - pos_y;             y = cam_pos_y + pos_x;             z = cam_pos_z;         }         case MOVE_RIGHT:         {             x = cam_pos_x + pos_y;             y = cam_pos_y - pos_x;             z = cam_pos_z;         }         case MOVE_BACK_LEFT:         {             x = cam_pos_x + (-pos_x - pos_y);             y = cam_pos_y + (-pos_y + pos_x);             z = cam_pos_z - pos_z;         }         case MOVE_BACK_RIGHT:         {             x = cam_pos_x + (-pos_x + pos_y);             y = cam_pos_y + (-pos_y - pos_x);             z = cam_pos_z - pos_z;         }         case MOVE_FORWARD_LEFT:         {             x = cam_pos_x + (pos_x  - pos_y);             y = cam_pos_y + (pos_y  + pos_x);             z = cam_pos_z + pos_z;         }         case MOVE_FORWARD_RIGHT:         {             x = cam_pos_x + (pos_x  + pos_y);             y = cam_pos_y + (pos_y  - pos_x);             z = cam_pos_z + pos_z;         }     } } stock GetMoveDirectionFromKeys(ud, lr) {     new         direction = 0;     if(lr < 0)     {         if(ud < 0)             direction = MOVE_FORWARD_LEFT;         else if(ud > 0)             direction = MOVE_BACK_LEFT;         else             direction = MOVE_LEFT;     }     else if(lr > 0)     {         if(ud < 0)             direction = MOVE_FORWARD_RIGHT;         else if(ud > 0)             direction = MOVE_BACK_RIGHT;         else             direction = MOVE_RIGHT;     }     else if(ud < 0)         direction = MOVE_FORWARD;     else if(ud > 0)         direction = MOVE_BACK;     return direction; }  
    • sergeenko
      От sergeenko
      Как добавить на сервер новое авто (не заменяя старый)?
      В самом корне игры я всё настроил,
      мне нужно в самом моде настроить.

      Помогите пожалуйста :0