Доступ к готовым решениям

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

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

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

Мануал Система рекламы

Статус
В этой теме нельзя размещать новые ответы.

PaHaNjkee

Специалист
Здраствуйте, сейчас я вам расскажу как сделать систему рекламы, а именно рекламных щитов и рекламных листков. Начнем

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

И еще: незабудьте создать файлик reklama.cfg в папке scriptfiles, ну а потом в игре /rekladd добавляете свои рекламки ;)
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу