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

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

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

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

[FS] Ingame Map Editor

OKStyle

Адвокат по делам семейным
Administrator
Wiki Team
Регистрация
4 Мар 2011
Сообщения
7,094
Лучшие ответы
226
Репутация
2,455
Награды
11
Рад представить вам редактор карт, затмивший МТА и ему подобные. В данной версии: возможность создания, изменения положения, редактирование материала глобальных и персональных объектов, а также приаттаченных к авто или к игроку. И не забываем про надписи.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Недоработки:
1) Кое-где не стоят проверки на введённый текст;
2) нет удаления приаттаченных объектов;
3) нет проверки на лимит глобальных объектов;
4) не доработана система редактирования приаттаченных к авто объектов;
5) вместо списка объектов (аля МТА) поле для ввода ID;
6) скудный пользовательский интерфейса;
7) невозможно просмотреть объект перед добавлением.

PHP:
#include <a_samp>
// Ingame Map Editor for 0.3e 1.0 by O.K.Style™
#define DIALOG_MAP_ID 1000
/*
new ObjectList[] = {"Holding Objects\nLights\nSpray Tags\nParticle Effects\nSA:MP Logos\nLand Masses\nBase Sections\nElevator from VC\nDM Cages\nRacing\nParkour\nSky Diving Platforms\nTunnel Sections\nRamps\nModular Road Sections\nModular Bridge Sections\n"};
new ObjectList1[] = {"Tubes and Funnels\nSpheres\nMore Stuff\nNew Objects added since IMG Beta 1 - 154 Objects\nObjects added in 0.3c RC4 (109 Objects)\nObjects added in 0.3c RC5 (143 Objects)\nBridge from GTALC\nObjects added in 0.3d RC3-3 (18 Objects)\n"};
new ObjectList2[] = {"Objects added in 0.3d RC7 (16 Objects)\nObjects added in 0.3d (8 objects)\nObjects added in 0.3e RC1 (25 objects)\nObjects added in 0.3e RC3 (54 objects)\nObjects added in 0.3e RC4 (44 objects)\nObjects added in 0.3e RC6 (5 objects)\nObjects added in 0.3e RC7 (31 objects)"};
*/
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	if(newkeys & KEY_SUBMISSION) ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
	return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	new Float:x, Float:y, Float:z;
	if(dialogid == DIALOG_MAP_ID)
	{
		if(!response) return 0;
		switch(listitem)
		{
			case 0: ShowPlayerDialog(playerid, DIALOG_MAP_ID + 1, DIALOG_STYLE_LIST, "Выберите тип объекта", "[1] Глобальный объект\n[2] Персональный объект\n[3] Аттач к транспорту\n[4] Аттач к игроку", "Выбор", "Отмена");
			case 1: ShowPlayerDialog(playerid, DIALOG_MAP_ID + 7, DIALOG_STYLE_LIST, "Выберите ID подложки", "Plane001 (19475)\nPlane002 (19476)\nPlane003 (19477)\nPlane004 (19478)\nPlane005 (19479)\nPlane006 (19480)\nPlane007 (19481)\nPlane008 (19482)\nPlane009 (19483)", "Выбор", "Назад");
			case 2: ShowPlayerDialog(playerid, DIALOG_MAP_ID + 9, DIALOG_STYLE_MSGBOX, "Замена материала", "Выберите объект для\nзамены материала.", "Ок", "");
			case 3, 4: SelectObject(playerid);
		}
		SetPVarInt(playerid, "MapMode", listitem);
		return 1;
	}
	else if(dialogid == DIALOG_MAP_ID + 1)
	{
		if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		SetPVarInt(playerid, "ObjectType", listitem);
		ShowPlayerDialog(playerid, DIALOG_MAP_ID + 2, DIALOG_STYLE_INPUT, "Выберите ID объекта", "Введите ID объекта:", "Выбор", "Отмена");
//		ShowPlayerDialog(playerid, DIALOG_MAP_ID + 2, DIALOG_STYLE_LIST, "Выберите ID объекта", "Список объектов", "Выбор", "Отмена");
	}
	else if(dialogid == DIALOG_MAP_ID + 2)
	{
	    if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		new model = strval(inputtext);
/*
		new model;
		switch(listitem)
		{
			case 0: model = 1000;
		}
*/
		new otype = GetPVarInt(playerid, "ObjectType");
		switch(otype)
		{
		    case 0:
		    {
				GetPlayerPos(playerid, x, y, z);
				new cobj = CreateObject(model, x + 2.0, y + 2.0, z + 1.0, 0.0, 0.0, 0.0);
				EditObject(playerid, cobj);
			}
			case 1:
			{
				GetPlayerPos(playerid, x, y, z);
				new cobj = CreatePlayerObject(playerid, model,x + 2.0, y + 2.0, z + 1.0, 0.0, 0.0, 0.0);
				EditPlayerObject(playerid, cobj);
			}
			case 2:
			{
			    if(!IsPlayerInAnyVehicle(playerid)) return ShowPlayerDialog(playerid, DIALOG_MAP_ID + 5, DIALOG_STYLE_MSGBOX, "Редактирование объекта", "Вы должны находиться в транспорте.", "Ок", "");
				printf("%d", model);
				new vid = GetPlayerVehicleID(playerid);
				GetVehiclePos(vid, x, y, z);
				new vaobject = CreateObject(playerid, model, x + 2.0, y + 2.0, z + 1.0, 0.0, 0.0, 0.0);
				SetPVarInt(playerid, "VehicleObj", vaobject);
				GetVehicleModelInfo(GetVehicleModel(vid), VEHICLE_MODEL_INFO_SIZE, x, y, z);
				AttachObjectToVehicle(vaobject, vid, x, y, z, 0.0, 0.0, 0.0);
				EditAttachedObject(playerid, vaobject);
			}
			case 3:
			{
			    if(IsPlayerInAnyVehicle(playerid)) return ShowPlayerDialog(playerid, DIALOG_MAP_ID + 5, DIALOG_STYLE_MSGBOX, "Редактирование объекта", "Вы не должны находиться в транспорте.", "Ок", "");
			    new aindex = GetPVarInt(playerid, "AttachIndex");
			    if(aindex > 9) return ShowPlayerDialog(playerid, DIALOG_MAP_ID + 3, DIALOG_STYLE_MSGBOX, "Аттач объекта", "Вы уже присоединили 10 объектов,\bнеобходимо удалить какие-либо имеющиеся\nдля продолжения действий с объектами.", "Далее", "Отмена");
				SetPVarInt(playerid, "AttachIndex", aindex + 1);
				ShowPlayerDialog(playerid, DIALOG_MAP_ID + 6, DIALOG_STYLE_LIST, "Выбор части тела", "1 - Спина\n2 - Голова\n3 - Левое плечо\n4 - Правое плечо\n5 - Левая рука\n6 - Правая рука\n7 - Левое бедро\n8 - Правое бедро\n9 - Левая нога\n10 - Правая нога\n11 - Правые икры\n12 - Левые икры\n13 - Левое предплечье\n14 - Правое предплечье\n15 - Левая ключица\n16 - Правая ключица\n17 - Шея\n18 - Челюсть", "Выбор", "Отмена");
				SetPVarInt(playerid, "AttachModel", model);
			}
		}
	}
	else if(dialogid == DIALOG_MAP_ID + 3)
	{
		if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		ShowPlayerDialog(playerid, DIALOG_MAP_ID + 4, DIALOG_STYLE_INPUT, "Индекс удаляемого объекта", "Введите индекс приаттаченного\nобъекта для удаления:", "Ввод", "Отмена");
	}
	else if(dialogid == DIALOG_MAP_ID + 4)
	{
		if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		new index = strval(inputtext);
		if(IsPlayerAttachedObjectSlotUsed(playerid, index)) RemovePlayerAttachedObject(playerid, index);
		ShowPlayerDialog(playerid, DIALOG_MAP_ID + 5, DIALOG_STYLE_MSGBOX, "Редактирование объекта", "Объект удалён.", "Ок", "");
	}
	else if(dialogid == DIALOG_MAP_ID + 6)
	{
		if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		new bone = listitem + 1;
		new slot = GetPVarInt(playerid, "AttachIndex");
		SetPlayerAttachedObject(playerid, slot, GetPVarInt(playerid, "AttachModel"), bone);
		EditAttachedObject(playerid, slot);
	}
	else if(dialogid == DIALOG_MAP_ID + 7)
	{
		if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		SetPVarInt(playerid, "SignModel", listitem);
		ShowPlayerDialog(playerid, DIALOG_MAP_ID + 8, DIALOG_STYLE_INPUT, "Текст надписи", "Введите текст надписи:", "Ввод", "Отмена");
	}
	else if(dialogid == DIALOG_MAP_ID + 8)
	{
		if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		GetPlayerPos(playerid, x, y, z);
        new sobj = CreateObject(GetPVarInt(playerid, "SignModel"), x + 2.0, y + 2.0, z + 1.0, 0.0, 0.0, 0.0);
		SetObjectMaterialText(sobj, inputtext);
		EditObject(playerid, sobj);
	}
	else if(dialogid == DIALOG_MAP_ID + 9)
	{
	    SelectObject(playerid);
	    return 1;
	}
	else if(dialogid == DIALOG_MAP_ID + 10)
	{
	    if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		SetPVarInt(playerid, "MaterialObject", strval(inputtext));
	    ShowPlayerDialog(playerid, DIALOG_MAP_ID + 11, DIALOG_STYLE_INPUT, "Настройки бъекта-донора", "Название пакета текстур:", "Ввод", "Отмена");
	    return 1;
	}
	else if(dialogid == DIALOG_MAP_ID + 11)
	{
	    if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		SetPVarString(playerid, "MaterialTxd", inputtext);
	    ShowPlayerDialog(playerid, DIALOG_MAP_ID + 12, DIALOG_STYLE_INPUT, "Настройки бъекта-донора", "Название текстуры:", "Ввод", "Отмена");
	    return 1;
	}
	else if(dialogid == DIALOG_MAP_ID + 12)
	{
	    if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		SetPVarString(playerid, "MaterialTexture", inputtext);
	    ShowPlayerDialog(playerid, DIALOG_MAP_ID + 13, DIALOG_STYLE_INPUT, "Настройки объекта", "Введите порядковый индекс\nтекстуры для замены:", "Ввод", "Отмена");
	    return 1;
	}
	else if(dialogid == DIALOG_MAP_ID + 13)
	{
	    if(!response) return ShowPlayerDialog(playerid, DIALOG_MAP_ID, DIALOG_STYLE_LIST, "Выберите действие", "[1] Создать объект\n[2] Создать надпись\n[3] Сменить материал\n[5] Изменить положение\n[4] Удалить объект", "Выбор", "Выход");
		new txd[30];
		GetPVarString(playerid, "MaterialTxd", txd, sizeof(txd));
		new texture[30];
		GetPVarString(playerid, "MaterialTexture", texture, sizeof(texture));
		SetObjectMaterial(GetPVarInt(playerid, "EditedObject"), strval(inputtext), GetPVarInt(playerid, "MaterialObject"), txd, texture, 0); // можно сделать и выбор цвета
	    return 1;
	}
	return 0;
}
public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)
{
	new mapmode = GetPVarInt(playerid, "MapMode");
	switch(mapmode)
	{
		case 2:
	    {
	        SetPVarInt(playerid, "EditedObject", objectid);
			ShowPlayerDialog(playerid, DIALOG_MAP_ID + 10, DIALOG_STYLE_INPUT, "Введите ID объекта-донора", "ID объекта-донора:", "Ввод", "Отмена");
		}
		case 4:
		{
		    DestroyObject(objectid);
		}
	}
}
public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
    new string[256];
	if(!playerobject)
	{
		if(!IsValidObject(objectid)) return 1;
		MoveObject(objectid, fX, fY, fZ, 10.0, fRotX, fRotY, fRotZ);
	}
	if(response == EDIT_RESPONSE_FINAL || response == EDIT_RESPONSE_CANCEL)
	{
		format(string, sizeof(string), "CreateObject(%d, %.4f, %.4f, %.4f, %.2f, %.2f, %.2f)", objectid, fX, fY, fZ, fRotX, fRotY, fRotZ);
		printf(string);
		SelectObject(playerid);
	}
	return 1;
}
public OnPlayerEditAttachedObject(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
{
	new string[256];
	format(string, sizeof(string), "SetPlayerAttachedObject(playerid, %d, %d, %d, %.4f, %.4f, %.4f, %.2f, %.2f, %.2f, %.2f, %.2f, %.2f)", index, modelid, boneid, fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, fScaleX, fScaleY, fScaleZ);
	printf(string);
	if(!IsPlayerInAnyVehicle(playerid)) SetPlayerAttachedObject(playerid, index, modelid, boneid, fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, fScaleX, fScaleY, fScaleZ);
	else AttachObjectToVehicle(GetPVarInt(playerid, "VehicleObj"), GetPlayerVehicleID(playerid), fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ);
}
Автор: OKStyle

P.S. Материал сырой, но работать можно.
 
Последнее редактирование:
Сверху Снизу