Четверг, 22.04.2021, 23:27
Logo site
  • Главная
  • Форум
  • Мы в Контакте
  • Pwn-Zone.Ru
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » SA-MP » Wiki-The-Samp » [Tutorial] Система рекламы
[Tutorial] Система рекламы
НазарДата: Суббота, 17.12.2011, 21:43 | Сообщение # 1
Гл. Администратор
Группа: Пользователь
Сообщений: 125
Награды: 7
Замечания: 0%
Здраствуйте, сейчас я вам расскажу как сделать систему рекламы, а именно рекламных щитов и рекламных листков.

Ко всем #define:
Code
#define MAX_REKLAMA 130// Макс. количество рекламных 3D текстов


Ко всем new:
Code
new Text3D:rekltext[130];//130 символов для рекламы


Перед enum bInfo вставляем:
Code
enum rInfo  
{  
     rOwned, // листок или щит свободен или нет  
            // ниже позиции  
     Float:rPos_X,  
     Float:rPos_Y,  
     Float:rPos_Z,  
     rText[1024], // текст  
     rType // тип (1 - щит, 2 - листок)  
};  
new ReklamaInfo[MAX_REKLAMA][rInfo];


Перед public LoadSBizz() вставляем:
Code
forward LoadReklama();  
public LoadReklama()  
{  
     new arrCoords[6][64];  
     new strFromFile2[256];  
     new File: file = fopen("reklama.cfg", io_read);  
     new idx;  
     if(file)  
     {  
         while (idx < sizeof(ReklamaInfo))  
         {  
             fread(file, strFromFile2);  
             split(strFromFile2, arrCoords, ',');  
             ReklamaInfo[idx][rOwned] = strval(arrCoords[0]);  
             ReklamaInfo[idx][rPos_X] = floatstr(arrCoords[1]);  
             ReklamaInfo[idx][rPos_Y] = floatstr(arrCoords[2]);  
             ReklamaInfo[idx][rPos_Z] = floatstr(arrCoords[3]);  
             strmid(ReklamaInfo[idx][rText], arrCoords[4], 0, strlen(arrCoords[4]), 255);  
             ReklamaInfo[idx][rType] = strval(arrCoords[5]);  
             idx++;  
         }  
         fclose(file);  
         print("Система рекламных щитов успешно загружена!");  
         printf("Загружено рекламных щитов: %d",idx);  
     }  
     return 1;  
}


В public OnGameModeInit():
Code
new Float:radius;  
     new buffer[256];  
     for(new r = 0; r < sizeof(ReklamaInfo); r++)  
     {  
         if(ReklamaInfo[r][rOwned] == 1)  
         {  
             if(ReklamaInfo[r][rType] == 1)  
             {  
                 format(buffer,sizeof(buffer),"Рекламный листок:\n%s",ReklamaInfo[r][rText]);  
                 radius = 50;  
             }  
             else  
             {  
                 format(buffer,sizeof(buffer),"Рекламный щит:\n%s",ReklamaInfo[r][rText]);  
                 radius = 150;  
             }  
         }  
         else  
         {  
             if(ReklamaInfo[r][rType] == 1)  
             {  
                 format(buffer,sizeof(buffer),"Здесь могла быть ваша реклама!\nРекламное место [№%d]\nОбращаться в LS News или SF News",r);  
                 radius = 50;  
             }  
             else  
             {  
                 format(buffer,sizeof(buffer),"Здесь могла быть ваша реклама!\nРекламное место [№%d]\nОбращаться в LS News или SF News",r);  
                 radius = 150;  
             }  
         }  
         rekltext[r] = CreateDynamic3DTextLabel(buffer, COLOR_LIGHTBLUE, ReklamaInfo[r][rPos_X], ReklamaInfo[r][rPos_Y], ReklamaInfo[r][rPos_Z], radius, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 1, 0, 0, -1, radius); // я использую стример by Incognito  
     }


