Главная » Файлы » Всё для SA-MP (San Andreas Multiplayer) » [FS] Скрипты

[Soe] Редактор обьектов

Изображение Отсутствует


Описание:
Когда я нашел скрипт, были много багов. Пришлось все исправлять...
Исправленные баги:
+ Команда была доступна для всех игроков

+ Исправлены баги с диалогами

+ Исправлены баги с сохранением обьектов

___________________________________________________
С помощью данного скрипта можно создавать обьекты прямо в игре

Баги исправлены
Дороботчик; Excel_Smit.

______________________________________________________________________________________
Весь код:
#include <a_samp>

#define DIALOG_SOE 1050
#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

new cmd[256];

enum SavedEnums
{
Float:foX,
Float:foY,
Float:foZ,
Float:roX,
Float:roY,
Float:roZ
};

new O[SavedEnums];

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp(cmd,"/soe",true) == 0)
{
if (GetPVarInt(playerid, "AdmLvl") >= 0)
{
SendClientMessage(playerid, 0xFF0000FF, " [x] {FFFFFF}У Вас нет прав на использование этой команды !");
}
if (GetPVarInt(playerid, "AdmLvl") >= 3)
{
ShowPlayerDialog(playerid, DIALOG_SOE, DIALOG_STYLE_LIST, "Редактор объектов", \
"Инструкция\nСоздать объект\nИзменить карту","Выбрать","Отмена");
}
return 1;
}
return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_SOE:
{
if(response)
{
if(listitem == 0) ShowPlayerDialog(playerid, DIALOG_TUTORIAL, DIALOG_STYLE_MSGBOX, \
"Инструкция","{FFFFFF}Горячие клавиши:\n\n{008080}Escape {FFFFFF}- чтобы выйти из редактора,\nили выбора объекта\n{008080}Пробел {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)
{
if(!strlen(inputtext)) return SendClientMessage(playerid, 0xFF0000FF, "Вы оставили поле ввода пустым!");
new string1[255], string2[128], File: objs;
format(string2, sizeof(string2), "soe/%s.txt", inputtext);
objs = fopen(string2, io_append);
format(string1, sizeof(string1), "CreateObject(%d, %f,%f,%f, %f,%f,%f);\r\n", \
GetPVarInt(playerid, "ModelID"), O[foX],O[foY],O[foZ], O[roX],O[roY],O[roZ]);
fwrite(objs, string1);
fclose(objs);
}
}
}
return 1;
}

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, "Объект изменён",\
"Желаете ли вы сохранить объект в файл?\n\nФайл с объектами находится в {FFFFFF}scriptfiles/soe/*.txt",\
"Сохранить","Отмена");
O[foX] = fX;
O[foY] = fY;
O[foZ] = fZ;
O[roX] = fRotX;
O[roY] = fRotY;
O[roZ] = fRotZ;
}
}
Дополнительная информация:
Добавил: Excel_Smit
Автор материала: Неизвестно (если знаете, то пишите в комментарии)
Источник: http://gnr-samp.ru/load/samp/fs/soe_redaktor_obektov/4-1-0-211 (указывать при копировании)
Раздел материала: Всё для SA-MP (San Andreas Multiplayer)
О материале:
Дата добавления материала: 08.09.2014 в 01:36
Дата последнего обновления материала:
Материал просмотрен: 13322 раза
Категория материала: [FS] Скрипты
К материалу оставлены: 2 комментария

Ccылка
BB-Code
HTML-код

Правила публикации комментариев:
1. Запрещено оскорблять, унижать в грубой форме других пользователей.
2. Мат и грубые слова запрещены, даже в скрытой форме, для этого существуют масса слов которые заменяют мат.
3. Запрещено писать ссылки на другие сайты

Всего комментариев: 2
2 15151820az  
Очень интересно, но пропадает доступ абсолютно ко всем командам.
При изменения значения в коде admlvl Все команды, даже те, которых не существует заменяются на команду /soe. К примеру ввёл я /ekrgpohb или /mm, выскакивает /soe

1 Skeletron  
После установки, у меня пропадает доступ абсолютно ко всем командам на сервере, даже /mn sad

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]