Здраствуйте, сейчас я вам расскажу как сделать систему рекламы, а именно рекламных щитов и рекламных листков. Вот скрин http://i065.radikal.ru/1109/bb/535237770f57.jpg Начнём Ко всем #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 }
Ну и сами команды (вставлять в 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; } }
И еще: незабудьте создать файлик reklama.cfg в папке scriptfiles, ну а потом в игре /rekladd добавляете свои рекламки
Ну вот впринципе и все Автор урока: PaHaNjkee Лучшие моды,скрипты,карты - вы найдёте на сайте samp-pawno.ru Самые чёткие ответы на ваши вопросы и помощь по скритингу вы найдёте на сайте forum-pawno.ru