OldSchoolHack

Registrieren / Anmelden Deutsch

Benutzersuche: Jules19

Such-Informationen
Jules19
Themen im Forum
Thema Forum Letzter Beitrag Beiträge Zugriffe
icon

Go to first new post String-Drawing funktioniert nicht Erstellt am: So 24. Jan 2016, 01:00

Jules19

preview Vorschau

Go To Post

Hi,

zuletzt habe ich OSHGui 2014 verwendet. Dort ging das String-Drawing noch. Ich habe nun die neueste trunk-Version geladen.
Seitdem crasht es bei Strings. Ich vermutete erstmal, dass die Font nicht geladen werden konnte, aber...


TEXT Code:
  1. font = shared_ptr {lineSpacing=0.000000000 pointSize=8.00000000 antiAliased=false ...} [1 strong ref, 1 weak ref] [make_shared]


Ist also alles wie gewollt (Arial, 8.0f, false - genau wie im Sample). Code zum rendern:

TEXT Code:
  1. g.DrawString("bla", Application::Instance().GetDefaultFont(), Drawing::Color::Green(), Drawing::PointF(500, 500));

Hier ist der Call-Stack:
TEXT Code:
  1. meinHack.dll!OSHGui::Drawing::Direct3D9Texture::CreateDirect3D9Texture(const OSHGui::Drawing::Size<float> & size, _D3DFORMAT format) Zeile 269
  2. meinHack.dll!OSHGui::Drawing::Direct3D9Texture::Direct3D9Texture(OSHGui::Drawing::Direct3D9Renderer & _owner, const OSHGui::Drawing::Size<float> & _size) Zeile 173
  3. meinHack.dll!OSHGui::Drawing::Direct3D9Renderer::CreateTexture(const OSHGui::Drawing::Size<float> & size) Zeile 148
  4. meinHack.dll!OSHGui::Drawing::FreeTypeFont::Rasterise(unsigned int startCodepoint, unsigned int endCodepoint) Zeile 193
  5. meinHack.dll!OSHGui::Drawing::Font::GetGlyphData(unsigned int codepoint) Zeile 65
  6. meinHack.dll!OSHGui::Drawing::Font::DrawText(OSHGui::Drawing::GeometryBuffer & buffer, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & text, const OSHGui::Drawing::Point<float> & position, const OSHGui::Drawing::Rectangle<float> * clip, const OSHGui::Drawing::ColorRectangle & colors, const float spaceExtra, const float scaleX, const float scaleY) Zeile 160
  7. meinHack.dll!OSHGui::Drawing::Graphics::DrawString(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & text, const std::shared_ptr<OSHGui::Drawing::Font> & font, const OSHGui::Drawing::Color & color, const OSHGui::Drawing::Point<float> & origin) Zeile 268
  8. meinHack.dll!DirectXHooks::EndScene(IDirect3DDevice9 * pDevice) Zeile 108

Diese Zeile (264) hier failed wohl und schmeißt die Exception: (Direct3d9Texture.cpp)
TEXT Code:
  1. if (FAILED(D3DXCreateTexture(owner.GetDevice(), static_cast<UINT>(textureSize.Width), static_cast<UINT>(textureSize.Height), 1, 0, format, D3DPOOL_MANAGED, &texture)))
  2. {
  3. throw Misc::Exception();
  4. }



Wie kann ich das beheben?
Die Initialisierungsroutinen sind genau wie im Sample-Projekt (wie damals eben auch schon).

Edit: Gerade noch mal eine Custom-Form erstellt. Wenn ich einen Button adde (ohne Text), geht alles. Sobald ich den Text für den Button setze, crasht es.
Bugtracker

So 24. Jan 2016, 16:27

von KN4CK3R Go to last post
5 1152
icon

Go to first new post String-Drawing funktioniert nicht Erstellt am: So 24. Jan 2016, 01:00

Jules19

preview Vorschau

Go To Post

Hi,

habe ich natürlich nicht probiert. Aber ja, Sample geht. Und ja, ist CS:S... (Threaded Rendering Mode, Windowed Mode)
Ist ein Fix in Aussicht oder ist das was schlimmeres™? Kann ich irgendwie beim debuggen helfen?

Damals (26.07.2014) ging es noch (mit dem neuen Renderer war das auch schon).

Danke!
Bugtracker

So 24. Jan 2016, 16:27

von KN4CK3R Go to last post
5 1152
icon

Go to first new post String-Drawing funktioniert nicht Erstellt am: So 24. Jan 2016, 01:00

Jules19

preview Vorschau

Go To Post

Komisch, dass es damals ging... wtf?!
Mit der neuen Aktualisierung geht es nun. In Direct3D9ExRenderer.cpp musst du noch die Pfade anpassen (Zeile 3 bis 6):

TEXT Code:
  1. #include "../Direct3D9/Direct3D9GeometryBuffer.hpp"
  2. #include "../Direct3D9/Direct3D9RenderTarget.hpp"
  3. #include "../Direct3D9/Direct3D9ViewportTarget.hpp"
  4. #include "../Direct3D9/Direct3D9TextureTarget.hpp"

Interessante Änderung, die da nötig ist. Ist ja an sich nicht viel. Mit meinem nicht wirklich vorhandenen Wissen über DirectX hätte ich den Fehler nie gefunden.

Danke!
Bugtracker

So 24. Jan 2016, 16:27

von KN4CK3R Go to last post
5 1152
icon

Go to first new post [Help] Renderer unabhängig von Fenstern verwenden Erstellt am: Fr 25. Jul 2014, 23:35

Jules19

preview Vorschau

Go To Post

Hi,

ist es möglich, den Renderer zum Zeichnen von ESP o. ä. zu verwenden? Ich habe bereits viele Konstellationen versucht, so dass ich unabhängig davon zeichnen kann, ob Application::IsEnabled() true liefert. Leider kriege ich es nicht hin.

Wie realisiere ich das, oder ist das nicht vorgesehen?

Danke!
Bugtracker

Sa 26. Jul 2014, 16:18

von Jules19 Go to last post
8 403
icon

Go to first new post [Help] Renderer unabhängig von Fenstern verwenden Erstellt am: Fr 25. Jul 2014, 23:35

Jules19

preview Vorschau

Go To Post

Hi,

ich habe nun auf den neuen Branch umgestellt. Gefällt mir an sich schon besser, auch vom Compilen her. Problem: es scheint sehr unstabil zu sein. Sieht für mich nach Threadingproblemen aus, daher undebugbar. Habe schon versucht externe Calls außerhalb des DX-Threads zu deaktivieren. Crasht trotzdem. Selbst wenn ich den kompletten Rendercode auskommentiere.

Hotkey via


TEXT Code:
  1.         app.RegisterHotkey(Hotkey(Key::Insert, []
  2.         {
  3.             Application::Instance().Toggle();
  4.         }));


scheinen auch nicht zu gehen (ausm Sample kopiert).

Schade...

Gruß
Bugtracker

Sa 26. Jul 2014, 16:18

von Jules19 Go to last post
8 403
icon

Go to first new post [Help] Renderer unabhängig von Fenstern verwenden Erstellt am: Fr 25. Jul 2014, 23:35

Jules19

preview Vorschau

Go To Post

"Geht nicht" heißt, dass auf den Hotkey einfach nicht reagiert wird. Der MessageHook sieht so aus:

TEXT Code:
  1.  
  2. LRESULT CALLBACK Gui::MessageHook(int code, WPARAM wParam, LPARAM lParam)
  3. {
  4. if (lParam & 0x80000000 || lParam & 0x40000000)
  5. {
  6. return CallNextHookEx(Implode::Gui->messageHookHandle_, code, wParam, lParam);
  7. }
  8.  
  9. if (code == HC_ACTION)
  10. {
  11. //if (reinterpret_cast<LPMSG>(lParam)->message == WM_MOUSEMOVE)
  12. //{
  13. // return 0;
  14. //}
  15.  
  16. if (Implode::Gui->input_.ProcessMessage(reinterpret_cast<LPMSG>(lParam)))
  17. {
  18. return 1;
  19. }
  20. }
  21.  
  22. return CallNextHookEx(Implode::Gui->messageHookHandle_, code, wParam, lParam);
  23. }

Auf Threadingprobleme komme ich, da es für mich ziemlich zufällig scheint, wann es crasht. Meiner Erfahrung nach passiert sowas bei häufig bei Threadingprobleme. Ist aber nur ein Verdacht. Ich versuche, das weiter zu beobachten.
Bugtracker

Sa 26. Jul 2014, 16:18

von Jules19 Go to last post
8 403
icon

Go to first new post [Help] Renderer unabhängig von Fenstern verwenden Erstellt am: Fr 25. Jul 2014, 23:35

Jules19

preview Vorschau

Go To Post

Danke, der Fehler mit dem Input ist behoben. Ich nutze nun die Threaded-Version. Wichtig war die PopulateMessages() Funktion. Die hatte ich vorher nicht drin. Problem war auch folgendes: der Thread, der DirectX verwendet, ist nicht unbedingt der Message-Thread. Lösung (kann vermutlich besser gemacht werden): alle Threads auf WM_GETMESSAGE hooken und sobald ein Hook aufgerufen wird, alle Hooks entfernen außer den, woher der Call kam. So habe ich jetzt garantiert, dass ich immer den richtigen Inputthread erwische. Nun funktionieren auch die Hotkeys. Sorry, dass ich dachte, dass es an der Lib liegt ;-)

Ich probiere nun weiter rum, wie sich das mit den Crashes verhält. Das debuggen gestaltet sich da schwierig. Fest steht, dass es nur crasht, solange ich OSHGui initialisiere. Kann aber auch sein, dass dadurch andere Seiteneffekte ausgelöst werden, die mit der Lib an sich nichts zu tun haben...
Bugtracker

Sa 26. Jul 2014, 16:18

von Jules19 Go to last post
8 403
icon

Go to first new post [Help] Renderer unabhängig von Fenstern verwenden Erstellt am: Fr 25. Jul 2014, 23:35

Jules19

preview Vorschau

Go To Post

...so einfach :-D Werde ich gleich umbauen...
Die Crashprobleme sind weg. Es lag - wie du richtig geraten hast - am Hook.

Ich werde nun noch rumsuchen, wie ich den Windows-Cursor im Hauptmenü ausblende. ShowCursor() reicht nicht aus - offensichtlich. Wenn das fertig ist, poste ich mal meine Lösung, mit der man das Menü dann problemlos Ingame und im Menü verwenden kann.
Bugtracker

Sa 26. Jul 2014, 16:18

von Jules19 Go to last post
8 403
icon

Go to first new post [Help] Verhalten von Input in Source-Games Erstellt am: Do 24. Jul 2014, 22:33

Jules19

preview Vorschau

Go To Post

Hi,

ich verwende das OSHGui seit heute und muss sagen, dass es mir bisher gut gefällt. Einziges Problem was ich zurzeit noch habe: Ingame wird die Maus von der Engine immer wieder sofort zentriert, eine Bedienung ist unmöglich. Probleme mit Tastatureingaben konnte ich Ingame durch einen Hook von IBaseClientDLL::IN_KeyEvent umgehen. Das gilt jedoch leider nicht für die Menü-Ansicht (dort, wo man die Console sieht).

Wie löse ich dieses Problem am elegantesten? Soweit ich das sehe, wird der Windows Message Hook return bei den Inputs ignoriert, da der Hook für das Menü im D3D-Thread läuft, jedoch nicht im Input-Thread des Spiels.

Ideen sind:
a) Message Hook für den Input-Thread erstellen und einfach Eingabe- und Mauspositionsnachrichten droppen. Allerdings weiß ich nicht, ob das Menü dann noch funktioniert. Und es ist viel Aufwand, den richtigen Thread für die Inputverarbeitung zu finden.
b) Weiter in die Engine graben und versuchen, noch tiefere Funktionen als IBaseClientDLL::IN_KeyEvent zu finden (dürfte machbar sein). Allerdings behebt das nicht das Problem mit der Maus.

Vielen Dank schon mal im Voraus für jegliche Hilfe :-)

(Sorry, falls ich im falschen Forum bin; aber im übergeordneten Forum kann ich leider keine Beiträge erstellen?)
Bugtracker

Sa 26. Jul 2014, 00:36

von KN4CK3R Go to last post
7 721
icon

Go to first new post [Help] Verhalten von Input in Source-Games Erstellt am: Do 24. Jul 2014, 22:33

Jules19

preview Vorschau

Go To Post

So habe ich das früher auch gemacht. Ich dachte, das geht eleganter. Ich werde mal was basteln und die Lösung hier posten.
Bugtracker

Sa 26. Jul 2014, 00:36

von KN4CK3R Go to last post
7 721
icon

Go to first new post [Help] Verhalten von Input in Source-Games Erstellt am: Do 24. Jul 2014, 22:33

Jules19

preview Vorschau

Go To Post

Gerade in der MSDN gefunden btw. Du tust aber genau das in der WindowsMessage.cpp ;-)

OSHGui zeichnet den Cursor selber. Trotzdem buggt es zurzeit noch heftig, der Cursor bewegt sich nicht mehr wenn ich SetCursorPos hooke. Ich schaue mal weiter...

Um Links zu sehen, musst du dich registrieren

Important  Do not use the Um Links zu sehen, musst du dich registrieren or Um Links zu sehen, musst du dich registrieren macros to extract the x- and y- coordinates of the cursor position because these macros return incorrect results on systems with multiple monitors. Systems with multiple monitors can have negative x- and y- coordinates, and LOWORD and HIWORD treat the coordinates as unsigned quantities.

Aktueller Ansatz:


TEXT Code:
  1.  
  2. BOOL WINAPI Gui::SetCursorPos(int X, int Y)
  3. {
  4. Implode::Gui->mousePos_ = { X, Y };
  5.  
  6. if (Application::Instance()->IsEnabled() && SDK::Engine->IsConnected() && SDK::Engine->IsInGame() && !SDK::Engine->Con_IsVisible() && !SDK::Engine->IsLevelMainMenuBackground())
  7. {
  8. Application::Instance()->ProcessMouseMessage(MouseMessage(MouseMessage::Move, MouseButton::None, Drawing::Point(X, Y), 0));
  9. }
  10.  
  11. return Implode::Gui->hookSetCursorPos_(X, Y);
  12. }
Bugtracker

Sa 26. Jul 2014, 00:36

von KN4CK3R Go to last post
7 721
icon

Go to first new post [Help] Verhalten von Input in Source-Games Erstellt am: Do 24. Jul 2014, 22:33

Jules19

preview Vorschau

Go To Post

Hab's. Ich poste mal mein Resultat. Danke für eure Hilfe!

@Knacker, da ich mich nun intensiver mit dem OSHGui beschäftigen werde und sicher Bugs finden werde: hast du inzwischen einen Tracker oder soll das hier ins Forum? (nutze den letzten Trunk)

TEXT Code:
  1. void Gui::Toggle()
  2. {
  3.     auto app = Application::Instance();
  4.  
  5.     int width, height;
  6.     SDK::Engine->GetScreenSize(width, height);
  7.  
  8.     POINT result;
  9.  
  10.     if (app->IsEnabled())
  11.     {
  12.         hookGetCursorPos_(&mousePosOpen_);
  13.         result = { width / 2, height / 2 };
  14.  
  15. ClientToScreen(GetForegroundWindow(), &result);
  16.     }
  17.     else
  18.     {
  19.         result = mousePosOpen_;
  20.     }
  21.  
  22.     hookSetCursorPos_(result.x, result.y);
  23.     app->Toggle();
  24. }
  25.  
  26. class ErsteForm : public Form
  27. {
  28. private:
  29.     Button *ersterButton;
  30.     void InitializeComponent()
  31.     {
  32.         this->SetText("ErsteForm");
  33.         ersterButton = new Button();
  34.         ersterButton->SetText("klick mich");
  35.         ersterButton->GetClickEvent() += ClickEventHandler(std::bind(&ErsteForm::ersterButton_Click, this, std::placeholders::_1));
  36.         this->AddControl(ersterButton);
  37.     }
  38. public:
  39.     ErsteForm()
  40.     {
  41.         InitializeComponent();
  42.     }
  43. private:
  44.     void ersterButton_Click(Control *sender)
  45.     {
  46.         MessageBox::Show("Ich wurde angeklickt!");
  47.     }
  48. };
  49.  
  50. HRESULT WINAPI Gui::EndScene(LPDIRECT3DDEVICE9 pDevice)
  51. {
  52.     Application *app = Application::Instance();
  53.  
  54.     if (!Implode::Gui->initialized_)
  55.     {
  56.         Implode::Gui->initialized_ = true;
  57.         Implode::Gui->messageHookHandle_ = SetWindowsHookExW(WH_GETMESSAGE, MessageHook, 0, GetCurrentThreadId());
  58.  
  59.         app->Create(new Drawing::RendererDX9(pDevice));
  60.  
  61.         int width, height;
  62.         SDK::Engine->GetScreenSize(width, height);
  63.         app->GetRenderer()->SetRenderRectangle(Drawing::Rectangle(0, 0, width, height));
  64.  
  65.         app->Run(std::shared_ptr<Form>(new ErsteForm()));
  66.     }
  67.  
  68.     if (SDK::Engine->IsConnected() && SDK::Engine->IsInGame() && !SDK::Engine->Con_IsVisible() && !SDK::Engine->IsLevelMainMenuBackground())
  69.     {
  70.         app->GetRenderer()->Begin();
  71.         Implode::ClientHooks->EndScene(pDevice, app->GetRenderer());
  72.         app->Render();
  73.         app->GetRenderer()->End();
  74.     }
  75.  
  76.     return Implode::Gui->hookEndScene_(pDevice);
  77. }
  78.  
  79. LRESULT CALLBACK Gui::MessageHook(int code, WPARAM wParam, LPARAM lParam)
  80. {
  81.     if (lParam & 0x80000000 || lParam & 0x40000000)
  82.     {
  83.         return CallNextHookEx(Implode::Gui->messageHookHandle_, code, wParam, lParam);
  84.     }
  85.  
  86.     if (code == HC_ACTION)
  87.     {
  88.         if (reinterpret_cast<LPMSG>(lParam)->message == WM_MOUSEMOVE)
  89.         {
  90.             return 0;
  91.         }
  92.  
  93.         if (Implode::Gui->input_.ProcessMessage(reinterpret_cast<LPMSG>(lParam)))
  94.         {
  95.             return 1;
  96.         }
  97.     }
  98.  
  99.     return CallNextHookEx(Implode::Gui->messageHookHandle_, code, wParam, lParam);
  100. }
  101.  
  102. BOOL WINAPI Gui::SetCursorPos(int X, int Y)
  103. {
  104.     Implode::Gui->mousePos_ = { X, Y };
  105.  
  106.     if (Application::Instance()->IsEnabled() && SDK::Engine->IsConnected() && SDK::Engine->IsInGame() && !SDK::Engine->Con_IsVisible() && !SDK::Engine->IsLevelMainMenuBackground())
  107.     {
  108.         POINT point;
  109.  
  110.         Implode::Gui->hookGetCursorPos_(&point);
  111.         ScreenToClient(GetForegroundWindow(), &point);
  112.         Application::Instance()->ProcessMouseMessage(MouseMessage(MouseMessage::Move, MouseButton::None, Drawing::Point(point.x, point.y), 0));
  113.  
  114.         return 0;
  115.     }
  116.  
  117.     return Implode::Gui->hookSetCursorPos_(X, Y);
  118. }
  119.  
  120. BOOL WINAPI Gui::GetCursorPos(LPPOINT lpPoint)
  121. {
  122.     auto active = Implode::Gui->hookGetCursorPos_(lpPoint);
  123.  
  124.     if (Application::Instance()->IsEnabled() && SDK::Engine->IsConnected() && SDK::Engine->IsInGame() && !SDK::Engine->Con_IsVisible() && !SDK::Engine->IsLevelMainMenuBackground())
  125.     {
  126.         lpPoint->x = Implode::Gui->mousePos_.x;
  127.         lpPoint->y = Implode::Gui->mousePos_.y;
  128.     }
  129.  
  130.     return active;
  131. }
  132.  
  133. int __fastcall ClientHooks::IN_KeyEvent(void *pThis, int edx, int eventcode, ButtonCode_t keynum, const char *pszCurrentBinding)
  134. {
  135.     if (keynum == ButtonCode_t::KEY_INSERT && eventcode)
  136.     {
  137.         Implode::Gui->Toggle();
  138.     }
  139.  
  140.     if (OSHGui::Application::Instance()->IsEnabled())
  141.     {
  142.         return 0;
  143.     }
  144.  
  145.     return Implode::ClientHooks->vmtManager_->GetMethod<IN_KeyEvent_t>(OffsetIN_KeyEvent)(pThis, eventcode, keynum, pszCurrentBinding);
  146. }
Bugtracker

Sa 26. Jul 2014, 00:36

von KN4CK3R Go to last post
7 721