Aizov
Умник
Всем привет с вами Aizov.
Сегодня мы будем добавлять систему мапперов.
Делаю я для РЛС.
Начнём мы с дефайнов
В public OnPlayerCommandText(playerid, cmdtext[]) Добавляем Команду
Ближе к enum:
Теперь в public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
После switch(dialogid){
В конце мода
В enum pInfo после pAdmin,
В public OnPlayerRegister(playerid, password[])
В public OnPlayerSave(playerid)
Вроде ничего не забыл. Если что говорите
Писал давно. Еще на MxINI
Сегодня мы будем добавлять систему мапперов.
Начнём мы с дефайнов
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
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;
}
PHP:
enum Soe {
Float:foX,
Float:foY,
Float:foZ,
Float:roX,
Float:roY,
Float:roZ
};
new O[Soe];
После 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); }}}}
PHP:
pMapper,
PHP:
ini_setInteger(File,"Mapper",PlayerInfo[playerid][pMapper]);
PHP:
ini_setInteger(File,"Mapper",PlayerInfo[playerid][pMapper]);
Писал давно. Еще на MxINI
Последнее редактирование:
