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

Выполненные request'ы

Only for requests.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Выполненные request'ы

Post by Vizit0r »

старое уже неактуальное поубирал



Alex wrote:1. vasa - online - tinkering.sc
2. **********************
3. ***
.........
сделал.
KaToK wrote:7. Возможность писать логи типа,
[profile].log пишет все сообщения сисжурнала
желательно так же ставить на чара, на чаре поставил галку лог пишешь непоставил нипишешь...
сделал.
Во вкладке UOJournal стоит галочка (по умолчанию выключена), как только включена - с этого момента начинает писать в лог вида
Local Admin_04.12.2008.txt (имя профиля + дата).
Так как больше, чем 24 часа в один файл писать не будет - ограничения на размер файла нет.
Aidan wrote:Я тут совсем обнаглею по поводу дизайна. Прозьба одна но существенная-добавить в клиент редактор скриптов, с пошаговой трассировкой скрипта.
сделано. пошаговая трассировка оставлена на потом.

цветная раскраска есть.
когда будет особо нечего делать - вобью в раскраску еще все стелсовые функции.
Edred wrote:Ставить на паузу скрипты при дисконнекте. И снимать с паузы после реконнекта. Для включения такой фичи - флажок в стелсе рядом с окном запуска скриптов. WaitConnection - штука хорошая, но не будешь же втыкать ее в скрипт после каждой строки...
чекбокс "Pause script on disconnect", если включен - то все скрипты при дисконнекте ставятся на паузу, при коннекте - включаются обратно
admir wrote:Я бы еще добавил кнопочку по игнору сообщений от чаров прямо в закладке журнала или чата.
кнопку игнора на ник добавил
Last edited by Vizit0r on 02.07.2009 13:17, edited 2 times in total.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

Функции работы с Трейд окном, подробное описание.

Есть ли secure trade вообще?

Code: Select all

function IsTrade : Boolean


получить айди для одного из двух контейнеров в окне секьюр-трейда, для поиска, перемещения туда айтема и прочего.
Num = 1 Себя
Num = 2 Оппонента

TradeNum исчесляется с 0

Code: Select all

function GetTradeContainer(TradeNum,Num : Byte) : Cardinal;


проверить состояние "галочек" передачи, своей и чужой.
Num = 1- себя
Num = 2 Оппонента Code:
function TradeCheck(TradeNum,Num : Byte) : Boolean;



подтвердить передачу (галочка в клиенте). Если галочка уже стоит - будет снята.

Code: Select all

procedure ConfirmTrade(TradeNum : Byte);



Отменяет трейд окно за номером TradeNum

Code: Select all

procedure CancelTrade(TradeNum : Byte);


Возвращает ID оппонента трейд окна.

Code: Select all

function GetTradeOpponent(TradeNum : Byte) : Cardinal;


Возвращает имя оппонента трейд окна.

Code: Select all

function GetTradeOpponentName(TradeNum : Byte) : String; 


Возвращает колиечство открытых трейд окон.

Code: Select all

function TradeCount : Byte;


кол-во секьюртрейдов ограничено всего-то 128 штуками
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

описалово новых функций мне влом перепечатывать, да и смысла особого нет - всем, не только новичкам, настоятельно рекомендуется читать
http://stealth.od.ua/forum/viewtopic.php?t=1220
Очень уж много добавилось.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

плавно въезжаем на KR - шарды.
исправлены баги захода, добавлен DD-пакет (новый гамп)

полностью обрабатываются статы.
добавлено:

function FireResist: Word;
function ColdResist: Word;
function PoisonResist: Word;
function EnergyResist: Word;

function MaxWeight: Word;
function Race: Byte;
function PetsCurrent: Byte;
function PetsMax: Byte;

function Luck: Integer;


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

пофикшены неправильные IDшники на RunUO серверах.

при коннекте ОБЯЗАТЕЛЬНО проверить последнюю строку в файле Encryption.cfg - ""No encryption" 00000000 00000000 0 "6.1.5"
Ели у вас последние цифры (отсылаемая версия клиента) меньше 6 - то вас банально не пустит на шард.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

добавлены скомпиленые скрипты.

как работает :
в редакторе кнопка Compile&Save, сохраняете с расширением cps, потом открываете как обычный скрипт (за исключением того, что редактор будет без текста скрипта), запускаете, останавливаете и т.д.
Размер скомпилированного файла заметно меньше.


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

полностью переработана вкладка World - показ картинок, фильтры, вывод тултипов и прочее, прочее.
Vizit0r wrote:комментом к фильтрам - потому как клиенту по протоколу УО не шлется никаких четких указаний, что вот этот НПЦ - есть чар, то пришлось фантазировать.
Результат - любой НПЦ, имеющий что-то одетое на себе (например, любой вендор в городах) - считается чаром.

Учитывайте при выставлении фильтров.
---------------------------------------------------------------------------------

добавлена карта мира с показом на ней чара. В планах функции добавления на нее других нпц\чаров

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

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

загружать выбранную конфу можно только на чистом стелсе, даже после загрузки одной конфигурации - вторую уже загрузить не получится. я не собираюсь принудительно завершать сессии чаров и тем основательно увеличивать вероятность багов.

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

итак, окончательно прицепил новое чтение мулов.
теперь на файлы с шарда уходит целых 4 мб оперативки, вместо 20, или сколько там было раньше.
Вагон всяких разных оптимизаций, окончатеьно снят вопрос чтения разных файлов - разные размеры и т.п.
Вердата теперь обрабатывается полностью, включая картинки и прочее.
Скиллы читаются из мула, как и должно.
Last edited by Vizit0r on 02.07.2009 13:44, edited 3 times in total.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

Хреник wrote:если я хочу скастовать заклинание Спеллвифинга например, то вот Это сработает?

if (HP < MaxHP) then
begin
waittargetself;
cast('Gift of Life');
end.
добавил касты всяких там бушидо, нинджитсу и спеллвифинга.
работает точно так, как Хреник написал в примере.

P.S. незнаю, работали ли до сих пор паладинские и некро-касты, но теперь и они тоже будут точно работать.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

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

За компанию полностью переписан пакет D6 - получение MegaCliloc, он же tooltip.
Теперь на выходе получаем правильные циферки типа
кинжал | сделано (ник) | исключительно | заряды большего яда: 14 | увеличение повреждений 35% | физ. повреждение 100% | повреждение оружия 10 - 11 | скорость оружия 56 | требуемая сила 10 | одноручное оружие | требуемый навык: фехтование | прочность 43 / 43
admir wrote:Покрас итемов в цвет соответствующий hues.mul

сделал.
цвета в основном совпадают с клиентскими, но иногда могут быть чуть более "кислотными". Впрочем, при этом они все равно узнаваемы.
полного соответствия не будет, т.к. клиент еще какие-то махинации с цветами делает недокументированные.

заодно добавил показ стекированных айтемов.


P.S. при наведении курсора на картинку во вкладке world - выводится построчный тултип а-ля в клиенте. мелочь, а приятно

Last edited by Vizit0r on Mon Apr 20, 2009 13:26; edited 1 time in total
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

теперь то, что было сделано пока форум лежал:

1) карта доделана нормально
2) функции для работы с HTTP

Code: Select all

procedure HTTP_Get(URL : String);
procedure HTTP_Post(URL, PostData: string);
function HTTP_Body :  String;
function HTTP_Header :  String;
знающие поймут, незнающим и обьяснять нестоит, все равно не пригодится :)

3) по гампам

Code: Select all

function NumGumpButton(GumpIndex, Value : Integer) : Boolean;
function NumGumpTextEntry(GumpIndex, TextEntryID : Integer; Value : String) : Boolean;
function NumGumpCheckBox(GumpIndex, CBID, Value : Integer) : Boolean;
если при обычных поисках элементов на гампах (например WaitGump) идет поиск кнопки с заданным айди по ВСЕМ гампам начиная с последнего, то вышеописанные функции ищут заданный элемент только в гампе с конкретным номером. что удобно(а скорее - необходимо) в антимакросовых гампах и т.п.
заодно делают возврат значения - удалось найти или нет

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


да и много всего прочего было сделано, так напамять не припомню.
Если кто-то из тестеров вспомнит про что-то существенное, то напишет всюда.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

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

Теперь при любой ошибке, которая показывается, будь то AcessViolation, Invalid Pointer или любая другая- создается (а если существует - дописывается) файл stealth.log, куда идет сообщение вида

Code: Select all

An exception raised at 04.07.2009 11:43:40
Invalid pointer operation
(001B1371){Stealth.exe } [005B2371] main.TStealthForm.Button5Click (Line 2632, "main.pas" + 7) + $0

Call stack:
  (001B136C){Stealth.exe } [005B236C] main.TStealthForm.Button5Click (Line 2627, "main.pas" + 2) + $8
  (000649A0){Stealth.exe } [004659A0] Controls.TControl.Click (Line 5229, "Controls.pas" + 9) + $8
  (00068493){Stealth.exe } [00469493] Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6
  (00045B74){Stealth.exe } [00446B74] StdCtrls.TButtonControl.WndProc (Line 3684, "StdCtrls.pas" + 13) + $4
  (000685E3){Stealth.exe } [004695E3] Controls.DoControlMsg (Line 7353, "Controls.pas" + 6) + $11
  (00068493){Stealth.exe } [00469493] Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6
  (00067BBC){Stealth.exe } [00468BBC] Controls.TWinControl.MainWndProc (Line 7073, "Controls.pas" + 3) + $6
  (0002A628){Stealth.exe } [0042B628] Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0
  (0006858F){Stealth.exe } [0046958F] Controls.TWinControl.DefaultHandler (Line 7334, "Controls.pas" + 23) + $17
  (00068493){Stealth.exe } [00469493] Controls.TWinControl.WndProc (Line 7304, "Controls.pas" + 111) + $6
  (00045B74){Stealth.exe } [00446B74] StdCtrls.TButtonControl.WndProc (Line 3684, "StdCtrls.pas" + 13) + $4
  (0002A628){Stealth.exe } [0042B628] Classes.StdWndProc (Line 11583, "common\Classes.pas" + 8) + $0
где первая строка
(001B136C){Stealth.exe } [005B236C] main.TStealthForm.Button5Click (Line 2627, "main.pas" + 2) + $8
как раз и есть строка исходника стелса, где произошла ошибка.

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

Теперь от людей с новым стелсом жалобы на вылетающие ошибки принимаются исключительно с выпиской из этого stealth.log

как побочное явление - стелс весит 9мб :)
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

GetCliloc теперь возвращает строку длиной до 512 символов.
но при работе с ней, например поиске в строке есть некоторые сложности
т.к. BMSearch работает только со строками длиной до 256 символов, что жестко зашито - то надо делать что-то типа
if Length(ToolTipText) > 255 then
begin
ToolTipText1 := Copy(ToolTipText,1,255);
ToolTipText2 := Copy(ToolTipText,256,Length(ToolTipText));
end
и с этими двумя строками работать по отдельности.
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

2 Mirage -

Code: Select all

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

Post by Vizit0r »

1hp wrote:Сообщения вида [12:40:00] You see: *Someone is attacking you* не попадают в журнал.
В той версии что еще без галочек для сферы, все нормально сообщения попадают и в журнал и в чат, а вот в последних такие сообщения попадают только в чат, а все функции для работы с журналом работают тока с журналом =(
криво-косо, но исправлено :)

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

1hp wrote:Хотелось бы функцию deleteInJournal(номер строки); или что-то сделать с ошибкой после такого SetJournalLine(JLine, '');
исправлено, работает правильно.
P.S. Как раз SetJournalLine(JLine, ''); - и есть удаление строки, а не просто деланье ее пустой.


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

встроенный чеклаг

Code: Select all

CheckLag(timeoutMS : Integer) : Boolean;
если таймаут прошел, а ответа все нет - вернет False, иначе - True

Code: Select all

if CheckLag(10000) then
AddToSystemJournal('ID : $'+IntToHex(Self,8));    
Last edited by Vizit0r on 16.08.2009 10:04, edited 3 times in total.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

WladL wrote:Было-бы неплохо если-бы переменные реагентов (NS,BP,SA...) содержали не тип, а кол-во (сумму в паке и подсумках).
Сейчас чтоб получить эту циферку нужно сделать
FindTypeEx(NS,$0000,backpack,true);
a:=FindFullQuantity;
ибо Count & CountEx не дают возможности подсчета в подсумках

что не всегда удобно,например для условия проверки кол-ва реагентов которое в инже выглядело как
if NS<x And BP<x AND SA<x AND ....

в стелсе придется создать кучу переменных, сделать FindTypeEx по всем регам и только после этого сделать условие.

Все-таки динамически постоянно получать тип вряд-ли нужно,
либо можно доп. переменные сделать типа NSCount,BPCount.....
на. работает.

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

FindTypeEx(XX,$0000,backpack,true); 
a:=FindFullQuantity;
:)
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Post by Vizit0r »

WladL (12:19:37 23/06/2009)
кстати FloatToStr выводит число вот так 69.700000000000, FloatToStrF не поддерживается, чем нули убрать?
Добавил

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' и хочется знать что именно поймалось.
-------------------------------------------------------------------------------------
добавил обработчик для новомодной консольного ввода текста (зачем было добавлять новый пакет, когда есть старый почти такой же? незнаю).
обзывается

Code: Select all

procedure ConsoleEntryUnicodeReply(Text : String);
это уже ловушка полноценная - можно ставить как до прихода запроса, так и после.

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

Post by Vizit0r »

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

Code: Select all

procedure SetPauseScriptOnDisconnectStatus(Value : Boolean);
function GetPauseScriptOnDisconnectStatus : Boolean;
обьяснять нечего.
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Post Reply