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

O temacie

Autor pawbuj

Zaczęty 25.03.2013 roku

Wyświetleń 25786

Odpowiedzi 106

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Na razie problem z posta #36 zniknął. Wracając do tego Npc_PercEnable (self, PERC_ASSESSDAMAGE, armor_zuzycie); to czy nie można by wykorzystać tego do zrobienia plam krwi jak w Dziedzictwie? Chyba Ikarus ma funkcję wyświetlającą teksturę na ekranie (ja się nie tykam Ikarusa, ale pawbuj mógłbś coś takiego zrobić).

EDIT: Ha! Znalazłem buga. Gdy blokujemy uderzenie przeciwnika wskaźnik zużycia zaczyna zapieprzać w dół jak licznik w Porsche na prostej (tyle że tam leci do góry :D  ). Myślałem, że gdy blokujemy to nie otrzymujemy jako takich obrażeń. Da się to jakoś naprawić?
trzeba sprawdzić jak się nazywa bodystate lub ani, kiedy npc blokuje cios i go wykluczyć w warunku.
 

gothic1210
  • Gość
trzeba sprawdzić jak się nazywa bodystate lub ani, kiedy npc blokuje cios i go wykluczyć w warunku.
Dzięki. Dodałem coś takiego:
if (!C_BodyStateContains(hero, BS_PARADE))
ale teraz jest inny problem. Nie odejmuje już tak szybko, ale każdy blok (nawet na sucho, gdy nikt mnie nie atakuje) odejmuje 1 punkt żywotności zbroi.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Wracając do tego Npc_PercEnable (self, PERC_ASSESSDAMAGE, armor_zuzycie); to czy nie można by wykorzystać tego do zrobienia plam krwi jak w Dziedzictwie? Chyba Ikarus ma funkcję wyświetlającą teksturę na ekranie (ja się nie tykam Ikarusa, ale pawbuj mógłbś coś takiego zrobić).
Taką funkcję ma LeGo. Zamiast tego można użyć np pseudo-fonta o gigantycznym rozmiarze znaków. W każdym razie tak, można tego używać do czegokolwiek i u jakiejkolwiek postaci. Po prostu u innych niż hero zamiast nadpisywać starego perceptiona proponuję dodać wywołanie nowej funkcji w tej która jest przypięta do niego normalnie (np zs_reacttodamage).

EDIT: Ha! Znalazłem buga. Gdy blokujemy uderzenie przeciwnika wskaźnik zużycia zaczyna zapieprzać w dół jak licznik w Porsche na prostej (tyle że tam leci do góry :D  ). Myślałem, że gdy blokujemy to nie otrzymujemy jako takich obrażeń. Da się to jakoś naprawić?
Rzeczywiście obrażenia nie powinny być zadawane i jest to błąd związany z silnikiem. Być może początkowo planowali aby parowanie tylko zmniejszało obrażenia. Propozycja Pawbuja jest ok.

Cytuj
Nie odejmuje już tak szybko, ale każdy blok (nawet na sucho, gdy nikt mnie nie atakuje) odejmuje 1 punkt żywotności zbroi.
Lol. Strasznie dziwne. Czyli twierdzisz że każdy blok wysyła perc_assessdamage? Możesz to dokładnie sprawdzić? Wyglądałoby na to że ten bug jest jednak dziwniejszy niż mogłoby się wydawać.

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Od jakiegoś czasu planuję przepisanie tych najciekawszych funkcji LeGo pod G1, w sumie kiedyś już to robiłem, nawet były pewne sukcesy.
Zaraz siadam do pisania tego view i pasków, Gothic1210, zgodzisz się testować?


Avalach, zależy jak ułożył funkcję, napisał że używa też BS_Parade.
 
Ż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


Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Nie wiem co masz na myśli przez "używa". Nie da się podpiąć wywołania funkcji pod zmianę bodystate. Od tego są jedynie perceptiony, a nie ma perceptiona od blokowania.
Jak dobrze go zrozumiałem, używa Npc_GetBodyState sprawdzając czy jest to BS_Parade by ograniczyć obrażenia dawane zbroi. Jeżeli pokazałby skrypt wszystko stałoby się jasne.
 
Ż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ść
Trzymajcie skrypt. Przyznam szczerze, że nie jestem w tym na tyle głęboko żeby stwierdzić czemu obrażenia są zadawane przy blokowaniu.
func void armor_zuzycie ()
{
var c_item zbroja;
zbroja = Npc_GetEquippedArmor(hero);
//print ("trafiono bohatera");

//odejmowanie
if (!C_BodyStateContains(hero, BS_PARADE))
{
if (zbroja.protection [PROT_EDGE] > 1)
{
zbroja.protection [PROT_EDGE] = zbroja.protection [PROT_EDGE] - 1;
hero.protection [PROT_EDGE] = hero.protection [PROT_EDGE] - 1;
};
if (zbroja.protection [PROT_BLUNT] > 1)
{
zbroja.protection [PROT_BLUNT] = zbroja.protection [PROT_BLUNT] - 1;
hero.protection [PROT_BLUNT] = hero.protection [PROT_BLUNT] - 1;
};
if (zbroja.protection [PROT_POINT] > 1)
{
zbroja.protection [PROT_POINT] = zbroja.protection [PROT_POINT] - 1;
hero.protection [PROT_POINT] = hero.protection [PROT_POINT] - 1;
};
if (zbroja.protection [PROT_FIRE] > 1)
{
zbroja.protection [PROT_FIRE] = zbroja.protection [PROT_FIRE] - 1;
hero.protection [PROT_FIRE] = hero.protection [PROT_FIRE] - 1;
};
if (zbroja.protection [PROT_MAGIC] > 1)
{
zbroja.protection [PROT_MAGIC] = zbroja.protection [PROT_MAGIC] - 1;
hero.protection [PROT_MAGIC] = hero.protection [PROT_MAGIC] - 1;
};
PrintScreen (ConcatStrings ("Zużycie pancerza: ", IntToString(zbroja.protection [PROT_EDGE])),2,91,"Font_Old_10_White_Hi.TGA",3);
//opis
zbroja.text[0]="Zużycie:";
//zbroja.protection [PROT_EDGE] -= 1;
//hero.protection [PROT_EDGE] -= 1;
zbroja.count[0]=zbroja.protection [PROT_EDGE];
};
if (zbroja.protection [PROT_EDGE] == 1) || (zbroja.protection [PROT_BLUNT] == 1)
{
AI_UnequipArmor  (hero);
Print ("Zbroja zniszczona!");
};
};
Jeszcze raz opiszę problem: każda próba bookowania  (Ctrl + strzałka w dół) odejmuje zużycie.
Film:
https://www.youtube.com/watch?v=O8fR_cSjLRw

sory za słabą jakość, późno jest
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Wywoływane przez perceptiona?
 
Ż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ść
Wywoływane przez perceptiona?
Tak. Npc_PercEnable (hero, PERC_ASSESSDAMAGE, armor_zuzycie);
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Wywoływane przez perceptiona?
Tak. Npc_PercEnable (hero, PERC_ASSESSDAMAGE, armor_zuzycie);
funkcja powinna być wywoływana tylko warunkowo,
if (!C_BodyStateContains(hero, BS_PARADE))

może to nie jest własciwy warunek.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
To nie ma znaczenia, blokowanie w ogóle nie powinno wysyłać tego perceptiona. Warunek w funkcji nie ma wpływu na to kiedy zostanie ona wywołana, może jedynie ograniczyć o co się dzieje potem. Wygląda na to że tak jak pisałem to po prostu błąd w silniku. Dodaj warunek porównujący instanceid selfa i othera, to nie będzie takiego problemu, przy prawdziwym ataku będą różne. Teraz z tabletu mi niewygodnie, ewentualnie jutro mogę skrobnąć po południu.

Inna sprawa że można by to wykorzystać w drugą stronę, dla funkcji wywoływanej przy blokowaniu też dałoby się znaleźć zastosowania.

Mark56

Mark56

Moderator
som veľký magič
posty1632
Propsy1846
ProfesjaAnimator
  • Moderator
  • som veľký magič
if (!C_BodyStateContains(hero, BS_PARADE))dajemy blok na "sucho" -> wywołuje się assessdamage i do tego spełniony jest warunek ze hero nie blokuje .  :facepalm:  
 oO  Mother of God  :pokerface:

Nie bardzo robiłem ze skryptami gothica ale interesuje mnie czy Npc_PercEnable(hero, PERC_ASSESSDAMAGE, armor_zuzycie);
wywołuje ta funkcje zamiast tej co normalnie, albo dodaje ja jakby do listy funkcji do wywołania ?
 


gothic1210
  • Gość
if (!C_BodyStateContains(hero, BS_PARADE))dajemy blok na "sucho" -> wywołuje się assessdamage i do tego spełniony jest warunek ze hero nie blokuje .  :facepalm:  
 oO  Mother of God  :pokerface:

Nie bardzo robiłem ze skryptami gothica ale interesuje mnie czy Npc_PercEnable(hero, PERC_ASSESSDAMAGE, armor_zuzycie);
wywołuje ta funkcje zamiast tej co normalnie, albo dodaje ja jakby do listy funkcji do wywołania ?
Ja myślałem, że on wywołuje ją i tę co normalnie (tylko już w innym skrypcie), czyli jakby dodawał do listy funkcji wywoływanych przy obrażeniach.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
if (!C_BodyStateContains(hero, BS_PARADE))dajemy blok na "sucho" -> wywołuje się assessdamage i do tego spełniony jest warunek ze hero nie blokuje .  :facepalm:  
 oO  Mother of God  :pokerface:

Nie bardzo robiłem ze skryptami gothica ale interesuje mnie czy Npc_PercEnable(hero, PERC_ASSESSDAMAGE, armor_zuzycie);
wywołuje ta funkcje zamiast tej co normalnie, albo dodaje ja jakby do listy funkcji do wywołania ?
Niestety o ile wiem, zastępuje. W przypadku hero to raczej nieszkodliwe, ale tak jak wspominałem wcześniej, u innych lepiej dodać wywołanie własnej funkcji w którejś z już używanych. W .NET jest coś takiego jak "eventy" które działają podobnie, z tym że właśnie mogą pamiętać wiele funkcji do wywołania na raz, każdą też się oddzielnie w razie czego usuwa.

Warunek o którym pisałem powinien być w stylu
if (Hlp_GetInstanceID(self) != Hlp_GetInstanceID(other))Oczywiście nie gwarantuję że zadziała, zresztą ewentualnie są też inne możliwości.

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Gothic

przychodza mi 2 rozwiazania do głowy:

1) za zabicie zbroja zwiększa wytrzymałośc o 1 *level NPC ;

2) zwiększyć skalę odejmowanych punktów wytrzymałości zbroi jak i zwiększyć jej wytrzymałość np. x 20 czy nawet 1000, wtedy tylko 1 punkt nie będzie odgrywał zasadniczej roli. zmiennamożesz wyświuetlać dzieloną przez mnoznik (1000) i powinno być ok. (tylko teoria na razie)


dodam, że ja pojedynczo wciskam blok i odejmuje mi pojedynczo punkty.

kombinacje takie jak to nie dały rezultatu, ale punkty były odejmowane pojednyczno co sekwencja bloku.

if ((Npc_GetBodyState(hero) != BS_PARADE)
&& (!C_BodyStateContains(hero, BS_PARADE)))
 

gothic1210
  • Gość
Cytuj
zresztą ewentualnie są też inne możliwości.
Jakie masz jeszcze inne pomysły?
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Ale co, dodaliście ten mój warunek i dalej przy blokowaniu wytrzymałość się odejmuje? Trzeba by przede wszystkim sprawdzić kim są wówczas self i other i czy ta sytuacja różni się czymś od normalnej, np zgaduję że zamiast tamtego można by też spróbować
if (Hlp_GetInstanceID(hero) != Hlp_GetInstanceID(other))

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Ale co, dodaliście ten mój warunek i dalej przy blokowaniu wytrzymałość się odejmuje? Trzeba by przede wszystkim sprawdzić kim są wówczas self i other i czy ta sytuacja różni się czymś od normalnej, np zgaduję że zamiast tamtego można by też spróbować
if (Hlp_GetInstanceID(hero) != Hlp_GetInstanceID(other))
Av sprawdzę to.
 

gothic1210
  • Gość
Najpierw zrobiłem tak:
func void armor_zuzycie ()
{
var c_item zbroja;
zbroja = Npc_GetEquippedArmor(hero);
print ("trafiono bohatera");

//odejmowanie
if (Hlp_GetInstanceID(hero) != Hlp_GetInstanceID(other))
{
Print ("SYTUACJA 1!!");
};
if (!C_BodyStateContains(hero, BS_PARADE))
{
Print ("SYTUACJA 2!!");
if (zbroja.protection [PROT_EDGE] > 1)
{
zbroja.protection [PROT_EDGE] = zbroja.protection [PROT_EDGE] - 1;
hero.protection [PROT_EDGE] = hero.protection [PROT_EDGE] - 1;
};
if (zbroja.protection [PROT_BLUNT] > 1)
{
zbroja.protection [PROT_BLUNT] = zbroja.protection [PROT_BLUNT] - 1;
hero.protection [PROT_BLUNT] = hero.protection [PROT_BLUNT] - 1;
};
if (zbroja.protection [PROT_POINT] > 1)
{
zbroja.protection [PROT_POINT] = zbroja.protection [PROT_POINT] - 1;
hero.protection [PROT_POINT] = hero.protection [PROT_POINT] - 1;
};
if (zbroja.protection [PROT_FIRE] > 1)
{
zbroja.protection [PROT_FIRE] = zbroja.protection [PROT_FIRE] - 1;
hero.protection [PROT_FIRE] = hero.protection [PROT_FIRE] - 1;
};
if (zbroja.protection [PROT_MAGIC] > 1)
{
zbroja.protection [PROT_MAGIC] = zbroja.protection [PROT_MAGIC] - 1;
hero.protection [PROT_MAGIC] = hero.protection [PROT_MAGIC] - 1;
};
};
PrintScreen (ConcatStrings ("Zużycie pancerza: ", IntToString(zbroja.protection [PROT_EDGE])),2,91,"Font_Old_10_White_Hi.TGA",3);
//opis
zbroja.text[0]="Zużycie:";
//zbroja.protection [PROT_EDGE] -= 1;
//hero.protection [PROT_EDGE] -= 1;
zbroja.count[0]=zbroja.protection [PROT_EDGE];

if (zbroja.protection [PROT_EDGE] == 1) || (zbroja.protection [PROT_BLUNT] == 1)
{
AI_UnequipArmor  (hero);
Print ("Zbroja zniszczona!");
};
};
Wyświetliły się oba napisy. To znaczy, że warunki są spełnione.
Potem przerobiłem na:
if (!C_BodyStateContains(hero, BS_PARADE)) && (Hlp_GetInstanceID(hero) != Hlp_GetInstanceID(other))
{
Zużycie dalej się odejmuje przy blokowaniu.
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
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.
 
Ż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


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