• Страница 1 из 1
  • 1
Форум » PAWNO » Уроки Pawno » [Мануал] Система конопли/кустов.
[Мануал] Система конопли/кустов.
Дмитрий Дата: Воскресенье, 18.11.2012, 00:28 | Сообщение # 1 | Сообщить о нерабочей теме


Аватар для Дмитрий

Доброго времени суток, уважаемые форумчане!
На многих серверах установлена система конопли/кустов, но не везде ее можно найти.
Недавно ковырялся в моде VC:RP, нашел систему конопли/кустов и решил вырезать, выложив его сюда!
Ну приступим...


Открываем поиск(CTRL + F), находим pInfo. Нашли? Отлично!
Добавляем туда:

Code
pKust


Далее.. Перед pInfo добавляем систему:
Code

enum nInfo
{
     nId,      
     Float:nX,
     Float:nY,
     Float:nZ,
     nVoda,
     nRost,
     nModel,
     nSor,
};
new NarkoInfo[MAX_KUST][nInfo];


Добавили? Хорошо.. Идем дальше!..
Code

if(strcmp(cmd, "/датькуст", true) == 0)
{
     if(IsPlayerConnected(playerid))
     {
         new kusts;
         tmp = strtok(cmdtext, idx);
         if(!strlen(tmp))
         {
               SendClientMessage(playerid, COLOR_GREY, "Пиши: /датькуст [id/ЧастьИмени] [кол-во]");
               return 1;
          }
          //giveplayerid = strval(tmp);
          giveplayerid = ReturnUser(tmp);
          tmp = strtok(cmdtext, idx);
          if(!strlen(tmp))
          {
               SendClientMessage(playerid, COLOR_GREY, "Пиши: /датькуст [id/ЧастьИмени] [кол-во]");
               return 1;
          }
          kusts = strval(tmp);
          if (IsPlayerConnected(giveplayerid))
          {
              if(giveplayerid != INVALID_PLAYER_ID)
              {
                    if(PlayerInfo[giveplayerid][pLocal] == 106)
                    {
                           SendClientMessage(playerid, COLOR_GREY, "Недопустимо в данной локации!");
                            return 1;
                    }
                    if (ProxDetectorS(5.0, playerid, giveplayerid))
                    {
                          GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
                          GetPlayerName(playerid, sendername, sizeof(sendername));
                          if (kusts > 0 && PlayerInfo[playerid][pKust] >= kusts)
                          {
                    PlayerInfo[giveplayerid][pKust] += kusts;
                    format(string, sizeof(string), "* %s достает пакетик с семенами и передает их %s.", sendername ,giveplayer);
                    ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
                    format(string, sizeof(string), "   Вы передали %d кустов!", kusts);
                    SendClientMessage(playerid, COLOR_GREY, string);
                    format(string, sizeof(string), "   Тебе передали %d кустов!", kusts);
                    SendClientMessage(giveplayerid, COLOR_GREY, string);
                    }
                    else
                    {
                    SendClientMessage(playerid, COLOR_GREY, "Вы указали неверное количество!");
                    }
                    }
                    else
                    {
                    SendClientMessage(playerid, COLOR_GREY, "Вы слишком далеко!");
                    }
                             }//invalid id
                         }
                         else
                         {
                    format(string, sizeof(string), "   %i неактивный игрок !", giveplayerid);
                    SendClientMessage(playerid, COLOR_GREY, string);
                         }
                 }
                 return 1;
         }
         if(strcmp(cmd, "/сорвать", true) == 0)
         {
         if(IsPlayerConnected(playerid))
         {
         for(new m = 0; m < NARKOKUST; m++ )
         {
         if (PlayerToPoint(3,playerid,NarkoInfo[m][nX],NarkoInfo[m][nY],NarkoInfo[m][nZ]))
         {
         NarkoInfo[m][nSor] = 1;
         SendClientMessage(playerid, COLOR_WHITE, "Вы сорвали куст!");
         if(NarkoInfo[m][nRost] >= 100)
         {
         PlayerInfo[playerid][pDrugs] += 50;
         SendClientMessage(playerid, COLOR_WHITE, "Вы собрали 50 грамм наркотиков!");
         }
         SaveKust();
         new sa = NarkoInfo[m][nId];
         DestroyDynamicObject(NarkoKusts[sa]);
         LoadKust();
         PlayerInfo[playerid][pKust] += 1;
         NARKOKUST -= 1;
         SaveStuff();
         }
         }
    }
    return 1;
    }
    if(strcmp(cmd, "/полить", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    for(new m = 0; m < NARKOKUST; m++ )
    {
            if (PlayerToPoint(2,playerid,NarkoInfo[m][nX],NarkoInfo[m][nY],NarkoInfo[m][nZ]))
            {
            if(NarkoInfo[m][nVoda] > 50)
            {
            SendClientMessage(playerid, COLOR_WHITE, "Этот цветок уже поливали!");
            return 1;
            }
            NarkoInfo[m][nVoda] = 100;
            if(NarkoInfo[m][nRost] >= 100)
            {
            NarkoInfo[m][nModel] = 810;
            SendClientMessage(playerid, COLOR_WHITE, "Вы полили цветок.");
            SaveKust();
            new sa = NarkoInfo[m][nId];
            DestroyDynamicObject(NarkoKusts[sa]);
            LoadKust();
            return 1;
            }
            NarkoInfo[m][nModel] = 677;
            SendClientMessage(playerid, COLOR_WHITE, "Вы посадили цветок.");
            SaveKust();
            new sa = NarkoInfo[m][nId];
            DestroyDynamicObject(NarkoKusts[sa]);
            LoadKust();
            }
            }
    }
    return 1;
    }
    if(strcmp(cmd, "/посадить", true) == 0)
    {
         if(IsPlayerConnected(playerid))
         {
         if(PlayerInfo[playerid][pKust] < 1)
         {
                    SendClientMessage(playerid, COLOR_WHITE, "У вас нет цветков !");
                    return 1;
                   }
                     new Float:X,Float:Y,Float:Z;
                     GetPlayerPos(playerid, X,Y,Z);
                     NARKOKUST ++;
                     new NarkoID;
                     NarkoID = NARKOKUST-1;
                     NarkoInfo[NARKOKUST-1][nId] = NarkoID;
                     NarkoInfo[NARKOKUST-1][nX] = X;
                     NarkoInfo[NARKOKUST-1][nY] = Y;
                     NarkoInfo[NARKOKUST-1][nZ] = Z-1;
                     NarkoInfo[NARKOKUST-1][nVoda] = 100;
                     NarkoInfo[NARKOKUST-1][nRost] = 0;
                     NarkoInfo[NARKOKUST-1][nModel] = 677;
                     NarkoInfo[NARKOKUST-1][nSor] = 0;
                     SaveStuff();
                     SaveKust();
                     LoadKust();
                     format(string, sizeof(string), "* Вы посадили цветок.");
                     SendClientMessage(playerid, COLOR_GREY, string);
                     PlayerInfo[playerid][pKust] -= 1;
                     ClearAnimations(playerid);
                     ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0);  
                 }
                 return 1;
            }


