Daniil Korochansky

Разрабатываю IDE для скриптеров серверов SAMP

В теме 30 сообщений

Здравствуйте. Я заметил что нет нормальных полноценных IDE для Pawn, большинство IDE какие-то багованнные, выскакивают разнообразные ошибки, в "Extreme Studio" к примеру. А в Pawno работать не удобно и в нём довольно скудный функционал. Ну вот.

 

Вот, сейчас я разрабатываю IDE которое называется "Spawn"(Samp pawn), которое потом будет много раз тестироваться, чтобы минимизировать самые разные ошибки если они будут. Когда будет закончена основа IDE, программа будет разрабатывать по предпочтениям пользователей/скриптеров, чтобы они хотели увидеть в программе, а там я уже буду решать реально ли требуется это программе или нет.

Главная цель программы по максимуму упростить разработку серверов SAMP.

Также программа будет как для Windows так и для Linux.

Распространяться будет по лицензии GPL с закрытым исходным кодом. 

 

Я немного опишу что можно будет делать в в программе, что уже реализовано и что хочу сделать:

 - Уже закончена работа над графической частью с которой взаимодействует пользователь(Меню, панель инструментов, диалог настроек, редактор и т. д.)

- Реализована подсветка синтаксиса Pawn

- Файлы будут открываться в вкладках редактора

- Реализована "Карта документа (Document map)" в правой стороне редактора с которой можно взаимодействовать(прямо как Sublime Text)(В настройках можно будет скрыть)

- Автоматическое закрытие скобок -> {}() ""

- Подсветка скобок которые взаимосвязаны между собой, на которые указал пользователь курсором.(Настраивается)

- Будет реализованы подсказки вызова(Call Tips) и авто-дополнение кода.

- Реализована настройка подсветки языка и настройка шрифта

- Live templates(Живые шаблоны)

- Поддержка компиляторов от SAMP Team, Zeex и модификацией Zeex(которая на удивление очень быстро компилирует исходники) и конечно же переключение между ними

И многое другое. 

 

Есть сообщество Spawn, там можно найти так называемую статью "Roadmap"(или Карта разработки) которая регулярно обновляется, там так же отмечается что уже закончено.

Сообщество: https://vk.com/spawnsoftware

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скриншотиков бы... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6254244f2470c_.png.8633c8922edc605a1b26444d261d5ba2.png@DEST Лови скриншот :) 

Отредактировано пользователем Daniil Korochansky
Причина: Добавил скриншот

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
35 минут назад, Daniil Korochansky сказал:

6254244f2470c_.png.8633c8922edc605a1b26444d261d5ba2.png@DEST Лови скриншот :) 

Баганулось немного, исправлю, новый скриншот опубликую

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@DEST Лови ещё один :) Доделал карту. Теперь она реально как  в Sublime Text62546722d951d_.png.40bf43fd0c624aa08df6f0d2968efe60.png

Отредактировано пользователем Daniil Korochansky
Причина: Небольшие поправки в тексте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разочарован в отсутствии опен сурса

Отредактировано пользователем user408337

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@user408337 Это временно. Да, пока идёт разработка программы исходники будут закрыты даже когда будут выходить первые версии. Как только работа над программой будет закончена, исходники буду опубликованы в мой GitHub репозиторий. Но лицензия не измениться(GPL).

Отредактировано пользователем Daniil Korochansky
Причина: Поправился в тексте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неплохо :bravo:, желаю удачи в разработке! :)

А на чем кстати пишете? На каком ЯП? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@DEST 

7 часов назад, DEST сказал:

Неплохо :bravo:, желаю удачи в разработке! :)

А на чем кстати пишете? На каком ЯП? 

Python

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я решил пока убрать Document Map из за ресурсоёмкости и багованности.

Для решения проблем с Document Map потребуется много времени что совсем замедлит разработку, поэтому я решил оставить работу над Document Map на какое-то время.

В первой версии программы, Document Map скорее всего не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Голосуем за то что хотите увидеть в Spawn'e и что не хотите. Просто нужно ответить на мои опросы. PS. Опросы не ограничены по времени.

Опросы: https://vk.com/makespawnbetter

625562b6cb39c_.png.fe3ebbbace930151b2fa08ab5be7bab5.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@DEST Добавил обозначение изменённых строк;)

status1.png.6a64059cceb4bbf25a78413678ada4a0.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Перешёл с Python на C++. Программа теперь на ЯП C++

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хочу редактор-компилятор pawn для андроид) а на ПК пока Vs code или notepad++ устраивает. В любом случае успехов в разработке)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Danich, зачем? Прежде всего это огромная нагрузка на глаза и, к тому же, горы не свернете, работая с мобильных устройств (или не с мобильных, если у вас ОС Android установлена в каком-нибудь умном холодильнике :bk:). 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Писать какие-нибудь скрипты в телефоне с автозаполнением удобно почему не)) я щас пишу на форум с телефона, и меня устраивает) некоторые скрипты просты в написании (да большинство), но на них все равно требуется время, и если это время можно было заполнить например в дороге, без тяжеловесного портативного или не сидя дома за компом - то это было бы что-то новое, что самп с павном ещё не видал) но это только моё желание)) возможно это можно реализовать если заморочиться. Ещё лучше если заморочился бы какой-нибудь другой программист) 

Сократить потраченное время у людей- то для чего программирование было придумано мне кажеца)) но в любом случае по поводу темы данного поста - удачи со sPawn. + За опенсорс))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@Danich Как по мне Pawno-редактор на устройство телефон Android, не лучшая идея. 1.Ты не сможешь так быстро писать код, как на ПК. 2. Ты не сможешь быстро решить ошибки в написании кода, и протестировать его. 3. Автозаполнение не так сильно решает в написании скрипта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, на ПК удобнее, но на андроиде это что-то новое) в целом ещё одно IDE кроме как для опыта самого разработчика смысла не вижу)) в чем собсна желаю успехов. Вот ещё пару идей: + отображение отдельного списка всех функций в файле, + автозаполнение функций и тех что в соседних подключенных (или открытых) файлов, возможно это уже и имелось ввиду. :bravo:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 18.04.2022 в 20:53, Danich сказал:

Да, на ПК удобнее, но на андроиде это что-то новое) в целом ещё одно IDE кроме как для опыта самого разработчика смысла не вижу)) в чем собсна желаю успехов. Вот ещё пару идей: + отображение отдельного списка всех функций в файле, + автозаполнение функций и тех что в соседних подключенных (или открытых) файлов, возможно это уже и имелось ввиду. :bravo:

;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 18.04.2022 в 20:53, Danich сказал:

Да, на ПК удобнее, но на андроиде это что-то новое) в целом ещё одно IDE кроме как для опыта самого разработчика смысла не вижу)) в чем собсна желаю успехов. Вот ещё пару идей: + отображение отдельного списка всех функций в файле, + автозаполнение функций и тех что в соседних подключенных (или открытых) файлов, возможно это уже и имелось ввиду. :bravo:

Я разрабатываю такую IDE которая позволит ускорить разработку серверов за счёт встроенных инструментов, особых функции и фишек "Spawn" в отличии от других IDE для Pawn. Я думаю такой среды разработки очень не хватает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поменял все иконки. А также исправил баги и вернул карту документа.

Безымянный.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавлены возможности закомментирования и раскомментирования строк, а также скрытие и раскрытие фрагментов кода в скобках. Приложил GIF файл для наглядности.

Анимация2.gif

Отредактировано пользователем Daniil Korochansky
Причина: Забыл уточнить

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выглядит хорошо желаю удачи в разработке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разрабатываю собственную IDE для Pawn. Главная цель ускорить и облегчить написание собственного SAMP сервера.
Будет неплохо если расскажите о проблемах и рутине при написании серверов SAMP.

А также интересно, что ускорило бы написание сервера?

Заметка от Cawfee , создано

Объединил прежнюю тему с новой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • Mister Odin
      От Mister Odin
       
      new
       g_teleport_list[39][E_TELEPORT_LIST] = {  {"Спавн пгт.Батырево", 1802.3612, 2508.4824, 15.8887},  {"Спавн г.Арзамас", -113.5887, 977.7222, 12.0346},     {"Спавн г.Южный", 2744.2770, -2446.7246, 21.8988},     {"Центральный банк", 1852.020385,2040.791381,15.892713},  {"Рублёвка", -837.7783, 888.6161, 12.7232},  {"Казино", 1332.4252, 2358.7014, 17.6641},  {"Битва за контейнеры", 614.5167, 1722.3566, 12.0709},  {"Автосалон низкого класса", 2493.9616, -722.9544, 12.3315},  {"Автосалон среднего класса", 1407.7449, 455.4801, 13.1630},  {"Автосалон высокого класса", -14.0637, 2614.5664, 10.9892},   {"Мотосалон Harley Davidson", 785.720153, 750.465087, 12.000024},  {"Автошкола", 1909.174438,2227.679687,15.708162},  {"Военкомат", 1916.778564,2302.411376,15.574637},  {"Правительство области", -139.140975,593.789611,12.145712},  {"Отдел полиции №1 (ГИБДД)", 1906.805786,-2234.382812,11.257631},  {"Отдел полиции №2 (УМВД)", 2581.309326,-2416.139892,21.960090},  {"Отдел ФСБ", 1823.904663,2095.636718,15.848405},  {"Городская больница г.Арзамас", -285.797210,581.851562,12.120290},   {"СМИ", -317.708038,821.221679,13.051450},  {"Воинская часть", 1703.197265,1678.025878,15.279437},  {"Арзамасская ОПГ", 438.705322,1046.505126,12.002637},  {"Батыревская ОПГ", 1941.203857,2161.006591,15.705187},  {"Лыткаринская ОПГ", -2346.002441,75.257041,21.002962},  {"Шахта", 2381.5727, 1726.4451, -2.1506},  {"Завод", -1062.6697, 2204.1894, 38.0964},  {"Инкосация", 1864.1374, 2011.7136, 15.8546},  {"Транспортная Компания", 2362.1115, 1972.5627, 15.5530},  {"База механиков", 1840.918090,-118.025146,15.695312},  {"Курьерская служба доставки", 2764.509765,-2396.882568,21.890625},  {"Аренда автобуса(Южный)", 2771.041992,-2454.780761,21.845964},  {"Аренда автобуса(Арзамас)", -127.487670,943.652648,12.142824},   {"Аренда автобуса(Батырево)", 1798.986328,2529.591552,15.664262},  {"Гоночная трасса", -1568.7784, 1611.8305, 36.3971},  {"Дом на горе", -789.5397, -456.7479, 741.1422},  {"СТО и тюнинг-ателье", 1856.1375, -122.3266, 15.6888},  {"Аренда транспорта пгт.Батырево", 1763.641723,2255.673339,15.865348},  {"Аренда транспорта г.Арзамас", -36.923530,1360.673583,12.002090},  {"Аренда транспорта г.Южный", 1966.599975,-2603.943603,10.820312},  {"Тайный интерьер в Лыткарино", -2424.5818, 2846.3291, 40.7908} };
    • Garnik
      От Garnik
      ERRORS:
      : error 017: undefined symbol "HouseInfo"
      : error 017: undefined symbol "OWNABLEHOUSES"
      : error 029: invalid expression, assumed zero
      : fatal error 107: too many error messages on one line
      ===============================================================================================================
       
       
      ================================================================================================================
      CMD:addhouse(playerid,params[])
      {
              if(PI[playerid][pAdmin] < 10)return false;
              new string[650];
              new house_class, house_price;
              new Float:X, Float:Y, Float:Z, Float:A;
              if(sscanf(params, "ii", house_class,house_price))
              {
                      SendClientMessage(playerid, -1, "???????????: /addhouse [????? ??????] [???? ???????]");
                      SendClientMessage(playerid, -1, "??????: [1 - ??????-?????] [2 - ???????-?????] [3 - ???????-?????] [4 - ???????-?????]");
                      return 1;
              }
              if(house_class > 4 || house_class < 1)
              {
                      SendClientMessage(playerid, -1, "ID ????????? ?? 1 ?? 4");
                      return 1;
              }
              //
              GetPlayerPos(playerid,X,Y,Z);
              GetPlayerFacingAngle(playerid,A);
              HouseInfo[OWNABLEHOUSES][hEnter_X]=X;
              HouseInfo[OWNABLEHOUSES][hEnter_Y]=Y;
              HouseInfo[OWNABLEHOUSES][hEnter_Z]=Z;
              HouseInfo[OWNABLEHOUSES][hEnter_A]=A;
              HouseInfo[OWNABLEHOUSES][hKlass]=house_class;
              HouseInfo[OWNABLEHOUSES][hCost]=house_price;
              string="";
              strmid(HouseInfo[OWNABLEHOUSES][hOwner],"The State",0,strlen("The State"),28);
              format(string, 144, "?? ??????? ??????? ??? ????? {e7e7e7}%d {ffffff}????????? ???????: {e7e7e7}%d",OWNABLEHOUSES+1,HouseInfo[OWNABLEHOUSES][hCost]);
              SendClientMessage(playerid,-1,string);
              //
              string="";
              format(string,1500,"INSERT INTO `houses`(`ID`,`Enter_X`, `Enter_Y`, `Enter_Z`, `Enter_A`,`Exit_X`, `Exit_Y`, `Exit_Z`, `Owner`, `Cost` , `Klass`, `Interior`, `Level`) VALUES ('%d','%.2f','%.2f','%.2f','%.2f','267.1','305','999.148','The State','%d','%d','2','1')",
              OWNABLEHOUSES+1,HouseInfo[OWNABLEHOUSES][hEnter_X],HouseInfo[
              OWNABLEHOUSES][hEnter_Y],HouseInfo[OWNABLEHOUSES][hEnter_Z]
              ,HouseInfo[OWNABLEHOUSES][hEnter_A],HouseInfo[OWNABLEHOUSES]
              [hCost],HouseInfo[OWNABLEHOUSES][hKlass]);
              mysql_tquery(mysql, string);
              OWNABLEHOUSES++;
              return 1;
      }
       0
       Ответить
    • Garnik
      От Garnik
      ERRORS:
      : error 017: undefined symbol "HouseInfo"
      : error 017: undefined symbol "OWNABLEHOUSES"
      : error 029: invalid expression, assumed zero
      : fatal error 107: too many error messages on one line
      ===============================================================================================================
       
       
      ================================================================================================================
      CMD:addhouse(playerid,params[])
      {
              if(PI[playerid][pAdmin] < 10)return false;
              new string[650];
              new house_class, house_price;
              new Float:X, Float:Y, Float:Z, Float:A;
              if(sscanf(params, "ii", house_class,house_price))
              {
                      SendClientMessage(playerid, -1, "???????????: /addhouse [????? ??????] [???? ???????]");
                      SendClientMessage(playerid, -1, "??????: [1 - ??????-?????] [2 - ???????-?????] [3 - ???????-?????] [4 - ???????-?????]");
                      return 1;
              }
              if(house_class > 4 || house_class < 1)
              {
                      SendClientMessage(playerid, -1, "ID ????????? ?? 1 ?? 4");
                      return 1;
              }
              //
              GetPlayerPos(playerid,X,Y,Z);
              GetPlayerFacingAngle(playerid,A);
              HouseInfo[OWNABLEHOUSES][hEnter_X]=X;
              HouseInfo[OWNABLEHOUSES][hEnter_Y]=Y;
              HouseInfo[OWNABLEHOUSES][hEnter_Z]=Z;
              HouseInfo[OWNABLEHOUSES][hEnter_A]=A;
              HouseInfo[OWNABLEHOUSES][hKlass]=house_class;
              HouseInfo[OWNABLEHOUSES][hCost]=house_price;
              string="";
              strmid(HouseInfo[OWNABLEHOUSES][hOwner],"The State",0,strlen("The State"),28);
              format(string, 144, "?? ??????? ??????? ??? ????? {e7e7e7}%d {ffffff}????????? ???????: {e7e7e7}%d",OWNABLEHOUSES+1,HouseInfo[OWNABLEHOUSES][hCost]);
              SendClientMessage(playerid,-1,string);
              //
              string="";
              format(string,1500,"INSERT INTO `houses`(`ID`,`Enter_X`, `Enter_Y`, `Enter_Z`, `Enter_A`,`Exit_X`, `Exit_Y`, `Exit_Z`, `Owner`, `Cost` , `Klass`, `Interior`, `Level`) VALUES ('%d','%.2f','%.2f','%.2f','%.2f','267.1','305','999.148','The State','%d','%d','2','1')",
              OWNABLEHOUSES+1,HouseInfo[OWNABLEHOUSES][hEnter_X],HouseInfo[
              OWNABLEHOUSES][hEnter_Y],HouseInfo[OWNABLEHOUSES][hEnter_Z]
              ,HouseInfo[OWNABLEHOUSES][hEnter_A],HouseInfo[OWNABLEHOUSES]
              [hCost],HouseInfo[OWNABLEHOUSES][hKlass]);
              mysql_tquery(mysql, string);
              OWNABLEHOUSES++;
              return 1;
      }
    • Garnik
      От Garnik
      ERRORS:
      : error 017: undefined symbol "HouseInfo"
      : error 017: undefined symbol "OWNABLEHOUSES"
      : error 029: invalid expression, assumed zero
      : fatal error 107: too many error messages on one line
      ===============================================================================================================
       
       
      ================================================================================================================
      CMD:addhouse(playerid,params[])
      {
              if(PI[playerid][pAdmin] < 10)return false;
              new string[650];
              new house_class, house_price;
              new Float:X, Float:Y, Float:Z, Float:A;
              if(sscanf(params, "ii", house_class,house_price))
              {
                      SendClientMessage(playerid, -1, "???????????: /addhouse [????? ??????] [???? ???????]");
                      SendClientMessage(playerid, -1, "??????: [1 - ??????-?????] [2 - ???????-?????] [3 - ???????-?????] [4 - ???????-?????]");
                      return 1;
              }
              if(house_class > 4 || house_class < 1)
              {
                      SendClientMessage(playerid, -1, "ID ????????? ?? 1 ?? 4");
                      return 1;
              }
              //
              GetPlayerPos(playerid,X,Y,Z);
              GetPlayerFacingAngle(playerid,A);
              HouseInfo[OWNABLEHOUSES][hEnter_X]=X;
              HouseInfo[OWNABLEHOUSES][hEnter_Y]=Y;
              HouseInfo[OWNABLEHOUSES][hEnter_Z]=Z;
              HouseInfo[OWNABLEHOUSES][hEnter_A]=A;
              HouseInfo[OWNABLEHOUSES][hKlass]=house_class;
              HouseInfo[OWNABLEHOUSES][hCost]=house_price;
              string="";
              strmid(HouseInfo[OWNABLEHOUSES][hOwner],"The State",0,strlen("The State"),28);
              format(string, 144, "?? ??????? ??????? ??? ????? {e7e7e7}%d {ffffff}????????? ???????: {e7e7e7}%d",OWNABLEHOUSES+1,HouseInfo[OWNABLEHOUSES][hCost]);
              SendClientMessage(playerid,-1,string);
              //
              string="";
              format(string,1500,"INSERT INTO `houses`(`ID`,`Enter_X`, `Enter_Y`, `Enter_Z`, `Enter_A`,`Exit_X`, `Exit_Y`, `Exit_Z`, `Owner`, `Cost` , `Klass`, `Interior`, `Level`) VALUES ('%d','%.2f','%.2f','%.2f','%.2f','267.1','305','999.148','The State','%d','%d','2','1')",
              OWNABLEHOUSES+1,HouseInfo[OWNABLEHOUSES][hEnter_X],HouseInfo[
              OWNABLEHOUSES][hEnter_Y],HouseInfo[OWNABLEHOUSES][hEnter_Z]
              ,HouseInfo[OWNABLEHOUSES][hEnter_A],HouseInfo[OWNABLEHOUSES]
              [hCost],HouseInfo[OWNABLEHOUSES][hKlass]);
              mysql_tquery(mysql, string);
              OWNABLEHOUSES++;
              return 1;
      }
    • Danya_Lucky
      От Danya_Lucky
      CMD:car(playerid, params[])
      {
          new fmt_text[2640], Cache: result, id;
          mysql_format(mysql, fmt_text, sizeof fmt_text, "SELECT * FROM ownable_cars WHERE owner_id='%d'", GetPlayerAccountID(playerid));
          result = mysql_query(mysql, fmt_text, true);
          new rows = cache_num_rows();
          if(!rows) return SendClientMessage(playerid, 0x999999FF, "У Вас нет личного транспорта");
          new model_id, region[10], car_number[10];
          format(fmt_text, sizeof fmt_text, "");
          for(new i = 0; i < rows; i ++)
          {
              id = cache_get_field_content_int(i, "id");
              model_id = cache_get_field_content_int(i, "model_id") - 400;
              cache_get_field_content(i, "number", car_number);
              cache_get_field_content(i, "region", region);
              STRING_GLOBAL[0] = EOS;
              format(STRING_GLOBAL, sizeof STRING_GLOBAL, "{FFFFFF}%d. %s {888888}[%s | %s]\n", i + 1, GetVehicleInfo(model_id, VI_NAME), car_number, region);
              strcat(fmt_text, STRING_GLOBAL);
              SetPlayerListitemValue(playerid, i, id);
          }
          Dialog(playerid, DIALOG_OWNABLE_CAR_LIST, DIALOG_STYLE_LIST,"{0099FF}Выберите транспорт",fmt_text,"Выбрать", "Закрыть");
          cache_delete(result);
          return 1;
      }