Stealth 9.3 Release

Post Reply
User avatar
Vizit0r
Developer
Developer
Posts: 3959
Joined: 24.03.2005 17:05
Contact:

Stealth 9.3 Release

Post by Vizit0r »

Писать много, потому пишу только на русском.
Короткий changelog
+ Added "BandageSelf" method to external Scripts / Добавлен метод "BandageSelf" во внешние скрипты
+ Added new very powerful internal script engine - DWS. Lape script engine removed fully. Read full update log for more info / Добавлен новый, очень мощный встроенный скриптовый движок - DWS. Больше подробностей в полном логе изменений
- Lape script engine fully removed - cannot fix critical things, and Lape author dont want to participate / Lape скриптовый движок полностью убран<br>
* Stealth Editor - BIG work done. Editor memo, tabs - fully changed. Find in text + find in files - written from zero. Read full update log for more info / Проделана большая работа с редактором - новое поле редакторирования, новые вкладки, новые поиск в тексте и в файлах. Больше подробностей в полном логе изменений
* Stealth window, World tab - TreeView fully changed, works good and fast. Set as default mode. / Главное окно Стелса, вкладка World - окно с древовидным показом айтемов - переделано, работает хорошо. Выставлено по умолчанию.
+ Internal script changes: Object\Types names collections - PS&DWS, Object\Types params can be string - for all script methods, who using IDs or\and types - DWS only, "oldstyle" script methods overloads - DWS only, mover callback - DWS only, etc. Read full update log for more info/ Изменения в скриптах: добавлены коллекции имен для Object\Types - PS&DWS, Object\Types параметры могут быть строками - для всех скриптовых методов, где есть ID и\или Types) - только DWS, скриптовые методы с "плохим" (старым) форматом - сделаны дублирующие функции - только DWS, функция коллбека в мувере - только DWS, и прочее, прочее. Больше подробностей в полном логе изменений
* fixes in Python scripts - incorrect method numbers, missing methods / Исправления в Python скриптах - неправильные номера методов, отсутствующие методы<br>
* Outland shard encryption fixed. / Поправлено измененное шифрование шарда Outlands.
* Few fixes in Object cacher / Несколько исправлений в кешере объектов
Теперь подробнее.
* A lot of Changes and fixes here and there / Много изменений и исправлений
- MacOS Stealth temporary removed, will do it in next version - need to update, Delphi, VM with MacOS, etc. - have no time for this right now / MacOS Stealth временно убран, будет доступен в следующей версии - нужно обновить Delphi, VM и кучу прочего, нет времени<br>

1) DWS. Очень мощный Pascal скриптовый движок. Умеет практически все из современного, включая лямбды, type helpers и все такое. Конечно же классы, methods overloads, namespaces, и прочее, прочее. Подробности будут потом в статьях на сайте, кому интересно уже сейчас - изучать тесты с DWS репы - тут. Впрочем, самое интересное описал ниже.
Специально для стелса я сделал совершенно всеядный AddToSystemJournal. Любое количество параметров, любой тип параметров - принимается всё, склеится в строку и выдаст в sysjournal.

Очень вкратце кусками кода:

Code: Select all

TTestClass = class
class var z : Word;
ffff : byte;
constructor Create (aa : Byte);
begin
  ffff := aa;
end;
end;

var cl: TTestClass;

TTestClass.z := 654;
cl := TTestClass.Create(5);
AddToSystemJournal(cl);

Code: Select all

AddToSystemJournal(StealthInfo());

Code: Select all

AddToSystemJournal('FindDistance=',FindDistance);

Code: Select all

var GI : TGumpInfo;

GetGumpInfo(0,GI);
AddToSystemJournal('GI=',GI);

Code: Select all

var fs : TTileDataFlagSet;

fs := [tsfTranslucent, tsfWall,tlfPrefixAn];
AddToSystemJournal(fs);

Code: Select all

AddToSystemJournal(ViberMessenger);

Code: Select all

var arr : array of String;

  arr := GlobalChatChannelsList;
  AddToSystemJournal(arr);

Code: Select all

var xz : array[0..4] of Word = [-1,-1, 9, 8, 7];

  AddToSystemJournal(xz);
и так далее.

задавание значений переменных при обьявлении, обьявление переменных в любом месте в коде (НО! переменные, обьявленные НЕ в секции var - будут не видны при отладке скрипта, на выполнение скрипта не влияет.), куча "магических методов", например методы для массивов типа

Code: Select all

var
     dynarr : array of String = ['tt1','tt2','tt3'];
     dynarr22 : array of String;
     gg : Integer;
     PP : Boolean;

  dynarr22 := ['tt3','tt2','tt1'];
  dynarr22 := dynarr.Copy();
  AddToSystemJournal(dynarr22);
  gg := dynarr.IndexOf('tt2');
  AddToSystemJournal(gg);
  PP := dynarr.Contains('tt2');
  AddToSystemJournal(PP);
  AddToSystemJournal(dynarr.length);

сортировка, да куча там всего.

Type&Class Helpers, как встроенные так и свободно создаваемые скриптописателем.
Например,

Code: Select all

var
  a : String;
  i : Integer;

i := DaysBetween(Now, IncWeek(Now,1));
a := i.tostring;
Примеры создания хелперов в скрипте - в папке DWS\Test (конкретно в этом случае - HelpersPass\record_array_helper.pas)

Все magic методы и хелперы, так же как и методы-свойства классов и поля для records - показываются в Code Completion окне при нажатии точки после переменной (если в настройках стелса выбран DWS).


Operators overload, case по обому простому типу (Integer, Float, Boolean, String), enumerations - по массивам и т.д., overload + overrides, for...in, c-like операторы типа " i *= 2; ", лямбды (анонимные методы) и куча прочего.

Фанатам JSON будет легко и приятно:

Code: Select all

var Oggetto := JSON.NewObject;
Oggetto.Dati := JSON.Parse('{"Campo":{"IDValue":5}}');
AddToSystemJournal(Oggetto);

var v := JSON.Parse('{"hello":"world","one":1,"half":0.5,"yes":true,"no":false}');
Вобщем, очень много чего.






2)Редактор. Помимо описанного в кратком списке, сделана мощная связка с DWS. Это дает:
- компиляция на ходу - показ ошибок уже при написании кода
- прыжки по коду (к декларации переменной, класса и т.д. и обратно)
- новое окно Code Completion (то, что вызывается по Ctrl+Space, точкой или из меню) - показывает все возможные варианты от DWS, включая "магические" методы массивов, методы для типов от type helpers, методы и пропы класса, и прочее, прочее.
- при отладке показ "рабочих" строк кода (зелеными точками слева), сразу понятно куда можно ставить бряки (break points), а куда - бесполезно.
Редактор виндового стелса и FMX (Linux, MacOs и пр.) теперь почти идентичны, что сильно упрощает работу с разными платформами.
Переделано меню, и обычное, и всплывающие по правому клику.

3) По скриптам:
- в PS и в DWS прокинуты из стелса обьекты ObjectsCollection и TypesCollection.


Их вид такой:

TTypePair = record Key : String; Value : Word; end;
TTypePairs = array of TTypePair;

TNamesCollection<T> = class
public
Dict : TDictionary<String, T>;
property Items[Name : String]: T; default;
published
procedure Remove(Name : String);
function Contains(Name : String) : Boolean;
procedure Clear;
function ToArray : TArray<TPair<String, T>>;
procedure FromArray(AItems : TArray<TPair<String, T>>);
function Count : Integer;
end;

TObjectsCollection = class(TNamesCollection<Cardinal>)
public
procedure Add(Name : String; Value : Cardinal); override;
end;

TTypesCollection = class(TNamesCollection<Word>)
public
procedure Add(Name : String; Value : Word); override;
end;


пример:

Code: Select all

ObjectsCollection.Add('sss',$ABCDEF);     //PS & DWS
UseObject('sss');                                      //DWS only
UseObject(ObjectsCollection.Items['sss']); //PS & DWS
ObjectsCollection создавать НЕ нужно, он уже готов к использованию. Тем более его не нужно освобождать!

- overload методы в DWS:
function GetIgnoreList : TArray<Cardinal>;
function GetGumpTextLines (GumpIndex : Word) : TArray<String>;
function GetGumpFullLines(GumpIndex : Word) : TArray<String>;
function GetGumpShortLines(GumpIndex : Word) : TArray<String>;
function GetGumpButtonsDescription(GumpIndex : Word) : TArray<String>;
function GetShopList: TArray<String>;
function GetContextMenu: TArray<String>;
function PartyMembersList: TArray<Cardinal>;
function GetMenuItems: TArray<String>;
function GetLastMenuItems: TArray<String>;
function GetMultis: TArray<TMultiItem>;
function GlobalChatChannelsList: TArray<String>;
function HTTP_Post(URL : String; PostData : String) : String;


Methods MoveXY, newMoveXY, MoveXYZ in DWS have new last optional param - "StepCallback : TMoverStepCallBack = nil"
where
TMoverStepCallBack = function (PresentX : Word, PresentY : Word, PresentZ : ShortInt) : Boolean;
calling on EACH step with PRESENT char position, not predicted. If need to stop - set Result to False.


- дефайны в PS и DWS для совместимых скриптов
Пример:

Code: Select all

  {$IFDEF DWSCRIPT}
  AddToSystemJournal(GlobalChatChannelsList);
  {$ELSE}
  TL := TStringList.Create;
  GlobalChatChannelsList(TL);
  if TL.Count > 0 then
    for i := 0 to TL.Count - 1 do
      AddToSystemJournal(TL[i]);
  TL.Free;
  {$ENDIF}
НАСТОЯТЕЛЬНО РЕКОМЕНДУЮ ПРОВЕРИТЬ ВАШИ СКРИПТЫ НА РАБОТУ В DWS!!! В будущем, ориентировочно версии с 10, планируется постепенный переход на DWS, с тем чтобы оставить PS "невидимым" - только для запуска скомпилированных PS скриптов. Будет это не скоро и очень плавно, но тем не менее.
DWS должен быть почти полностью совместимым с PS (кроме чуть более строгого синтаксиса касательно ; в конце строк, где оно надо), поэтому все найденные отличия я убираю.
Так что проверяйте свои скрипты в DWS , если что-то не так - пишите мне в Дискорд, не стесняйтесь.


P.S.
Кто использует шарды с ShardType, отличающимся от Default - вы получите сообщение в духе "проверьте Shard settings" - их действительно надо глянуть, есть шанс для некоторых типов шардов, что слетит.

P.P.S. Официально подтверждаю, что в стелсе есть ошибка, точнее повреждение памяти. Если найдется тот, кто сможет повторить ошибку по желанию - пишите. Я гонял 20 чаров под большой нагрузкой 4 дня, и на x86 стелсе, и на x64 - ошибки не было ни разу, притом что у хозяина чаров ошибка вылетала часов за несколько. Почему у меня не повторяется - вопрос вопросов.



И да, присланные ошибки из 9.2 не буду смотреть вообще, потому что поменялось столько всего, что старые ошибки просто неприменимы к текущему коду.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply