Доступ к архиву

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

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

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

Система Мапперов

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

Aizov

Умник
Всем привет с вами Aizov.
Сегодня мы будем добавлять систему мапперов.
Делаю я для РЛС.
Начнём мы с дефайнов
PHP:
#define DIALOG_SOE			22828
#define DIALOG_CREATE		DIALOG_SOE + 1
#define DIALOG_SELECT   	DIALOG_SOE + 2
#define DIALOG_TUTORIAL 	DIALOG_SOE + 3
#define DIALOG_SAVE_1		DIALOG_SOE + 4
#define DIALOG_SAVE_2       DIALOG_SOE + 5
В public OnPlayerCommandText(playerid, cmdtext[]) Добавляем Команду
PHP:
if(strcmp("/soe", cmdtext, true, 10) == 0)
	{
		if (PlayerInfo[playerid][pAdmin]>= 3 || PlayerInfo[playerid][pMapper] >= 1)
		{
	        ShowPlayerDialog(playerid, DIALOG_SOE, DIALOG_STYLE_LIST, "Редактор", \
	        "Инструкция\nСоздать объект\nИзменить Объект","Ok","Cancel");
		    return 1;
	    }
    }
if(strcmp(cmd, "/mapper", true) == 0 || strcmp(cmd, "/ma", true) == 0)
    {
        if(PlayerInfo[playerid][pMapper] > 0)
        {
            GetPlayerName(playerid, sendername, sizeof(sendername));
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            new result[64];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
            {
                result[idx - offset] = cmdtext[idx];
                idx++;
            }
            result[idx - offset] = EOS;
            if(!strlen(result)) return  SendClientMessage(playerid, COLOR_GREEN, "{22ff00}» {bbbbbb}Введите{FFFFFF}: (/ma)pper [текст]");
            format(string, sizeof(string), "[M] %s[%d]: %s", sendername, playerid,result);
            if(PlayerInfo[playerid][pAdmin] >= 1)
            {
                MappersChat(COLOR_YELLOW, string);
            }
        }
        return true;
    }
if(strcmp("/makemapper", cmdtext, true, 10) == 0)
	{
		if(IsPlayerConnected(playerid))
		{
			tmp = strtok(cmdtext, idx);
			if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE,"{22ff00}» {bbbbbb}Введите{FFFFFF}: /makemapper [ID] [0-5]");
			new para1,level;
			para1 = ReturnUser(tmp);
			tmp = strtok(cmdtext, idx);
			level = strval(tmp);
			if(level > 5 || level < 0) return SendClientMessage(playerid, COLOR_GREY, "{F70000}x {ADAEAD}LVL Маппера может быть от 0 до 5");
			if(PlayerInfo[playerid][pAdmin] >= 6 || IsPlayerAdmin(playerid) || PlayerInfo[playerid][pMapper] >= 5)
			{
				if(IsPlayerConnected(para1))
				{
					if(para1 != INVALID_PLAYER_ID)
					{
						GetPlayerName(para1, giveplayer, sizeof(giveplayer));
						GetPlayerName(playerid, sendername, sizeof(sendername));
						PlayerInfo[para1][pMapper] = level;
						printf("%s продвинул(а) %s на %d уровень админки", sendername, giveplayer, level);
						format(string, sizeof(string), "Администратор/Гл.Маппер %s повысил Вас до %d уровня маппера",sendername, level);
						SendClientMessage(para1, 0x6495EDFF, string);
						format(string, sizeof(string), "Вы повысили %s до %d уровня Маппера.", giveplayer,level);
						format(string,sizeof(string),"Админ %s назначил игрока %s маппером. LVL_MAPP: %d",sendername,giveplayer,level);
					    WriteLog("ADMIN.log",string);
						SendClientMessage(playerid, 0x6495EDFF, string);
					}
				}
			}
			else
			{
				SendClientMessage(playerid, COLOR_GRAD1, "{F70000}x {ADAEAD}Вы не уполномочены использовать эту команду!");
			}
		}
		return true;
	}
