Odnawianie życia w % 8411 17

O temacie

Autor Sryncu

Zaczęty 3.07.2014 roku

Wyświetleń 8411

Odpowiedzi 17

Sryncu

Sryncu

Użytkownicy
posty90
Propsy18
Profesjabrak
  • Użytkownicy
Witam. Już dzisiaj po raz drugi. :lol2:
Chciałbym się zapytać czy da się w Gothicu 2 NK zrobić, aby jedzenie i mikstury odnawiały życie w procentach? Tak jak było to w Gothic 3. Wiem że są to różne silniki, ale w modyfikacji Global mod(nie jestem pewny na 100%) mikstury odnawiały życie w procentach.
Udało mi się stworzyć taki skrypt.
Spoiler
   FUNC VOID UseItem_potion()
      {
         if hero.attribute[ATR_HITPOINTS] >= ((hero.attribute[ATR_HITPOINTS_MAX])/2)
            {
               self.attribute[ATR_HITPOINTS] =  self.attribute[ATR_HITPOINTS_MAX];
            }
         else
            {
               hero.attribute[ATR_HITPOINTS] = ((hero.attribute[ATR_HITPOINTS_MAX])/2);
            };
   };
Niestety jest to to bardzo prymitywne, ponieważ jak się domyślacie jeżeli mam 5% Hp, czy 45% Hp uleczy mi do połowy, więc nie jest to zamierzany efekt.
Dodam też, że próbowałem coś takiego:
Cytuj
Npc_ChangeAttribute   (self,   ATR_HITPOINTS,   50%);
Ale jak to bywa taki sposób był by za prosty i oczywiście musiało wywalić błąd. :facepalm: I jeszcze pytanie czy da radę to zrobić bez Ikarusa?
 

SabeMiczu

SabeMiczu

Użytkownicy
posty52
Profesjabrak
  • Użytkownicy
Wiem że chyba się da bo tak mi się daje że w returningu odnawiało sie tak hp, ale nie wiem jak.
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Po prostu matematyka. 
self.attribute[ATR_HITPOINTS] += self.attribute[ATR_HITPOINTS_MAX]/5; Nie jestem pewien jak to się zachowa gdy  self.attribute[ATR_HITPOINTS_MAX]/5 będzie zwracało liczbę zmiennoprzecinkową. 
 
Ż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

SabeMiczu

SabeMiczu

Użytkownicy
posty52
Profesjabrak
  • Użytkownicy
Za dużo, to już nie moja bajka :) Jak ja mam problem z prostym skryptem dialogu a ja se tutaj czytam o procętach, Sawnik kombinuj i jak się uda to wklej skrypt jaki zrobiłeś, jak byś chciał wspomóż mnie mam problem taki pewny w skrypcie pewnym. :( I za ***** nie wiem jaki...
 

Sryncu

Sryncu

Użytkownicy
posty90
Propsy18
Profesjabrak
  • Użytkownicy
Sawik dzięki za pomoc, ale to zdaje się nie działać jak powinno, ponieważ dodaje mi cały czas ilość punktów życia (moją maksymalna) podzieloną na 5.
 

Arszonto

Arszonto

Użytkownicy
posty99
Propsy34
ProfesjaProgramista
  • Użytkownicy

Arszonto

Odnawianie życia w %
#5 2014-07-03, 21:07(Ostatnia zmiana: 2014-07-03, 21:13)
Skryptów Goticzka nie widziałem na oczy już od kilku lat, ale na logikę wydaje się, że coś w tym stylu powinno działać:
    FUNC VOID UseItem_potion()
    {
        if self.attribute[ATR_HITPOINTS] < ( (self.attribute[ATR_HITPOINTS_MAX])/2 )
            {
                self.attribute[ATR_HITPOINTS] =  self.attribute[ATR_HITPOINTS] + (self.attribute[ATR_HITPOINTS_MAX])*0.5;
            }
        else
            {
               self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS_MAX];
            };
   };

Od razu mówię, że nie jestem pewien składni gothicowych skryptów. Zwyczajnie jej już nie pamiętam  :lol:
 

SabeMiczu

SabeMiczu

Użytkownicy
posty52
Profesjabrak
  • Użytkownicy
Wpiszcie zamiast 5-1 a jak to nie wypali to na 10, tak se gadam ale jak nie próbowaliście to możecie spróbować ;)
 

Sryncu

Sryncu

Użytkownicy
posty90
Propsy18
Profesjabrak
  • Użytkownicy
Arszonto już się ucieszyłem, że będzie działać bo na logikę to faktycznie by działało, ale gothic wywalił błąd
Cytuj
U:PAR: Syntax error: 0.5
A SabeMiczu proponujesz dać
Cytuj
(self.attribute[ATR_HITPOINTS_MAX])*0.1;
albo *0.10? Bo nie czaję. A i jeszcze tak na marginesie czy
Cytuj
self.attribute[ATR_HITPOINTS] += self.attribute[ATR_HITPOINTS_MAX]/5;
czy += to to samo co >=???
 

Arszonto

Arszonto

Użytkownicy
posty99
Propsy34
ProfesjaProgramista
  • Użytkownicy

Arszonto

Odnawianie życia w %
#8 2014-07-03, 21:23(Ostatnia zmiana: 2014-07-03, 21:28)
To wpisz:
    FUNC VOID UseItem_potion()
    {
        if self.attribute[ATR_HITPOINTS] < ( (self.attribute[ATR_HITPOINTS_MAX])/2 )
            {
                self.attribute[ATR_HITPOINTS] =  self.attribute[ATR_HITPOINTS] + (self.attribute[ATR_HITPOINTS_MAX])/2;
            }
        else
            {
               self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS_MAX];
            };
   };

Dzielenie przez dwa, a mnożenie przez połowę to to samo ;)

Logicznie patrząc, to co napisał Sawik, czyli operator " += " spowodouje dodanie do zmiennej po lewej stronie, wartości zmiennej po prawej stronie (choć mogę się mylić, bo jak mówiłem, Gothica nie tykałem od lat). Czyli coś takiego teoretycznie też powinno działać i regenerować 50% HP:
    {
        if self.attribute[ATR_HITPOINTS] < ( (self.attribute[ATR_HITPOINTS_MAX])/2 )
            {
                self.attribute[ATR_HITPOINTS] += self.attribute[ATR_HITPOINTS_MAX]/2;
            }
        else
            {
               self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS_MAX];
            };
   };
 

bgb

bgb

Użytkownicy
posty848
Propsy593
Profesjabrak
  • Użytkownicy
z lhivera:
func void Use_RawMeat()
{
var int hpres;
hpres = 0 + ((self.attribute[ATR_HITPOINTS_MAX] * 14) / 100);
Npc_ChangeAttribute(self,ATR_HITPOINTS,hpres);
if(self.attribute[ATR_HITPOINTS] > self.attribute[ATR_HITPOINTS_MAX])
{
self.attribute[ATR_HITPOINTS] = self.attribute[ATR_HITPOINTS_MAX];
};
};

SabeMiczu

SabeMiczu

Użytkownicy
posty52
Profesjabrak
  • Użytkownicy
Ta 0.1 A jak to nie pomoże to weś 1 Chociaż wątpie z 1 :)
 

Arszonto

Arszonto

Użytkownicy
posty99
Propsy34
ProfesjaProgramista
  • Użytkownicy
@bgb
Wnioskuję, że to powinno zwiększać hp o 14%. Tylko jeśli poprzednio wymienione metody zadziałają, to według mnie lepiej z nich skorzystać, bo nie będzie sensu w tworzeniu nowej zmiennej hpres.

@SabeMiczu
Skoro "*0.5" wyrzuca w Gothicu błąd składniowy, to logicznym jest, że "0.1" również jest niepoprawne. Natomiast 1 nie zmieni stanu zmiennej. Mnożenie przez jeden daje ten sam wynik.
 

Sryncu

Sryncu

Użytkownicy
posty90
Propsy18
Profesjabrak
  • Użytkownicy
Piękne dzięki  Arszonto teraz działa, sposób Sawika też, tyko nie wiedziałem jak go mam użyć :facepalm: Tylko jedna rzecz mnie zastanawia bo w skrypcie mikstury przemiany duszy jest
Cytuj
if Npc_IsPlayer (self)
      {
         B_GivePlayerXP (XP_Ambient * 5);
      };
i mnożenie działa. Tak samo jak funkcja skalowania NPC
Cytuj
Mdl_SetModelScale (self, 0.5, 0.5, 0.5)
to też działa, ale to mniej ważne, ważne, że działa mikstura :D jeszcze raz dziękuje za pomoc.
 

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
Cytuj
U:PAR: Syntax error: 0.5
Gothic nie obsługuje typu float - to tak w ramach wyjaśnienia.
 
Ż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

Sryncu

Sryncu

Użytkownicy
posty90
Propsy18
Profesjabrak
  • Użytkownicy
Float - czyli liczby zmiennoprzecinkowe?
Dzięki za wyjaśnienie ;D Temat można zamknąć.
 

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Obsługuje, tylko że nie można go przypisać do zmiennej :D
Przykład :
const float      TRADE_VALUE_MULTIPLIER               = 0.2;
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Arszonto

Arszonto

Użytkownicy
posty99
Propsy34
ProfesjaProgramista
  • Użytkownicy
Cytat: Sryncu
Piękne dzięki  Arszonto teraz działa.
:)
Cytat: Sryncu
i mnożenie działa.
Tu nie chodzi o samo mnożenie. Operacja mnożenia jest jak najbardziej poprawna. Problem tkwi w tym, że próbowaliśmy wykonać mnożenie przez liczbę nie należącą do zbioru liczb całkowitych (w skórcie, "miała przecinek/kropkę)
Cytat: Sryncu
(self, 0.5, 0.5, 0.5)
Tutaj natomiast nie wykonujemy żadnej operacji. Ale ogólnie wydaje mi się, że zmienna skali jest po prostu innego rodzaju (float, double itd.) i obsługuje liczby "z przecinkiem". Natomiast ta zawierająca liczbę pkt HP może być np zmienną typu int, czy tam inną nie pozwalającą na zachowanie wartości jako liczby zmiennoprzecinkowej.
 

Sryncu

Sryncu

Użytkownicy
posty90
Propsy18
Profesjabrak
  • Użytkownicy
A no to teraz to już rozumiem  :) Dzięki za wyjaśnienie.
 


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