Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - IceMan

Strony: [1] 2 3 4
1
Jeśli chodzi o bohatera (gracza) to faktycznie atak nie jest przerywany, natomiast npc mają przerwany atak i wykonują akcję w zależności od FAI np. troll próbuje zaatakować jeszcze raz od nowa a ścierwojad wykonuje parade. Mimo że animacja otrzymanego obrażenia nie jest odpalana to odczuwają jakby dostali. Sprawdzałem to nawet na czystym Gothicu, bo pomyślałem że jakiś inny hook może to psuć, ale niestety nie.
Chyba musi być coś jeszcze co odpowiada za przekazywanie info że animacja zostaje przerwana, a może samo zadanie obrażenia?

Na WoGu było coś takiego i działa:
https://forum.worldofplayers.de/forum/threads/1495001-Scriptsammlung-ScriptBin/page5?p=26066214&viewfull=1#post26066214

Więc jednak Interrupt występował.

2
@Splash
Sorry za odświeżenie tematu, interesuje mnie jak osiągnąć efekt taki jak w CZ czyli brak przerywania ataku trolla. Powyższe rozwiązanie daje taki efekt, że animacja otrzymanego obrażenia nie jest odtwarzana ale atak jest przerywany czyli np. troll ma przerwany atak i ponawia tą animacje od początku = easy win.

Edit: nie wystarczyłby adres z silnika gry i hook i tam dać coś podobnego żeby nie przerywał ataku?

3
Skrypty / Gothic crushuje problem ze stosem
« dnia: 2022-09-21, 19:00 »
Cześć,
Zauważyłem że przy próbie np. otwierania zamków lub próbie dobicia przeciwnika leżącego na ziemi gothic często crushuje z moją modyfikacją z takim błędem w logu:

08:29 Info:  5 U:    MI:Set State to 1 .... <zError.cpp,#462>
08:29 Info:  7 B:     MobInter Trigger from BENCH_2_OC .... <oMobInter.cpp,#1075>
08:29 Info:  9 U:     Cleared EM : oCNpc:PC_HERO .... <zEventMan.cpp,#439>
08:29 Info:  8 U:     EM: NULL ---[oCMsgManipulate:EV_USEMOB(Job)]---> oCNpc:GRD_206_GARDIST .... <zEventMan.cpp,#199>
08:29 Info:  8 U:     EM: NULL ---[oCMsgManipulate:EV_USEMOB(Job)]---> oCNpc:GRD_208_CUTTER .... <zEventMan.cpp,#199>
08:29 Info:  9 U:     Cleared EM : oCNpc:PC_HERO .... <zEventMan.cpp,#439>
08:29 Info:  8 U:     EM: NULL ---[oCMsgManipulate:EV_USEMOB(Job)]---> oCNpc:GRD_206_GARDIST .... <zEventMan.cpp,#199>
08:29 Info:  8 U:     EM: NULL ---[oCMsgManipulate:EV_USEMOB(Job)]---> oCNpc:GRD_208_CUTTER .... <zEventMan.cpp,#199>
08:29 Info:  9 U:     Cleared EM : oCNpc:PC_HERO .... <zEventMan.cpp,#439>
08:29 Info:  8 U:     EM: NULL ---[oCMsgManipulate:EV_USEMOB(Job)]---> oCNpc:GRD_206_GARDIST .... <zEventMan.cpp,#199>
08:29 Info:  8 U:     EM: NULL ---[oCMsgManipulate:EV_USEMOB(Job)]---> oCNpc:GRD_208_CUTTER .... <zEventMan.cpp,#199>
08:29 Info:  9 U:     Cleared EM : oCNpc:PC_HERO .... <zEventMan.cpp,#439>
08:29 Info:  8 U:     EM: oCNpc:PC_ROCKEFELLER ---[oCMsgAttack:EV_ATTACKFINISH(Job)]---> oCNpc:PC_ROCKEFELLER .... <zEventMan.cpp,#199>
08:29 Info:  8 U:     EM: NULL ---[oCMsgManipulate:EV_USEMOB(Job)]---> oCNpc:GRD_206_GARDIST .... <zEventMan.cpp,#199>
08:29 Info:  8 U:     EM: NULL ---[oCMsgManipulate:EV_USEMOB(Job)]---> oCNpc:GRD_208_CUTTER .... <zEventMan.cpp,#199>
08:29 Info:  9 U:     Mark Conversationmessage for deletion .... <oNPC.cpp,#10213>
08:29 Fault: 0 Q:     [start of stacktrace]
08:29 Fault: 0 Q:             MEM_READINT_()                                                 +   13 bytes
08:29 Fault: 0 Q:             HLP_IS_OCMOBINTER(47)                                          +   33 bytes
08:29 Fault: 0 Q:             _HOOK_OCNPC_ONMESSAGE()                                        +  430 bytes
08:29 Fault: 0 Q:             MEM_CALLBYID(15665)                                            +  224 bytes
08:29 Fault: 0 Q:             _HOOK(835105472, 0, 838247040, 870716976, 19331668, 0, 8557520, 838247040, 8249140) +  940 bytes
08:29 Fault: 0 Q:             [UNKNOWN]                                                      +290185120 bytes
08:29 Fault: 0 Q:     [end of stacktrace]
08:29 Fault: 0 Q:     Exception handler was invoked. Ikarus tried to print a Daedalus-Stacktrace to zSpy. Gothic will now crash and probably give you a stacktrace of its own.

MEM_READINT_() to funkcja ikarusowa i nic w niej nie tykałem jak i zresztą w innych. Może ktoś ma pomysł dlaczego tak się dzieje? Może by mnie to naprowadziło na właściwe tory. Z góry dzięki za pomoc.

Edit: temat do zamknięcia, już wyjaśnione.

4
Zauważyłem taki problem w G1, że kiedy walczymy z npc który walczy magią np. jakimś magiem ognia czasami da się wręcz zbugować npc do tego stopnia, że nie reaguje na nic i jest zawieszony w animacji biegania, już tłumaczę.
Kiedy odbiegniemy wystarczająco daleko poza zasięg npc to npc będzie chciał pobiec w naszym kierunku żeby mieć zasięg do ataku, ale wtedy właśnie zdarza się tak że biegnie już cały czas i nawet jeżeli jest bohater w zasięgu to nie przestaje biec a ZS_Attack trwa w nieskończoność ale o dziwo nie wykonuje się już nic w tej pętli - sprawdziłem to prostym printem.
 
I teraz pytanie czy to wina gdzieś głębiej leżąca u podstaw silnika, a może w FAI bądź związane jest to z ZS_Attack lub percepcją czy też z zasięgiem? Dzieje się to wtedy oczywiście kiedy wychodzimy poza zasięg npc i stajemy nie uciekamy dalej.

Nie wstawiłem żadnego skryptu bo co prawda u mnie na zmodyfikowanych skryptach dzieje się to tak jakby częściej (chyba) ale testując to na oryginale zdarzyło mi się to parę razy również. Dla porównania zauważyłem, że w G2 npc kiedy nie stoimy za żadną ściąną ale jesteśmy poza zasięgiem to nie strzela a czeka jak się oddalimy dalej kończy ZS_Attack, natomiast kiedy jesteśmy za ściągną to dobiega w to miejsce i nawet kiedy biegnie ciągle to po wychyleniu się przez bohatera przestaje biec i atakuje.

5
Skrypty / [G1] Strzały jako zen - znikanie
« dnia: 2022-05-29, 12:42 »
Dokładnie dlatego kombinowałem z nakładaniem efektów w spacerze. No trudno. Nie mam pomysłu już żadnego na to.

6
Skrypty / [G1] Strzały jako zen - znikanie
« dnia: 2022-05-28, 11:04 »
Strzały są w formacie zen, bo mają nałożony pfx. Ale tak chodzi o to że to one nie znikają łącznie z pfxem.

7
Skrypty / [G1] Strzały jako zen - znikanie
« dnia: 2022-05-25, 20:25 »
Witam,
Zrobiłem sobie strzały różnej maści z nałożonym pfxem zaciągniętym z G2NK i fajnie wszystko działa oprócz tego że strzały nie znikają a kiedy zrobie save gry to strzały teleportują się do punktu startowego świata "Goto pos" i tam się odkładają.

Czy można jakoś temu zaradzić? Wiem że w Czasie zapłaty były strzały jako zeny np. ogniste strzały.

8
Skrypty / Zbugowane obrażenia ognia [G1]
« dnia: 2020-12-28, 22:20 »
Mam ten sam problem. Jak sobie z tym poradziłeś?

Edit: już nie ważne, post do skasowania.

9
Skrypty / Blokada skoku na PPM
« dnia: 2020-12-28, 22:11 »
Chodzi o G1 i nie widzę w opcjach możliwości tej zmiany ani w grze ani w Gothic.ini

10
Skrypty / Blokada skoku na PPM
« dnia: 2020-12-28, 16:19 »
Witam,
Czy ktoś może dać jakąś podpowiedź jak to można zablokować skok na PPM? Może to głupie pytanie, ale nie mam żadnych poszlak jak to ugryźć.

11
Skrypty / wyświetlanie info po podniesieniu itemów
« dnia: 2020-06-05, 20:54 »
Dziękuje bardzo za wytłumaczenie i rozjaśnienie, skrypt działa :)

12
Skrypty / wyświetlanie info po podniesieniu itemów
« dnia: 2020-06-04, 14:37 »
Czy ma ktoś może ten hook len do G1? 

13
Skrypty / Spirt + strzelanie z łuku
« dnia: 2020-05-25, 21:40 »
Oki udało się aktywować Sprint, ale mimo tego jest ta sama sytuacja/ten sam bug

14
Skrypty / Spirt + strzelanie z łuku
« dnia: 2020-05-25, 19:23 »
Masz może potrzebne adresy do wywołania tego w G1?
Rozumiem że musze użyć ikarusowego CALL__thiscall

15
Skrypty / Spirt + strzelanie z łuku
« dnia: 2020-05-24, 21:20 »
Nie zadziałało, w takim razie chyba sobie to odpuszczam, mikstury muszą wystarczyć

16
Skrypty / Spirt + strzelanie z łuku
« dnia: 2020-05-23, 21:07 »
Napisałem skrypt sprintu i jest on na KEY_PRESSED i kiedy mam wyłączony sprint wyciągam broń dystansową łuk/kusza (w przypadku magii nie dotyczy) i naciskam klawisz odpowiedni za sprint i wszystko jest okej, ale kiedy najpierw wyciągnę broń dystansową, a potem włącze sprint to postać już nie potrafi ani celować ani strzelać - muszę schować broń i wyjąć ponownie wtedy już działa. Dzieje się to wtedy kiedy podczas wyciągniętej broni dystansowej dostajemy MDS Sprintu.

Tak się zastanawiałem czego to jest wina i jak to naprawić. Czy to jest skopany MDS? Korzystam oczywiście z tego oryginalnego.
Na KEY_HOLD bugowało się ciągle. :hmmm:

17
Skrypty / Poziom czaru a zadawane obrażenia
« dnia: 2020-05-20, 13:28 »
Przypisywałem do obu dlatego że w niektórych przypadkach potrzebowałem klasy C_NPC na początku miałem tylko oCNpc, ale masz racje, może przejde tylko na klase c_npc.
Ale nie rozumiem, gdzie jest utworzony taki aivar? Ja takiego jak "SpellLevel" nie miałem i wywalało unknow identifier.

Splash kiedy zamiast aivara dałem zmienną zwykłą to kiedy czarowałem ja i NPC jednocześnie to jeżeli NPC puścił czar level 4 a ja po nim od razu Level 2 to czar który mnie uderzał od niego zmieniał się w locie na Level 2, bo zmienna się zmieniła kiedy ja wypuściłem tak to działało właśnie

Edit: pozmieniałem na takie coś:
    var oSDamageDescriptor dmgDescriptor;
    dmgDescriptor = _^ (attackerPtr);
var c_npc oth;
var c_npc slf;
slf =  _^(dmgDescriptor.attackerNPC);
oth =  _^(victimPtr);

18
Skrypty / Poziom czaru a zadawane obrażenia
« dnia: 2020-05-20, 10:20 »
Potrzebuje aivara w przypadku kiedy to inny NPC rzuca czar, inaczej będzie się znowu bugować ze zmienną.

W skrypcie obrażeń dałem:
splDmge = (SPL_DAMAGE_FIREBALL * slf.aiscriptvars[AIV_SpellLevel]) - oth.protection[PROT_FIRE];
a w skrypcie spells_process_mana_released:
self.aivar[AIV_SpellLevel] = Npc_GetActiveSpellLevel(self);

19
Skrypty / Poziom czaru a zadawane obrażenia
« dnia: 2020-05-20, 00:23 »
Nie wiem czy poprawnie to zrobiłem, ale działa kiedy zamiast robić coś w skrypcie czaru to dodałem w spells_process_mana_released:
if (Npc_GetActiveSpell(self) == SPL_FIREBALL)
{
self.aivar[AIV_SpellLevel] = Npc_GetActiveSpellLevel(self);
return SPL_SENDCAST;
};

20
Skrypty / Poziom czaru a zadawane obrażenia
« dnia: 2020-05-18, 23:43 »
Nie czyta mi tego, unknow identifier: AIV_SPELLLEVEL
W pliku oCNpc.d mam linijke:

var int        aiscriptvars[50];                           // 0x0240 int[50]
Oczywiście plik z funkcją DMG jest po inicjowaniu Ikarusa i Lego
Edit: Rozumiem, że mam zadefiniować tego aivara więc dałem:
const int AIV_SpellLevel = 1;
Nie wiem jak dalej postępować
Próbowałem dodawać w skrypcie czaru:
self.aivar[AIV_SpellLevel] = x;
ale wtedy jest identycznie jak wcześniej, czyli kiedy zaczynam castować drugi czar ten pierwszy uderza i zmienia poziom na 1 a puszczony był 4, błądze

Skrypt czaru:
func int Spell_Logic_Fireball (var int manaInvested)
{
if (Npc_IsPlayer (self))
{

if (hero.attribute[ATR_MANA] >= MANACOST_FIREBALL && (!spelllevel))
{
hero.attribute[ATR_MANA] = (hero.attribute[ATR_MANA] - MANACOST_FIREBALL);

if (hero.attribute[ATR_MANA]<MANACOST_FIREBALL)
{
spelllevel = !spelllevel;
self.aivar[AIV_SpellLevel] = 1;
    return SPL_SENDCAST;
}
else
{
spelllevel = 1;
self.aivar[AIV_SpellLevel] = 1;
};
}
else if (hero.attribute[ATR_MANA] >= MANACOST_FIREBALL)
&& (spelllevel == 1)
{
hero.attribute[ATR_MANA] = (hero.attribute[ATR_MANA] - MANACOST_FIREBALL);
if (hero.attribute[ATR_MANA]<MANACOST_FIREBALL)
{
spelllevel = !spelllevel;
    return SPL_SENDCAST;
}
else
{
spelllevel = 2;
self.aivar[AIV_SpellLevel] = 2;
return SPL_NEXTLEVEL;
};
}
else if (hero.attribute[ATR_MANA] >= MANACOST_FIREBALL)
&& (spelllevel  == 2)
{
hero.attribute[ATR_MANA] = (hero.attribute[ATR_MANA] - MANACOST_FIREBALL);
if (hero.attribute[ATR_MANA]<MANACOST_FIREBALL)
{
spelllevel = !spelllevel;
    return SPL_SENDCAST;
}
else
{
spelllevel = 3;
self.aivar[AIV_SpellLevel] = 3;
return SPL_NEXTLEVEL;
};
}
else if (hero.attribute[ATR_MANA] >= MANACOST_FIREBALL)
&& (spelllevel  == 3)
{
hero.attribute[ATR_MANA] = (hero.attribute[ATR_MANA] - MANACOST_FIREBALL);
if (hero.attribute[ATR_MANA]<MANACOST_FIREBALL)
{
spelllevel = !spelllevel;
    return SPL_SENDCAST;
}
else
{
spelllevel = 4;
self.aivar[AIV_SpellLevel] = 4;
return SPL_NEXTLEVEL;
};
}

else if (hero.attribute[ATR_MANA]<MANACOST_FIREBALL && (!spelllevel))
{
return SPL_SENDSTOP;
}
else if  (hero.attribute[ATR_MANA]<MANACOST_FIREBALL && (spelllevel == 2) || (spelllevel == 3))
{
spelllevel = !spelllevel;
return SPL_SENDCAST;
};

};
return SPL_RECEIVEINVEST;
};

Strony: [1] 2 3 4
Do góry