Advertisement
Guest User

AttachEdit Filterscipt

a guest
Jan 26th, 2014
898
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.45 KB | None | 0 0
  1. //AttachEdit FilterScript by ^_^, version 0.1b
  2. //Special for pro-pawn.ru
  3. //Credits to Daniel Cortez for help and DC_CMD plugin.
  4. #include <a_samp>
  5. #tryinclude <dc_cmd>
  6. #if !defined DC_CMD
  7.     #error To use this filterscript you need DC_CMD plugin, you can grab it here: pro-pawn.ru/showthread.php?1028-DC_CMD
  8. #endif
  9.  
  10. enum{
  11.     DLG_ATTACHEDIT_MAIN = 5000,
  12.     DLG_ATTACHEDIT_BEGIN,
  13.     DLG_ATTACHEDIT_OBJECT,
  14.     DLG_ATTACHEDIT_RESET,
  15.     DLG_ATTACHEDIT_SLOT,
  16.     DLG_ATTACHEDIT_BONE,
  17.     DLG_ATTACHEDIT_CLRS,
  18.     DLG_ATTACHEDIT_CLR1,
  19.     DLG_ATTACHEDIT_CLR2,
  20.     DLG_ATTACHEDIT_SAVE,
  21. };
  22.  
  23. enum _objInfo{
  24.     o_mid,
  25.     o_idx,
  26.     o_bone,
  27.     Float:o_X,
  28.     Float:o_Y,
  29.     Float:o_Z,
  30.     Float:o_rX,
  31.     Float:o_rY,
  32.     Float:o_rZ,
  33.     Float:o_sX,
  34.     Float:o_sY,
  35.     Float:o_sZ,
  36.     o_mc1,
  37.     o_mc2
  38. };
  39. static object_info[MAX_PLAYERS][_objInfo];
  40. static bool:editing_object[MAX_PLAYERS char];
  41.  
  42. stock ShowAttachEditMainMenu(playerid)
  43.     return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_MAIN, DIALOG_STYLE_LIST,
  44.                             "Редактор PlayerAttachedObject",
  45.                                 "- Ид обьекта\n"\
  46.                                 "- Слот обьекта\n"\
  47.                                 "- Часть тела\n"\
  48.                                 "- Редактировать параметры обьекта(координаты, ротация, размер)\n"\
  49.                                 "- Цвет обьекта\n"\
  50.                                 "- Сохранить",
  51.                             "Выбрать", "Закрыть");
  52.  
  53. CMD:attachedit(playerid, params[]){
  54.     if(!editing_object{playerid})
  55.         return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_BEGIN, DIALOG_STYLE_MSGBOX,
  56.                                 "Редактор PlayerAttachedObject",
  57.                                     "Вы хотите приступить к редактированию PlayerAttachedObject?",
  58.                                 "Да", "Закрыть");
  59.     return ShowAttachEditMainMenu(playerid);
  60. }
  61.  
  62. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){
  63.     switch(dialogid){
  64.         case DLG_ATTACHEDIT_BEGIN:{
  65.             if(response == 0)
  66.                 return 1;
  67.             editing_object{playerid} = true;
  68.             object_info[playerid][o_mid] = 0;
  69.             object_info[playerid][o_idx] = 0;
  70.             object_info[playerid][o_bone] = 1;
  71.             object_info[playerid][o_X] = 0;
  72.             object_info[playerid][o_Y] = 0;
  73.             object_info[playerid][o_Z] = 0;
  74.             object_info[playerid][o_rX] = 0;
  75.             object_info[playerid][o_rY] = 0;
  76.             object_info[playerid][o_rZ] = 0;
  77.             object_info[playerid][o_sX] = 1;
  78.             object_info[playerid][o_sY] = 1;
  79.             object_info[playerid][o_sZ] = 1;
  80.             object_info[playerid][o_mc1] = 0;
  81.             object_info[playerid][o_mc2] = 0;
  82.             return ShowAttachEditMainMenu(playerid);
  83.         }
  84.         case DLG_ATTACHEDIT_MAIN:{
  85.             if(response == 0)
  86.                 return 1;
  87.             switch(listitem){
  88.                 case 0:
  89.                     return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_OBJECT, DIALOG_STYLE_INPUT,
  90.                                             "Ид обьекта", "Введите действительный ид обьекта:", "Выбрать", "Закрыть");
  91.                 case 1:
  92.                     return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_SLOT, DIALOG_STYLE_INPUT,
  93.                                             "Ид слота",
  94.                                                 "Введите ид слота для данного обьекта - от 0 до 9 \n"\
  95.                                                 "(на данном слоте должен быть прикриплён только один предмет)",
  96.                                             "Ввод", "Закрыть");
  97.                 case 2:
  98.                     return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_BONE, DIALOG_STYLE_LIST,
  99.                                             "Ид части тела",
  100.                                                 "1 - Спина\n"\
  101.                                                 "2 - Голова\n"\
  102.                                                 "3 - Плечо левой руки\n"\
  103.                                                 "4 - Плечо правой руки\n"\
  104.                                                 "5 - Левая рука\n"\
  105.                                                 "6 - Правая рука\n"\
  106.                                                 "7 - Левое бедро\n"\
  107.                                                 "8 - Правое бедро\n"\
  108.                                                 "9 - Левая нога\n"\
  109.                                                 "10 - Правая нога\n"\
  110.                                                 "11 - Правые икры\n"\
  111.                                                 "12 - Левые икры\n"\
  112.                                                 "13 - Левое предплечье\n"\
  113.                                                 "14 - Правое предплечье\n"\
  114.                                                 "15 - Левая ключица\n"\
  115.                                                 "16 - Правая ключица\n"\
  116.                                                 "17 - Шея\n"\
  117.                                                 "18 - Челюсть",
  118.                                             "Ввод", "Закрыть");
  119.                 case 3:
  120.                     if(object_info[playerid][o_mid])
  121.                         return EditAttachedObject(playerid, object_info[playerid][o_idx]);
  122.                     else
  123.                         return SendClientMessage(playerid, -1, "{E82E2E} Сперва нужно указать ID обьекта");
  124.                 case 4:
  125.                     return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_CLRS, DIALOG_STYLE_LIST,
  126.                                             "Цвета обьекта", "- Цвет 1\n- Цвет 2", "Выбрать", "Закрыть");
  127.                 case 5:
  128.                     if(object_info[playerid][o_mid])
  129.                         return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_SAVE, DIALOG_STYLE_INPUT,
  130.                                                 "Сохранение",
  131.                                                     "Введите название файла в котором будут сохранены параметры обьекта:",
  132.                                                 "Ввод", "Назад");
  133.                     else
  134.                         return SendClientMessage(playerid, -1, "{E82E2E} Нет обьекта для сохранения.");
  135.             }
  136.         }
  137.         case DLG_ATTACHEDIT_OBJECT:{
  138.             if(response){
  139.                 #define oI object_info[playerid]
  140.                 SetPlayerAttachedObject(playerid, oI[o_idx], oI[o_mid] = strval(inputtext), oI[o_bone],
  141.                                         oI[o_X], oI[o_Y], oI[o_Z], oI[o_rX], oI[o_rY], oI[o_rZ], oI[o_sX], oI[o_sY], oI[o_sZ],
  142.                                         oI[o_mc1], oI[o_mc2]);
  143.                 if(oI[o_mid])
  144.                     return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_RESET, DIALOG_STYLE_MSGBOX,
  145.                                             "Ид обьекта", "Хотите удалить параметры предыдущего обьекта?", "Да", "Нет");
  146.                 return ShowAttachEditMainMenu(playerid);
  147.                 #undef oI
  148.             }
  149.             return ShowAttachEditMainMenu(playerid);
  150.         }
  151.         case DLG_ATTACHEDIT_RESET:{
  152.             if(response)
  153.                 SetPlayerAttachedMObject(playerid, _, _, _, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0);
  154.             return ShowAttachEditMainMenu(playerid);
  155.         }
  156.         case DLG_ATTACHEDIT_SLOT:{
  157.             if(response){
  158.                 new slot = strval(inputtext);
  159.                 if(!(1 <= slot <= 9))
  160.                     return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_SLOT, DIALOG_STYLE_INPUT,
  161.                                             "Ид слота",
  162.                                                 "Введите ид слота для данного обьекта - от 0 до 9 "\
  163.                                                 "(на данном слоте должен быть прикриплён только один предмет)",
  164.                                             "Ввод", "Закрыть");
  165.                 SetPlayerAttachedMObject(playerid, slot);
  166.                 return ShowAttachEditMainMenu(playerid);
  167.             }
  168.         }
  169.         case DLG_ATTACHEDIT_BONE:{
  170.             if(response)
  171.                 SetPlayerAttachedMObject(playerid, _, _, listitem+1);
  172.             return ShowAttachEditMainMenu(playerid);
  173.         }
  174.         case DLG_ATTACHEDIT_CLRS:{
  175.             if(response){
  176.                 if(listitem == 0)
  177.                     return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_CLR1, DIALOG_STYLE_INPUT, "Цвет 1", "Введите первый цвет обьетка (формат ARGB):", "Ввод", "Закрыть");
  178.                 return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_CLR2, DIALOG_STYLE_INPUT, "Цвет 2", "Введите второй цвет обьетка (формат ARGB):", "Ввод", "Закрыть");
  179.             }
  180.            
  181.         }
  182.         case DLG_ATTACHEDIT_CLR1:{
  183.             if(response)
  184.                 SetPlayerAttachedMObject(playerid, _, _, _, _, _, _, _, _, _, _, _, _, HexToInt(inputtext), _);
  185.             return ShowAttachEditMainMenu(playerid);
  186.         }
  187.         case DLG_ATTACHEDIT_CLR2:{
  188.             if(response)
  189.                 SetPlayerAttachedMObject(playerid, _, _, _, _, _, _, _, _, _, _, _, _, _, HexToInt(inputtext));
  190.             return ShowAttachEditMainMenu(playerid);
  191.         }
  192.         case DLG_ATTACHEDIT_SAVE:{
  193.             new File:tmp, string[512], buffer[128];
  194.             static const str_postfix[] = ".txt";
  195.             if(strlen(inputtext) > sizeof(buffer)-sizeof(str_postfix))
  196.                 return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_SAVE, DIALOG_STYLE_INPUT,
  197.                         "Сохранение",
  198.                         "Слишком длиное название файла.\n"\
  199.                         "Введите другое название файла в котором будут сохранены параметры обьекта:",
  200.                         "Ввод", "Назад");
  201.             format(buffer, sizeof(buffer), "%s%s", inputtext, str_postfix);
  202.             if(fexist(buffer))
  203.                 return ShowPlayerDialog(playerid, DLG_ATTACHEDIT_SAVE, DIALOG_STYLE_INPUT,
  204.                                         "Сохранение",
  205.                                             "Файл уже используется!\n"\
  206.                                             "Введите другое название файла в котором будут сохранены параметры обьекта:",
  207.                                         "Ввод", "Назад");
  208.             tmp = fopen(buffer, io_write);
  209.             fclose(tmp);
  210.             tmp = fopen(buffer, io_append);
  211.             #define oI  object_info[playerid]
  212.             format(string, sizeof(string),
  213.                     "SetPlayerAttachedObject(playerid, %d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %f, %d, %d);\r\n",
  214.                     oI[o_idx], oI[o_mid], oI[o_bone],
  215.                     oI[o_X], oI[o_Y], oI[o_Z], oI[o_rX], oI[o_rY], oI[o_rZ], oI[o_sX], oI[o_sY], oI[o_sZ],
  216.                     oI[o_mc1], oI[o_mc2]);
  217.             #undef  oI
  218.             fwrite(tmp, string);
  219.             fclose(tmp);
  220.             return SendClientMessage(playerid, 0xF0F0F0FF, "Позиция сохранена.");
  221.         }
  222.     }
  223.     return 0;
  224. }
  225.  
  226. SetPlayerAttachedMObject(   playerid, index = -1, modelid = -1, bone = -1,
  227.                             Float:fOffsetX = -50.0, Float:fOffsetY = -50.0, Float:fOffsetZ = -50.0,
  228.                             Float:fRotX = -50.0, Float:fRotY = -50.0, Float:fRotZ = -50.0,
  229.                             Float:fScaleX = -50.0, Float:fScaleY = -50.0, Float:fScaleZ = -50.0,
  230.                             materialcolor1 = -1, materialcolor2 = -1){
  231.     #define oI object_info[playerid]
  232.     if(modelid != -1) oI[o_mid] = modelid;
  233.     RemovePlayerAttachedObject(playerid, object_info[playerid][o_idx]);
  234.     if(index != -1) oI[o_idx] = index;
  235.     if(bone != -1) oI[o_bone] = bone;
  236.     if(fOffsetX != -50.0) oI[o_X] = fOffsetX;
  237.     if(fOffsetY != -50.0) oI[o_Y] = fOffsetY;
  238.     if(fOffsetZ != -50.0)oI[o_Z] = fOffsetZ;
  239.     if(fRotX != -50.0) oI[o_rX] = fRotX;
  240.     if(fRotY != -50.0) oI[o_rY] = fRotY;
  241.     if(fRotZ != -50.0) oI[o_rZ] = fRotZ;
  242.     if(fScaleX != -50.0) oI[o_sX] = fScaleX;
  243.     if(fScaleY != -50.0) oI[o_sY] = fScaleY;
  244.     if(fScaleZ != -50.0) oI[o_sZ] = fScaleZ;
  245.     if(materialcolor1 != -1) oI[o_mc1] = materialcolor1;
  246.     if(materialcolor2 != -1) oI[o_mc2] = materialcolor2;
  247.     return SetPlayerAttachedObject( playerid, oI[o_idx], oI[o_mid], oI[o_bone],
  248.                                     oI[o_X], oI[o_Y], oI[o_Z], oI[o_rX], oI[o_rY], oI[o_rZ], oI[o_sX], oI[o_sY], oI[o_sZ],
  249.                                     oI[o_mc1], oI[o_mc2]);
  250.     #undef oI
  251. }
  252. public OnPlayerEditAttachedObject(  playerid, response, index, modelid, boneid,
  253.                                     Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ,
  254.                                     Float:fRotX, Float:fRotY, Float:fRotZ,
  255.                                     Float:fScaleX, Float:fScaleY, Float:fScaleZ){
  256.     if(response){
  257.         SendClientMessage(playerid, -1, "{3DDB7A} Параметры обьекта успешно обновлены.");
  258.         SetPlayerAttachedMObject(playerid, _, _, _, fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, fScaleX, fScaleY, fScaleZ);
  259.     }
  260.     else{
  261.         SendClientMessage(playerid, -1, "{E82E2E} Отмена, параметры обьекта не изменены.");
  262.         SetPlayerAttachedMObject(playerid, 0);
  263.     }
  264.     return ShowAttachEditMainMenu(playerid);
  265. }
  266.  
  267. public OnFilterScriptExit()
  268.     for(new i; i <= GetMaxPlayers()-1; i++)
  269.         for(new j; j <= MAX_PLAYER_ATTACHED_OBJECTS; j++)
  270.             RemovePlayerAttachedObject(i, j);
  271.  
  272. HexToInt(string[]){
  273.     if(string[0]==0)
  274.         return 0;
  275.     new i;
  276.     new cur=1;
  277.     new res=0;
  278.     for(i=strlen(string);i>0;i--){
  279.         if(string[i-1]<58)
  280.             res=res+cur*(string[i-1]-48);
  281.         else
  282.             res=res+cur*(string[i-1]-65+10);
  283.         cur=cur*16;
  284.     }
  285.     return res;
  286.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement