Иконка ресурса

"Abstract" interface for Interlude

  • Автор темы Автор темы Petr
  • Дата начала Дата начала
Can you mark which files were updated? So I can replace only them? Thank you very much for your amazing work
ПАТЧ / PATCH: Abstract Interface v2.9 -> v3.0


[I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]RU: Не забудьте перенести изменения в XDAT: [B]NewRadarWnd, OnScreenDamageWnd, PartyWnd[/B].

Также замените и добавьте текстуры в L2UI_CH3.utx в [B]DamageWnd[/B] (texBlock, texCritical… — все tex). и в [B]NewRadarWnd [/B]добавте[B] [/B]все Radar_btnPlaceLoc...

L2_RadarMap.utx можно просто скопировать из 3.0 к себе, если не добавляли свои карты данжей, как я.
[/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]



EN: Don't forget to transfer XDAT changes in NewRadarWnd, OnScreenDamageWnd, and PartyWnd.

[I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]Also replace and add textures in L2UI_CH3.utx for [B]DamageWnd[/B] (texBlock, texCritical… — all tex). in [B]NewRadarWnd [/B]add all Radar_btnPlaceLoc...

L2_RadarMap.utx can simply be copied from 3.0 if you haven't added custom dungeon maps like I did.
[/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]
 
Последнее редактирование:
Неприемлемый язык
ПАТЧ / PATCH: Interface Abstrata v2.9 -> v3.0
Texto oculto: não pode ser citado. ***

Texto oculto: não pode ser citado. ***

[I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]RU: Не забудьте перенести изменения в XDAT: [B]NewRadarWnd, OnScreenDamageWnd, PartyWnd[/B].

Также замените и добавьте текстуры в L2UI_CH3.utx в [B]DamageWnd[/B] (texBlock, texCritical… — все tex).

L2_RadarMap.utx можно просто скопировать из 3.0 к себе, если не добавляли свои карты данжей, как я.
[/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]



EN: Não se esqueça de transferir as mudanças do XDAT em NewRadarWnd, OnScreenDamageWnd e PartyWnd.

[I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]Also replace and add textures in L2UI_CH3.utx for [B]DamageWnd[/B] (texBlock, texCritical… — all tex).

L2_RadarMap.utx can simply be copied from 3.0 if you haven't added custom dungeon maps like I did.
[/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]
Muito obrigado, eu não tinha visto <3
[POST]1780151250[/DPOST]
Petr добавил(а) новый ресурс:

"Interface abstrata" para Interlude - Интерфейс для 746 протокола



Узнать больше об этом ресурсе...
1780151117482.webp


Hello everyone.

I am working with Abstract Interface v2.9 and trying to port some XDAT elements from Abstract Interface v3.0.

The problem happens when I copy `tDamage0Wnd` from the v3 Interface.xdat into my v2.9 Interface.xdat.

If I copy only the `tDamage0Wnd` window without the internal textures, the client opens normally.
But if I copy `tDamage0Wnd` together with the internal `Digit0`, `Digit1`, `Digit2`, etc. textures, the client gives a critical error during startup.

Critical error:

2026.5.30 11:25:25
OS : Windows Vista 6.2 (Build: 9200)
CPU : AuthenticAMD Unknown processor @ 3604 MHz with 2047MB RAM
Video : NVIDIA GeForce GTX 980 (6094)

General protection fault!

History: NCWnd::AddChild <- NCWnd::RegisterChildWindow <- NCWnd::SetHandle <- XMLUIData::Create <- XMLMinimapCtrlData::Create <- XMLWindowData::Create <- XMLDataManager::CreateWindows <- XMLUIManager::CreateWindows <- NConsoleWnd::InitializeXMLUI <- NConsoleWnd::Initialize <- NConsoleWnd::Init <- UGameEngine::Init <- InitEngine

What I already tested:

1. Copying `tDamage0Wnd` without its internal textures = no crash.
2. Copying `tDamage0Wnd` with the internal `Digit` textures from v3 = critical error.
3. Deleting the internal `Digit` textures from `tDamage0Wnd` makes the client open again.
4. The copied nodes appear as `Texture` in the XDAT editor, not as ItemWindow.
5. The crash happens before the UC code runs, during XML/XDAT loading.

So my question is:

Why would textures inside `tDamage0Wnd` cause `XMLMinimapCtrlData::Create` / `XMLWindowData::Create` critical error when copied from v3 to v2.9?

Could this be caused by:
- wrong internal control type even though it displays as Texture?
- invalid parentName / ownerWindow / relativeTo?
- wrong texture control class, like MinimapCtrl instead of TextureCtrl?
- incompatible texture properties between v3 and v2.9?
- bad anchors or handle names?
- duplicated handles inside `OnScreenDamageWnd`?

What is the safest way to copy or recreate these `Digit0` to `Digit16` texture controls for `tDamage0Wnd` without causing a startup critical error?

Thank you.
Сообщение объединено:
1780158038899.webp

Hello everyone,

I’m not sure why, but suddenly my shortcut bar stopped working and I can’t understand what caused it.

Has anyone ever had this issue before?

The hotkeys F1, F2, F3, up to F10 are not working anymore. The shortcut icons are still visible, but pressing the function keys does nothing.

If anyone knows what could cause this or where I should check first, I would appreciate the help.

Thanks.
 
Последнее редактирование:
Muito obrigado, eu não tinha visto <3
[POST]1780151250[/DPOST]

Посмотреть вложение 95653


Hello everyone.

I am working with Abstract Interface v2.9 and trying to port some XDAT elements from Abstract Interface v3.0.

The problem happens when I copy `tDamage0Wnd` from the v3 Interface.xdat into my v2.9 Interface.xdat.

If I copy only the `tDamage0Wnd` window without the internal textures, the client opens normally.
But if I copy `tDamage0Wnd` together with the internal `Digit0`, `Digit1`, `Digit2`, etc. textures, the client gives a critical error during startup.

Critical error:

2026.5.30 11:25:25
OS : Windows Vista 6.2 (Build: 9200)
CPU : AuthenticAMD Unknown processor @ 3604 MHz with 2047MB RAM
Video : NVIDIA GeForce GTX 980 (6094)

General protection fault!

History: NCWnd::AddChild <- NCWnd::RegisterChildWindow <- NCWnd::SetHandle <- XMLUIData::Create <- XMLMinimapCtrlData::Create <- XMLWindowData::Create <- XMLDataManager::CreateWindows <- XMLUIManager::CreateWindows <- NConsoleWnd::InitializeXMLUI <- NConsoleWnd::Initialize <- NConsoleWnd::Init <- UGameEngine::Init <- InitEngine

What I already tested:

1. Copying `tDamage0Wnd` without its internal textures = no crash.
2. Copying `tDamage0Wnd` with the internal `Digit` textures from v3 = critical error.
3. Deleting the internal `Digit` textures from `tDamage0Wnd` makes the client open again.
4. The copied nodes appear as `Texture` in the XDAT editor, not as ItemWindow.
5. The crash happens before the UC code runs, during XML/XDAT loading.

So my question is:

Why would textures inside `tDamage0Wnd` cause `XMLMinimapCtrlData::Create` / `XMLWindowData::Create` critical error when copied from v3 to v2.9?

Could this be caused by:
- wrong internal control type even though it displays as Texture?
- invalid parentName / ownerWindow / relativeTo?
- wrong texture control class, like MinimapCtrl instead of TextureCtrl?
- incompatible texture properties between v3 and v2.9?
- bad anchors or handle names?
- duplicated handles inside `OnScreenDamageWnd`?

What is the safest way to copy or recreate these `Digit0` to `Digit16` texture controls for `tDamage0Wnd` without causing a startup critical error?

Thank you.
Сообщение объединено:
Посмотреть вложение 95660

Hello everyone,

I’m not sure why, but suddenly my shortcut bar stopped working and I can’t understand what caused it.

Has anyone ever had this issue before?

The hotkeys F1, F2, F3, up to F10 are not working anymore. The shortcut icons are still visible, but pressing the function keys does nothing.

If anyone knows what could cause this or where I should check first, I would appreciate the help.

Thanks.
you add [I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]texBlock, texCritical, [I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]texFail, [I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]texSuccses[/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]… [/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]to [I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]L2UI_CH3.utx[/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]?
 
you add [I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]texBlock, texCritical, [I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]texFail, [I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]texSuccses[/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]… [/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]to [I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I][I]L2UI_CH3.utx[/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I][/I]?
yes
 
Who can provide me with the compiler?
 
I've added AutoHuntingWnd to the project and compiled it, but it doesn't appear. Do I need to add a line of code somewhere to make it appear?
 
I've added AutoHuntingWnd to the project and compiled it, but it doesn't appear. Do I need to add a line of code somewhere to make it appear?
You added the logic. Although if there are other bypasses on the server, it won't work. Did you add the visual in interface.xdat?

Petr я понимаю на радаре при максимальном отдалении ты тоже не смог победить рассинхон карты и айконов.
 
Последнее редактирование:
KHEC,

Environment

  • Server: L2J aCis (rev 382), Interlude chronicle, Java 11.
  • Client: Interlude (English).
  • Base: "Abstract" interface v2.9 (heavily customized: portraits, autofarm, etc.). Got v3.0 to get the on-screen damage-over-target feature and merged the v3.0 damage system into my customized v2.9.
What works

  • Player-side display (SetTextToTex / Damage*Wnd windows): received damage, recover HP/MP/CP, XP/SP, and "Evaded" when I dodge — all render correctly.
The problem

  • Target-side display (SetTextToTexD / tDamage*Wnd + CalculateTargetDamage): the damage I deal to a monster never appears (neither normal, critical, nor overhit). The target ring (TargetRegionDecal) also never showed even before.
What I already applied/verified from the official v3.0

  • OnScreenDamageWnd.uc = exact official v3.0.
  • UICommonAPI.uc: added Dot/multiplyMatrices/multiplyMatrixVector/GetPlane (change 167).
  • L2Util.uc + CustomPlayerController.uc = official v3.0 (changes 64 and 35).
  • BottomBar.uc = changes 5–8 (so it compiles after the GetMyActor static→instance change).
  • TargetRegionDecal.uc = official v3.0 (changes 162–164).
  • Interface.xml: the tDamage0Wnd..tDamage19Wnd windows are present and identical in structure to your interface3.xml (20 windows, 19 extendsName tDamage0Wnd, 15 Digit children).
  • Textures: L2UI_CH3.utx (DamageWnd group) has the needed textures incl. texDigitsNew.
  • Compiles with no errors; Interface.xdat rebuilt from the XML that contains the tDamage windows.
Diagnostics I ran (temporary markers inside SetTextToTexD)

  • SetTextToTexD is called and runs past GetPlayerActor (it returns a valid actor).
  • tDigitTex[...] handles for tDamage0Wnd are not None (digit windows resolve).
  • Despite this, nothing renders over the target, and CalculateTargetDamage never produces a visible window.