Потом в OnPropUpdate() вы увидите чтото подобное:
Code
idx = 0;  
     while (idx < sizeof(SBizzInfo))  
     {  
         new coordsstring[256];  
         format(coordsstring, sizeof(coordsstring), "%d|%s|%s|%s|%f|%f|%f|%d|%d|%d|%d|%d|%d|%d|%d|%d\n",  
         SBizzInfo[idx][sbOwned],  
         SBizzInfo[idx][sbOwner],  
         SBizzInfo[idx][sbMessage],  
         SBizzInfo[idx][sbExtortion],  
         SBizzInfo[idx][sbEntranceX],  
         SBizzInfo[idx][sbEntranceY],  
         SBizzInfo[idx][sbEntranceZ],  
         SBizzInfo[idx][sbLevelNeeded],  
         SBizzInfo[idx][sbBuyPrice],  
         SBizzInfo[idx][sbEntranceCost],  
         SBizzInfo[idx][sbTill],  
         SBizzInfo[idx][sbLocked],  
         SBizzInfo[idx][sbInterior],  
         SBizzInfo[idx][sbProducts],  
         SBizzInfo[idx][sbMaxProducts],  
         SBizzInfo[idx][sbPriceProd]);  
         if(idx == 0)  
         {  
             file2 = fopen("sbizz.cfg", io_write);  
         }  
         else  
         {  
             file2 = fopen("sbizz.cfg", io_append);  
         }  
         fwrite(file2, coordsstring);  
         idx++;  
         fclose(file2);  
     }


После скобки сразу вставляем это:
Code
idx = 0;  
     while (idx < sizeof(ReklamaInfo))  
     {  
         new coordsstring[256];  
         format(coordsstring, sizeof(coordsstring), "%d,%f,%f,%f,%s,%d\n",  
         ReklamaInfo[idx][rOwned],  
         ReklamaInfo[idx][rPos_X],  
         ReklamaInfo[idx][rPos_Y],  
         ReklamaInfo[idx][rPos_Z],  
         ReklamaInfo[idx][rText],  
         ReklamaInfo[idx][rType]);  
         if(idx == 0)  
         {  
             file2 = fopen("reklama.cfg", io_write);  
         }  
         else  
         {  
             file2 = fopen("reklama.cfg", io_append);  
         }  
         fwrite(file2, coordsstring);  
         idx++;  
         fclose(file2);  
     }


