[G2NK] Funkcje renderujące z LeGo 5026 7

O temacie

Autor Khantor

Zaczęty 6.03.2020 roku

Wyświetleń 5026

Odpowiedzi 7

Khantor

Khantor

Użytkownicy
posty59
Propsy12
Profesjabrak
  • Użytkownicy
Witam.
Chciałem skorzystać z funkcji do renderowania przedmiotów (oCItem_Render, Render_AddItem) ale nie mam zielonego pojęcia jak się za to zabrać. Nie ważne co próbowałem do nich wstawiać, nic się nie renderowało. Przeszukałem TheModders, WorlfOfGothic i niczego na temat tych funkcji nie znalazłem (albo jestem ślepy). Na wiki LeGo też nie ma żadnego wyjaśnienia ani przykładu ich użycia. Jeśli ktoś miałby chwilę czasu to mógłby mi wytłumaczyć jak laikowi jak się tych funkcji używa? Skąd należy brać argumenty tej funkcji? Te funkcje można tak po prostu wywołać, czy trzeba je wywołać razem z innymi funkcjami, żeby w ogóle działały? Byłbym bardzo wdzięczny za naprowadzenie.
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota

Siemekk
Złote Wrota

[G2NK] Funkcje renderujące z LeGo
#1 2020-03-06, 11:43(Ostatnia zmiana: 2020-03-06, 15:31)
Funkcja musi byc wywolana co klatkę.
Musisz mieć stworzony na ekranie obiekt zCView, oraz wskaźnik do przedmiotu.
Najprostszy przykład to taki(Nie wiem czy argumenty sa w odpowiedniej kolejności):
var int v;
var C_Item it;
if(Hlp_isValidHandle (v))
{
v= View_Create(0, 0, 2048, 2048);
View_Open(v);
};

it = Npc_GetReadiedWeapon(hero);

if(_@(it))
{
var oCNpc her; her = Hlp_GetNpc(hero);
oCItem_Render(_@(it), getPtr(v), her.inventoryWorld, floatnull);
};

Nie pamirtam, cby potzebnr było getPtr, oraz jak nazywała się zmienna z oCNpc, poszukaj jej nazwy w klasie.
Kod powinien działać.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Khantor

Khantor

Użytkownicy
posty59
Propsy12
Profesjabrak
  • Użytkownicy
Dzięki Siemekk za odpowiedź, ale niestety kod nie działa. Próbowałem trochę pokombinować, wydaje mi się, że w linijce

if(Hlp_isValidHandle (v))

powinno być

if(!Hlp_isValidHandle (v))

(Próbowałem rzecz jasna z wykrzyknikiem i bez) W argumentach funkcji "oCItem_Render", "getPtr(v)" i "her.inventoryWorld" powinny być chyba odwrotnie, ale nie ważne jakie zmienne wstawiałem za "inventoryWorld" i czy za "getPtr(v)" wstawiałem samo "v" czy "view_getPtr(v)", zawsze był crash.

Próbowałem zamiast funkcji oCItem_Render wsadzić Render_AddItem i i tak nic się nie renderuje.  ;( Rozumiem, że muszę mieć stworzony obiekt zCView i się do niego odwołać w oCItem_Render, ale kompletnie nie wiem czym jest argument "wld" w tej funkcji oCItem_Render(var int itm, var int wld, var int view, var int rot).

Także gdyby ktoś miał chwilę wolnego czasu (@Siemekk ? :lol:) i cierpliwości, mógłby to wyjaśnić? Bo jak funkcja nie działa to ciężko mi stwierdzić co konkretnie robię źle (o ile cokolwiek robię dobrze).
 

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
https://forum.worldofplayers.de/forum/threads/1500134-Gothic-II-QuickBar
To mój stary, bardzo stary kod QuickSlota. Jeżeli dalej ci to nie pomoże, to wal śmiało - spróbujemy 2 metodą.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
A pakiet Render jest w ogóle zainicjowany?
LeGo_Init(LeGo_All | LeGo_Render);
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Khantor

Khantor

Użytkownicy
posty59
Propsy12
Profesjabrak
  • Użytkownicy
Znowu ja po paru dniach próbowania.

A pakiet Render jest w ogóle zainicjowany?
LeGo_Init(LeGo_All | LeGo_Render);

Zapomniałem, że pakiet Render trzeba inicjować osobno  :facepalm: Zainicjowałem, ale niestety i tak nic się nie renderuje.

Patrzyłem też na post Siemekka odnośnie QuickBara, wydaje mi się, że robiłem tak jak w kodzie (rzecz jasna tylko elementy renderujące i to co wydawało mi się z nimi związane) i nic. Ostatecznie próbowałem jakoś przerobić kod od Siemekka z 1 posta i skończyłem na czymś takim:

var int v;
var C_Item it;
if(Hlp_isValidHandle (v))
{
v= View_Create(0, 0, 2048, 2048);
View_Open(v);
};

it = Npc_GetReadiedWeapon(hero);

if(_@(it))
{
Render_AddItem(_@(it),0, 0, 2048, 2048);
};

Rzecz jasna próbowałem chyba wszelkich możliwych kombinacji jakie przychodziły mi głowy. Dodawałem wykrzyknik przed "Hlp_isValidHandle", w "Render_AddItem" zamiast "_@(it)" już próbowałem wstawiać "var C_ITEM itm; itm = MEM_PtrToInst(selectedItemPtr)", "itm.ID", nawet próbowałem ręcznie wpisywać tak jakieś instancje i nie pamiętam nawet co jeszcze. W argumentach "View_Create" i "Render_AddItem" też wpisywałem inne wartości. W desperacji próbowałem chyba wszystkiego co mi przyszło do głowy we wszystkich kombinacjach, już po prostu nie wiem jak ta funkcja ma wyglądać.

EDIT
Rzecz jasna funckję podpiąłem do framefunction i wywoływałem co klatkę, co 15 co 50, bez efektu.
 

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
var int hndl;

if (!Hlp_IsValidHandle(hndl) {
hndl = Render_AddItem(instancjaPrzedmiotu, x1, y1, x2, y2);
};

Render_OpenView(hndl);

Funkcję wystarczy wywołać raz, nie co klatkę
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Khantor

Khantor

Użytkownicy
posty59
Propsy12
Profesjabrak
  • Użytkownicy
Wielkie, wielkie dzięki Siemekk i Splash, teraz wszystko rozumiem i działa tak jak powinno.  :D :ok:

Mam z kolei inne pytanie, nie związane może już bezpośrednio z funkcjami renderującymi, ale nie wiem czy jest sens tworzyć osobny temat. Jak ogarnąłem w końcu z waszą pomocą posługiwanie się funkcją "Render_AddItem" to pobawiłem się tym trochę i napisałem skrypt renderujący aktualnie namierzony przedmiot w ekwipunku na środku ekranu. Funkcję renderującą zhookowałem na "oCItemContainer::Draw" i wszystko działa jak powinno, z tym, że nie wiem jakie warunki wsadzić, żeby render był tylko przy otwieraniu ekwipunku, a nie także przy otwieraniu skrzyń, handlu czy przeszukiwaniu NPC (jak otwieram skrzynię/handel to renderuje się ostatni namierzony przeze mnie item w moim ekwipunku). Mógłbym prosić o podpowiedź? :P
 


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