Команды мы записали..
Далее мы добавляем в конец мода паблики:

Code

public LoadKust()
{
     new arrCoords[8][64];
     new strFromFile2[256];
     new File: file = fopen("Kust.cfg", io_read);
     if (file)
     {
         new idx;
         while (idx < NARKOKUST)
         {
             fread(file, strFromFile2);
             split(strFromFile2, arrCoords, '|');
             NarkoInfo[idx][nId] = strval(arrCoords[0]);
             NarkoInfo[idx][nX] = floatstr(arrCoords[1]);
             NarkoInfo[idx][nY] = floatstr(arrCoords[2]);
             NarkoInfo[idx][nZ] = floatstr(arrCoords[3]);
             NarkoInfo[idx][nVoda] = strval(arrCoords[4]);
             NarkoInfo[idx][nRost] = strval(arrCoords[5]);
             NarkoInfo[idx][nModel] = strval(arrCoords[6]);
             NarkoInfo[idx][nSor] = strval(arrCoords[7]);
             if(NarkoInfo[idx][nSor] == 0)
             {
                 new sa = NarkoInfo[idx][nId];
                 NarkoKusts[sa] = CreateDynamicObject(NarkoInfo[idx][nModel],NarkoInfo[idx][nX],NarkoInfo[idx][nY],NarkoInfo[idx][nZ],0,0,0);
             }
             idx++;
             }
            fclose(file);
         }
         return 1;
}

public VodaKust()
{
for(new ni = 0; ni != NARKOKUST; ni++)
{
NarkoInfo[ni][nVoda] -= 1;
if(NarkoInfo[ni][nVoda] < 1)
{
    if(NarkoInfo[ni][nVoda] < -100)
    {
    NarkoInfo[ni][nSor] = 1;
    SaveKust();
    new sa = NarkoInfo[ni][nId];
    DestroyDynamicObject(NarkoKusts[sa]);
    LoadKust();
    return 1;
    }
    NarkoInfo[ni][nModel] = 692;
    SaveKust();
    new sa = NarkoInfo[ni][nId];
    DestroyDynamicObject(NarkoKusts[sa]);
    LoadKust();
    }
}
return 1;
}

public RostKust()
{
    for(new ni = 0; ni != NARKOKUST; ni++)
    {
        NarkoInfo[ni][nRost] += 1;
        if(NarkoInfo[ni][nRost] >= 100)
        {
            NarkoInfo[ni][nModel] = 810;
        }
        SaveKust();
        new sa = NarkoInfo[ni][nId];
        DestroyDynamicObject(NarkoKusts[sa]);
        LoadKust();
    }
    return 1;
}

public SaveKust()
{
         new idx;
         new File: file2;
         while (idx < NARKOKUST)
         {
                 new coordsstring[256];
                 format(coordsstring, sizeof(coordsstring), "%d|%f|%f|%f|%d|%d|%d|%d\n",
                 NarkoInfo[idx][nId],
                 NarkoInfo[idx][nX],
                 NarkoInfo[idx][nY],
                 NarkoInfo[idx][nZ],
                 NarkoInfo[idx][nVoda],
                 NarkoInfo[idx][nRost],
                 NarkoInfo[idx][nModel],
                 NarkoInfo[idx][nSor]);
                 if(idx == 0)
                 {
                         file2 = fopen("Kust.cfg", io_write);
                 }
                 else
                 {
                         file2 = fopen("Kust.cfg", io_append);
                 }
                 fwrite(file2, coordsstring);
                 idx++;
                 fclose(file2);
         }
         return 1;
}

public LoadNarko()
{
     new arrCoords[1][64];
     new strFromFile2[256];
     new File: file = fopen("narko.cfg", io_read);
     if (file)
     {
         fread(file, strFromFile2);
         split(strFromFile2, arrCoords, '|');
         new narkos;
         narkos = strval(arrCoords[0]);
         NarkoGotovo = narkos;
     }
}

public Advertising()
{
     for(new i = 0; i < GetMaxPlayers(); i++)
     {
        if(IsPlayerConnected(i))
        {
             NarkoGotovo += 1;
             VodaKust();
             SaveKust();
             LoadKust();
        }
    }
    return 1;
}


Ко всем forward's добавляем:
Code
forward LoadKust();
forward SaveKust();
forward LoadNarko();
forward VodaKust();
forward RostKust();
forward Advertising();


Форварды мы добавили..
Ищем public OnGameModeInit()

Добавим таймеры и пикап:

Code
SetTimer("Advertising",365000,1);
SetTimer("RostKust", 900000, 1);
narko10 = CreatePickup(1254,2, 1929.8159,-1089.3829,24.7380);


Чуть ниже добавляем:
Code
LoadNarko();
LoadKust();


Ищем public OnPlayerPickUpPickup(playerid, pickupid) и добавляем:
Code
if(pickupid == narko10)  
         {
          if(PlayerInfo[playerid][pJob] == 19)
          {
            if(NarkoGotovo > 19)
            {
             PlayerInfo[playerid][pKust] += 2;
             NarkoGotovo -= 20;
             GivePlayerMoney(playerid, -1000);
             SendClientMessage(playerid, COLOR_WHITE, "Вы купили цветок у диллера !");
            }
            else
            {
            SendClientMessage(playerid, COLOR_WHITE, "У диллеров сейчас нет товара!");
            }
           }
           else
           {
           SendClientMessage(playerid, COLOR_WHITE, "Вы не нашли диллера!");
           }
         }


Находим public LoadStuff() и добавляем:
Code
NARKOKUST = strval(arrCoords[13]);


И в public SaveStuff() добавляем:
Code
format(coordsstring, sizeof(coordsstring), "%d|%d|%d|%d.", Jackpot,Tax,TaxValue,Security,NARKOKUST,OWNABLECARS);


Находим public OnPlayerConnect(playerid) и добавляем туда:
Code
PlayerInfo[playerid][pKust] = 0;


Осталось лишь сделать сохранение и загрузку кустов.

Добавляем в public OnPlayerRegister(playerid, password[]):

Code
format(var, 64, "Kust=%d\n",PlayerInfo[playerid][pKust]);fwrite(hFile, var);


Дальше ищем public OnPlayerLogin(playerid,password[]) и добавляем:
Code
if( strcmp( key , "Kust" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pKust] = strval( val ); }


И последний штрих, добавляем ко всем new:
Code
new NARKOKUST;
new NarkoGotovo;
new narko10;
new NarkoKusts[2000000];


[admin]
Вот собственно и конец мануала!
Вырезано из мода VC:RP.
С вами был я, Frank_Walker, удачи!
[/admin]


From Russia With Love!
Форум » PAWNO » Уроки Pawno » [Мануал] Система конопли/кустов.
  • Страница 1 из 1
  • 1
Поиск: