Warunek if 9620 35

O temacie

Autor Jastrzab

Zaczęty 23.07.2012 roku

Wyświetleń 9620

Odpowiedzi 35

Jastrzab

Jastrzab

Użytkownicy
posty197
Propsy39
Profesjabrak
  • Użytkownicy
Cześć. Mam pytanie odnośnie warunku, czy istnieje taki, który mówi, że jeśli zadamy obrażenia jakiemuś NPC to aktywuje się jakaś funkcja? Przeleciałem prawie całe forum i nic nie znalazlem na ten temat.

Z góry dzięki.
 
CPU: Intel Core i7 8700k
RAM: G.Skill Ripjaws 16GB 3000MHz CL15
GPU: MSI GTX 1060 6GB
Mobas: MSI Z370 Gaming Pro Carbon

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
To bardzo często poruszany temat, z tym że nie chodzi o warunek, tylko wywołanie funkcji. Kiedy zadamy jakiemuś npc obrażenia, wywoływana jest funkcja którą ma ustawioną dla swojego PERC_ASSESSDAMAGE. W g2nk dla ludzi jest to funkcja B_AssessDamage().

Jastrzab

Jastrzab

Użytkownicy
posty197
Propsy39
Profesjabrak
  • Użytkownicy
To chyba coś w stylu szponu beliara, ale ja potrzebuję to zrobić do konkretnych strzał.
 
CPU: Intel Core i7 8700k
RAM: G.Skill Ripjaws 16GB 3000MHz CL15
GPU: MSI GTX 1060 6GB
Mobas: MSI Z370 Gaming Pro Carbon

Wowoz

Wowoz

Użytkownicy
Wowoźny
posty3698
Propsy4862
NagrodyVV
Profesjabrak
  • Użytkownicy
  • Wowoźny
To chyba coś w stylu szponu beliara, ale ja potrzebuję to zrobić do konkretnych strzał.

i?
Sam juz sobie odpowiedziałeś.
 


Jastrzab

Jastrzab

Użytkownicy
posty197
Propsy39
Profesjabrak
  • Użytkownicy
Dobra mój skrypt wygląda tak:
Ale mam pytanko, jak użyć tego w tick tocku?

func int C_ScHasReadiedZatrutaStrzala ()
{
var C_ITEM ReadyWeaptrutka; ReadyWeaptrutka = Npc_GetReadiedWeapon(hero);

if (Npc_HasItems (hero, ItRw_zatruta_strzala ) && (ReadyWeaptrutka))
{
return TRUE;
};

return FALSE; //DEFAULT
};

const int trutkaDamageChance = 100;

func void B_zatruta_strzala (var C_NPC oth, var C_NPC slf) //other ist angreifer, slf ist victim
{


if (Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))
{
var int DamageTrutka;
DamageTrutka = Hlp_Random (100);

if (C_ScHasReadiedZatrutaStrzala())
&& (DamageTrutka <= trutkaDamageChance)
{

if (slf.flags != NPC_FLAG_IMMORTAL)
{
other.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - 50;
};
//Ambient Pfx
};

};
};
 
CPU: Intel Core i7 8700k
RAM: G.Skill Ripjaws 16GB 3000MHz CL15
GPU: MSI GTX 1060 6GB
Mobas: MSI Z370 Gaming Pro Carbon

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
Don't forget the Damage-Perception is also triggered on blocks etc. To circumvent this you need a more sophisticated approach with Ikarus and technically even LeGo though a standalone-script can easily be derived.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Warunek if
#7 2012-07-23, 22:14(Ostatnia zmiana: 2012-07-23, 22:38)
The Nameless Hero isn't the Witcher, he can't simply block arrows with sword :D

@Jastrzab
Po co ciągle te ticktocki?! Nie dość że są nadużywane, to tutaj jego zastosowanie byłoby totalnie bezużyteczne :facepalm:

Przecież napisałem ci poprawne rozwiązanie, a ty kombinujesz z niewiadomo czym. W B_AssessDamage dodaj
var c_item weapon; weapon = Npc_GetReadiedWeapon (other);
if (weapon.munition == ItRw_zatruta_strzala && self.flags != NPC_FLAG_IMMORTAL && Hlp_Random (100) > 50)
{
self.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - 50;
};
}

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
You should still test how hitting but not doing any damage (because according to your hitchance you didn't hit) works with this. And I didn't see it was about (cross?)bows, the Google Translator really isn't the best thing but I do what I can :p
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

Wicon

Wicon

Użytkownicy
posty147
Propsy5
  • Użytkownicy

Wicon

Warunek if
#9 2012-07-24, 13:21(Ostatnia zmiana: 2012-07-24, 13:44)
A czy nie byłoby prościej napisać taki warunek:

if (slf.attribute [ATR_HITPOINTS] <= slf.attribute [ATR_HITPOINTS_MAX] - 1)
Co oznacza:
Jeśli npc self ma tyle samo życia lub mniej życia niż jego maksymalna ilość życia odjąć 1, to... i piszesz co ma się stać.

Chyba, że ty chcesz jeśli npc otrzyma obrażenia od bohatera, wtedy będzie lipa, bo warunek byłby spełniony nawet gdy np dostanie od wilka lub czegoś innego. Ale nie napisałeś w poście, że musi być od bohatera, więc tak powinno działać.
 

Jastrzab

Jastrzab

Użytkownicy
posty197
Propsy39
Profesjabrak
  • Użytkownicy
Chodzi właśnie, o to jeśli npc otrzyma obrażenia od bohatera. Chodzi o to, żeby te obrażenia schodziły co sekundę, dlatego tick tock. Sorki, jeśli się nie zrozumieliśmy.
 
CPU: Intel Core i7 8700k
RAM: G.Skill Ripjaws 16GB 3000MHz CL15
GPU: MSI GTX 1060 6GB
Mobas: MSI Z370 Gaming Pro Carbon

Wicon

Wicon

Użytkownicy
posty147
Propsy5
  • Użytkownicy

Wicon

Warunek if
#11 2012-07-24, 14:03(Ostatnia zmiana: 2012-07-24, 14:06)
Tzn. chcesz zrobić zatrutą strzałę? To może spróbuj tak:

Załóżmy, że trucizna skosi 5 razy po 10HP., więc częściowo tak jak napisał avallach.

var int truta;
var int trutb;
var int trutc;
var int trutd;
var int trute;
if (weapon.munition == ItRw_zatruta_strzala && self.flags != NPC_FLAG_IMMORTAL) // Nie wiem po co ten random, no, chyba że chcesz aby na zatrucie było 50% szansy to ok, jak najbardziej wskazane.
&& (truta == FALSE) // To wszystko ma być FALSE dlatego, że jak byś gościa raz palnął zatrutą strzałą i dajmy doszło by do momentu gdzie trutc = TRUE, a ty trafiłbyś go strzałą jeszcze raz, to wtedy pomieszało by się wszystko i zabierało by mu o turę zamiast 10HP to 20 i z każdym kolejnym trafieniem o 10 więcej.
&& (trutb == FALSE)
&& (trutc == FALSE)
&& (trutd == FALSE)
&& (trute == FALSE)
{
        self.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - 10;
        truta = TRUE;
};
if (truta == TRUE)
{
        self.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - 10;
        truta = FALSE;
        trutb = TRUE;
};
if (trutb == TRUE)
{
        self.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - 10;
        trutb = FALSE;
        trutc = TRUE;
};
if (trutc == TRUE)
{
        self.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - 10;
        trutc = FALSE;
        trutd = TRUE;
};
if (trutd == TRUE)
{
        self.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - 10;
        trutd = FALSE;
        trute = TRUE;
};
if (trute == TRUE)
{
        self.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - 10;
        trute = FALSE;
};

A co tam masz nawet godowy kawałek. A na pytanie dlaczego i po co tak odpowiem:

Z tego co wiem: Gdy go trafisz, to zanim truta przyjmie wartość TRUE, a potem zanim trutb przyjmie wartość TRUE, to minie kilka sekund. Te wartości nie zmieniają się natychmiastowo, więc przeciwnik nie straci od razu 50 hp, tylko co parę sekund będzie tracił po 10.  Nie jestem na 100% przekonany że to zadziała bo nigdy czegoś takiego nie robiłem, ale możesz sprawdzić. Nawet jeśli nie zadział to podziękowania i tak się należą bo straciłem trochę czasu na główkowanie i na samo napisanie tego.

Edit: Błędy ortograficzne i fleksyjne xD.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Warunek if
#12 2012-07-24, 14:09(Ostatnia zmiana: 2012-07-24, 14:15)
Wicon, z zasady nie obrażam innych użytkowników forum, ale uwierz mi że naprawdę w tej chwili na to byś zasługiwał (zresztą wcale nie jestem pewien że ktoś mnie nie wyręczy). Twoje dwa ostatnie posty pokazują jak żałosne jest twoje pojęcie o programowaniu, a próbujesz jeszcze uczyć innych.

Ezzam

Ezzam

Użytkownicy
posty391
Propsy367
  • Użytkownicy
Pierwszy raz widzę, żeby int miał przyjmoWać wartość logiczną.
 

Alexior

Alexior

Użytkownicy
posty94
Propsy61
  • Użytkownicy

Alexior

Warunek if
#14 2012-07-24, 14:19(Ostatnia zmiana: 2012-07-24, 14:20)
@UP
Jak to będzie oddziaływać na zasadzie 1s to -10hp? :D

var int zatrucie;
zatrucie =0;
if (weapon.munition == ItRw_zatruta_strzala && self.flags != NPC_FLAG_IMMORTAL && zatrucie == 0)
{
zatrucie = zatrucie +1;
};


if (zatrucie !=0 && zatrucie < 10)
{
self.attribute[ATR_HITPOINTS] = other.attribute[ATR_HITPOINTS] - 10;
zatrucie = zatrucie +1;
}
else
{
zatrucie = 0;
};

takie coś ma prawo bytu? :D
btw. jak var int przypisujesz wartosc false i true?
@Edit: Jeżeli nie może tak być, to dlaczego? :D
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Pierwszy raz widzę, żeby int miał przyjmoWać wartość logiczną.
const int TRUE = 1;
const int FALSE = 0;

i wszystko jasne

Wicon

Wicon

Użytkownicy
posty147
Propsy5
  • Użytkownicy
var int przyjmuje wartości FALSE i TRUE, const int przyjmuje wartości liczbowe.
 

Alexior

Alexior

Użytkownicy
posty94
Propsy61
  • Użytkownicy
Int przyjmuje wartości liczbowe, możesz chyba wykorzystać TRUE i FALSE, ale True to będą liczby od 1 w górę, a FALSE 0, niech ktoś mnie poprawi jak się mylę ;)
 

Wicon

Wicon

Użytkownicy
posty147
Propsy5
  • Użytkownicy

Wicon

Warunek if
#18 2012-07-24, 16:20(Ostatnia zmiana: 2012-07-24, 16:21)
Cóż, sprawdziłem ten kod któy tu napisałem, błędów nie ma, nie mniej jednak nie sprawiło to, że npc będzie co chwile tracił 10HP, próbowałem wielu innych sposobów ale nic z tego nie wyszło.

Avallach, mówiąc że w ogóle nie znam się na programowaniu, mocno przesadziłeś! Jesteś wielki, wiesz dużo, ale nie wolno naśmiewać się gdy ktoś "PRÓBUJE" coś zrobić, bo w tamtym poście jasno napisałem, że nie wiem czy to zadziała bo nigdy nie robiłem. Jedno jest pewne: Nagrodzeni będą ci, którzy próbowali!


A teraz wpadłem na pewien pomysł. Jastrząb: Ściągnij sobie G1 i skrypty do gothica jedynki a potem sprawdź jak zrobiony jest ognisty jaszczur, bo z tego co pamiętam, to w gothicu 1 ognisty jaszczur jak nas skosił to dostawaliśmy dodatkowe obrażenia od ognia. Więc zobaczysz jak to zrobione i przerobisz do G2. No ale tak jak wcześniej nie byłem pewien czy zadziała, tak i teraz pewien tego nie jestem.
 

Jastrzab

Jastrzab

Użytkownicy
posty197
Propsy39
Profesjabrak
  • Użytkownicy
Mam pomysł, może sprawdzić jak działa kula ognia. Bo z tego nie pamiętam, jak się nią uderzy to przeciwnik płonie i zabiera mu HP co chwilę. Sprawdzałem twój kod Wicon i nie ma rezultatu ;/
 
CPU: Intel Core i7 8700k
RAM: G.Skill Ripjaws 16GB 3000MHz CL15
GPU: MSI GTX 1060 6GB
Mobas: MSI Z370 Gaming Pro Carbon


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