Ближе к enum:
PHP:
enum Soe {
	Float:foX,
	Float:foY,
	Float:foZ,
	Float:roX,
	Float:roY,
	Float:roZ
};
new O[Soe];
Теперь в public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
После switch(dialogid){
PHP:
case DIALOG_SOE:
	    {
	        if(response)
	        {
	            if(listitem == 0) ShowPlayerDialog(playerid, DIALOG_TUTORIAL, DIALOG_STYLE_MSGBOX, \
				"Инструкция","{FFFFFF}Горячие клавиши:\n\n{008080}Escape {FFFFFF}- чтобы выйти из редактора,\nили выбора объекта\n{008080}Shift {FFFFFF}- чтобы вращать камеру\nво время редактирования",\
				"Готово","Назад");
	            if(listitem == 1) ShowPlayerDialog(playerid, DIALOG_CREATE, DIALOG_STYLE_INPUT, \
				"Создание объекта","Введите ID модели объекта для того чтобы его создать\nОбъект появится перед вами, далее вы будете изменять его\n\nМаксимальный ID объекта - 19469",\
				"Создать","Назад");
				if(listitem == 2) SelectObject(playerid);
	        }
	    }
	    case DIALOG_CREATE:
	    {
			if(!response) return OnPlayerCommandText(playerid, "/soe");
			if(!strval(inputtext)) return ShowPlayerDialog(playerid, DIALOG_CREATE, DIALOG_STYLE_INPUT, \
			"Создание объекта","Введите ID модели объекта для того чтобы его создать\nОбъект появится перед вами, далее вы будете изменять его\n\nМаксимальный ID объекта - 19469\n{FF0000}Ошибка: Недопустимое значение!",\
			"Создать","Назад");
			new Float:X, Float:Y, Float:Z;
			GetPlayerPos(playerid, X, Y, Z);
			new obj;
			obj = CreateObject(strval(inputtext), X+1, Y+1, Z+1, 0.0,0.0,0.0);
			EditObject(playerid, obj);
			SetPVarInt(playerid, "ModelID", strval(inputtext));
		}
	    case DIALOG_SELECT:
	    {
			new objectid = GetPVarInt(playerid, "SelectedObject");
			if(response) EditObject(playerid, objectid);
			else DestroyObject(objectid) && CancelEdit(playerid);
	    }
	    case DIALOG_TUTORIAL: if(!response) return OnPlayerCommandText(playerid, "/soe");
	    case DIALOG_SAVE_1:
	    {
	        if(response) return ShowPlayerDialog(playerid, DIALOG_SAVE_2, DIALOG_STYLE_INPUT, "Размещение","Введите квадрат в котором находится объект \nНа англ. пример:","Сохранить","Отмена");
	    }
	    case DIALOG_SAVE_2:
	    {
	        if(response)
	        {
	            new day,month,year;
				new playername[MAX_PLAYER_NAME];
                GetPlayerName(playerid, playername, sizeof(playername));
                new str[128];
                getdate(day,month,year);
                format(str,sizeof(str),"Объект создан %d:%d:%d", day,month,year);
	            if(!strlen(inputtext)) return SendClientMessage(playerid, 0xFF0000FF, "Вы оставили поле ввода пустым!");
	            new string1[255], string2[128], File: objs;//inputtext
	            
	            format(string2, sizeof(string2), "soe/%s.txt", playername);
	            objs = fopen(string2, io_append);
	            format(string1, sizeof(string1), "CreateObject(%d, %f,%f,%f, %f,%f,%f);%s,%d\r\n", \
				GetPVarInt(playerid, "ModelID"), O[foX],O[foY],O[foZ], O[roX],O[roY],O[roZ],inputtext);
	            fwrite(objs, string1);
	            fclose(objs);
	        }
	    }
В конце мода
PHP:
public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
{
	ShowPlayerDialog(playerid, DIALOG_SELECT, DIALOG_STYLE_MSGBOX,"Действие с объектом", \
	"Выберите действие с объектом\nВы можете его отредактировать или удалить","Изменить","Удалить");
	SetPVarInt(playerid, "SelectedObject", objectid);
	SetPVarInt(playerid, "ModelID", modelid);
    return 1;
}

public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
	if(response == 1)
	{
		ShowPlayerDialog(playerid, DIALOG_SAVE_1, DIALOG_STYLE_MSGBOX, "Объект изменён",\
		"Желаете ли вы сохранить объект в файл?",\
		"Сохранить...","Отмена");
		O[foX] = fX;
		O[foY] = fY;
		O[foZ] = fZ;
		O[roX] = fRotX;
		O[roY] = fRotY;
		O[roZ] = fRotZ;
	}
}
stock MappersChat(color, string[]){
	for(new i = 0; i < MAX_PLAYERS; i++){
		if(IsPlayerConnected(i)){
			if(PlayerInfo[i][pMapper] >= 1){ SendClientMessage(i, color, string); }}}}
В enum pInfo после pAdmin,
PHP:
pMapper,
В public OnPlayerRegister(playerid, password[])
PHP:
ini_setInteger(File,"Mapper",PlayerInfo[playerid][pMapper]);
В public OnPlayerSave(playerid)
PHP:
ini_setInteger(File,"Mapper",PlayerInfo[playerid][pMapper]);
Вроде ничего не забыл. Если что говорите
Писал давно. Еще на MxINI
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу