Untonyst
Умник
Малообновленный вариант первоначальной версии системы (косметические изменения).
Версия: 1.1.1
Что изменилось:
Скриншоты:
А теперь добавление всего этого в мод. Для начала:
Важно: не стал добавлять константы для id диалогов. Ни все в этой жизни ctr + c / v :hang1:
С include пока повременим, как и с FS. Скоро добавлю плюшек :3
Автор: Untonyst
И глаголит Untonystъ истину простую своей рукой и четырьмя персатми, набирающие текст на иноземной неведанной доске всем, чтобы ты, узревшие тему очами зоркими своими, не спрятал свою гордыню и не украл честный труд Untonystъ. Но разрешает он словом своим в личной переписке, что разрешит он скопировать труд Untonystъ на всеобщее обозрение, если тот укажет настоящего автора этой летописи и желательно ссылку на летопись указать, если возможности позволяют. И истина эта проста, да не все с ней справляются.
Версия: 1.1.1
Что изменилось:
- Переправлены команды по примерам мифа #4 от Daniel_Cortez.
- Избавился от switch ветвлений, теперь есть массив.
Скриншоты:
А теперь добавление всего этого в мод. Для начала:
- Добавим это ко всем вашим переменным:
PHP:#include <streamer> #include <sscanf2> #include <dc_cmd> #define MAX_ROAD_SIGN_MODELS 45 #define MAX_SIGNS_LABEL_TEXT 31 static const road_sign_models[MAX_ROAD_SIGN_MODELS] = { 19955, 19954, 19953, 19952, 19951, 19950, 19949, 19948, 19963, 19962, 19961, 19960, 19959, 19958, 19957, 19956, 19971, 19970, 19969, 19968, 19967, 19966, 19965, 19964, 19979, 19978, 19977, 19976, 19975, 19974, 19973, 19972, 19987, 19986, 19985, 19984, 19983, 19982, 19981, 19980, 19988, 19989, 19990, 19991, 19992 }; static const road_sign_color_text[] = { 0xADD8E6FF, // LightBlue 0x006400FF, // DarkGreen 0x00FF00FF, // Green 0xFFFF00FF, // Yellow 0xFF6347FF, // Tomato 0xFF0000FF, // Red 0x0000FFFF, // Blue 0x607B8BFF // LightSkyBlue }; enum E_ROAD_SIGN { model, Float:f_x, Float:f_y, Float:f_z, Float:f_rx, Float:f_ry, Float:f_rz, v_world, Text3D:r_label, r_label_text[MAX_SIGNS_LABEL_TEXT], r_label_text_color }; new road_sign[][E_ROAD_SIGN], last_road_sign; new PlayerText:TD_road_sign_view; - Это добавим ко всем вашим командам:
PHP:// добавить дорожный знак COMMAND:addsign(playerid, params[]) { new cmd_sign_model_id; if (sscanf(params, "i", cmd_sign_model_id)) { SendClientMessage(playerid, -1, "Введите /addsign <номер модели знака>"); SendClientMessage(playerid, -1, "* чтобы узнать номера знаков введите /signnum"); return 0; } if (cmd_sign_model_id > MAX_ROAD_SIGN_MODELS) return SendClientMessage(playerid, -1, "* чтобы узнать номера знаков введите /signnum"); new Float:x, Float:y, Float:z, Float:angle; GetPlayerPos(playerid, x, y, z); GetPlayerFacingAngle(playerid, angle); x += floatsin(-angle, degrees); y += floatcos(-angle, degrees); SetPVarInt(playerid, "road_sign_editor", 1); last_road_sign = CreateDynamicObject(road_sign_models[cmd_sign_model_id], x, y, z - 0.35, 0, 0, 0, GetPlayerVirtualWorld(playerid)); EditDynamicObject(playerid, last_road_sign); return 1; } // узнать как выглядит знак по его порядковому номеру модели COMMAND:signnum(playerid, params[]) { new cmd_sign_model_id; if (sscanf(params, "i", cmd_sign_model_id)) return SendClientMessage(playerid, -1, "Введите /signnum <номер модели знака>"); if (cmd_sign_model_id > MAX_ROAD_SIGN_MODELS) return SendClientMessage(playerid, -1, "Упс, несуществующий номер модели. Повторите еще раз!"); PlayerTextDrawSetPreviewModel(playerid, TD_road_sign_view, road_sign_models[cmd_sign_model_id]); PlayerTextDrawSetPreviewRot(playerid, TD_road_sign_view, 0.0, 0.0, 180.0, 1.0); PlayerTextDrawShow(playerid, TD_road_sign_view); SetTimerEx("@__HideTextDrawRoadSign", 3000, false, "i", playerid); return 1; } @__HideTextDrawRoadSign(playerid); @__HideTextDrawRoadSign(playerid) { PlayerTextDrawHide(playerid, TD_road_sign_view); } // удаляем дорожный знак по его id COMMAND:deletesign(playerid, params[]) { new cmd_sign_id; if (sscanf(params, "i", cmd_sign_id)) return SendClientMessage(playerid, -1, "Введите /deletesign (или /drs) <номер знака>"); road_sign[cmd_sign_id][model] = 0; road_sign[cmd_sign_id][f_x] = road_sign[cmd_sign_id][f_y] = road_sign[cmd_sign_id][f_z] = road_sign[cmd_sign_id][f_rx] = road_sign[cmd_sign_id][f_ry] = road_sign[cmd_sign_id][f_rz] = 0.0; road_sign[cmd_sign_id][v_world] = -1; road_sign[cmd_sign_id][r_label_text][0] = EOS; road_sign[cmd_sign_id][r_label_text_color] = -1; DestroyDynamic3DTextLabel(road_sign[cmd_sign_id][r_label]); DestroyDynamicObject(cmd_sign_id); return 1; } // обновляем описание pyfrf COMMAND:signname(playerid, params[]) { new cmd_sign_id; if (sscanf(params, "is[31]", cmd_sign_id, params)) return SendClientMessage(playerid, -1, "Введите /signname <номер знака> <описание знака>"); if (strlen(params) > MAX_SIGNS_LABEL_TEXT) return SendClientMessage(playerid, -1, "* слишком больное оисание для знака."); sscanf(params, "s[31]", road_sign[cmd_sign_id][r_label_text]); SetPVarInt(playerid, "road_sign_id", cmd_sign_id); ShowPlayerDialog(playerid, 2, DIALOG_STYLE_LIST, "Обновить цвет?", "{ADD8E6}Цвет 1\n{006400}Цвет 2\n{00FF00}Цвет 3\n{FFFF00}Цвет 4\n{FF6347}Цвет 5\n{FF0000}Цвет 6\n{0000FF}Цвет 7\n{607B8B}Цвет 8", "Выбрать", "Нет"); return 1; } - Это добавим к OnPlayerEditObject, если нету, то
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!).
PHP:if (GetPVarInt(playerid, "road_sign_editor") == 1) { if (response == EDIT_RESPONSE_CANCEL) { SendClientMessage(playerid, -1, "Установка дорожного знака отменена."); DestroyDynamicObject(last_road_sign); last_road_sign -= 1; CancelEdit(playerid); return 1; } if (response == EDIT_RESPONSE_FINAL) { road_sign[last_road_sign][model] = objectid; road_sign[last_road_sign][f_x] = fX; road_sign[last_road_sign][f_y] = fY; road_sign[last_road_sign][f_z] = fZ; road_sign[last_road_sign][f_rx] = fRotX; road_sign[last_road_sign][f_ry] = fRotY; road_sign[last_road_sign][f_rz] = fRotZ; road_sign[last_road_sign][v_world] = GetPlayerVirtualWorld(playerid); ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "Добавить текст", "{FFFFFF}Вы можете добавить описание этому знаку", "Добавить", "Нет"); return 1; } } - Это добавляем в OnDialogResponse, а он то у всех есть :dirol:
PHP:switch(dialogid) { case 0: { if(!response) { SendClientMessage(playerid, -1, "Установка дорожного знака завершена."); CancelEdit(playerid); return 1; } if (sscanf(inputtext, "s[31]", road_sign[last_road_sign][r_label_text])) return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "Добавить текст", "{FFFFFF}Вы можете добавить описание этому знаку", "Добавить", "Нет"); ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Цвет текста", "{ADD8E6}Цвет 1\n{006400}Цвет 2\n{00FF00}Цвет 3\n{FFFF00}Цвет 4\n{FF6347}Цвет 5\n{FF0000}Цвет 6\n{0000FF}Цвет 7\n{607B8B}Цвет 8", "Выбрать", ""); } case 1: { if(!response) { SendClientMessage(playerid, -1, "Установка дорожного знака завершена."); CancelEdit(playerid); return 1; } road_sign[last_road_sign][r_label_text_color] = road_sign_color_text[listitem]; road_sign[last_road_sign][r_label] = CreateDynamic3DTextLabel(road_sign[last_road_sign][r_label_text], road_sign[last_road_sign][r_label_text_color], road_sign[last_road_sign][f_x], road_sign[last_road_sign][f_y], road_sign[last_road_sign][f_z] + 1.5, 50.0, _, _, 0, road_sign[last_road_sign][v_world], 0, _); SendClientMessage(playerid, -1, "Установка дорожного знака завершена."); CancelEdit(playerid); } case 2: { #define ROAD_SIGN_ID GetPVarInt(playerid, "road_sign_id") if(!response) { UpdateDynamic3DTextLabelText(road_sign[ROAD_SIGN_ID][r_label], road_sign[ROAD_SIGN_ID][r_label_text_color], road_sign[ROAD_SIGN_ID][r_label_text]); SendClientMessage(playerid, -1, "Описание дорожного знака обновлено."); DeletePVar(playerid, "road_sign_id"); return 1; } road_sign[ROAD_SIGN_ID][r_label_text_color] = road_sign_color_text[listitem]; UpdateDynamic3DTextLabelText(road_sign[ROAD_SIGN_ID][r_label], road_sign[ROAD_SIGN_ID][r_label_text_color], road_sign[ROAD_SIGN_ID][r_label_text]); SendClientMessage(playerid, road_sign[ROAD_SIGN_ID][r_label_text_color], "Цвет дорожного знака обновлен."); DeletePVar(playerid, "road_sign_id"); #undef ROAD_SIGN_ID } } - А это в OnPlayerConnect
PHP:TD_road_sign_view = CreatePlayerTextDraw(playerid, 462.000000, 251.562500, "LD_SPAC:white"); PlayerTextDrawTextSize(playerid, TD_road_sign_view, 132.000000, 187.687500); PlayerTextDrawUseBox(playerid, TD_road_sign_view, 1); PlayerTextDrawBoxColor(playerid, TD_road_sign_view, 90); PlayerTextDrawFont(playerid, TD_road_sign_view, 5);
Важно: не стал добавлять константы для id диалогов. Ни все в этой жизни ctr + c / v :hang1:
С include пока повременим, как и с FS. Скоро добавлю плюшек :3
Автор: Untonyst
И глаголит Untonystъ истину простую своей рукой и четырьмя персатми, набирающие текст на иноземной неведанной доске всем, чтобы ты, узревшие тему очами зоркими своими, не спрятал свою гордыню и не украл честный труд Untonystъ. Но разрешает он словом своим в личной переписке, что разрешит он скопировать труд Untonystъ на всеобщее обозрение, если тот укажет настоящего автора этой летописи и желательно ссылку на летопись указать, если возможности позволяют. И истина эта проста, да не все с ней справляются.
Последнее редактирование:
