gtools 18880 29

O temacie

Autor inż. Avallach

Zaczęty 17.12.2011 roku

Wyświetleń 18880

Odpowiedzi 29

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

gtools
2011-12-17, 18:24(Ostatnia zmiana: 2011-12-17, 18:42)
Jakiś czas temu Demonical Monk zaczął pracować nad narzędziem które umieszczone w katalogu z Gothicem, sprytnie wstrzykiwałoby do silnika swój kod i rozszerzało go o nowe funkcje. Działanie jest analogiczne jak w przypadku g2ext - nie mam pojęcia jakie są różnice, bo ani ja, ani Monk nigdy go nie używaliśmy. Właściwie to kiedy zaczynał tworzyć gtools, nawet nie wiedział że już podobny pakiet istnieje.

Zaletą tego narzędzia jest prostota jego użycia - po prostu umieszczamy w katalogu "system" kilka plików, a w pliku .ini moda dodajemy parametr włączający nowe funkcje. Odtąd możemy korzystać w skryptach z nowych funkcji zewnętrznych (externali), których wcześniej nie było. Dają one nowe możliwości, których część dawał do tej pory jedynie Ikarus - jednak on opierał się na niezwykle skomplikowanym wykorzystywaniu luk w systemie skryptów, co było niezwykle nieefektywne. Można to porównać z tapetowaniem pokoju obklejając go znaczkami pocztowymi. Wszystko robił komputer, więc najczęściej nie widzi się jak fatalne jest to rozwiązanie, jednak nieraz wiąże się ze sporym spadkiem wydajności i różnymi bugami. W przypadku gtools funkcje zaimplementowane są natywnie, więc działają z podobną prędkością jak normalne komponenty silnika.

Projekt jest we wczesnej fazie rozwoju, chociaż wielu niezwykle przydatnych funkcji można już spokojnie używać. Bardzo mile widziane są wszelkie komentarze czy propozycje nowych funkcji. Obecnie opracowana wersja jest przeznaczona do g2nk, jednak najprawdopodobniej zostanie też stworzony port do g1.


Przykładowe funkcje:

1. Odpalanie określonej funkcji po minięciu określonego odcinka czasu. Jeśli jako funkcję do odpalenia wybierzemy tą w której umieściliśmy samo polecenie, powstanie pętla z opóźnieniem czasowym - mechanizm analogiczny do tzw. tick tocków, jednak działający bardziej elegancko, w każdym świecie i nie zawieszający gry nawet przy znacznym obciążeniu - jest to spowodowane tym, że czas do ponownego wywołania jest liczony dopiero od końca wywołania poprzedniego.
Prototyp wygląda następująco:
func int gtl_setTimeout(var string name, var int time, var int argument)Pierwszy argument to nazwa funkcji do wywołania, drugi to czas za który ma to nastąpić (w milisekundach), a trzeci to liczba, która zostanie przekazana jako argument do wywoływanej funkcji.
Przykładowo:
func void opoznionaFunkcja (var int argument) {
Print(IntToString(argument));
gtl_setTimeout("opozionaFunkcja", 1000, argument + 1);
};
Funkcja raz wywołana będzie odtąd co sekundę wyświetlała na ekranie coraz większe liczby. Prawda że proste?
Osobiście wywaliłbym ostatni argument, bo nie wszystkie wywoływane funkcje potrzebują przekazania im czegoś jako argumentu, a nawet jeśli, to nie zawsze akurat jeden. A równie dobrze można robić to za pomocą zmiennych globalnych, czego i tak pewnie często nie będzie można uniknąć. Jednak decyzja należy do Monka.


2. Pobieranie obiektu z silnika znajdującego się pod danym adresem. Funkcja ta pełni ważną rolę w Ikarusie, wiele osób na pewno z niej nieraz korzystało. Pozwala choćby uzyskać dostęp do wyświetlanych na ekranie pasków i je modyfikować.
Przykład:
func void something() {
var oCGame game;
game = gtl_getInstanceByPtr(11208836);
game.testMode = 1;
}
Włączy tryb testowy (marvin).
Oczywiście tak jak w przypadku Ikarusa należy umieścić w skryptach odpowiednie definicje klas. Można je pożyczyć choćby właśnie z Ikarusa, są w pełni kompatybilne.


3. Wywoływanie takiego efektu, jaki miałoby wpisanie danego tekstu w konsolę. Jest to prosty sposób na ułatwienie sobie pracy przez skrypterów - wiele przydatnych funkcji jest dostępnych przez konsolę, a nie przez skrypty. Ta funkcja rozwiązuje ten problem.
Przykład:
gtl_evalConsole("zhighqualityrenderer");Wyłączy upraszczanie widocznego w oddali terenu.


To tylko kilka przykładowych funkcji. Jest ich znacznie więcej, chociaż część dopiero tworzona. Więcej można poznać na podlinkowanym poniżej wiki.



EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Pytanie: Macie zamiar to rozbudowywać o funkcje z TODO?
 


Mark56

Mark56

Moderator
som veľký magič
posty1632
Propsy1846
ProfesjaAnimator
  • Moderator
  • som veľký magič

Mark56
Moderator

gtools
#3 2012-01-04, 21:43(Ostatnia zmiana: 2012-01-04, 21:43)
a jezeli chce uzyc gtl_setTimeout do vyvolania funkcji z wieloma argumentami ?  :lol:
 


inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Nie da się, musisz je przekazać jako zmienne globalne. Dlatego uważam że ten jeden argument int jest bez sensu, bo rozwiązuje tylko ułamek przypadków, a w innych i tak trzeba korzystać ze zmiennych globalnych.

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Nie można by funkcji z gtoolsa zadeklarować w externals.d ?
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

gtools
#6 2012-01-04, 22:23(Ostatnia zmiana: 2012-01-04, 22:24)
No można. Ale po co? Plik "externals.d" to tylko notatnik dołączony do gmdk, on nie jest nawet w Gothic.src. Możesz tam zdefiniować cokolwiek, a nawet wkleić fragment "Pana Tadeusza". Nie rozumiem dlaczego to proponujesz, ale jeśli w związku z tym o czym piszę z Markkiem, to źle nas zrozumiałeś, nie ma to z tym nic wspólnego :D

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
To nie było do tematu xd BTW lol myślalłem że ten plik służy po to że podczas parsowania nie wywala błędu :lol2:
 

Demonical Monk

Demonical Monk

Użytkownicy
posty145
Propsy152
  • Użytkownicy
Nie, symbole zewnętrznych funkcji są rejestrowane przy inicjalizacji parsera mniej więcej w momencie samego odpalania gry/Spacera.

Pracuję nad zbindowaniem Pythona, umożliwiałoby to w trakcie przeskoczenie z parsera Deadalusa do skryptu Py i na odwrót :P
 

majaczek

majaczek

DreamVader
The Dreamer
posty404
Propsy191
Profesjabrak
  • DreamVader
  • The Dreamer

majaczek
DreamVader

gtools
#9 2012-02-07, 19:12(Ostatnia zmiana: 2012-02-07, 19:24)
Proponuję dodanie funkcji które kontrolują klawiaturę (funkcje OnKey, IsKeyPressed, ReadKey itp.)
jest to już możliwe z poziomu ikarusa :D

PS: czy będzie możliwe jednoczesne stosowanie gtools i ikarusa (gtools nie będzie zmieniał żadnych offsetów ani adresów?), byłoby to bardzo pomocne - możnaby wszystkie funkcje zaimplementowane w gtools z niego właśnie odpalać dla przyspieszenia, a wszystkie pozostałe przez ikarusa :)

EDIT: czy gtools będzie dostępny dla skryptów np. z MENU.DAT ? byłaby to ważna przewaga nad ikarusem...

EDIT: czy skrypty wykorzystujące gtools będzie można skompilować poza spacerem? (np przez gothic sourcera?) rozumiem że specjalny tryb uruchomienia jest potrzebny aby zarejestrować te funkcje, tylko czy to jest robione przez tą łatkę, czy wystarczy dodać listę dodatkowych funkcji? np. w konfiguracji takiego  GS-a?
 

Demonical Monk

Demonical Monk

Użytkownicy
posty145
Propsy152
  • Użytkownicy
Staram się nie powodować konfliktów z niczym, dodatkowe ficzery będą implementowane z czasem. Obecnie z czasem u mnie krucho, mam czas pracować tylko weekendami (i to nie zawsze), najnowsza wersja może się więc subtelnie opóźnić :|
 

Demonical Monk

Demonical Monk

Użytkownicy
posty145
Propsy152
  • Użytkownicy

Demonical Monk

gtools
#11 2012-02-14, 17:16(Ostatnia zmiana: 2012-02-14, 17:23)
Wraz z dniem dzisiejszym zdecydowałem się zamknąć publiczny rozwój projektu, nowe wersje będą wydawane od dziś na wyłączność grupy SoulFire. Z pewnością dalszym rozwojem publicznego forka zajmie się jakiś reverser obecny na forum ;)
 

Werewolf

Werewolf

Użytkownicy
Zielony goblin - za dnia biznesmen, w nocy złoczyńca
posty6346
Propsy2478
ProfesjaGracz
  • Użytkownicy
  • Zielony goblin - za dnia biznesmen, w nocy złoczyńca
Czym uzasadniona jest taka decyzja?
 
http://chomikuj.pl/Thorus12/ = Mody do Gothica - Przeznaczenie, Ludzie z Górniczej Doliny i inne! Mody do RimWorlda!

KOMPUTER:
Spoiler
Windows 7 Professional 64-bit SP1
-Intel Core i7 @ 4.00GHz   Technologia Haswell 22nm
-8,00GB 2-Kanałowy DDR3 @ 666MHz (9-9-9-24)
Gigabyte Technology Co., Ltd. Z97X-Gaming 3 (SOCKET 0)   28 °C
-X220W D-sub (1680x1050@60Hz)
-4095MBNVIDIA GeForce GTX 980 (Gigabyte)
-931GB Western Digital WDC WD10EZEX-08M2NA0 SCSI Disk Device (SATA)
-ASUS DRW-24F1ST a SCSI CdRom Device
-Realtek High Definition Audio

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Osiągnęliście swój cel, to chociaż nie spamujcie w tym temacie. Piszcie jak macie realne pytania/problemy, jednak jeśli dotyczą kontynuacji projektu to: nie, nie wierzę że znajdzie się ktokolwiek kto potrafiłby i chciał to kontynuować. Na tym forum jest ledwie paru aktywnych programistów, nie wiem czy mają jakąkolwiek wiedzę o reverse engineeringu i rozpracowywaniu tych wszystkich hacków na jakich opiera się działanie silnika/parser ani czy byłaby wystarczająca. Wsparcie jest zarzucone, więc w razie problemów musielibyście próbować co najwyżej kontaktować się z Monkiem np na forum SoulFire.

majaczek

majaczek

DreamVader
The Dreamer
posty404
Propsy191
Profesjabrak
  • DreamVader
  • The Dreamer
widzę że gtools9b znikł z downloadu... (całe szczęście skopiowałem na czas)
Ale mogliście zostawić chociaż WIKI ! :(

PS: Czy rozpatrujecie indywidualne prośby co do podzielenia się nowszą wersją narzędzia? jakby co to pozostanie mi Ikarus ;/
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
W tej chwili Monk implementuje obsługę klawiatury. Wydaje mi się że jak skończy przynajmniej ten etap, powinien zdecydować się na udostępnianie narzędzia przynajmniej indywidualnym osobom.

Wowoz

Wowoz

Użytkownicy
Wowoźny
posty3698
Propsy4862
NagrodyVV
Profesjabrak
  • Użytkownicy
  • Wowoźny
Jestes jego rzecznikiem prasowym czy co?  :lol2:
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

gtools
#17 2012-02-16, 10:48(Ostatnia zmiana: 2012-02-17, 18:44)
Po prostu wczoraj z nim o tym gadałem, a on sam widocznie nie przepada za udzielaniem się tu (zwłaszcza po ostatnich zdarzeniach). W ogóle cały ten temat założyłem na jego prośbę, miałem też udział w tworzeniu wiki i jako osoba która w przeciwieństwie do niego jest obdarzona niechlubną modderską przeszłością staram się wskazywać funkcje które mogłyby się najbardziej przydawać skrypterom.

majaczek

majaczek

DreamVader
The Dreamer
posty404
Propsy191
Profesjabrak
  • DreamVader
  • The Dreamer

majaczek
DreamVader

gtools
#18 2012-02-17, 10:33(Ostatnia zmiana: 2012-02-17, 10:34)
@DemonicalMonk

czy mógłbyś przywrócić wiki? nawet jeśli narzędzie nie jest publiczne, to ci co już pobrali chcieliby wiedzieć jak się z tego korzysta, a poza tym miłoby było śledzić postęp na wiki. Poza tym zgłaszam się na betatestera (alfatestera?) jeśli jakichś potrzebujesz. Nie spowoduję przecieku - słowo. O każde użycie poza zamkniętymi testami będę się pytał (aby nie było że niekompletna wersja wycieknie z moim modem :P). Jestem w stanie także udzielić wsparcia jako początkujący programista (co prawda pierwsze programy pisałem jako siedmiolatek na Amstradzie, ale jeszcze nie ukończyłem pierwszego roku studiów infomatycznych), jednak nie jestem osobą która szuka poradnika "Jak nauczyć się pisać w XXXXXX w 7 dni" (co jest od podstaw niemożliwe, takie dzieła kupują tylko ci co się nie znają na rzeczy), ale mam spore doświadczenie i niewielką wiedzę techniczną. Niestety nie znam się zbytnio na Reverse Engeeneringu (z RE umiem tylko cheatować grę uniwersalnym edytorem pamięci, lub edytować zapisy gry nie zabezpieczone sumą kontrolną, w celu zmienienia prostej i łatwej do znalezienia wartości jak np. ilość złota) i nie podejmowałem większych prób nauczenia się go - ale jeśli trzeba mogę to nadrobić, bo Asemblera x86 już znam trohę (tylko z IN i OUT sobie nie radzę bo zależnie ilebitowe rejestry się użyje to trafia do zupełnie innego portu), wystarczająco na tyle by napisać proste demko, jednak przypuszczam że w RE więcej kodu w ASMie się czyta niż pisze :P.
 

Demonical Monk

Demonical Monk

Użytkownicy
posty145
Propsy152
  • Użytkownicy

Demonical Monk

gtools
#19 2012-02-17, 14:42(Ostatnia zmiana: 2012-02-17, 14:43)
Wiki przywrócone.

Cytuj
Jestes jego rzecznikiem prasowym czy co? :lol2:  
Nawet jeśli to co?

Co do testów i pomocy - później.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry