Informacje o klasach/metodach

0

Witam,

Na wstępie zaznaczę, że mój problem będzie dosyć nietypowy. Dostałem do obsługi program (prosty emulator zachowania jednostek w grze) z wbudowanym kompilatorem pascala, w którym można pisać skrypty w tymże celu. Do dyspozycji jest szereg klas (odpowiadających postaciom, przedmiotom, ich zachowaniu itp). Niestety, lista klas, którą posiadam (i ich metod) jest niekompletna, a osoba kontaktowa odpowiedzialna za ten program dysponuje jeszcze skromniejszą listą. W internecie niestety nie znajdują się żadne informacje na ten temat.
Ponieważ wcześniej z Pascalem nie miałem do czynienia (chociaż z samym programowaniem, w tym obiektowym, już tak), nie jestem pewien, czy i jakich funkcji mógłbym użyć wewnątrz samego skryptu, by 'wydobyć' potrzebne mi informacje: listę klas dostępnych w skrypcie i ich metod. Z małego researchu w internecie niestety nie wyciągnąłem za wiele.
Jeśli ktoś miał do czynienia z php, to tam była funkcja: http://www.php.net/manual/en/function.get-declared-classes.php - o coś podobnego lub coś dającego te same rezultaty mi chodzi.
Dodam jeszcze, że użyłem metody TObject.UnitName - zwróciła mi nazwę jednostki (unit), która zawiera pożądane przeze mnie klasy, ale co z tym zrobić dalej - nie wiem (wszystko to jest jakby "ukryte" wewnątrz programu).
Będę wdzięczny za jakieś sugestie lub wskazówki!

0

Przepraszam za bycie następnym piszącym skrypty. Użyłem tylko nazewnictwa, które mam podane w programie. Wybacz tak rażącą profanację.

0

Rozumiem i przyswoiłem. Co do poznawania języków programowania - za najlepszą metodę uznaję właśnie korzystanie z nich. Wolałbym jednak, żeby wątek ten nie przekształcił się w akademicką dyskusję nt. nomenklatury czy osobistych poglądów na temat kiedy lub w którym momencie "dozwolone" jest korzystanie z danego języka. Bądź co bądź, mój problem pozostaje nadal otwarty :)

2

Przede wszystkim w czym jest napisany ten program Delphi czy Lazarus czy jeszcze coś innego (podaj też wersję z której korzystasz). Pisałeś, że program ten korzysta z zewnętrznego kompilatora pascala - na jakiej zasadzie to działa? coś w stylu dodatkowych wtyczek DLL czy przebudowywany jest cały program? Jeśli DLL to podejrzyj sobie przykładową dll'kę i listę modułów które importuje, z pewnością będą tam klasy, których będzie można użyć w bibliotece.
W nowszych wersjach Delphi można generować sobie diagramy klas, w starszych wersjach czy w lazarusie jest to trudniejsze, ale są zewnętrzne narzędzia do tworzenia dokumentacji lub diagramów UML, które powinny pokazać ci zależności pomiędzy klasami.

0

Zarejestrowałem się ;)
Szopenfx - dziękuję za odpowiedź. Program nie korzysta z zewnętrznego kompilatora, jakby to ująć... jest on częścią tego programu, jednym z jego "okienek" (rany, jak to tragicznie lamersko brzmi), w którym można pisać kod (lub otworzyć z zewnętrznego pliku) - ot, takie coś: http://i.imgur.com/wBDy4K5.jpg
Przez taką formę czuję, że mam strasznie związane ręce i muszę błądzić po omacku, by cokolwiek zrobić.

2

Czyli jednak jest to kompilowane czy nie? bo jeśli możesz kompilować kod to masz możliwości takie jakie daje ci pascal czyli niemal nieograniczone + to co masz do dyspozycji czyli klasy zaprojektowane przez kogoś. Jeśli jednak jest to w formie skryptu interpretowanego to tu jest już gorsza sprawa bo nie wiadomo ile zostało zaimplementowane z prawdziwego pascala. Czy do programu jest dodawany prawdziwy kompilator np. fpc? Zobacz co dzieje się pod tym przyciskiem "Play" (a.k.a. run) Trudno dać ci tu listę metod do użycia jak nie możemy zajrzeć pod maskę.

0

Jeśli dobrze rozumiem pojęcia - to jest w formie skryptu interpretowanego, jak napisałeś.
Do programu nie jest nic dodawane.
Po wciśnięciu przycisku play wykonuje się napisany kod - jeśli, dajmy na to, użyję kodu odpowiedzialnego za ruch postaci w grze (sam program komunikuje się z grą), to postać zacznie iść.

2

Jeśli nie masz źródeł do samego programu to niewiele zrobisz, po skompilowaniu programu nie możesz odwrócić tego procesu do czytelnej formy. Jeśli autor nie zaimplementował podobnej funkcji o którą pytasz to standardowo w pascalu takiej nie ma. Czyli bez dokumentacji ani rusz.
Gdybyś miał kod źródłowy tej aplikacji jak już pisałem mógłbyś wygenerować diagram klas i na jego podstawie szybko odnaleźć te przeznaczone do użycia w interpreterze.

0

Rozumiem, bardzo dziękuję za poświęcony czas i odpowiedź.

2

A napisz jeszcze czy to jest gra, w której chodzi o to, aby w Pascalu zaprogramować sobie ruchy czegoś tam? Piszesz kod, kompilujesz/uruchamiasz i to co napisałeś się wykonuje?

Jeśli ta gra ma wbudowany kompilator, który jest integralnym jej elementem i bez niego nie gra była by nie do użytku, to na pokładzie ma FPC, o ile projekt gry jest otwarty (z otwartym kodem), bo inaczej licencja na to by nie pozwalała; W przypadku posiadania kompilatora FPC, miałbyś do dyspozycji po pierwsze składnię, jaką kompilator rozumie, a po drugie część biblioteki standardowej, więc było by dużo możliwości do wykorzystania;

Ale obstawiam, że gra jest projektem zamkniętym i wcale nie posiada kompilatora, tylko jakiś interpreter z VM'ką, dzięki którym można wykonywać kod, który wygląda jak Pascal, ale działa to w bliżej nieokreślony sposób; Nieokreślony, dlatego że żaden użytkownik pewnie nie posiada kodu źródłowego gry, więc nie ma jak tego sprawdzić; No i pewnie część funkcjonalności (chodzi mi o bibliotekę standardową) nie jest udostępniona lub jest zablokowana, żeby za bardzo nie móc omijać narzuconych zasad (czyli nie kombinować w celu oszukiwania);

Ale nie wiem jaka to gra, jak się w nią gra ani na jakiej licencji została wydana, więc można jedynie spekulować.

0

Gra jest całkowicie niezależna od programu, o którym mowa i nie posiada interpretera - sam program na podstawie napisanego kodu "wymusza" określone działania w grze i w tym miejscu kończy się rola Pascala, moim zdaniem.

1

No to jeżeli kod wpływa na grę otwartą w osobnym oknie jako osobny proces to możliwości komunikacji jest kilka. Albo Sockety, ale tego nie ogarniam w komunikacji po localhostcie jak na przykład pod (Express)Ivo do gadania Jacusiem. Bardziej popularne i udokumentowane z przykładami użycia pod popularnymi programami, jak wspomiany produkt Ivo Software, zapomniany trochę mIRC czy przeglądarki www - mechanizm DDE. Ewentualnie mechanizm "rurek" - patrz na MSDN wszystkie informacje o Pipes. Lub jest to też realizowane poprzez komunikaty wysyłane do okna gry poprzez funkcje WinAPI SendMessage lub PostMessage. Ostatecznie może to być również dokonywane poprzez pisanie po pamięci procesu gry.

Przy rozwiązaniach jak pipes/komunikaty/pamięc procesu - można spróbować namierzyć co i jak jest słane jeżeli zrobi się injekcje dllką w proces gry lub zrobi się aplikację zakładająca globalnego Hooka na wspomiane funkcje API do komunikatów lub "podczepi się" pod funkcje obsługi komunikatów okna gry (co można również zrobić poprzez injekcje albo dll spoofing). Ewentualnie założyć też Hook'i na funkcje API do operacji na pamięci i otwierania procesu aby mieć pewnośc kiedy funkcja otwiera proces o PIDzie tej gry, a póżniej mając zwrócony z funkcji OpenProces uchwyt (typ THandle) móc Hookowac tylko odwołania do tego uchwytu przy pisaniu lub czytaniu z pamięci.

Nadal jednak niewiele to może pomóc w ustaleniu niepoznanych i nieudokomentowanych funkcji tej VM'ki z zaimplemntowanym Pascalem. Do tego najlepiej przydała by się dokumentacja autora lub sam kod źródlowy całego oprogramowania do "sterowania" tą grą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1