Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

список добавленных возможностей в Stealth 3.0.0

Locked
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

список добавленных возможностей в Stealth 3.0.0

Post by Vizit0r »

изменения (свожу воедино с трех топиков):


------------------------------------------------------------------------------------

Code: Select all

function BPCount : Word; 
function BMCount : Word; 
function GACount : Word; 
function GSCount : Word; 
function MRCount : Word; 
function NSCount : Word; 
function SACount : Word; 
function SSCount : Word;
возвращает значение соотв. реагента

---------

Code: Select all

function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string;
для тонких ценителей :)

----------------

в результате работы функций WaitJournalLine, InJournal, и им подобных функций при удачном нахождении заполняются поля типа LineID, LineType, LineTime и прочие.
к ним добавил FoundedParamID.
например в поиск дается строка типа 'create|make|destroy|already'
обнаружена строка со словом destroy.
тогда в FoundedParamID будет число 2 (счет от нуля).
нашлось бы create - было бы ноль.
WladL wrote:нужно для случаев когда на вход подается конструкция типа 'success|fizzle|ccc|ddd' и хочется знать что именно поймалось.
----------

добавил обработчик для новомодной консольного ввода текста (зачем было добавлять новый пакет, когда есть старый почти такой же? незнаю).
обзывается Код:
procedure ConsoleEntryUnicodeReply(Text : String);


это уже ловушка полноценная - можно ставить как до прихода запроса, так и после.

заодно исправил ConsoleEntryReply - теперь это тоже полноценная ловушка.

----------
WladL wrote:Есть ли возможность из скрипта повесить чекбокс "Pause scripts on disconnect" ? Если нет то неплохо было бы таковую иметь, а еще лучше перевести остановку скриптов во встроенную "Фичу" с возможностью исполнять их при дисконнекте типа RunScriptsOnDiconnect(true);
готово.

Code: Select all

procedure SetPauseScriptOnDisconnectStatus(Value : Boolean);
function GetPauseScriptOnDisconnectStatus : Boolean;
обьяснять нечего.

---------

драг-дроп откатился на времена RC3 (т.е. без проверок, как есть)
что ж поделать, если подтверждение перемещения не предусморено протоколом :(

---------

добавил фильтр пакетов, достаточно мощный.

при стандартном фильтре
sDC, D6, сBF 00 09 00 10, 73, 54
лог уменьшается втрое

после меня фильтр полностью переделан CFA, теперь включенный фильтр совершенно не сказывается на скорости работы :)

---------


1) добавлен асевый модуль.
2) переделаны и оптимизированы все мулочиталки (by CFA)
3) переделана кардинально карта (by CFA)
4) переделано ведение логов, больше не будет тормозов и ошибок (by CFA)
5) перепахан почти весь код в поисках и устранении багов (by CFA)
6) много переделок в ходилке и новый поиск пути (by Grundick)
7 ) поигрался со стилями, теперь на XP красивее

-------------

переделал конфиги, теперь есть и автоподключение и автозапуск скриптов

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

------------

впрочем, немного изменил декларацию.
теперь CancelTrade не процедура, а функция, которая возвращает True, если запрос на закрытие трейд-окна ушел, и False, если:
1) трейдов нет вообще
2) TradeNum => GetTradeCount.

Code: Select all

function CancelTrade(TradeNum : Byte) : Boolean;
--------------

Code: Select all

procedure AddGumpIgnoreBySerial(Serial : Cardinal); 
procedure AddGumpIgnoreByID(ID : Cardinal); 
procedure ClearGumpsIgnore;
не дает появиться гампам с заданным серийником или ID

----------
Zeppelin wrote:Возможно ли сделать открывание свитков из пэйпердолов чаров/нпс?

Code: Select all

procedure UseSelfPaperdollScroll;
procedure UseOtherPaperdollScroll(ID : Cardinal);
второй скролл на своем папердолле - это вшитое в клиент окно party, оно так не откроется.


--------
function MessageBoxTimeOut(Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; TimeOutInterval : Cardinal) : Integer;
кто работал с апи знает, кто не работал - вот типы:

Code: Select all

  TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);
  TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
    mbAll, mbNoToAll, mbYesToAll, mbHelp);
  TMsgDlgButtons = set of TMsgDlgBtn;
ну и возвращаемые значения:

Code: Select all

 ID_OK = 1;  
  ID_CANCEL = 2; 
  ID_ABORT = 3; 
  ID_RETRY = 4;  
  ID_IGNORE = 5; 
  ID_YES = 6; 
  ID_NO = 7; 
  ID_CLOSE = 8; 
  ID_HELP = 9; 
  ID_TRYAGAIN = 10;
  ID_CONTINUE = 11;
  MB_TIMEOUT = 32000;
пример:

Code: Select all

AddToSystemJournal(IntToStr(MessageBoxTimeOut('Message Box with timeout!', mtInformation, [mbYes,mbNo],3000 )));
закроет окно через 3 секунды и вернет 32000. Если нажать на Yes - вернет 6, No - 7


Код самописный, и потому работает на вайне и т.д., в отличие от недокументированных виндовых функций

-------------

сделана возможность прятать стелс.
Из трея, из списка программ невидим, в процессах по-прежнему виден. Если скрывать и оттуда - антивирь начинает гавкать.

Показывается по комбинации Ctrl+Alt+Shift+S


Добавил возможность смены иконы стелса (той, что в трее) из настроек, сохраняется в .ini файле.

-----------------
Хреник wrote:2. добавить возможность менять в ручную "поднятие/опускание" выбранного скилла
сделал. при клике по последней колонке - выскакивает окошко смены состояния скилла.

то же самое для статов, кликать по картинке состояния стата на вкладке Main (работает начиная с SE - 5++ клиент)

-------

полная поддержка SE+KR+SA. Полная - это полная - все пакеты, карты, расы с их возможностями и особенностями(для горгулий - procedure ToggleFly;), новая магия, абилки и все такое прочее.

--------

полностью переработано окно настроек шардов - теперь никакого списка со строками из encryption.cfg, мутного и местами сильно непонятного, а просто ввод версии и галочки наличия шифрования.
Поубирал все галки, оставил только одну необходимую.

--------

поиск пути заметно разогнан.
вообще стелс сильно оптимизирован в плане скорости и в плане отжирания памяти - правки по всему коду.

--------

сделал перехват окна об ошибке, теперь выводится вместе со стеком.
в файл stealth.log эти ошибки по-прежнему пишутся!

--------

стелс определяет сам язык винды, на которой работает (ну или вайна :)) и его вставляет.
Если же кто-то сильно хочет принудительно выставить другой язык, в
Stealth.ini надо вставить радел General строку LangFilesExt=ENU, где вместо ENU вставить язык, подробнее тут - http://stealth.od.ua/forum/viewtopic.php?p=8050#8050

-------

теперь из стелсовых скриптов доступен класс TIniFile со всеми сопутствующими.

пример

Code: Select all

var ConfIni : TIniFile;
...
ConfIni := TIniFile.Create('D:\Stealth\my\Stealth.ini');
LastUsedProfile := ConfIni.ReadString('General', 'Last profile', '');
ShowNonZeroSkills := ConfIni.ReadBool('General', 'Show nonzero skills', False);
DefaultReconnectTime := ConfIni.ReadInteger('General','DefaultReconnectTime',120);
ConfIni.Free;

------------

добавил параметр запуска из командной строки config=
stealth.exe config=11
грузит конфиг с именем 11. Регистр учитывается.

И вообще, пока не забыл, по параметрам:

+log убрал, толку с него нет.
chars= грузит список чаров из файла (читать соотв. топик)
config= вверху написал
icon= иконка для трея

--------------

стелс сел на диету - похудел с почти 14 мб до 3,7 мб.
показ стека и прочее сохранилось.

пока худели - потеряли пару багов

------------------

добавил возможность Drop на скриптовый редактор файлов.
Проверки на содержимое нет, что кинете - то и покажет
Поддерживается дроп нескольких файлов сразу.


Добавил нормальное pop-up меню ( по правому клику).

---------------

добавил прокси в настройки шарда. работает. наконец-то
Из проксей поддерживается только socks5, с авторизацией и без нее, полностью согласно rfc1928

------------

Diff-файлы теперь применяются.

-----------

исправлены баги работы стелса в Вин7, вроде больше жучков нет

Список шардов теперь сохраняется в Ini-файл

------------

добавил переменную DropDelay : Cardinal - задержка после выполнения функции dropItem (напомню, что любой grab,drop или moveitem есть а) dragitem б) dropitem).
Значение не опустится меньше 50, и не поднимется выше 10000


еще добавил установку и вычитывание переменных задержек движения

Code: Select all

procedure SetRunUnmountTimer(Value: Word);
procedure SetWalkMountTimer(Value: Word);
SetRunMountTimer(Value: Word);
procedure SetWalkUnmountTimer(Value: Word);

function GetRunUnMountTimer : Word;
GetWalkMountTimer : Word;
GetRunMountTimer : Word;
function GetWalkUnmountTimer : Word;
RunMountTimer - Бежать на лощади
WalkMountTimer - Идти на лошади
RunUnmountTimer - Бежать пешком
WalkUnmountTimer - Идти пешком

значения по умолчанию
RunMountTimer : Word = 95;
WalkMountTimer : Word = 185;
RunUnmountTimer : Word = 185;
WalkUnmountTimer : Word = 370;

ниже их вы не опустите :)
максимальное значение - 2000.

-------------

добавил функцию

Code: Select all

function ShardName : String;
результат думаю понятен.

Code: Select all

procedure AddToJournal(Text : String);'
аналогично

Code: Select all

function GetCharTitle : String;
переименована в

Code: Select all

function CharTitle : String;
-------------

убрано
Get/SetAuto/SellBuyMode
за ненадобностью и некоторыми конструктивными изменениями стелса.

---------------

добавлены возможности рисования на карте в стелсе.
Подбробнее тут:
http://stealth.od.ua/wiki/doku.php?id=% ... 1%82%D0%B5


-------

по работе с клиентом - добавлен запуск клиента с закладки Main (настраивается из шардов), запускается только при хотя бы одном подключенном клиенте. В процессе запуска патчится на разрешение, подмену названия login.cfg на steal.cfg, удаляется шифрование с клиента, если оно есть. Еще раз - патчится в памяти, файл остается неизменным. В будущем будет активен патч нагрузки на CPU.
Новый клиент пока поддерживает мало команд, типа ",info", ",infotile" и все такое. времени нехватило :)
P.S. У связки стелс-клиент большое будущее :)


------

по редактору - добавлен отладчик - почти полноценный(Breakpoint'ы, пошаговка - Step Over и StepInto, просмотр значений переменных на паузе, при ошибке - курсор становится на место ошибки).
по Ctrl+ Space вылазит список функций\процедур с параметрами (клик на нужную функцию мышкой). Слева вверху есть кнопка - открывает список всех функций (без параметров), для быстрого доступа, может кому удобно будет :)
нормальная менюшка для управления этим всем
---------------

полностью переделал кешер, теперь он работает ОЧЕНЬ быстро, и может обрабатывать многие десятки, если не сотни тысяч айтемов без ущерба по скорости

---------

наверняка кучу всего позабывал, если что - потом допишу

-----------





Планы:

- ивенты
- добавление большого кол-ва команд
- работа с клиентом (хоткеи, списки обьектов и прочее)
- попытаюсь сделать порт под Linux
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

собственно, вот список добавленных\измененных функций.

Code: Select all

function CharTitle: string;
function ShardName : String;
function Paralyzed: Boolean;
procedure UseSelfPaperdollScroll);
procedure UseOtherPaperdollScroll(ID : Cardinal);
function WaitForTarget(MaxWaitTimeMS : Integer) : Boolean;
procedure ToggleFly;
function FoundedParamID: Integer;
function LineType: Word;
procedure ClearChatUserIgnore;
procedure AddChatUserIgnore(Str : String);
function FindAtCoord(X,Y : Word) : Cardinal;
moveOpenDoor: Boolean;
moveCheckStamina: Word;
moveThroughNPC: Word;
moveBetweenTwoCorners: Boolean;
moveThroughCorner: Boolean;
function PredictedX : Word;
function PredictedY : Word;
function PredictedZ : ShortInt;
function PredictedDirection : Byte;
function GetPrice(ObjID : Cardinal) : Cardinal;
procedure GumpAutoRadiobutton(RadiobuttonID , Value : Integer);
function NumGumpButton(GumpIndex : Word; Value : Integer): Boolean;
function NumGumpTextEntry(GumpIndex : Word; TextEntryID : Integer; Value : String): Boolean;
function NumGumpRadiobutton(GumpIndex : Word; RadiobuttonID,Value : Integer): Boolean;
function NumGumpCheckBox(GumpIndex : Word; CBID, Value : Integer): Boolean;
function IsGumpCanBeClosed(GumpIndex : Word) : Boolean;
procedure GetGumpButtonsDescription(GumpIndex : Word; var TL : TStringList);
procedure CloseSimpleGump(GumpIndex : Word);
procedure AddGumpIgnoreBySerial(Serial : Cardinal);
procedure AddGumpIgnoreByID(ID : Cardinal);
procedure ClearGumpsIgnore;
function TalismanLayer : Byte;
function BPCount : Word;
function BMCount : Word;
function GACount : Word;
function GSCount : Word;
function MRCount : Word;
function NSCount : Word;
function SACount : Word;
function SSCount : Word;
function IsFigureText(s: string): boolean;
procedure GetShopList(var List : TStringList);
procedure ClearShopList;
function IsWorldCellPassable(CurrX, CurrY : Word; Z : ShortInt; DestX, DestY : Word; var DestZ : ShortInt; WorldNum : Byte) : Boolean;
function GetNextStepZ(CurrX,CurrY, DestX, DestY : Word; WorldNum : byte; Z : ShortInt) : ShortInt;
DropDelay: Cardinal;
function IntToHex(Value: Integer; Digits: Integer): String;
function Random(const ARange: Integer): Integer;
function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string;
function RandomRange(const AFrom, ATo: Integer): Integer;
function FileExists(FileName : String) : Boolean;
procedure ShowMessage(const Msg: string);
procedure QuestRequest;
function ICQConnected : Boolean;
procedure ICQConnect(UIN,password : String);
procedure ICQDisconnect;
procedure ICQSetXStatus(Num : Byte);
procedure ICQSetStatus(Num : Byte);
procedure ICQSendText(DestinationUIN, Text : String);
function AddFigure(const figure : TMapFigure) : Cardinal;
function RemoveFigure(id : Cardinal) : boolean;
function UpdateFigure(id : Cardinal; const figure : TMapFigure) : boolean;
procedure ClearFigures;
procedure CheckLagBegin;
function CheckLagEnd : Boolean;
function CheckLag(timeoutMS : Integer) : Boolean;
procedure SetRunUnmountTimer(Value: Word);
procedure SetWalkMountTimer(Value: Word);
procedure SetRunMountTimer(Value: Word);
procedure SetWalkUnmountTimer(Value: Word);
function GetRunUnMountTimer : Word;
function GetWalkMountTimer : Word;
function GetRunMountTimer : Word;
function GetWalkUnmountTimer : Word;
function ABS(X: integer): cardinal;
function Dist(X1,Y1,X2,Y2: word): word;
function CalcDir(Xfrom,Yfrom,Xto,Yto: integer): byte;
function StepQ(Direction : Byte; Running : Boolean) : Integer;
function MessageBoxTimeOut(Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; TimeOutInterval : Cardinal) : Integer;
procedure SetCmdPrefix(Value : Char);
нет, это не все добавленные функции. получить точный список изменений почти нереально.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

не хотел кидать в сыром виде, но нет времени переписать нормально.
NewMoveXY. - аналог функции moveXY с существенными изменениями.
Во-первых, в ней
используется иной алгоритм. Теперь полный путь просчитывается только при старте, и при
возникновении на траектории движения препятствий. Пошагово: при запуске с помощью
GetPathArray просчитывается путь от старта до финиша. Дальше после каждого шага проверяются
только каждые 15 тайлов этого пути. То есть сделали шаги, проверили следующие 15 точек пути.
Если на одной из этих точек возникает препятствие (динамика), полный путь просчитывается
заново.
Во-вторых, в ней задействована Step_Q.
В-третьих, лишь в этой функции работает параметр движения moveOpenDoor.

moveThroughNPC : word;
// если задаём ноль, step пытается пройти сквозь чара при любом значении стамины
// в противном случаем указываем значение стамины, при котором step имеет право
// пытаться пройти сквозь других НПЦ.
// по умолчанию = 1000;

moveOpenDoor : boolean ;
// если true - чар пытается открыть дверь, возникшую у него на пути.
// Если при трёх попытках дверь не открлась, она считается залоченной.
// по умолчанию false;

moveCheckStamina : word;
// проверка от перегруза. Устанавливаем минимальное значение стамины, при
// котором чар ещё может ходить.
// по умолчанию = 1;

moveBetweenTwoCorners : boolean ;
// если true, разрешается пройти сквозь два смежных угловых препятствия.
// по умолчанию false;

moveThroughCorner : boolean
// если true, разрешается пройти через одно угловое препятствие.
// по умолчанию false;
(цы) Grundick, автор всего этого безобразия :)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

шарился по коду, вспомнил, что про заклинания из мистик-буки не написал.

Code: Select all

nether bolt
healing stone
pure magic
enchant
sleep
eagle strike
animated weapon
stone form
spell trigger
mass sleep
cleansing winds
bombard
spell plague
hail storm
nether cyclone
rising colossus
использовать точно так же, как и обычные спеллы.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Locked