PaHaNjkee
Специалист
Здраствуйте, сейчас я вам расскажу как сделать систему рекламы, а именно рекламных щитов и рекламных листков. Начнем
Ко всем #define:
Ко всем new:
Перед enum bInfo вставляем:
Перед public LoadSBizz() вставляем:
В public OnGameModeInit():
Потом в OnPropUpdate() вы увидите чтото подобное:
После скобки сразу вставляем это:
Ну и сами команды (вставлять в public OnPlayerCommandText(playerid, cmdtext[])):
Ну вот впринципе и все
Автор урока: PaHaNjkee, было вырезано из мода Crime Life.
И еще: незабудьте создать файлик reklama.cfg в папке scriptfiles, ну а потом в игре /rekladd добавляете свои рекламки
Ко всем #define:
PHP:
#define MAX_REKLAMA 130// Макс. количество рекламных 3D текстов
PHP:
new Text3D:rekltext[130];//130 символов для рекламы
PHP:
enum rInfo
{
rOwned, // листок или щит свободен или нет
// ниже позиции
Float:rPos_X,
Float:rPos_Y,
Float:rPos_Z,
rText[1024], // текст
rType // тип (1 - щит, 2 - листок)
};
new ReklamaInfo[MAX_REKLAMA][rInfo];
PHP:
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;
}
PHP:
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
}
PHP:
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);
}
PHP:
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);
}
PHP:
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 добавляете свои рекламки
Последнее редактирование:
