Ikarus (Pakiet skryptów) 411663 1020

O temacie

Autor orcwarrior

Zaczęty 11.06.2010 roku

Wyświetleń 411663

Odpowiedzi 1020

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
A spróbuj sprawdzić czy focus_vob bohatera to skrzynia i czy chce jej użyć (Key_State) jeżeli tak to ją zablokuj taką możliwość? (Nie moduje G1 więc ci nie pomogę w taki sposób :/)
var oCNpc her; her = Hlp_GetNpc(hero);
if(her.focus_vob) && (Hlp_Is_oCMobContainer(her.focus_vob)
{
var oCMobContainer chest; chest = _^(her.focus_vob);
//Sprawdzaj keystate, i zablokowanie skrzyni (MEM_KeyState(MEM_GetKey))) - chyba jakoś tak.
};

Może coś takiego choć lekko pomoże. _^ = MEM_PtrToInst();
 

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

Revoke

Revoke

Użytkownicy
posty62
Propsy8
Profesjabrak
  • Użytkownicy

Revoke

Ikarus (Pakiet skryptów)
#921 2017-04-18, 17:27(Ostatnia zmiana: 2017-04-18, 17:40)
A spróbuj sprawdzić czy focus_vob bohatera to skrzynia(...)
W tym wypadku wystarcza oCMobLockable_bitfield_locked bo jednocześnie podchodzą pod to zamknięte drzwi, co upraszcza nieco sprawę.
Sprawdziłem MEM_KeyState, ale wtedy funkcja uruchamiała się po naciśnięciu klawisza ESC, zamiast odpowiadającego za interakcję. Ok, już zauważyłem swój błąd.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Czy da się jakoś wyczyścić pamięć? Mam funkcję która usuwa wskaźnik:
func void QS_RemoveFromFilter(var int slot)
{
var int _QS_Array; _QS_Array = MEM_ReadStatArr(QS_Array,slot);
if(!_QS_Array) { return; };
var aCQuickSlot qs; qs = get(_QS_Array);

Render_CloseView(qs.rptr);
Render_Remove(qs.rptr);
qs.inst = 0;
qs.rptr = 0;
qs.Line = 0;
qs.amount         = 0;
delete(_QS_Array);
_QS_Array = 0;
MEM_WriteStatArr(QS_Array,slot,_QS_Array);
};
Jednak gdy usunę pierwszy obiekt i go ponownie stworzę to jego numer rośnie - czytam to tak:
PrintS(IntToString(QS_Array[4]));
Nie wiem czy to normalne... (Numer ten wzrasta ciągle o 16 co zgadza się z ilością intów w klasie...) Nie chcę by gra zjadła całą pamięć! - Ten skrypt będzie dość często używany, a ja nie chcę błędów... Więc pytanie jak wyczyścić pamięć po tym - czy to możliwe?
 

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

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Moją propozycją byłoby zniszczenie QS_Array[] jeśli jest całkowicie pusty, albo przy otwieraniu ekwipunku.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Pytanie jak? (W sensie jak zniszczyć)
 

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

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Jest funkcja delete(). Nie pamiętam jak dokładnie się nazywa.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Jest funkcja delete(). Nie pamiętam jak dokładnie się nazywa.
Czy to nie ta :F ?
delete(_QS_Array);
 

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

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
Currently handles are not reused, i.e. the number will always grow and never shrink. You should be able to allocate up to 4 billion (10^9) handles before this becomes a problem, though. Even if you create 1000 handles per second (I don't think Gothic would be able to handle that), that's still ~277 hours of playtime.

Reusing handles would mean that Hlp_IsValidHandle() doesn't work reliably anymore (without doing something more sophisticated) and I don't think anyone will reach that amount of handles unless they deliberately try to.

If you're worried, then don't destroy (delete) them but reuse them yourself.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Thanks for this info.
Czy ktoś wie jak sprawdzić operację bitową? Chciałbym sprawdzić czy npc ma otwarty ekwipunek za pomocą tego
oCNpc.bitfield[0] i oCNpc_bitfield0_openinventory
Tylko nie wiem jaka operacja byłaby najlepsza.
 

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

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
if (bitfield & bitfield_openinv)
{ print "otwarte"; };
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Próbowałem, ale niestety nie działa. Swoją drogą czy da się dostać jakoś do klasy oCNpcInventory? W C++ dostaje się tak:
oCNpcInventory m_Inventory;
[...]
oCNpcInventory* GetInventory()
{
return &m_Inventory;
};
A w Ikarusie nie mam pojęcie - w klasie oCNpc nie znalazłem żadnych pointerów do ekwipunku... Najlepiej byłoby się dostać do klasy ekwipunku z powodu, że jest tam bardzo dużo przydatnych adresów...
 

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

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Jak w łatwy sposób zapisać zawracającą wartość CALL_* do tablicy? Mam taki kod:
var int pos[3];
CALL_RetValAsStruct(12); //zVEC3
CALL__thiscall(_@(slf),zCVob__GetPositionInWorld);
//pos = CALL_RetValAsInt();
Ale nie wiem jak prosto można by zapisać zawracającą strukturę do tablicy. Chciałbym uniknąć takiego zapisu:
var int pos;
CALL_RetValAsStruct(12); //zVEC3
CALL__thiscall(_@(slf),zCVob__GetPositionInWorld);
pos = CALL_RetValAsInt();

var int pos2[3];
pos2[0] = MEM_ReadInt(pos);
pos2[1] = MEM_ReadInt(pos + 4);
pos2[2] = MEM_ReadInt(pos + 8);
 

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

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Pętlą chyba :D
i<długośc tablicy
pos2 = MEM_ReadInt(pos);

ucina index i przy pos2

tylko musiałbyś rozwiązać problem pozycji, nie wiem co tam właściwie ikarus oferuje.

Nie wiem jak w gothic pisze się pętle, Jeśli się mylę i to spam to przepraszam.
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Daedalus nie ma pętli. Poza tym kod byłby bardziej chaotyczny niż bez pętli.
var int i; i = 0;
repeat(i,3);
MEM_WriteStatArr(pos2,i, MEM_ReadInt(pos + 4 * i ));
end;

 

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

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Jeśli działa to chyba git? teraz wyobraź sobię że tablica ma 100 indexów? kod nr1 jest dłuugi i słaby, a kod nr2 praktycznie pozostaje taki sam, trzeba tutaj Splash'a albo innych ogarniętych skrypterów, niechaj się wypowiedzą.
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
while(i < WielkośćTablicy);
MEM_WriteStatArr(pos2,i, MEM_ReadInt(pos + 4 * i ));
end;

 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Btw, z okazją spytam. Są jeszcze w gothic inne pętle a właściwie ciekawi mnie for, skoro while jest. bo dowhile stawiam  że niema :)
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Jest tylko while, repeat to coś podobnego do for, ale nie podajemy drugiego argumentu jakim jest wartość liczby - w repeat zawsze wynosi zero.
 

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

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Jest:
While
MEM_Goto i MEM_Label, które pozwalają na przemieszczanie się w skrypcie (np. z końca do początku, ze środka do początku, z niechcianego fragmentu skryptu do początku niechcianego fragmentu) - nie wymaga zakończania fragmentem end; Działa to tak:
MEM_Label (1);
MEM_Goto(1); <- wraca do MEM_Label(1)
Repeat, który powtarza zmienną jakąś ilość razy (np. Repeat (1+1, 15) powtórzy działanie 1+1 15 razy

Jest jeszcze przechodzenie pomiędzy fragmentami skryptu (coś podobnego do MEM_Goto i MEM_Label) na zmiennych, czyli MEM_StackPos.position. Działa to tak: tworzymy zmienną i wkładamy do niej MEM_StackPos.position, po czym jeśli chcemy wyjść z danego fragmentu skryptu zmieniamy położenie tej zmiennej i MEM_StackPos.position:
start: var int loop; loop = MEM_StackPos.position;
powrót: MEM_StackPos.position = loop;
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
Repeat does not work that way. The first argument is a counter variable (to count the number of repetitions). There should be no other expression than a single variable here (so 1+1 will not work, it would crash). Before the repeat-loop begins, the counter variable's value will be set to 0. Then the code within the loop will be executed X times, where X is the second parameter. The code to be repeated has to be closed with an end;-statement. It's easier to understand if you look at an example:

var int k; // counter variable
repeat(k, 10);
    print(inttostring(k));
end;
This will print 0-9.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.


0 użytkowników i 4 gości przegląda ten wątek.
0 użytkowników
Do góry