My main suspicion

  • OnTick() does not fire for OnScreenDamageWnd in my client (I've had the same issue historically with OnTick on other windows). Since the target damage is positioned/shown only inside OnTick → CalculateTargetDamage, nothing ever appears. (As a workaround I drove CalculateTargetDamage from OnTimer instead and it started behaving better.)
  • Possibly also DefenderID from EV_ReceiveAttack/EV_ReceiveMagicSkillUse is not populated the same way on aCis as on the server you tested (RusAcis/Lucera), so GetUserInfo(DefenderID) / the pawn lookup fails.
Questions

  1. Does OnScreenDamageWnd.OnTick() rely on being auto-called every frame? Is there any requirement (an xdat window flag, RegisterEvent, or a setting) to enable per-frame OnTick for this window? Could a client/build difference prevent it?
  2. Any aCis-specific consideration for DefenderID / GetUserInfo in SetTextToTexD targeting?
  3. Did v3.0 require any native DLL (NWindow.dll / AbstractEx.dll) change for the damage projection, or is it pure UnrealScript?


  4. Окружение
    • Сервер: L2J aCis (rev 382), хроники Interlude, Java 11.
    • Клиент: Interlude.
    • База: интерфейс "Abstract" v2.9 (сильно кастомизирован: портреты, автофарм и т.д.). Перенёс систему урона v3.0 в свой v2.9.
  5. Что работает
    • Сторона игрока (SetTextToTex / окна Damage*Wnd): полученный урон, восстановление HP/MP/CP, опыт/SP и "Evaded" при уклонении — всё отображается корректно.
  6. Проблема
    • Сторона цели (SetTextToTexD / окна tDamage*Wnd + CalculateTargetDamage): урон, который я наношу мобу, не появляется вообще (ни обычный, ни крит, ни overhit). Круг под целью (TargetRegionDecal) тоже не отображался.
  7. Что я уже применил/проверил из официального v3.0
    • OnScreenDamageWnd.uc = точная копия v3.0.
    • UICommonAPI.uc: добавлены Dot/multiplyMatrices/multiplyMatrixVector/GetPlane.
    • L2Util.uc + CustomPlayerController.uc = v3.0.
    • BottomBar.uc = правки под изменения выше (компилируется).
    • TargetRegionDecal.uc = v3.0.
    • Interface.xml: окна tDamage0Wnd..tDamage19Wnd присутствуют и идентичны по структуре вашему interface3.xml (20 окон, 19 extendsName tDamage0Wnd, 15 дочерних Digit).
    • Текстуры: L2UI_CH3.utx (группа DamageWnd) содержит нужные текстуры, включая texDigitsNew.
    • Компилируется без ошибок; Interface.xdat пересобран из XML, где есть окна tDamage.
  8. Диагностика (временные маркеры внутри SetTextToTexD)
    • SetTextToTexD вызывается и проходит GetPlayerActor (актор валидный).
    • Хэндлы tDigitTex[...] для tDamage0Wnd не None (дочерние Digit-окна находятся).
    • Несмотря на это, над целью ничего не рисуется, CalculateTargetDamage не даёт видимого окна.
  9. Основное подозрение
    • OnTick() не вызывается для OnScreenDamageWnd в моём клиенте (та же проблема была и с другими окнами через OnTick). Так как урон по цели позиционируется/показывается только внутри OnTick → CalculateTargetDamage, ничего не появляется. (Как временное решение я вызвал CalculateTargetDamage из OnTimer — стало лучше.)
    • Возможно также, что DefenderID из EV_ReceiveAttack/EV_ReceiveMagicSkillUse на aCis заполняется иначе, чем на сервере, где тестировали вы, поэтому GetUserInfo(DefenderID) / поиск pawn не срабатывает.
  10. Вопросы
    1. Зависит ли OnScreenDamageWnd.OnTick() от автоматического вызова каждый кадр? Нужно ли что-то включать (флаг окна в xdat, RegisterEvent или настройку), чтобы OnTick вызывался для этого окна? Может ли различие клиента/сборки этому помешать?
    2. Есть ли особенности для aCis по DefenderID / GetUserInfo в таргетинге SetTextToTexD?
    3. Требует ли вывод урона v3.0 каких-либо изменений в нативных DLL (NWindow.dll / AbstractEx.dll), или это чистый UnrealScript?
  11. Заранее спасибо!
 
Последнее редактирование:
KHEC,

Environment

  • Server: L2J aCis (rev 382), Interlude chronicle, Java 11.
  • Client: Interlude (English).
  • Base: "Abstract" interface v2.9 (heavily customized: portraits, autofarm, etc.). Got v3.0 to get the on-screen damage-over-target feature and merged the v3.0 damage system into my customized v2.9.
What works

  • Player-side display (SetTextToTex / Damage*Wnd windows): received damage, recover HP/MP/CP, XP/SP, and "Evaded" when I dodge — all render correctly.
The problem

  • Target-side display (SetTextToTexD / tDamage*Wnd + CalculateTargetDamage): the damage I deal to a monster never appears (neither normal, critical, nor overhit). The target ring (TargetRegionDecal) also never showed even before.
What I already applied/verified from the official v3.0

  • OnScreenDamageWnd.uc = exact official v3.0.
  • UICommonAPI.uc: added Dot/multiplyMatrices/multiplyMatrixVector/GetPlane (change 167).
  • L2Util.uc + CustomPlayerController.uc = official v3.0 (changes 64 and 35).
  • BottomBar.uc = changes 5–8 (so it compiles after the GetMyActor static→instance change).
  • TargetRegionDecal.uc = official v3.0 (changes 162–164).
  • Interface.xml: the tDamage0Wnd..tDamage19Wnd windows are present and identical in structure to your interface3.xml (20 windows, 19 extendsName tDamage0Wnd, 15 Digit children).
  • Textures: L2UI_CH3.utx (DamageWnd group) has the needed textures incl. texDigitsNew.
  • Compiles with no errors; Interface.xdat rebuilt from the XML that contains the tDamage windows.
Diagnostics I ran (temporary markers inside SetTextToTexD)

  • SetTextToTexD is called and runs past GetPlayerActor (it returns a valid actor).
  • tDigitTex[...] handles for tDamage0Wnd are not None (digit windows resolve).
  • Despite this, nothing renders over the target, and CalculateTargetDamage never produces a visible window.
My main suspicion

  • OnTick() does not fire for OnScreenDamageWnd in my client (I've had the same issue historically with OnTick on other windows). Since the target damage is positioned/shown only inside OnTick → CalculateTargetDamage, nothing ever appears. (As a workaround I drove CalculateTargetDamage from OnTimer instead and it started behaving better.)
  • Possibly also DefenderID from EV_ReceiveAttack/EV_ReceiveMagicSkillUse is not populated the same way on aCis as on the server you tested (RusAcis/Lucera), so GetUserInfo(DefenderID) / the pawn lookup fails.
Questions

  1. Does OnScreenDamageWnd.OnTick() rely on being auto-called every frame? Is there any requirement (an xdat window flag, RegisterEvent, or a setting) to enable per-frame OnTick for this window? Could a client/build difference prevent it?
  2. Any aCis-specific consideration for DefenderID / GetUserInfo in SetTextToTexD targeting?
  3. Did v3.0 require any native DLL (NWindow.dll / AbstractEx.dll) change for the damage projection, or is it pure UnrealScript?


  4. Окружение
    • Сервер: L2J aCis (rev 382), хроники Interlude, Java 11.
    • Клиент: Interlude.
    • База: интерфейс "Abstract" v2.9 (сильно кастомизирован: портреты, автофарм и т.д.). Перенёс систему урона v3.0 в свой v2.9.
  5. Что работает
    • Сторона игрока (SetTextToTex / окна Damage*Wnd): полученный урон, восстановление HP/MP/CP, опыт/SP и "Evaded" при уклонении — всё отображается корректно.
  6. Проблема
    • Сторона цели (SetTextToTexD / окна tDamage*Wnd + CalculateTargetDamage): урон, который я наношу мобу, не появляется вообще (ни обычный, ни крит, ни overhit). Круг под целью (TargetRegionDecal) тоже не отображался.
  7. Что я уже применил/проверил из официального v3.0
    • OnScreenDamageWnd.uc = точная копия v3.0.
    • UICommonAPI.uc: добавлены Dot/multiplyMatrices/multiplyMatrixVector/GetPlane.
    • L2Util.uc + CustomPlayerController.uc = v3.0.
    • BottomBar.uc = правки под изменения выше (компилируется).
    • TargetRegionDecal.uc = v3.0.
    • Interface.xml: окна tDamage0Wnd..tDamage19Wnd присутствуют и идентичны по структуре вашему interface3.xml (20 окон, 19 extendsName tDamage0Wnd, 15 дочерних Digit).
    • Текстуры: L2UI_CH3.utx (группа DamageWnd) содержит нужные текстуры, включая texDigitsNew.
    • Компилируется без ошибок; Interface.xdat пересобран из XML, где есть окна tDamage.
  8. Диагностика (временные маркеры внутри SetTextToTexD)
    • SetTextToTexD вызывается и проходит GetPlayerActor (актор валидный).
    • Хэндлы tDigitTex[...] для tDamage0Wnd не None (дочерние Digit-окна находятся).
    • Несмотря на это, над целью ничего не рисуется, CalculateTargetDamage не даёт видимого окна.
  9. Основное подозрение
    • OnTick() не вызывается для OnScreenDamageWnd в моём клиенте (та же проблема была и с другими окнами через OnTick). Так как урон по цели позиционируется/показывается только внутри OnTick → CalculateTargetDamage, ничего не появляется. (Как временное решение я вызвал CalculateTargetDamage из OnTimer — стало лучше.)
    • Возможно также, что DefenderID из EV_ReceiveAttack/EV_ReceiveMagicSkillUse на aCis заполняется иначе, чем на сервере, где тестировали вы, поэтому GetUserInfo(DefenderID) / поиск pawn не срабатывает.
  10. Вопросы
    1. Зависит ли OnScreenDamageWnd.OnTick() от автоматического вызова каждый кадр? Нужно ли что-то включать (флаг окна в xdat, RegisterEvent или настройку), чтобы OnTick вызывался для этого окна? Может ли различие клиента/сборки этому помешать?
    2. Есть ли особенности для aCis по DefenderID / GetUserInfo в таргетинге SetTextToTexD?
    3. Требует ли вывод урона v3.0 каких-либо изменений в нативных DLL (NWindow.dll / AbstractEx.dll), или это чистый UnrealScript?
  11. Заранее спасибо!
я с аксис мало знаком.

попробуй так
Константа (рядом с BUFFER_TIMER_ID)
Код:
const BUFFER_TIMER_ID = 99999;
const TARGET_DAMAGE_TICK_ID = 55000; // ~30 FPS, если OnTick не идёт
const BUFFER_DELAY_MS = 13;

OnLoad() — полностью
Код:
function OnLoad()
{
    local int i, j;
    RegisterEvent(EV_ReceiveAttack);
    RegisterEvent(EV_ReceiveMagicSkillUse);
    RegisterEvent(EV_SystemMessage);
    RegisterEvent(EV_Restart);
    DefenderID = 0;
    curContainer = 0;
    curTContainer = 0;
    Me = GetHandle(m_WindowName);
    for ( i = 0;i < MAX_CONTAINER;i++ )
    {
        wContainer[i] = GetHandle(m_WindowName$".Damage"$i$"Wnd");
        tContainer[i] = GetHandle(m_WindowName$".tDamage"$i$"Wnd");
        wTextureGroup[i] = i * MAX_TEXTURE;
        tTextureGroup[i] = i * MAX_TEXTURE;
        for ( j = 0;j< MAX_TEXTURE;j++)
        {
            wDigitTex[wTextureGroup[i] + j] = TextureHandle(GetHandle(m_WindowName$".Damage"$i$"Wnd.Digit"$j));
            tDigitTex[tTextureGroup[i] + j] = TextureHandle(GetHandle(m_WindowName$".tDamage"$i$"Wnd.Digit"$j));
        }
    }
    Me.ShowWindow();
    Me.SetTimer(TARGET_DAMAGE_TICK_ID, 33);
}

3. Новая функция + OnTick() — вместо старого OnTick
Код:
function UpdateTargetDamagePos()
{
    local int i, screenWidth, screenHeight;
    local Actor PlayerActor;
    local Rotator CameraRotation;
    local LineagePlayerController Controller;
    local Vector CameraLocation, cameraDirection, cameraRight, cameraUp;
    if ( !calculateTrue )
        return;
    if ( !GetPlayerActor(PlayerActor) || !GetPlayerController(Controller) )
        return;
    Controller.PlayerCalcView(PlayerActor, CameraLocation, CameraRotation);
    GetCurrentResolution(screenWidth, screenHeight);
    GetAxes(CameraRotation, cameraDirection, cameraRight, cameraUp);
    for ( i = 0;i < dContainer.Length;i++ )
    {
        if ( dContainer[i].targetID > 0 )
            CalculateTargetDamage(i, CameraLocation, CameraRotation, screenWidth, screenHeight, cameraDirection, cameraRight, cameraUp);
    }
}
function OnTick()
{
    UpdateTargetDamagePos();
}
OnTimer() — полностью (добавлен блок 55000, в конце не убиваем его)
Код:
function OnTimer( int TimerID )
{
    local bool isNegative;
    local int tmpTimer;
    local int idx;
    local int j;
    idx = 0;
    if ( TimerID < 0 )
    {
        isNegative = True;
        tmpTimer = int(Mid(string(TimerID), 1));
    }
    else
        tmpTimer = TimerID;
    if ( TimerID == BUFFER_TIMER_ID )
    {
        bBufferActive = False;
        FlushDamageBuffer();
        Me.KillTimer(BUFFER_TIMER_ID);
        return;
    }
    if ( TimerID == TARGET_DAMAGE_TICK_ID )
    {
        UpdateTargetDamagePos();
        Me.SetTimer(TARGET_DAMAGE_TICK_ID, 33);
        return;
    }
    if ( tmpTimer == 50000 )
    {
        for ( idx = 0;idx < dContainer.Length;idx++ )
        {
            if ( dContainer[idx].targetID > 0 )
            {
                j++;
                break;
            }
        }
        if ( j > 0 )
            return;
        else
            calculateTrue = False;
    }
    else if ( tmpTimer >= 40000 )
    {
        Me.KillTimer(TimerID);
        Me.KillTimer(50000);
        Me.SetTimer(50000, 1500);
        calculateTrue = True;
        idx = tmpTimer - 40000;
        if ( dContainer[idx].targetID > 0 )
        {
            if ( dContainer[idx].offsetYNum < 90 )
            {
                if ( dContainer[idx].offsetLeft > 0 )
                {
                    if ( dContainer[idx].isMoved < 16 )
                    {
                        dContainer[idx].isMoved++;
                        dContainer[idx].offsetLeft = dContainer[idx].offsetLeft + dContainer[idx].squense;
                    }
                    dContainer[idx].offsetLeft = dContainer[idx].offsetLeft + 0.6;
                }
                else if ( dContainer[idx].offsetRight > 0 )
                {
                    if ( dContainer[idx].isMoved < 16 )
                    {
                        dContainer[idx].isMoved++;
                        dContainer[idx].offsetRight = dContainer[idx].offsetRight + dContainer[idx].squense;
                    }
                    dContainer[idx].offsetRight = dContainer[idx].offsetRight + 0.6;
                }
                dContainer[idx].offsetYNum = dContainer[idx].offsetYNum + 1.5;
            }
            else
            {
                ClearTContainer(idx);
                return;
            }
            Me.SetTimer(40000 + idx, 0);
        }
        else
            ClearTContainer(idx);
        return;
    }
    else if ( tmpTimer >= 30000 )
    {
        idx = tmpTimer - 30000;
        if ( idx >= 0 && idx < MAX_CONTAINER && wContainer[idx] != None )
        {
            if ( !isNegative )
            {
                wContainer[idx].Move(0, 100, 2);
                Me.SetTimer((idx) + 20000, 1000);
            }
            else
            {
                wContainer[idx].Move(0, -100, 2);
                Me.SetTimer(-(idx) + 20000, 1000);
            }
        }
    }
    else if ( tmpTimer >= 20000 )
    {
        idx = tmpTimer - 20000;
        if ( idx >= 0 && idx < MAX_CONTAINER && wContainer[idx] != None )
        {
            if ( !isNegative )
            {
                wContainer[idx].Move(0, 100, 0.05);
                Me.SetTimer((idx) + 10000, 40);
            }
            else
            {
                wContainer[idx].Move(0, -100, 0.05);
                Me.SetTimer(-(idx) + 10000, 40);
            }
        }
    }
    else if ( tmpTimer >= 10000 )
    {
        idx = tmpTimer - 10000;
        if ( idx >= 0 && idx < MAX_CONTAINER && wContainer[idx] != None )
            wContainer[idx].HideWindow();
    }
    Me.KillTimer(TimerID);
}

5. Конец SetTextToTexD() — заменить хвост (после dContainer[curTContainer] = dC;)
Было:
Код:
    Me.SetTimer(40000 + curTContainer, 100);
    curTContainer++;
    targetDamageSquense++;

Стало:
Код:
    calculateTrue = True;
    Me.KillTimer(50000);
    Me.SetTimer(50000, 1500);
    Me.SetTimer(40000 + curTContainer, 100);
    curTContainer++;
    targetDamageSquense++;
}

Если не помогло тогда проблема не в OnTick, а в DefenderID / GetUserInfo / bestPawnID == 0 — логировать в SetTextToTexD до return.

И ябы texDigitsNew проверил что залилась новая версия с запятыми, хотя и старая без бы показывала но криво.

А так это лучше к Petr он вроде на русаксис проверял.
 
Последнее редактирование:
Hello everyone, can someone help me, when I am on the //admin window and click on char this error appears "pack lucera2" -->


2026.6.6 09:34:24OS : Windows Vista 6.2 (Build: 9200)CPU : AuthenticAMD Unknown processor @ 3604 MHz with 2047MB RAMVideo : NVIDIA GeForce GTX 980 (6094)General protection fault!History: NCWnd::AddChild <- NCWnd::RegisterChildWindow <- NCHtmlViewer::RegisterAction <- NCHtmlTagInfo::AlignPosition <- NCHtmlFrame::AlignPosition <- NCHtmlTable::AlignPosition <- NCHtmlFrame::AlignPosition <- NCHtmlViewer::AnalyzeHtml <- NCHtmlViewer::LoadHtmlFormString <- NCNPCHtmlViewer::LoadHtml <- NConsoleWnd::ReceiveHtmlMessage <- UGameEngine::OnNpcHtmlMessage <- UNetworkHandler::Tick <- Function Name=NpcHtmlMessageP <- UGameEngine::Tick <- UpdateWorld <- MainLoop
 
Hello everyone, can someone help me, when I am on the //admin window and click on char this error appears "pack lucera2" -->


2026.6.6 09:34:24OS : Windows Vista 6.2 (Build: 9200)CPU : AuthenticAMD Unknown processor @ 3604 MHz with 2047MB RAMVideo : NVIDIA GeForce GTX 980 (6094)General protection fault!History: NCWnd::AddChild <- NCWnd::RegisterChildWindow <- NCHtmlViewer::RegisterAction <- NCHtmlTagInfo::AlignPosition <- NCHtmlFrame::AlignPosition <- NCHtmlTable::AlignPosition <- NCHtmlFrame::AlignPosition <- NCHtmlViewer::AnalyzeHtml <- NCHtmlViewer::LoadHtmlFormString <- NCNPCHtmlViewer::LoadHtml <- NConsoleWnd::ReceiveHtmlMessage <- UGameEngine::OnNpcHtmlMessage <- UNetworkHandler::Tick <- Function Name=NpcHtmlMessageP <- UGameEngine::Tick <- UpdateWorld <- MainLoop
Проверь HTML админки или ник титул персонажа ,возможно оба, эсли там есть HTML символы и ник в коде где то не экранирован как текст HTML сломается.
 
KHEC У вас уже есть интерфейс с кнопкой автоматической охоты на монстров?
 
KHEC У вас уже есть интерфейс с кнопкой автоматической охоты на монстров?
Есть, настроенный под меня. Если вам надо такой же можете взять в GiraneForge сборке и к себе засунуть.

Я просто все байпасы поменял. Чтоб они были не шарные. Ну и собственно свои байпасы шарить не буду)

А так у меня обычный Гирановский авто Хантинг.

П.С. но и в случае с гираном если не будите менять байпасы на свои их всёравно надо прописывать отдельно в разрешённые. Короче тут нет решения проблеммы копипастом.
Если не знаете как это сделать то тут всё легко прикручиваете гиран Хантинг в .xdat и .u картинки уже все есть . Работать пока ничего не будит.
Нажимаете любую кнопку, клиент серверу пошлёт байпасс который скорее всего заблочится и напишит в командной строке сервера какой байпас был заблокирован. Собственно его надо будит записать в разрешённые.
 
Последнее редактирование:
хороший UI
 
Amazing Interface!
 
Версия 2.9 в ACIS 409 работает корректно; я протестирую версию 3.0 и сообщу вам о результатах.
 
найс спасибо
 
Назад
Сверху Снизу