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.


Pokaż wątki - IceMan

Strony: [1]
1
Zapowiedzi modyfikacji / [G1] Gothic Reworked
« dnia: 2024-12-10, 15:18 »
Po 5 latach postanowiłem wyjść z cienia tzw. pracy w ciszy i podzielić się informacjami o moim projekcie modyfikacji do Gothic 1. Modyfikacja swoje założenia opierała na dopracowaniu mechanicznie przestarzałej już części pierwszej gry. Na początku chciałem poprawić błędy oryginału oraz zbalansować odpowiednio poziom trudności, ale z czasem projekt urósł w coś o wiele większego no i potrzebowałem sporo czasu na to, żeby to dociągnąć do końca tym bardziej że pracuję nad tym tylko w wolnych chwilach. Także bez zbędnego już przedłużania…

Jakie są założenia moda?
Na początku chciałbym zaznaczyć, że podczas całej produkcji modyfikacji zależało mi na tym, aby trzymać się jak najbardziej oryginału, a żeby gracz który chce sobie odświeżyć Gothic 1 mógł poczuć się jak w domu.
Mod ma na celu usprawnić mechanicznie Gothica 1 więc znajdzie się tutaj nie tylko wiele mechanik i poprawek QoL, ale również wiele całkowicie nowych mechanik, które urozmaicą, odświeżą oraz uprzyjemnią rozgrywkę (no może z tą przyjemnością być różnie bo balans poziomu trudności uległ ogromnej zmianie i tak łatwo to już nie będzie xD). Mod również ma wypełniać wszystkie dziury i pustki pozostawione przez PB, czyli odwiedzić będzie można miejsca takie jak Opuszczona Kopalnia, Podziemne Miasto Orków czy Tereny za Starą Kopalnią (stara przełęcz). Eksploracja będzie teraz bardziej wynagradzać dzielnych poszukiwaczy, ale będzie również śmiertelnie niebezpieczna co nie oznacza niemożliwą, bo w grze został zaimplementowany mechanizm minimalnych obrażeń. Mod również wypełnia luki fabularne, a także błędy w lore, znajdzie się również odpowiedź na to czy Gomez wiedział ;). Wszystkie nowe zadania, które pojawią się w grze praktycznie zawsze będą skupiać się na obecnej sytuacji panującej w danym rozdziale gry, dlatego też nie będzie tutaj zadań, które kompletnie nie pasują do fabuły gry. Sama fabuła główna również doczekała się drobnej korekcji jak np. przeniesienie zawalenia się kopalni na rozdział 3 lub najazd orków na tereny ludzi w 5 rozdziale. Wszystkie zmiany fabularne były jednak wzorowane na starych dokumentach twórców i są zgodne z tym co mieli w planach a na co nie wyrobili się, oczywiście trochę własnej inwencji twórczej również w to musiałem włożyć ;). Ciężko jest dokładnie wszystko opisać więc pewnie więcej rzeczy odkryjcie grając już w moda ale dla zainteresowanych dłuższa lista co będzie ofertowała modyfikacja w pliku

Co będzie oferowała modyfikacja?
●   Zmiany fabularne zgodne z założeniami tworców gry
●   Zadania poboczne (dla wszystkich oraz gildyjne) wpasowane w sytuację w danym rozdziale ( nie będzie tutaj długich dialogów oraz setek zadań czy nowych obozów, za to będą odpowiednie nagrody, aby zmotywować gracza)
●   Easter eggi nawiązujące np. do tego czy Gomez wiedział w postaci zadania jak i takie które nawiązują do innych twórczości czy innych modyfikacji ;)
●   Możliwość walki na arenie w SO dowolną bronią, aby uzyskać tytuł mistrza i zdobyć nagrody
●   Rozszerzenie tego co oryginał robił dobrze, a przerobienie lub zastąpienie tego co robił źle
●   Eliminacja błędów z oryginału
●   Poprawki oraz nowe mechaniki QoL – jest ich zbyt wiele, żeby je można było tutaj wypisać ;p
●   Mnóstwo poprawek animacji, modeli czy tekstur
●   Przerobiona Górska Forteca oraz Wieża Xardasa (koniec z drabinami)
●   Rozbudowany system teleportacji od pierwszego rozdziału gry w jednej runie oczywiście, powiązany z zadaniem (nie wymagane jeśli gracz woli korzystać tylko ze standardowych teleportacji do miejsc z podstawki)
●   Eksploracja nagradzająca gracza
●   Wbudowany Ognik – można uczyć go szukania przedmiotów, zbierania, prędkości, a także pokazywania ilości roślin, tabliczek w całym świecie, działanie podobne do Ognika z New Balance
●   Rozbudowany system zarządzania przywołańcami
●   Ogromna ilość nowych przedmiotów
●   Mocno rozbudowany crafting i sam system wytwarzania. Można tworzyć ile się chce za jednym zamachem
●   Przerobione AI NPC oraz potworów na to z G2NK ale dodatkowo podrasowane (nie tylko AI w walce ale również wszystkie percepcje i rutyny)
●   Zmiany w balansie rozgrywki – nie tylko walka oraz statystyki wpływają na poziom trudności, ale również i ekonomia. Gracz również nie okradnie handlarzy z całego ich dobytku
●   Przerobiony i urozmaicony system obrażeń, aczkolwiek zgodny z oryginałem
●   Rozbudowany system budowania postaci:
o   Mnogość różnych buildów np. Topory  cierpiały zawsze na mniejszy zasięg względem mieczy więc oprócz większych obrażeń będą miały również większe szanse na krwawienie (nowa mechanika)
o   Rzemiosło takie jak kowalstwo, łuczarstwo czy alchemia (3-poziomowa) polegająca na schematach oraz recepturach
o   Łucznicy oraz kusznicy będą posiadać więcej typów amunicji do wytworzenia oraz użycia
o   Bohater musi nauczyć się otwierania zamków lub użyć czaru, żeby dostać się do zawartości zamkniętych skrzyń
o   Kradzież podobna do oryginału, ale usprawniona i gruntownie przerobiona w zasadzie do oryginału to ma tylko tyle, że trzeba stanąć za npc żeby zacząć okradanie ;)
o   Tworzenie run jako umiejętnosć jednopoziomowa opierająca się na innych warunkach niż ta z G2. Do tego trzeba dodać, że runy można również kupić, ale są plusy i minusy obu podejść
o   Pozostałe umiejętności jak regeneracja many czy zdrowia dająca procentową regenerację od maksymalnego zdrowia lub many, apropo regeneracji w ten czy inny sposób jest zaimplementowany anticheat na przyśpieszenie czasu i szybką regeneracją ;p
o   Nowy atrybut Inteligencja – zwiększa 1:1 obrażenia czarów, a także zwiększa moc przyzwanych istot
o   Nowy atrybut Wytrzymałość – pozwala na sprintowanie (od samego początku gry) i ma wpływ na zadawane obrażenia np. dla buildu w zwarciu tj. 70% siła a 30% wytrzymałość. Wytrzymałość nie jest konsumowana kiedy broń zostanie wyjęta, a bardziej jak w G3 przy wykonaniu danej akcji. Pancerze otrzymały wagi, więc im cięższa zbroja tym większa konsumpcja, magowie i zręczni łucznicy raczej nie będę chcieli z nich korzystać ;). Sama wytrzymałość nie jest aż tak istotnym atrybutem i jest łatwa do wbicia. Są też inne wspomagacze jak np. Mikstury. Z doświadczenia wiem, że nie każdemu ten atrybut się podoba, dlatego implementując go miałem na uwadze wszystkie za i przeciw i starałem się zrobić tak, aby zadowolić obie strony jak wyjdzie to się okaże ;)
o   Zręczność (dodatkowa mechanika) - każde 5pkt zwiększa szanse na trafienie krytyczne o 1%
o   Obrażenia w zwarciu zależne od siły, na dystans zależne od zręczności tutaj się nic nie zmienia, warto jednak nadmienić że zostały dodane różne mechaniki, które mają usprawnić granie wojownikiem pod włócznie czy szpady (zręczność) jak np. przebicie pancerza czy zwiększona szansa na trafienia krytyczne
o   Nauka atrybutów posiada progi, które powodują, że gracz nie zdobędzie maks statystyki w pierwszym rozdziale gry, a każdy atrybut u trenera wymaga również opłaty kosztów w rudzie . Bonusy można konsumować od razu nie wliczają  się w progi, a same bonusy są widoczne w oknie statystyk
●   Spora ilość przedmiotów do znalezienia/zakupu/zcraftowania, które zapewniają bonusy do statystyk – poziom trudności został tak zkonstruowany, aby przeciętny gracz mógł na spokojnie przejść grę bez tej zabawy, ale to jest mała gratka dla graczy którzy lubią min maxować gierki a zatem…
●   Gra ma podstawowy poziom trudności tylko jeden, ale zawiera opcjonalny wbudowany tryb udręki, który będzie przeznaczony dla tych, którzy szukają maksymalnego wyzwania, natomiast niezalecany jest na pierwsze przejście gry
●   Możliwość modliwy do Innosa oraz Beliara w kapliczkach natchnioną tą z G2NK jak i modyfikacji New Balance
●   Magiem można zostać już w pierwszym rozdziale – póki co nie ma podziału klas magicznych, więc trzeba zostać cieniem, a wtedy została stworzona fabularna ścieżka wzorowana na oryginalnych dokumentach PB, aby zostać magiem trzeba się wykazać czymś niesamowitych, zamiast zabijania pełzaczy w 2R ;) Dalsza ścieżka jest taka jak w oryginale Mag Wódy i Nekromanta
●   Sam Mag ma dużo większą pule czarów niż w oryginale np. Otwieranie zamków, a runa Uriziela jest teraz single target spellem, a jeżeli już jesteśmy przy Urizielu to…
●   Jeśli grasz łucznikiem to będziesz nim grać do końca gry, nie będzie trzeba używać 2H Uriziela co nie znaczy że nie będzie trzeba skorzystać z samej mocy zaklętej w jego kamieniu ;)
●   Strażnik Świątynny – największa swoboda w tworzeniu buildów (hybryd z magią śniącego, która dostała jeszcze więcej zaklęć)
●   Czary posiadają również różne efekty dodatkowe np. ogniste powodują podpalenie skalowane z inteligencją, a lodowe mają szansę na zamrożenie itp.
●   Usprawiony system sterowania (wiele różnych dodatkowych hotkeyów)
●   Systemów rzucania czarów bez bugowania many oraz bardziej dynamiczny
●   System prowadzenia walki podobny do tej z G2NK jak np. blokowanie z G2NK. Natomiast wszelkie przerywanie animacji zostało bardziej rozbudowane z G1 niż zaimplementowane z G2NK co mam na myśli? Podejście bardziej dark soulsowe, jeżeli gracz dostaje hita a obrażenia są większe niż wartość pancerza to akcja bohatera jest przerywana
●   Wolne celowanie (Gothic Free Aim) przerobiony i zbalansowany tak, aby bohater strzelał tam gdzie faktycznie celuje. Aby zachować balans względem wyłączonego wolnego celowania zostały tutaj wprowadzone inne mechaniki, takie jak czas naciągania cięciwy czy odrzut, jednak wszystko w granicach zdrowego podejście do rozgrywki
●   Na początkowym etapie bohater trzyma broń jednoręczną oburącz no chyba że trzyma broń krótką wtedy trzyma ją jak w G2NK
●   Random Loot – bardzo mocno rozbudowany system losowego lootu w skrzyniach. Samych typów skrzyń oraz kategorii lootu jest bardzo wiele, więc tutaj chciałbym zaznaczyć, że nie będą losowały się ciągle te same przedmioty, a wiele skrzyń oprócz losowego lootu posiada również stałe przedmioty, które wypadają zawsze
●   Losowy loot u NPC dostosowany do statusu społecznego
●   NPC wrogo nastawieni padają bez dobijania jak np. włóczędzy rozsiani po kolonii
●   Księgi w grze mogą mieć więcej stron niż dwie np. księgi kręgów runicznych
●   Automatyczne zbierania przedmiotów podczas nurkowania
●   I wiele wiele więcej czego nie udało mi się tutaj wypisać…

Modyfikacja współpracuje z Unionami, póki co przetestowane były pluginy takie jak:
1. QuickLoot - można bezpiecznie wgrać plugin
2. Union_Adv_Inventory - można bezpiecznie wgrać plugin, jednakże wyłącza on kilka featuerów w zarządzaniu ekwipunkiem tj. skróty klawiszowe powiązane z zarządzaniem ekwipunku oraz lootowaniem skrzyni/ciał - niedotyczy QuickLoot
3. zUtilities - można bezpiecznie wgrać plugin, jednakże zaleca się wyłączenie kolorowania nazw npc/skrzyń oraz pokazywania liczby amunicji, ponieważ w modyfikacji istnieją już takie funkcjonalności
4. Ognik/Płomyk - brak kompatybilności z danym plugiem - w grze występuje zaimplementowany ognik, którego można uczyć różnych umiejętności szukania, zbierania i pokazywanie przedmiotów
5. Wyłamywanie zamków/czar otwierania – w grze istnieją mechaniki mogące powodować kolizje z tym pluginem – niezalecane
6. Pluginy z fixami - te będą dodane do modyfikacji

No dobra to kiedy premiera?
Modyfikacja jest już w ostatniej fazie produkcji, a testy całości zaplanowane są obecnie na 27.12.2024. Wstępna premiera zaplanowana na koniec stycznia.
Oczywiście po premierze będą wydawane aktualizacje i poprawki jeśli będzie trzeba, natomiast potem planuję urlop a po nim powrót do moda i jego dalszy rozwój.

Pozdrawiam serdecznie autor moda rezu93 :)

Galeria screenów:
https://imgur.com/a/5wHnaYF

2
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.

3
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.

4
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.

5
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źć.

6
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:

7
Skrypty / Poziom czaru a zadawane obrażenia
« dnia: 2020-05-18, 21:51 »
Wykorzystując Lego i skrypt Lehony: https://forum.worldofplayers.de/forum/threads/1149697-Script-Eigene-Schadensberechnung
Chciałem przekalkulować obrażenia kilku czarów w G1. Wszystko by było w porządku gdyby nie czary ładujące czyli np Kula Ognia. Nie potrafię wyciągnąć z gry zmiennej która mówi jaki poziom czaru został użyty, a jest to kluczowe w kalkulacji obrażeń.
Mój skrypt wygląda tak:

FUNC INT Calculate_Weapon_Damage (var int victimPtr, var int ddPtr, var int dmg)
{
    var oSDamageDescriptor dmgDescriptor;
    dmgDescriptor = _^ (ddPtr);
var int damage;
var int splDMG;
var int ChanceForEffect;
    //Don't change anything if damage was not caused by NPC
    if (dmgDescriptor.attackerNPC == 0)
    || (victimPtr == 0)
    {
        return dmg;
    };

    var oCNPC slf; slf = _^(dmgDescriptor.attackerNPC);
    var oCNPC oth; oth = _^(victimPtr);
var c_npc oth2;
var c_npc slf2;
slf2 =  _^(dmgDescriptor.attackerNPC);
oth2 =  _^(victimPtr);

    //Spell
    if (dmgDescriptor.SpellID > 0)
    {

if (dmgDescriptor.SpellID == SPL_FIREBALL)
        {
var string concatText;
concatText = ConcatStrings("Poziom czaru: ",IntToString(dmgDescriptor.spellLevel));
PrintS_Ext(concatText,RGBA(255,   255, 255,   255));
if (dmgDescriptor.spellLevel <= 1)
{
splDMG = (SPL_DAMAGE_FIREBALL + slf2.name1 - oth.protection[PROT_FIRE]);
Snd_Play ("MFX_Fireball_Collide1");
}
else if (dmgDescriptor.spellLevel == 2)
{
splDMG = (SPL_DAMAGE_FIREBALL*2 + slf2.name1 - oth.protection[PROT_FIRE]);
Snd_Play ("MFX_Fireball_Collide2");
}
else if (dmgDescriptor.spellLevel == 3)
{
splDMG = (SPL_DAMAGE_FIREBALL*3 + slf2.name1 - oth.protection[PROT_FIRE]);
Snd_Play ("MFX_Fireball_Collide3");
}
else if (dmgDescriptor.spellLevel == 4)
{
splDMG = (SPL_DAMAGE_FIREBALL*4 + slf2.name1 - oth.protection[PROT_FIRE]);
Snd_Play ("MFX_Fireball_Collide4");
};

if (splDmg >= 5)
{
Wld_PlayEffect("VOB_BURN_WEAPON", oth2, oth2, 0, 0, 0, FALSE );
Buff_ApplyUnique(oth2, SpellFireboltBuff);
};
if (splDMG > 5)
{
dmg = splDMG;
}
else if (splDMG < 5)
{
dmg = MinimalDMG;
};
        };
};

...

    return dmg;
};   

FUNC VOID _HOOK_DMG_ONDMG_EVENT ()
{
    EAX = Calculate_Weapon_Damage (EDI, MEM_ReadInt (ESP + 548), EAX);
};

func void InitDamage() {
HookEngine (7567329, 6, "_HOOK_DMG_ONDMG_EVENT");
};

dmgDescriptor.spellLevel - zawsze pokazuje mi liczbę "32" czy naładuje czar raz dwa trzy razy czy wcale nie naładuje.

Da się jakoś to wyciągnąć z gry ten poziom czaru? Próbowałem sam definiować poziom, ale jest to niedoskonałe i buguje się przy kolejnym użyciu czaru wtedy ten który nie doleciał jeszcze zmienia poziom w locie na ten który jest castowany...

8
Skrypty / [G1] Efekt podpalenia (Lego Buffs)
« dnia: 2020-05-14, 21:31 »
Witam :)
Chciałbym zrobić coś takiego w G1 aby postać po otrzymaniu obrażeń od Ognia czyli np za pomocą czaru Ognistej kuli zaczęła tracić życie przez x czas. Wiem, że podpalenie istnieje w oryginalnym Gothicu jednak nie daje mi spokoju to w jaki sposób to działa czyli: Jeżeli NPC ma jakąś ochronę przed ogniem nawet "5" to ma tylko na sobie animacje że się pali, ale HP nie spada. Jeżeli NPC ma ochronę = 0 to wtedy działa to i poprawnie odejmuje HP. Zauważyłem, że to działa w ten sposób tylko u NPC, bo kiedy Gracz dostaje obrażenia i ma ochronę przed ogniem to zadaje mu obrażenia tak jak powinno (HP spada).

Tak więc wiedząc że jest to zawarte w silniku gry, chciałem użyć Lego a konkretnie funckji buffs jednak napotkałem kilka problemów z którymi nie mogę sobie poradzić od tygodnia  :ok: :trollface: :F

Mój skrypt wygląda tak, że w funkcji która odpowiada za obrażenia wywołuje buffa który odejmuje HP celowi czyli:

func void SpellBurnDmg(var int bh)
{
    var int ptr;
ptr = Buff_GetNpc(bh);
    if (!ptr)
{
return;
};

    var c_npc victim;
victim = _^(ptr);
    Npc_ChangeAttribute(victim, ATR_HITPOINTS, 5);

};


instance SpellBurn(lCBuff) {
        name = "Podpalenie";
        bufftype = BUFF_BAD;
       
        durationMS = 5*1000;
        tickMS = 1000;
       
        onTick = SAVE_GetFuncID(SpellBurnDmg);
        buffTex = "BurnIcon.TGA";
};

W czym problem?
Napotkałem dwa bugi:
1.Jeżeli buff zabije NPC to Gracz nie dostaje Exp'a
2.Jeżeli buff zabije NPC strzelającego z kuszy do nas to NPC mimo, że nie żyje dalej do nas strzela i zadaje obrażenia, akcje przerywa oddalenie się o kawałek od NPC.

Błąd pierwszy próbowałem korygować dodaniem expa z funkcji: B_DeathXP, ale buguje się bo Ticki są co sekunde i dostaje co sekunde Expa nawet jeżeli dam tą funkcje w warunku Npc_IsDead oraz również z BodyState:

func void SpellBurnDmg(var int bh)
{
    var int ptr;
ptr = Buff_GetNpc(bh);
    if (!ptr)
{
return;
};
    var c_npc victim;
victim = _^(ptr);
    Npc_ChangeAttribute(victim, ATR_HITPOINTS, -5);
var lcBuff oth;
oth = get(bh);
if Npc_IsDead(victim) && !Npc_WasInState(victim, ZS_Unconscious)
{
B_DeathXP();
Npc_ClearAIQueue(victim);
if C_NpcIsHuman(victim)
{
B_FullStop (victim);
};
print("Death XP");
}
else if Npc_IsDead(victim) && Npc_WasInState(victim, ZS_Unconscious)
{
oth.durationMS = 0;
};
};

Co do drugiego błędu to próbowałem wymusić stop akcji NPC kiedy zginie i podziałało, bo póki co nie przytrafiła się ta sytuacja, oczywiście tylko kiedy jest człowiekiem w innym wypadku potwory umierały bez końca do końca buffa.

Ktoś ma może jakiś pomysł na to z tym doświadczeniem? Póki co dostaje po 9990 expa za zabicie lub co tick kiedy NPC zginie ciągle leci Exp  :hmmm:

Edit: Proszę o zamknięcie/usunięcie tematu, poradziłem sobie z tymi błędami po prostu dodałem na początku, żeby sprawdzał HP wroga więc wygląda to tak:

func void SpellBurnDmg(var int bh)
{
    var int ptr;
ptr = Buff_GetNpc(bh);
    if (!ptr)
{
return;
};
    var c_npc victim;
victim = _^(ptr);
if (victim.attribute[ATR_HITPOINTS] > 0)
{
Npc_ChangeAttribute(victim, ATR_HITPOINTS, -5);
if Npc_IsDead(victim) && C_NpcIsHuman(victim)
{
B_DeathXP();
B_FullStop (victim);
print("Death HUMAN XP");
}
else if Npc_IsDead(victim) && !C_NpcIsHuman(victim)
{
B_DeathXP();
print("Death MONSTER XP");
};
};
};

9
Skrypty / Problem z warunkiem w obrażeniach
« dnia: 2020-04-26, 12:40 »
Witam  :)
Chciałem przerobić system obrażeń ten z G1 na ten z G2NK - jak wiadomo formuła ta w drugiej części to (Atrybut + dmg broni - armor - 1)/10 a kiedy uderzy kryt nie dzieli na 10. natomiast w G1 z tego co zauważyłem było jakoś tak: (Atrybut + dmg broni - armor) a kiedy krytyczny cios to: (atrybut + dmg broni * 2 - armor). I teraz tak mam już zrobiony skrypt. działa to z Hookiem, ale w samej funkcji mam problem z warunkiem:

func int DMG_OnDmg(var int victimPtr, var int attackerPtr, var int dmg)
{
var string concatText;
var c_npc slf;
slf = _^(attackerptr);
var c_npc oth;
oth = _^(victimPtr);
var int damage;

if(Npc_IsInFightMode(slf,FMODE_FIST))
{
dmg = (slf.attribute[ATR_STRENGTH] - oth.protection[PROT_BLUNT]);
PrintS_Ext("damage fist",RGBA(255,   255, 255,   255));
};
    if(dmg < MinimalDMG )
    {
    dmg = MinimalDMG ;
PrintS_Ext("minimalny dmg fist",RGBA(255,   255, 255,   255));
    };


if (Npc_HasReadiedWeapon(slf))
{
var c_item wpn;
wpn = Npc_GetReadiedWeapon(slf);
var int wpnDmg;
wpnDmg = wpn.damageTotal;
    var int armRes;
concatText = IntToString(wpn.flags);
PrintS_Ext(concatText,RGBA(255,   255, 255,   255));

If wpn.damagetype == DAM_EDGE
{
armRes = oth.protection[PROT_EDGE];
}
else if wpn.damagetype == DAM_BLUNT
{
armRes = oth.protection[PROT_BLUNT];
}
else if wpn.damagetype == DAM_POINT
{
armRes = oth.protection[PROT_POINT];
}
else if wpn.damagetype == DAM_FIRE
{
armRes = oth.protection[PROT_FIRE];
}
else if wpn.damagetype == DAM_MAGIC
{
armRes = oth.protection[PROT_MAGIC];
};

if ((ITEM_2HD_AXE || ITEM_2HD_SWD || ITEM_AXE ||ITEM_SWD) & wpn.flags) /////////////////nie działa
{
damage = (wpnDmg + slf.attribute[ATR_STRENGTH]);
PrintS_Ext("damage melee weapon",RGBA(255,   255, 255,   255));
}

if ((ITEM_BOW || ITEM_CROSSBOW) & wpn.flags) ////////////////////nie działa
{
damage = (wpnDmg + slf.attribute[ATR_DEXTERITY]);
};

damage = (damage -armRes)/10;
var int ChanceForCrit;
ChanceForCrit = 0;

if ((ITEM_2HD_AXE || ITEM_2HD_SWD) & wpn.flags) /////////////////nie działa
{
ChanceForCrit = Npc_GetTalentValue(slf,NPC_TALENT_2H);
};

if ((ITEM_AXE || ITEM_SWD) & wpn.flags) /////////////////nie działa
{
ChanceForCrit = Npc_GetTalentValue(slf,NPC_TALENT_1H);
};

if (ITEM_BOW & wpn.flags) /////////////////nie działa
{
ChanceForCrit = Npc_GetTalentValue(slf,NPC_TALENT_BOW);
};

if (ITEM_CROSSBOW & wpn.flags) /////////////////nie działa
{
ChanceForCrit = Npc_GetTalentValue(slf,NPC_TALENT_CROSSBOW);
};

if(Hlp_Random(100) < chanceForCrit){
    damage = damage * 10;
};


if (damage < 0)
{
damage = 5;
};
dmg = damage;

};

return dmg;
};

To co zaznaczyłem na czerwono po prostu się nie odpala w grze. Kiedy dałem zamiast tego np: if Npc_HasReadiedMeleeWeapon(slf)Wtedy odnajduje broń i wykonuje się wszystko perfect, ale nie mogę tego dać ze względu na cios krytyczny gdzie jest podział na 1H i 2H. Dawałem też warunki typu: if wpn.flags = ITEM_SWDAle nie przynosi to żadnego skutku.
Dodam, że potwory walczą za pomocą pięści i funkcja działa, kiedy dałem warunek z typami broni to czasami potwory mają dziwnie duże obrażenia, natomiast kiedy jest warunek z HasReadiedMeleeWeapon to już tego nie ma.

Czy ktoś wie gdzie został popełniony błąd? Staram się metodą prób i błędów ale bez efektów od dłuższego czasu :(

10
Skrypty / Itemy ze skrzyni do ekwipunku npc
« dnia: 2020-04-16, 14:45 »
Witam,
Korzystając z poradnika Avallacha z linku: https://themodders.org/index.php?topic=20123.0

Dodałem coś od siebie, żeby u handlarza nie usuwało w ekwipunku pancerzy, aby nie siedział na golasa xD
Skrypt po prostu bada, czy jesteśmy w kategorii pancerzy. /// skrypt zmieniony teraz bada czy item który ma być usunięty to założony pancerz jeżeli tak to nie usuwa.

Zrobiłem tak, że itemy po zakończeniu dialogu przenoszą się do specjalnej skrzyni, ale nie wiem jak to zrobić w odwrotną stronę żeby po rozpoczęciu handlu u NPC te itemy powróciły ze skrzyni do ekwipinku. Poniżej skrypt:

func void Npc_ClearInventoryLoop (var c_npc npc, var int category)
{
        print(ConcatStrings("Czyszczenie eq: ", npc.name));
        var int amount;
        amount = Npc_GetInvItemBySlot (npc, category, 0);
var c_Item armor;
var c_Item weapon;
armor = Npc_GetEquippedArmor(npc);
        print(ConcatStrings(item.name, IntToString(amount)));
        if (amount>0 && Hlp_GetInstanceID(item) != Hlp_GetInstanceID(armor))
        {
Mob_CreateItems ("FISK_CHEST", Hlp_GetInstanceID (item), amount) ;
NPC_RemoveInvItems (npc, Hlp_GetInstanceID (item), amount);
                Npc_ClearInventoryLoop(npc, category);
        }
        else if (category < INV_CAT_MAX-1)
        {
                print(ConcatStrings("Zmiana kategorii na: ", IntToString(category+1)));
                Npc_ClearInventoryLoop(npc, category+1);

        };
};

Czy jest jakaś funkcja, która usuwała by itemy ze skrzyni lub je przenosiła? u NPC mamy NPC_RemoveInvItems natomiast co do skrzyni widzę tylko Mob_CreateItems lub Mob_HasItems. Bawiłem się troche z Mob_HasItems, ale póki co bezskutecznie, myślałem, żeby zrobić coś takiego żeby funkcja badała jakie i ile itemów jest w skrzyni tutaj już chyba nie ma kategorii (brak podziału) a następnie tworzyć je w ekwipunku npc i usuwać ze skrzyni. Ktoś ma jakąś rade?

11
Skrypty / Kolizja Czaru
« dnia: 2019-10-09, 22:16 »
Witam,
Skopiowałem sobie czar w G1 dosłownie wszystko nawet jego Pfxy i vfxy w celu zrobienia tzw "słabszej wersji kuli ognia"
Wszystko pięknie działa tak jak chciałem oprócz jednego. Kiedy czar zderzy się np kamieniem to po prostu przelatuje, wchodzi w teksture tzn nie ma efektu uderzenia czyli np plamy czarnej na trawie.
Czar zamieniłem w G1 zamiast "New2"

Czy da się coś z tym zrobić? Jeśli potrzeba jakiś konkretny skrypt to wstawie.

12
Skrypty / Nowy Atrybut w Menu_Status z pomocą Ikarus/LeGo
« dnia: 2019-10-03, 21:15 »
Witam,

Czytałem parę samouczków i wypowiedzi ludzi z forum odnośnie robienia nowego atrybutu w G1 i dodania go do Menu_Status i mam jedno pytanie ale pierw przedstawię co zrobiłem:

Rozszerzyłem klasę dotyczącą "name" w C_NPC na takie coś:

VAR STRING name ;
VAR INT name1[5] ;
VAR STRING name2 ;
VAR STRING name3 ;
VAR STRING name4 ;

W Menu_Status włączyłem nieużywane MENU_ITEM_PLAYERNAME, umiejscowiłem i wygląda oki.

Następnie w pliku postaci zamieniłem "name" na "name1"
name1 = 0;

W skryptach dodałem odpowiednie linijki, żeby przy nauce tego "atrybutu" wartość dla name1 się zwiększała, ale..
Moim problem jest to, że w Menu_Status wyświetla się nie zmienna "name1" tylko zmienna "name" czyli pierwsza od góry.

Moje pytanie: Czy da się zrobić tak żeby wczytywał mi do Menu_Status zmienną "name1"?

13
Skrypty / Pobieranie wartości zmiennej z drugiej funkcji
« dnia: 2019-09-28, 20:46 »
Witam,
Uczę się o zmiennych, stałych i funkcjach w grze i napisałem sobie taki skrypt w funkcji pierwszej, który przy nauce atrybutu np. siły liczy ile pkt zostało wydanych. Chciałem zrobić to w celu żeby w drugiej funkcji móc zaczerpnąć z tej zmiennej z pierwszej funkcji po to żeby obliczyło mi czy próg wydawania PN powinien zostać zwiększony czy też nie. Zaimplementowałem system nauki atrybutów i walki z G2NK do G1, ale tego mi właśnie brakowało, bo chce żeby funkcja brała pod uwagę nie aktualną siłę, tylko ten mój licznik w celu takim żeby nie występowały błędy jak w przypadku kiedy bohater ma na sobie np pierścień dający bonus +5. Wszystko jest fajnie licznik w funkcji która dodaje pkt atrybutów zlicza mi ile już zainwestowałem, ale teraz nie wiem jak zaciągnąć ją do drugiej funkcji która oblicza wydatek PN.

Proszę jeśli ktoś mógłby mi to wytłumaczyć.

Fragment pierwszej funkcji:

func void B_RaiseAttribute(var C_Npc oth,var int attrib,var int points)
{
var int licznik;
var string concatText;
var string concatText2;
if(attrib == ATR_STRENGTH)
{
oth.attribute[ATR_STRENGTH] = oth.attribute[ATR_STRENGTH] + points;
concatText = ConcatStrings(NAME_RaiseStrength,IntToString(points));
PrintScreen(concatText,-1,-1,"FONT_OLD_20_WHITE.TGA",4);
licznik = licznik + points; ///////////licznik elegancko zlicza wszystko
concatText2 = ConcatStrings("licznik wynosi: ",IntToString(licznik)); /////////zamiana inta na stringa
PrintS_Ext(ConcatText2,RGBA(255, 0,   0,   255)); ////////////to tak dla sprawdzenia czy działa
};

Fragment drugiego:

func int B_GetLearnCostAttribute(var C_Npc oth,var int attribut)
{
var int licznik;
licznik = B_RaiseAttribute(licznik); ///////////Przy tym wywala błąd "func does not return an int"
var int kosten;
kosten = 0;
if(attribut == ATR_STRENGTH)
{
if(licznik >= 80)
{
kosten = 4;
}
else if(licznik >= 50)
{
kosten = 3;
}
else if(licznik >= 20)
{
kosten = 2;
}
else
{
kosten = 1;
};
};

Rozumiem, że coś chodzi chyba o typ funkcji? Ale zmiana na FUNC INT nic nie robi. Wydaje mi się że nie do końca rozumiem to, więc jeśli ktoś mógłby pomoc to byłbym wdzięczny  :)

14
Filmy / Gothic: Ostatni Bastion
« dnia: 2009-01-12, 20:27 »


Gothic: Ostatni Bastion to film który opowiada historię Łowców którzy przybyli na wyspę w celu zarobku! Akcja toczy się po odpłynięciu Bezimiennego bohatera na kontynent. Całej wyspie zagrażają nie tlyko Orkowie, ale także inne plugastwa i stworzenia beliara! Ci oto łowcy przypływają i są że tak to ujmę ostatnią nadzieją dla całej wyspy!

Skąd nazwa ostatni bastion? Odpowiedź jest prosta otóż ludność khorinis przeniosła się z zapasami żywności, broni itp do zamku w Górniczej dolinie tam również zmierzają Łowcy po dopłynięciu do portu w Khorinis. Tamtejszy zamek będzie prezentował ostatni bastion.

Tutaj zapodaję trailer, który pokazuje część wydarzeń w filmie! Film również będzie odcinkowy także odcinek pierwszy będzie ale nie prędko najwcześniej za 3-4 dni z powodu nauki w szkole :P

Link do trailera:

http://pl.youtube.com/watch?v=ircP6PVr_wE

Link do strony studia Irdorath Studio:

http://studioirdorath.tnb.pl/news.php

Pozdrawiam IceMan

15
Filmy / Gothic: Legenda
« dnia: 2009-01-06, 17:38 »
Filmik mojej produkcji odcinek pierwszy ma być komediowy tym razem bardziej się postarałem ale nie jestem pewien czy wam będzie się podobać?
Link: http://pl.youtube.com/watch?v=srugy3o_IRI
Pozdrawiam!

16
Filmy / Gothic 2: Potężny Artefakt
« dnia: 2008-12-16, 15:41 »
Witam wszystkich miłośników filmów, a w szczególnie miłośników filmów śmiesznych z przekleństwami jak GPH czy inne filmy!
Nakręciłem właśnie pierwszy mój odcinek mojego filmiku i chciałbym się z wami nim podzielić xD
Proszę oto link:
http://pl.youtube.com/watch?v=6_kIc3lRl2I
Jeśli się wam spodoba przynajmniej kilku osobom to nakręcę więcej odcinków co i tka mam zamiar zrobić xD
Proszę o komentarze i wasze opinie xD

17
Pytania i problemy / Problem z walką
« dnia: 2008-12-13, 22:32 »
Witam wszystkich...
Mam problem w g2 nk bowiem chciałem sobie pomodować, więc ściągnąłem gmdk 2.6a zainstalowałem wszystko w pełni potem ściągnąłem do tego wersje ulepszającą 2.6f, a następnie polskie skrypty!
I dodałem sobie parę moich postaci już i mam taki problem że wszystkie postacie ale to WSZYSTKIE, trzymają broń w ręku jakby miały nauczone 0-29%! A gdy wchodzę w skrypty i np NPC dany widzę że ma 70% każdej umiejętności! Potem wszedłem do g2 nk i zamieniłem się w tą postać sprawdziłem czy w grze ma 70% i miał! Wtedy wyjąłem miecz i trzymał go jakby miał 0-29% a nie 70%! Może to nie problem bo obrażenia zadaje jakby miał te 70% ale trzyma ta postać ten miecz w taki sposób denerwujący bo wtedy nie wygląda jak wojownik tylko jak jakiś farmer...
Czy ktoś mi może w tym pomóc?

18
Ukończone modyfikacje / [G2NK] 63 PL
« dnia: 2008-02-12, 12:38 »
Przedstawiam spolszczenie modyfikacji Gothic 2 NK: 63.

Opis: W tej modyfikacji jesteśmy graczem, który ma za zadanie wygrać 63 walki z różnymi potworami:

W modzie ujrzymy:

-Jeden nowy świat(arena)
-63 walki to wygrania!
-Możemy wybrać sobie kastę.
-Za zdobyte punkty w walce możemy się uczyć różnych umiejętności oraz zdobywać lepsze wyposażenie.

Spolszczenie nie wymaga wersji niemieckiej

Download:

http://rapidshare.com/files/57240850/63_pl__NK_.rar.html

Przed uruchomieniem moda trzeba zainstalować player kita, link:
http://www.sendspace.pl/file/bzHDlgva/

Strony: [1]
Do góry