Ну и сами команды (вставлять в public OnPlayerCommandText(playerid, cmdtext[])):
Code
if(strcmp(cmd, "/rekldel", true) == 0) // удалить рекламу  
     {  
         if(IsPlayerConnected(playerid))  
         {  
             if(PlayerInfo[playerid][pLeader] == 9 || PlayerInfo[playerid][pMember] == 9 || PlayerInfo[playerid][pLeader] == 21 || PlayerInfo[playerid][pMember] == 21) // ид фракций ставим свои у меня 9 - SF News, 21 - LS News  
             {  
                 if(PlayerInfo[playerid][pRank] < 3)  
                 {  
                     SendClientMessage(playerid,COLOR_GREY,"Команда доступна с 3 ранга!");  
                     return 1;  
                 }  
                 tmp = strtok(cmdtext, idx);  
                 if(!strlen(tmp))  
                 {  
                     SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используйте: /rekldel [номер площадки]");  
                     return 1;  
                 }  
                 new id = strval(tmp);  
                 new buffer[512];  
                 ReklamaInfo[id][rOwned] = 0;  
                 format(buffer,sizeof(buffer),"Здесь могла быть ваша реклама!\nРекламное место [№%d]\nОбращаться в LS News или SF News",id);  
                 Update3DTextLabelText(rekltext[id],COLOR_LIGHTBLUE,buffer);  
                 format(string,sizeof(string),"Вы успешно удалили рекламу №%d",id);  
                 SendClientMessage(playerid,COLOR_YELLOW,string);  
                 OnPropUpdate();  
             }  
         }  
         return 1;  
     }  
     if(strcmp(cmd, "/rekladd", true) == 0) // добавит рекламу для админов  
     {  
         if(IsPlayerConnected(playerid))  
         {  
             if(PlayerInfo[playerid][pAdmin] >= 6) // 6 уровень админа ставим на свой  
             {  
                 tmp = strtok(cmdtext, idx);  
                 if(!strlen(tmp))  
                 {  
                     SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используйте: /rekladd [тип (1 - листок, 2 - щит)]");  
                     return 1;  
                 }  
                 new type = strval(tmp);  
                 new Float:x, Float:y, Float:z;  
                 GetPlayerPos(playerid,x,y,z);  
                 new File:file2;  
         new coordsstring[256];  
         format(coordsstring, sizeof(coordsstring), "0,%f,%f,%f,None,%d\n",x,y,z,type);  
         file2 = fopen("reklama.cfg", io_append);  
         fwrite(file2, coordsstring);  
         fclose(file2);  
         }  
         }  
         return 1;  
     }  
     if(strcmp(cmd, "/reklnew", true) == 0)  
     {  
         if (PlayerInfo[playerid][pLeader] == 9 || PlayerInfo[playerid][pMember] == 9 || PlayerInfo[playerid][pLeader] == 21 || PlayerInfo[playerid][pMember] == 21) // сдесь тоже меняем ид на свои  
         {  
             if(PlayerInfo[playerid][pRank] < 3)  
             {  
                 SendClientMessage(playerid,COLOR_GREY,"Команда доступна с 3 ранга!");  
                 return 1;  
             }  
             tmp = strtok(cmdtext, idx);  
             if(!strlen(tmp))  
             {  
                 SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используйте: /reklnew [Номер рекламного места] [Текст]");  
                 return 1;  
             }  
             new id = strval(tmp);  
             new length = strlen(cmdtext);  
             while ((idx < length) && (cmdtext[idx] <= ' '))  
             {  
                 idx++;  
                }  
             new offset = idx;  
                new result[1024];  
             while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))  
                {  
                   result[idx - offset] = cmdtext[idx];  
                    idx++;  
             }  
             result[idx - offset] = EOS;  
             if(!strlen(tmp))  
             {  
                 SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используйте: /reklnew [Номер рекламного места] [Текст]");  
                    return 1;  
             }  
               if(strfind( result , "," , true ) == -1)  
              {  
                 new buffer[1024];  
                 strmid(ReklamaInfo[id][rText], (result), 0, strlen((result)), 128);  
                 ReklamaInfo[id][rOwned] = 1;  
                 if(ReklamaInfo[id][rType] == 1)  
                 {  
                     format(buffer,sizeof(buffer),"Рекламный листок:\n%s",ReklamaInfo[id][rText]);  
                 }  
                 if(ReklamaInfo[id][rType] == 2)  
                 {  
                     format(buffer,sizeof(buffer),"Рекламный щит:\n%s",ReklamaInfo[id][rText]);  
                 }  
                 UpdateDynamic3DTextLabelText(rekltext[id],COLOR_LIGHTBLUE,buffer);  
                 format(string, sizeof(string), "Вы добавили новую рекламу: [%s][Место: %d]",(result),id);  
                 OnPropUpdate();  
                 SendClientMessage(playerid, COLOR_YELLOW, string);  
             }  
             return 1;  
         }  
         else  
         {  
             SendClientMessage(playerid,COLOR_GREY,"Вы не сотрудник LS News или SF News!");  
             return 1;  
         }  
     }


По всем вопросам обращайтесь на форум :)
 
Форум » SA-MP » Wiki-The-Samp » [Tutorial] Система рекламы
  • Страница 1 из 1
  • 1
Поиск:

Лучшая рип студия!

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