Доступ к архиву

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

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

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

[урок]Создание динамического бизнесса в диалоге

Как вам мой рпг проект[url]http://vk.com/metrozlon_rpg[/url]


  • Всего проголосовало
    30
  • Опрос закрыт .
Статус
В этой теме нельзя размещать новые ответы.

MeTRoZLoN

Ученик
PHP:
 В мод==> scriptfiles ==> Создаём==> Bizn
PHP:
добавим 2 инклуда
#include <streamer>
#include <MXINI>
PHP:
forward LolSave();
forward Payments();
PHP:
#define MAX_BUSINESS_NAME               (30) // Максимальная длина названия бизнеса
#define MAX_BUSINESSES                  (100) // Максимальное кол-во бизнессов
#define MAX_PER_PLAYER_BUSINESSES       (3) // Максимальное кол-во бизов на игрока
#define BIZZ_SELL_DEVIDE                (2) // Деньги за продажу = цена/это значение
#define BIZZ_EARN_DEVIDE                (5) // Прибыль бизнесса = цена/это значение
#define BIZZ_PAYMENT_INTERVAL           (60) // Время между выплатами
#define BIZZ_MESSAGE_COLOR              (0x409FFFFF) // Цвет сообщений бизнеса
#define BIZZ_DIALOG_ID                  (1337) // Ид диалога
#define BIZZ_AVAIL_MAPICON              (52) // Иконка на карте для покупаемых бизнесов
#define BIZZ_UNAVAIL_MAPICON            (52) // для НЕПОКУПАЕМЫХ бизнесов
#define BIZZ_MAPICON_DRAWDISTANCE       (100.0) // Дистанция видимости иконок на карте
#define BIZZ_AVAIL_PICKUP_MODEL         (1274) // Модель пикапа для покупаемых бизов
#define BIZZ_UNAVAIL_PICKUP_MODEL       (1274) // НЕПОКУПАЕМЫХ
#define BIZZ_PICKUP_DRAWDISTANCE        (100.0) // дальность пикапа
#define BIZZ_3DTAG_COLOR                (0xFF4600FF) // Цвет 3д тэга
#define BIZZ_3DTAG_DRAWDISTANCE         (100.0) // Дальность 3д тэга
#define DestroyBizzElements(%0) \
        DestroyDynamicMapIcon(bData[%0][mapid]); \
        DestroyDynamicPickup(bData[%0][Pickupid]); \
        DestroyDynamic3DTextLabel(bData[%0][labelid]);
PHP:
enum E_BUSINESS_DATA
{
        Name[255], Price,
        Float:x, Float:y, Float:z, interior, world,
        Owner[24], mapid, Pickupid, Text3D:labelid
}

enum E_PLAYER_DATA
{
        Businesses, Earnings, idx
}

new bData[MAX_BUSINESSES][E_BUSINESS_DATA], pData[MAX_PLAYERS][E_PLAYER_DATA];
new str[128], Count = 0, Timer;
PHP:
в паблик
PHP:
public OnPlayerCommandText(playerid,cmdtext[])
{
        new cmd[64],idxa;
        cmd = strtok(cmdtext,idxa);
        if(!strcmp(cmd,"/addbiz",true))
        {
                new Float:xa,Float:ya,Float:za;
                GetPlayerPos(playerid,xa,ya,za);
                new prices; prices = strval(strtok(cmdtext,idxa));
                new length = strlen(cmdtext);
                while ((idxa < length) && (cmdtext[idxa] <= ' '))
                {
                        idxa++;
                }
                new offset = idxa;
                new result[64];
                while ((idxa < length) && ((idxa - offset) < (sizeof(result) - 1)))
                {
                        result[idxa - offset] = cmdtext[idxa];
                        idxa++;
                }
                result[idxa - offset] = EOS;
                if(!strlen(result))
                {
                        SendClientMessage(playerid, -1, " Используйте: /addbiz [price] [Название]");
                        return 1;
                }
                format(bData[Count][Name],255,"%s",result);
                bData[Count][Price] = prices;
                bData[Count][x] = xa;
                bData[Count][y] = ya;
                bData[Count][z] = za;
                format(bData[Count][Owner],24,"No-One");
                CreateAvailableBizzElements(Count);
                Count++;
        }
        return 1;
}
PHP:
public OnGameModeInit()
{
	new col[25],za,file=iniOpen("Bizn.ini");
        for(new i=0;i<sizeof(bData);i++)
        {
                format(col,25,"n%d",i);
                iniGet(file,col,bData[i][Name],255);
                format(col,25,"p%d",i);
                iniGetInt(file,col,bData[i][Price]);
                format(col,25,"x%d",i);
                iniGetFloat(file,col,bData[i][x]);
                format(col,25,"y%d",i);
                iniGetFloat(file,col,bData[i][y]);
                format(col,25,"z%d",i);
                iniGetFloat(file,col,bData[i][z]);
                format(col,25,"o%d",i);
                za = iniGet(file,col,bData[i][Owner],24);
                if(za>= 0)
                {
                        Count++;
                        if(!strcmp(bData[i][Owner],"No-One",true))
                        {
                                CreateAvailableBizzElements(i);
                        }
                        else
                        {
                                CreateUnvailableBizzElements(i);
                        }
                }
        }
        printf(" ** loaded %d businesses ! **", Count);
        iniClose(file);
        Timer = SetTimer("Payments", BIZZ_PAYMENT_INTERVAL*60000, true);
        SetTimer("LolSave",5000,1);
        return ;
}
PHP:
public OnGameModeExit()
{
       for(new a = 0; a < Count; a++)
        {
                DestroyBizzElements(a)
        }

        KillTimer(Timer);
	return 1;
}
PHP:
public OnPlayerConnect(playerid)
{
        pData[playerid][Businesses] = 0;
        pData[playerid][Earnings] = 0;
        return 1;
}
PHP:
public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
        for(new a = 0; a < Count; a++)
        {
            if(pickupid == bData[a][Pickupid])
            {
                if(!strcmp(bData[a][Owner],"",true))
                {
                                format(str, sizeof(str), "{00BC00}Бизнес: {6AFFFF}%s\n{00BC00}Стоимость: {6AFFFF}$%d\n{00BC00}Стоимость продажи: {6AFFFF}$%d {00BC00}Доход: {6AFFFF}$%d", bData[a][Name], bData[a][Price], bData[a][Price] / BIZZ_SELL_DEVIDE, bData[a][Price] / BIZZ_EARN_DEVIDE);

                        }
                        else
                        format(str, sizeof(str), "{00B366}Бизнес {ffffff}%s \n{00B366}Владелец: {ffffff}%s", bData[a][Name], bData[a][Owner]);

                        pData[playerid][idx] = a;
                        ShowPlayerDialog(playerid, 1337, DIALOG_STYLE_MSGBOX, "{00BC00}Система Бизнесов", str, "Купить", "Продать");
                        return 1;
                }
        }
        return 1;
}
PHP:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(dialogid == 1337)
        {
            new Idx = pData[playerid][idx];

                if(response)
                {
                        if(!strcmp(bData[Idx][Owner],"No-One",true))
                        {
                            if(GetPlayerMoney(playerid) >= bData[Idx][Price])
                            {
                                if(pData[playerid][Businesses] < MAX_PER_PLAYER_BUSINESSES)
                                {
                                        format(bData[Idx][Owner],24,"%s",pName(playerid));
                                        pData[playerid][Businesses]++;
                                        pData[playerid][Earnings] += bData[Idx][Price] / BIZZ_EARN_DEVIDE;
                                        GivePlayerMoney(playerid, -bData[Idx][Price]);
                                                CreateUnvailableBizzElements(Idx);

                                                format(str, sizeof(str), "{00F5FF}[Бизнес]: {3AFD65}Ты купил Бизнес %s за $%d.Он приносит доход $%d каждые %d минут.", bData[Idx][Name], bData[Idx][Price], pData[playerid][Earnings], BIZZ_PAYMENT_INTERVAL);
                                                return SendClientMessage(playerid, BIZZ_MESSAGE_COLOR, str);
                                        }
                                        format(str, sizeof(str), "{00F5FF}[Бизнес]: {FF5A00}У тебя может быть только %d Бизнеса!", MAX_PER_PLAYER_BUSINESSES);
                                        return SendClientMessage(playerid, 0xFF5A00FF, str);
                                }
                                format(str, sizeof(str), "{00F5FF}[Бизнес]: {FF5A00}Этот бизнес стоит $%d, а у тебя в наличии только $%d !", bData[Idx][Price], GetPlayerMoney(playerid));
                                return SendClientMessage(playerid, 0xFF5A00FF, str);
                        }
            format(str, sizeof(str), "{00F5FF}[Бизнес]: {FF5A00}У этого бизнеса уже есть владелец: %s!",bData[Idx][Owner]);
                        return SendClientMessage(playerid, 0xFF5A00FF, str);
                }
                if(!strcmp(bData[Idx][Owner],pName(playerid),true))
                {
                    format(bData[Idx][Owner],24,"No-One");
                GivePlayerMoney(playerid, bData[Idx][Price] / BIZZ_SELL_DEVIDE);

                        CreateAvailableBizzElements(Idx);

                        format(str, sizeof(str), "{00F5FF}[Бизнес]: {FFFF00}Ты продал Бизнес %s за $%d.", bData[Idx][Name], bData[Idx][Price] / BIZZ_SELL_DEVIDE);
                        return SendClientMessage(playerid, BIZZ_MESSAGE_COLOR, str);
                }
                return 1;
        }
        return 1;
}
PHP:
public LolSave()
{
        new col[4],file=iniOpen("Bizn.ini");
        for(new i=0;i<Count;i++)
        {
                format(col,4,"o%d",i);
                iniSet(file,col,bData[i][Owner]);
        }
        iniClose(file);
        return 1;
}
PHP:
public Payments()
{
        for(new a = 0, b = GetMaxPlayers(); a < b; a++)
        {
                pData[a][Businesses]=0;
                pData[a][Earnings] =0;
                for(new xa=0;xa<Count;xa++)
                {
                        if(!strcmp(bData[xa][Owner],pName(a),true))
                        {
                                pData[a][Businesses]++;
                                pData[a][Earnings] += bData[Count][Price] / BIZZ_EARN_DEVIDE;
                        }
                }
                GivePlayerMoney(a,pData[a][Earnings]);
                format(str, sizeof(str), "{00F5FF}[Бизнес]: {FFFF00}Ты получил $%d от своего(их) %d бизнеса(ов)!", pData[a][Earnings], pData[a][Businesses]);
                SendClientMessage(a, BIZZ_MESSAGE_COLOR, str);
        }
        return 1;
}
PHP:
Добавляем stock
PHP:
stock CreateAvailableBizzElements(BizzID)
{
    DestroyBizzElements(BizzID)
    bData[BizzID][mapid] = CreateDynamicMapIcon(bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], BIZZ_AVAIL_MAPICON, 0, bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_MAPICON_DRAWDISTANCE);
        bData[BizzID][Pickupid] = CreateDynamicPickup(BIZZ_AVAIL_PICKUP_MODEL, 23, bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_PICKUP_DRAWDISTANCE);
        format(str, sizeof(str), "{009999}Бизнес: {ffffff}%s\n {009999}Стоимость: {ffffff}%d$", bData[BizzID][Name], bData[BizzID][Price]);
        bData[BizzID][labelid] = CreateDynamic3DTextLabel(str, 0x00FF00FF, bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], BIZZ_3DTAG_DRAWDISTANCE, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_3DTAG_DRAWDISTANCE);
}
PHP:
stock CreateUnvailableBizzElements(BizzID)
{
    DestroyBizzElements(BizzID)
    bData[BizzID][mapid] = CreateDynamicMapIcon(bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], BIZZ_UNAVAIL_MAPICON, 0, bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_MAPICON_DRAWDISTANCE);
        bData[BizzID][Pickupid] = CreateDynamicPickup(BIZZ_UNAVAIL_PICKUP_MODEL, 23, bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_PICKUP_DRAWDISTANCE);
        format(str, sizeof(str), "{00B366}Бизнес {ffffff}%s \n{00B366}Владелец: {ffffff}%s", bData[BizzID][Name],bData[BizzID][Owner]);
        bData[BizzID][labelid] = CreateDynamic3DTextLabel(str, BIZZ_3DTAG_COLOR, bData[BizzID][x], bData[BizzID][y], bData[BizzID][z], BIZZ_3DTAG_DRAWDISTANCE, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, bData[BizzID][world], bData[BizzID][interior], -1, BIZZ_3DTAG_DRAWDISTANCE);
}
PHP:
stock pName(playerid)
{
        new PlayerName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
        return PlayerName;
}
PHP:
strtok(const string[], &index)
{
        new length = strlen(string);
        while ((index < length) && (string[index] <= ' '))
        {
                index++;
        }

        new offset = index;
        new result[20];
        while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
        {
                result[index - offset] = string[index];
                index++;
        }
        result[index - offset] = EOS;
        return result;
}
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу