Zbroja, która ponosi uszkodzenia w trakcie walki 25743 106

O temacie

Autor pawbuj

Zaczęty 25.03.2013 roku

Wyświetleń 25743

Odpowiedzi 106

gothic1210
  • Gość
Nie chce mi się rozkminać o co może biegać z tym że odejmuje za dużo, ale widzę buga.
Zdejmij i załóż zbroję, powinno wrócić do maksymalnej wartości, w sumie nie jestem pewien czy po załadowaniu gry nie wróci do 100%.
Zapisuj to w jakiejś zmiennej, nie wiem skąd pomysł by wykorzystywać .weight który jest wspólny dla wszystkich zbroi.
Ale to nie jest zapisane w weight. Avalach zalecał odejmowanie bezpośrednio parametrów obronnych zbroi. Początkowo było z weight, ale już nie jest.
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Nie chce mi się rozkminać o co może biegać z tym że odejmuje za dużo, ale widzę buga.
Zdejmij i załóż zbroję, powinno wrócić do maksymalnej wartości, w sumie nie jestem pewien czy po załadowaniu gry nie wróci do 100%.
Zapisuj to w jakiejś zmiennej, nie wiem skąd pomysł by wykorzystywać .weight który jest wspólny dla wszystkich zbroi.
tez z początku tak myslałem, ale dawałem nawet 2 identyczne miecze o tym samym instance i poziom zmiennej weight dla obu był zachowany.
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
I tak to samo się może stać, wszystkie pola klasy są wczytywane ponownie, dlatego są np. bugi z zmianą wyglądu głównego bohatera.
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
print(IntToString(Npc_GetBodyState(hero)));
print(IntToString(Hlp_GetInstanceID(hero)));
print(ConcatStrings(ConcatStrings(IntToString(Hlp_GetInstanceID(other))), " : "), hero.name[0]);
print(ConcatStrings(ConcatStrings(IntToString(Hlp_GetInstanceID(self))), " : "), self.name[0]);
Daj to jako jedyną treść funkcji wywoływanej perceptionem i daj screena na którym widać wszystkie cztery z tych napisów.

Zapisuj to w jakiejś zmiennej, nie wiem skąd pomysł by wykorzystywać .weight który jest wspólny dla wszystkich zbroi.
Skąd takie absurdalne pomysły? Masz elementarne pojęcie o programowaniu obiektowym?
Pola w klasie są unikatowe dla każdej instancji, chyba że są oznaczone jako "static". A takiego słowa kluczowego w Daedalusie nawet nie ma (bo i właściwie to całkiem obiektowy on nie jest).

Oczywiście nie twierdzę że skrypt gothic1210. Bardzo możliwe że nie jest. Ale błąd z którym teraz się zmagamy wynika z samego działania silnika i to na niego musimy najpierw znaleźć lekarstwo.

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
I tak to samo się może stać, wszystkie pola klasy są wczytywane ponownie, dlatego są np. bugi z zmianą wyglądu głównego bohatera.
niestety potwierdzam, przy zapisaniu/wczytaniu zmienna weight dostaje wartość początkową. inne pomysły?

Gothic i bez znaczenia jest cz zmienisz weight czy atrybuty zbroi po wczytaniu z save i tak to szlag trafi i wrócą do artości startowych.
 

gothic1210
  • Gość
Przy sposobie Avallacha też się tak dzieje. No, ale na razie jest ważniejsze obejście tego buga z blokowaniem.
Cytuj
print(IntToString(Npc_GetBodyState(hero)));
print(IntToString(Hlp_GetInstanceID(hero)));
print(ConcatStrings(ConcatStrings(IntToString(Hlp_GetInstanceID(other))), " : "), hero.name[0]);
print(ConcatStrings(ConcatStrings(IntToString(Hlp_GetInstanceID(self))), " : "), self.name[0]);
Woła o " , " (przecinek) w 6 linijce (tutaj to jest trzecia).
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Zapisuj to w jakiejś zmiennej, nie wiem skąd pomysł by wykorzystywać .weight który jest wspólny dla wszystkich zbroi.
Skąd takie absurdalne pomysły? Masz elementarne pojęcie o programowaniu obiektowym?
Pola w klasie są unikatowe dla każdej instancji, chyba że są oznaczone jako "static". A takiego słowa kluczowego w Daedalusie nawet nie ma (bo i właściwie to całkiem obiektowy on nie jest).
Tak, rozumiem, jest to unikatowe dla każdego wystąpienia w grze, ale te wartości nie są zapisywane, po uruchomieniu gry są wczytywane z skryptu.

I chodziło mi o "dla wszystkich zbroi o tym samym instance".
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
I tak to samo się może stać, wszystkie pola klasy są wczytywane ponownie, dlatego są np. bugi z zmianą wyglądu głównego bohatera.
niestety potwierdzam, przy zapisaniu/wczytaniu zmienna weight dostaje wartość początkową. inne pomysły?

Gothic i bez znaczenia jest cz zmienisz weight czy atrybuty zbroi po wczytaniu z save i tak to szlag trafi i wrócą do artości startowych.
Widocznie nie serializuje danych z tej klasy, szkoda. Ale to dość dziwne, bo przynajmniej część danych z wielu klas MUSI być zapisywana (choćby punkty życia wrogów czy statusy misji). Wychodzi na to że jest to robione wybiórczo? Może Lehona by potrafił powiedzieć coś więcej na ten temat.
No w każdym razie jeśli jest tak jak piszecie to będzie trzeba zrobić osobną zmienną globalną dla każdej zbroi i do tego będzie działało to tylko dla bohatera.

@Gothic1210: źle dałem nawias, tak będzie ok:
print(IntToString(Npc_GetBodyState(hero)));
print(IntToString(Hlp_GetInstanceID(hero)));
print(ConcatStrings(ConcatStrings(IntToString(Hlp_GetInstanceID(other)), " : "), other.name[0]));
print(ConcatStrings(ConcatStrings(IntToString(Hlp_GetInstanceID(self)), " : "), self.name[0]));

I chodziło mi o "dla wszystkich zbroi o tym samym instance".
Tutaj sprawa trochę się komplikuje, do tego dochodzi zamęt wywołany złą terminologią. Otóż ponieważ w Daedalusie definicja obiektu zaczyna się od wyrazu "instance", modderzy nazywali to co jest po tym wyrazie właśnie instancją (przynajmniej zgaduję że to masz na myśli - np "grd_armor_i"). Technicznie rzecz biorąc jest to co innego, mianowicie identyfikator. Instancja to rzeczywiste wystąpienie obiektu w pamięci. Tak więc "grd_armor_i" jest identyfikatorem (na podstawie którego mogą być tworzone instancje), a instancją jest konkretna zawartość zmiennej c_item. Kiedy edytujesz jedną instancję, inne, nawet z tym samym identyfikatorem, nie zostaną zmodyfikowane.
Temu błędnemu nazewnictwu sprzyjało to że w przypadku npc jest zasada aby każda instancja miała unikatowy identyfikator (różniący się choćby cyferką), więc ludzie dochodzili do wniosku że to jedno i to samo. Ale w przypadku już choćby potworów czy itemów, mamy wiele instancji o tym samym identyfikatorze, będących odrębnymi bytami.
To że te niektóre wartości się resetują, jak zgaduję wynika z tego że Piranhie uznały że nikt ich nie będzie zmieniał, więc w celu przyspieszenia zapisu i zmniejszenia plików nie są one uwzględniane w save#msg1077790ach (serializowane).


tl;dr:
Kiedy atakujesz cieniostwora, czy wszystkie obiekty o identyfikatorze "shadowbeast" tracą daną ilość hp, czy tylko ten jeden?

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Widocznie nie serializuje danych z tej klasy, szkoda. Ale to dość dziwne, bo przynajmniej część danych z wielu klas MUSI być zapisywana (choćby punkty życia wrogów czy statusy misji). Wychodzi na to że jest to robione wybiórczo?
Nie jest. Pobij NPC, wczytaj grę, ma pełne HP.
Chyba tylko pozycja w świecie jest zapisywana, a na chwilę obecną i tego nie jestem pewien, czy nie było to robione tylko dla hero, a reszta jak np. followerzy jest po prostu wstawiana gdzieś w jego pobliże.
Zapisanie w trakcie walki = crash. To też chyba problem związany z niezapisywaniem zmiennych.
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Widocznie nie serializuje danych z tej klasy, szkoda. Ale to dość dziwne, bo przynajmniej część danych z wielu klas MUSI być zapisywana (choćby punkty życia wrogów czy statusy misji). Wychodzi na to że jest to robione wybiórczo?
Nie jest. Pobij NPC, wczytaj grę, ma pełne HP.
Chyba tylko pozycja w świecie jest zapisywana, a na chwilę obecną i tego nie jestem pewien, czy nie było to robione tylko dla hero, a reszta jak np. followerzy jest po prostu wstawiana gdzieś w jego pobliże.
Zapisanie w trakcie walki = crash. To też chyba problem związany z niezapisywaniem zmiennych.
Wut, dawno w to nie grałem, wydawało mi się że wszystko jest normalnie zapisywane. Dałoby się to nawet dość szybko i łatwo przeprowadzić, po prostu robiąc listę które zostały zmienione i jedynie ją aktualizując (taki diff).

gothic1210
  • Gość
Avallach jesteś pewien, że takie zabiegi other.name[0] są dopuszczalne w printach? Ostatnio robiłem printa, który miał wyświetlać nazwę przedmiotu otrzymywanego i też za cholerę nie chciało przejść.
Teraz woła o nawias " ) " w tej samej linijce.
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Nie chce mi się rozkminać o co może biegać z tym że odejmuje za dużo, ale widzę buga.
Zdejmij i załóż zbroję, powinno wrócić do maksymalnej wartości, w sumie nie jestem pewien czy po załadowaniu gry nie wróci do 100%.
Zapisuj to w jakiejś zmiennej, nie wiem skąd pomysł by wykorzystywać .weight który jest wspólny dla wszystkich zbroi.
myslę, że pomysł Sawika jest jedyną alternatywą. sam już robiłem pierscień regeneracji, który się zużywa w trakcie uzywania. oznacza to , że trzeba przypisac zmienną do okreslonej założonej zbroi tj: np.

if (Npc_HasEquippedArmor (hero) == instance zbroi np. vlkarmori)
(
vlkgrdi = vlkgrdi -1;
a wartośc zmiennej definiujemy np. w 1szym dialogu Diego.

Ty Gothic wybrałeś bardziej urozmaiconą, ale i trudniejszą wersję, bo musisz stworzyć zbroję o róznych paarmetrach(w zasadzie kilka zbroi zróznym poziomem degradacji), a tym samym wyglądzie.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
No to rozbijmy ją na kawałki:
var int instanceid;
instanceid = Hlp_GetInstanceID(other);
var string imie;
imie = other.name[0];
var string tekst;
tekst = IntToString(instanceid);
tekst = ConcatStrings(tekst, " : ");
tekst = ConcatStrings(tekst, imie);
Sprawdź gdzie wywali teraz.

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Avallach jesteś pewien, że takie zabiegi other.name[0] są dopuszczalne w printach? Ostatnio robiłem printa, który miał wyświetlać nazwę przedmiotu otrzymywanego i też za cholerę nie chciało przejść.
Teraz woła o nawias " ) " w tej samej linijce.
z przedmiotem przekazywanym również walczyłem ,za cholerę tego nie dało się zrobić, pomimo skrypty z g2nk były identyczne i tam działało
 

Mark56

Mark56

Moderator
som veľký magič
posty1632
Propsy1846
ProfesjaAnimator
  • Moderator
  • som veľký magič
other.name na 200% działa w print, sam tego używałem i to nie raz przy ikarusie i lego
 


pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Gothic,mozesz sprawdzić czy u ciebie działa ten warunek
if ((Npc_GetBodyState(hero) != BS_PARADE)
&& (!C_BodyStateContains(hero, BS_PARADE)))
&& (Npc_HasEquippedArmor (hero) == VLK_ARMOR_M)
{
vlkarmi = vlkarmi - 1;
PrintScreen (ConcatStrings ("Wytrzymałość pancerza: ", IntToString(vlkarmi)),10,12,"FONT_OLD_10_WHITE.TGA",3);
};
};

wbrew logice mi nie działa, chociaz ten pancerz mam założony.
 

gothic1210
  • Gość
No to rozbijmy ją na kawałki:
var int instanceid;
instanceid = Hlp_GetInstanceID(other);
var string imie;
imie = other.name[0];
var string tekst;
tekst = IntToString(instanceid);
tekst = ConcatStrings(tekst, " : ");
tekst = ConcatStrings(tekst, imie);
Sprawdź gdzie wywali teraz.
Teraz narzeka na brak średnika mimo iż on jest. Powodem tego jest:
  • . Gdy to usunąłem skrypt został sparsowany, ale  w grze nic się nie dzieje. Podczas otrzymywania obrażeń i podczas blokowania - nic się nie wyświetla.


pawbuj twoje też nie działa :(
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
To dobrze że nic się nie wyświetla, bo nic nie miało. W takim razie powodem było traktowanie name jako tablicy. Jest to o tyle dziwne, że według definicji klasy to JEST tablica. To jest wersja bez
  • i z printami:
print(IntToString(Npc_GetBodyState(hero)));
print(IntToString(Hlp_GetInstanceID(hero)));
print(ConcatStrings(ConcatStrings(IntToString(Hlp_GetInstanceID(other)), " : "), other.name));
print(ConcatStrings(ConcatStrings(IntToString(Hlp_GetInstanceID(self)), " : "), self.name));

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Jest to o tyle dziwne, że według definicji klasy to JEST tablica.
Możliwe że zmienił to zgodnie z tutorialem/wskazówką Rafała, to by wtedy tłumaczyło to dziwne zachowanie.
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny

gothic1210
  • Gość
Av mam nadzieję, że ci to coś mówi  :lol2:  

 


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