Skrypt zadawanych obrażeń 10051 48

O temacie

Autor TheKetrab

Zaczęty 5.07.2016 roku

Wyświetleń 10051

Odpowiedzi 48

WayneBlack

WayneBlack

Użytkownicy
posty30
Propsy6
ProfesjaSkrypter
  • Użytkownicy
Zapewne w pliku z tymi zmiennymi, gdzie były typy obrażeń, można dodać kolejny... a potem ustawić ten damagetype potworowi. Potem - pod podpalaniem - ustawić tyknięcia.

Nie, nie podam plików... nie pamiętam ich, nie zaglądałem do skryptów od miesiąca. I nie zależy mi tak bardzo - pierwszy post powstał pod wpływem emocji, jak widzę tego durnia, co wypowiada się w każdym temacie, nie pisze NIC wartościowego, jeszcze obraża innych.
 

Splash

Splash

Moderator
posty4208
Propsy3410
ProfesjaNierób
  • Moderator
Cytuj
Zapewne w pliku z tymi zmiennymi, gdzie były typy obrażeń, można dodać kolejny... a potem ustawić ten damagetype potworowi.
Efekt będzie tylko taki, że na ten rodzaj obrażeń nie będzie ochrony. Dodając nowy rodzaj ochrony przed tym rodzajem obrażeń zapoznasz się z błędem informującym o niezgadzającym się rozmiarze klasy. A nawet gdyby się dało, to silnik od tak sobie nie wpadnie na to, że ten typ ochrony ma chronić przed tym rodzajem obrażeń.
Cytuj
Potem - pod podpalaniem - ustawić tyknięcia.
Tak, dodasz sobie dwie stałe, które nic nie zmienią.

To są te stałe odpowiedzialne za czas trwania i obrażenia ognia:
CONST INT NPC_BURN_TICKS_PER_DAMAGE_POINT = 1000;
CONST INT NPC_BURN_DAMAGE_POINTS_PER_INTERVALL = 50;

A teraz popatrz jaka fajna funkcja jest w silniku:
00735520:    oCNpc::Burn(int,float)Fajne ma argumenty, co nie? Pierwszy (int) to zwykła zmienna liczbowa. Instynkt mi podpowiada, że to obrażenia. Natomiast drugi argument (float) to liczba zmiennoprzecinkowa - tak mi babcia powiedziała. 1000 milisekund = 1 sekunda. 1500 milisekund = 1,5 sekundy.

Nie ucz ojca dzieci robić.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

WayneBlack

WayneBlack

Użytkownicy
posty30
Propsy6
ProfesjaSkrypter
  • Użytkownicy
Nie uczę ojca, a idiotę. Jeśli stworzymy nowe obrażenia, nie potrzeba na nie obrony. Wiesz, że w grze występuje KILKA typów obrażeń? I na niektóre obrony nie ma - na przykład na obrażenia od lotu (powietrza). Więc można dodać nowe, które będą zadawać powiedzmy 1 punkt obrażeń co sekundę przez 10-20 sekund. Realistyczne.
 

Splash

Splash

Moderator
posty4208
Propsy3410
ProfesjaNierób
  • Moderator

Splash
Moderator

Skrypt zadawanych obrażeń
#23 2016-07-08, 02:45(Ostatnia zmiana: 2016-07-08, 02:50)
Nie ma ochrony na obrażenia lotu? Hmm... Ciekawe, mów dalej.
CONST INT PROT_BARRIER = DAM_INDEX_BARRIER ;
CONST INT PROT_BLUNT = DAM_INDEX_BLUNT ;
CONST INT PROT_EDGE = DAM_INDEX_EDGE ;
CONST INT PROT_FIRE = DAM_INDEX_FIRE ;
CONST INT PROT_FLY = DAM_INDEX_FLY ;
CONST INT PROT_MAGIC = DAM_INDEX_MAGIC ;
CONST INT PROT_POINT = DAM_INDEX_POINT ;
CONST INT PROT_FALL = DAM_INDEX_FALL ;

Cytuj
Nie uczę ojca, a idiotę.
Tak, bo to ja się opieram na wyimaginowanej teorii zamiast faktach. Zamiast fantazjować, przejdź do czynów i udowodnij, że się mylę.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
B_PoisonousWolf (self); Ma być na początku pliku, najlepiej zaraz po B_BeliarsWeaponSpecialDamage (other, self);.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Ciągle nic to nie pomaga...
// *****************
// B_MM_AssessDamage
// *****************

func void TruciznaFunction ()
{

WillZatruty = 1;
PrintScreen ("zatruty", -1,-1, "font_old_20_white.tga",3);

};

var int prev_hp;

func void B_PoisonousWolf (var C_NPC slf)
{
if (slf.aivar[AIV_MM_REAL_ID] == ID_WOLF)//Jakieś unikalne, poszukaj w AI_Constants.d linijek ID_* i dodaj własną stałą, oraz dodaj ją do ID wilka (ID = nowaStała)
{
if (slf.attribute[ATR_HITPOINTS] < prev_hp)
{
TruciznaFunction();
};
prev_hp = slf.attribute[ATR_HITPOINTS];
};
};


func void B_MM_AssessDamage ()
{
self.aivar[AIV_MM_PRIORITY] = PRIO_ATTACK;

B_BeliarsWeaponSpecialDamage (other, self);
B_PoisonousWolf (self);
// EXIT IF

// ------ SONDERFALL: Magic Golem ------ //JUUUUNGEEEEE!!!

// ----- wenn Monster Beute von Angreifer ------
if (C_PredatorFoundPrey(other,self))
{
Npc_ClearAIQueue (self);
Npc_SetTarget (self, other);
B_ClearPerceptions (self);
AI_StartState (self, ZS_MM_Flee, 0, "");
return;
};

// ------ wenn Monster im ZS_Attack ------
if (Npc_IsInState(self,ZS_MM_Attack))
{
// EXIT IF...

// ------ Partymember ignorieren Treffer vom Spieler im Kampf ------
if (Npc_IsPlayer (other))
&& (self.aivar[AIV_PARTYMEMBER] == TRUE)
{
return;
};

// ------ HACK: von Skelettmagier getroffene Skelette ignorieren Schaden ------
if (self.aivar[AIV_MM_REAL_ID] == ID_SKELETON)
&& (other.aivar[AIV_MM_REAL_ID] == ID_SKELETON_MAGE)
{
return;
};


// FUNC

// ------ Wenn ich von jemand ANDEREM getroffen werde ------
if (Hlp_GetInstanceID (other) != self.aivar[AIV_LASTTARGET])
{
if (self.aivar[AIV_HitByOtherNpc] == Hlp_GetInstanceID (other))
{
Npc_SetTarget (self, other); //Ziel wechseln, wenn zum zweiten Mal getroffen
}
else
{
self.aivar[AIV_HitByOtherNpc] = Hlp_GetInstanceID (other); //EIN Freischlag
};
};

return;
};


// FUNC

Npc_ClearAIQueue (self);
Npc_SetTarget (self, other);
B_ClearPerceptions (self);
AI_StartState (self, ZS_MM_Attack, 0, "");
return;
};


 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
A masz w ogóle ustawione obrażenia?

Jeszcze inaczej: pokaż skrypt triggera.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Stop... nagle zadziałało... Aż się sam zdziwiłem. Pokombinuję z tym jeszcze trochę.
 

WayneBlack

WayneBlack

Użytkownicy
posty30
Propsy6
ProfesjaSkrypter
  • Użytkownicy
Do tej pory Ty też tylko fantazjujesz i nie sprawdzasz nawet, o to mi chodzi. Nie to, o czym mówię, a co mam na myśli - spójrz na dowolny skrypt pancerza. Widzisz, by miał odporność na lot? Oczywiście, niektóre potwory mają ustawioną odporność na wszystkie obrażenia, ale ludzie - a raczej, ich pancerze - nie mają tej obrony. To było dla mnie podstawą, by stwierdzić, że ta obrona nie jest potrzebna - dlatego można ustawić nowe obrażenia, które również obrony nie posiadają.

Post połączony: 2016-07-08, 12:20
Poza tym, jakby moja teoria nie miała oparcia, to byś nie próbował jednocześnie i jej obalić, i potwierdzić - bo w poprzednich wypowiedziach potwierdziłeś, że nowe obrażenia dodać można. Fajnie się pokłócić z kimś tak zabawnym, jak Ty.
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Ta, jasne, na pewno dasz radę zrobić nowe obrażenia. Rozszerzysz TABLICĘ OBRAŻEŃ o dodatkowy slot, przez co gra ci będzie wypierdalać błędy. Powodzenia, mistrzu modowania Gothica.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Splash

Splash

Moderator
posty4208
Propsy3410
ProfesjaNierób
  • Moderator
Cytuj
Do tej pory Ty też tylko fantazjujesz i nie sprawdzasz nawet, o to mi chodzi.
Człowieku, nie po to siedzę 7 lat w skryptach Gothica, by ktoś, kto nawet rok nie jest na tym forum mówił mi, co jest możliwe, a co nie xD
Cytuj
Oczywiście, niektóre potwory mają ustawioną odporność na wszystkie obrażenia, ale ludzie - a raczej, ich pancerze - nie mają tej obrony.
Zajrzyj do klasy C_item. Zobacz jaka fajna zmienna jest w tej klasie:
protection [PROT_INDEX_MAX];Tablica ma rozmiar 8. Jak dodasz nowy rodzaj ochrony?
Cytuj
Poza tym, jakby moja teoria nie miała oparcia, to byś nie próbował jednocześnie i jej obalić, i potwierdzić - bo w poprzednich wypowiedziach potwierdziłeś, że nowe obrażenia dodać można.
Bo można dodać. Zmienna damageType to nie tablica, tylko zwykła zmienna. Poczytaj trochę o operacjach bitowych.

Żeby ci nie przeciążać mózgu, postaram się zapytać jak najprościej.
1. Jak według ciebie ma to zadziałać, skoro chcesz zrobić tylko nowy rodzaj obrażeń i dodać dwie stałe, skoro silnik nie potrafi czytać w myślach i nie wpadnie na to, że jeśli jakaś broń lub potwór ma ten typ obrażeń, przeciwnik zostanie otruty? Rozsypiesz ryż i poczekasz aż mali Chińczycy to zrobią?
2. Jak chcesz DODAĆ nowy rodzaj ochrony, nie zmieniając rozmiaru tablicy?
3. Czy skończysz w końcu pierdolić i przejdziesz do czynów by udowodnić, że się mylę?
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

WayneBlack

WayneBlack

Użytkownicy
posty30
Propsy6
ProfesjaSkrypter
  • Użytkownicy
Dobra, szkoda czasu na zjeba, który nie rozumie, jak się do niego mówi. Jak matka Ci mówi, że masz wyjebać śmieci, bo nie masz miejsca w koszu, to kupisz drugi kosz? Myśl Ty czasem, upośledzona podróbko człowieka.

Post połączony: 2016-07-08, 14:24
Pan Zwei mówił, że ponoć mnie blokuje. Kłamczuszek nawet tego zrobić nie umie, a udaje mądrego.
 

Splash

Splash

Moderator
posty4208
Propsy3410
ProfesjaNierób
  • Moderator
Nie rzucaj mięsem, tylko udowodnij, że się mylę.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy
A mnie ciekawi jak to zrobiliście, że B_AssesDamage (czy jak mu tam) działa na Hero
 

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
To zawsze działa na hero. Other to ofiara, self atakujący (albo na odwrót, nie pamiętam).
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Doszedłem do wniosku, że funkcja wykonuje się jeśli JA trafię wilka. Ma być na odwrót... Myślałem, że jak podmienię slf na oth zadziała, ale wciąż to samo...
// *****************
// B_MM_AssessDamage
// *****************

func void TruciznaFunction ()
{

WillZatruty = 1;
PrintScreen ("zatruty", -1,-1, "font_old_20_white.tga",3);

};

var int prev_hp;

func void B_PoisonousWolf (var C_NPC oth)
{
if (oth.aivar[AIV_MM_REAL_ID] == ID_WOLF)//Jakieś unikalne, poszukaj w AI_Constants.d linijek ID_* i dodaj własną stałą, oraz dodaj ją do ID wilka (ID = nowaStała)
{
if (oth.attribute[ATR_HITPOINTS] < prev_hp)
{
TruciznaFunction();
};
prev_hp = oth.attribute[ATR_HITPOINTS];
};
};


func void B_MM_AssessDamage ()
{
self.aivar[AIV_MM_PRIORITY] = PRIO_ATTACK;

B_BeliarsWeaponSpecialDamage (other, self);
B_PoisonousWolf (self);
// EXIT IF

// ------ SONDERFALL: Magic Golem ------ //JUUUUNGEEEEE!!!

// ----- wenn Monster Beute von Angreifer ------
if (C_PredatorFoundPrey(other,self))
{
Npc_ClearAIQueue (self);
Npc_SetTarget (self, other);
B_ClearPerceptions (self);
AI_StartState (self, ZS_MM_Flee, 0, "");
return;
};

// ------ wenn Monster im ZS_Attack ------
if (Npc_IsInState(self,ZS_MM_Attack))
{
// EXIT IF...

// ------ Partymember ignorieren Treffer vom Spieler im Kampf ------
if (Npc_IsPlayer (other))
&& (self.aivar[AIV_PARTYMEMBER] == TRUE)
{
return;
};

// ------ HACK: von Skelettmagier getroffene Skelette ignorieren Schaden ------
if (self.aivar[AIV_MM_REAL_ID] == ID_SKELETON)
&& (other.aivar[AIV_MM_REAL_ID] == ID_SKELETON_MAGE)
{
return;
};


// FUNC

// ------ Wenn ich von jemand ANDEREM getroffen werde ------
if (Hlp_GetInstanceID (other) != self.aivar[AIV_LASTTARGET])
{
if (self.aivar[AIV_HitByOtherNpc] == Hlp_GetInstanceID (other))
{
Npc_SetTarget (self, other); //Ziel wechseln, wenn zum zweiten Mal getroffen
}
else
{
self.aivar[AIV_HitByOtherNpc] = Hlp_GetInstanceID (other); //EIN Freischlag
};
};

return;
};


// FUNC

Npc_ClearAIQueue (self);
Npc_SetTarget (self, other);
B_ClearPerceptions (self);
AI_StartState (self, ZS_MM_Attack, 0, "");
return;
};



Gdy zmieniłem
B_PoisonousWolf (self);na
B_PoisonousWolf (other);wtedy wgl funkcja się nie wywoływała.
Jak zrobić, żeby to działało na odwrót? Tzn, że kiedy ja zaatakuję wilka to wywołuje się skrypt.
 

Splash

Splash

Moderator
posty4208
Propsy3410
ProfesjaNierób
  • Moderator
Nie działa dobrze, bo skrypt w skrócie wygląda tak:
Jeśli npc z argumentu funkcji ma ID wilka oraz liczba jego punktów życia jest mniejsza od zmiennej prev_hp, której wartość z początku wynosi 0, to ma się wywołać funkcja TruciznaFunction. Na koniec wartość zmiennej prev_hp to życie wilka. I tak w kółko. Krótko mówiąc, funkcja wywoła się dopiero wtedy, kiedy wilk będzie miał mniej punktów życia.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Rzeczywiście, masz rację. Zmieniłem na to, żeby hero miał mniej punktów życia. Ale niestety ciągle to samo.
// *****************
// B_MM_AssessDamage
// *****************

func void TruciznaFunction ()
{

WillZatruty = 1;
PrintScreen ("zatruty", -1,-1, "font_old_20_white.tga",3);

};

var int prev_hp;

func void B_PoisonousWolf (var C_NPC slf)
{
if (slf.aivar[AIV_MM_REAL_ID] == ID_WOLF)
{
if (hero.attribute[ATR_HITPOINTS] < prev_hp)
{
TruciznaFunction();
};
prev_hp = hero.attribute[ATR_HITPOINTS];
};
};


func void B_MM_AssessDamage ()
{
self.aivar[AIV_MM_PRIORITY] = PRIO_ATTACK;

B_BeliarsWeaponSpecialDamage (other, self);
B_PoisonousWolf (self);

 

Splash

Splash

Moderator
posty4208
Propsy3410
ProfesjaNierób
  • Moderator
W funkcji B_MM_AssessDamage zmień B_PoisonousWolf (self); na B_PoisonousWolf (other);
Other - atakujący
Self - cel
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
Niestety, nie dzieje się wtedy nic. Funkcja w ogóle się nie wywołuje...
// *****************
// B_MM_AssessDamage
// *****************

func void TruciznaFunction ()
{

WillZatruty = 1;
PrintScreen ("zatruty", -1,-1, "font_old_20_white.tga",3);

};

var int prev_hp;

func void B_PoisonousWolf (var C_NPC slf)
{
if (slf.aivar[AIV_MM_REAL_ID] == ID_WOLF)
{
if (hero.attribute[ATR_HITPOINTS] < prev_hp)
{
TruciznaFunction();
};
prev_hp = hero.attribute[ATR_HITPOINTS];
};
};


func void B_MM_AssessDamage ()
{
self.aivar[AIV_MM_PRIORITY] = PRIO_ATTACK;

B_BeliarsWeaponSpecialDamage (other, self);
B_PoisonousWolf (other);
// EXIT IF

// ------ SONDERFALL: Magic Golem ------ //JUUUUNGEEEEE!!!

// ----- wenn Monster Beute von Angreifer ------
if (C_PredatorFoundPrey(other,self))
{
Npc_ClearAIQueue (self);
Npc_SetTarget (self, other);
B_ClearPerceptions (self);
AI_StartState (self, ZS_MM_Flee, 0, "");
return;
};

// ------ wenn Monster im ZS_Attack ------
if (Npc_IsInState(self,ZS_MM_Attack))
{
// EXIT IF...

// ------ Partymember ignorieren Treffer vom Spieler im Kampf ------
if (Npc_IsPlayer (other))
&& (self.aivar[AIV_PARTYMEMBER] == TRUE)
{
return;
};

// ------ HACK: von Skelettmagier getroffene Skelette ignorieren Schaden ------
if (self.aivar[AIV_MM_REAL_ID] == ID_SKELETON)
&& (other.aivar[AIV_MM_REAL_ID] == ID_SKELETON_MAGE)
{
return;
};


// FUNC

// ------ Wenn ich von jemand ANDEREM getroffen werde ------
if (Hlp_GetInstanceID (other) != self.aivar[AIV_LASTTARGET])
{
if (self.aivar[AIV_HitByOtherNpc] == Hlp_GetInstanceID (other))
{
Npc_SetTarget (self, other); //Ziel wechseln, wenn zum zweiten Mal getroffen
}
else
{
self.aivar[AIV_HitByOtherNpc] = Hlp_GetInstanceID (other); //EIN Freischlag
};
};

return;
};


// FUNC

Npc_ClearAIQueue (self);
Npc_SetTarget (self, other);
B_ClearPerceptions (self);
AI_StartState (self, ZS_MM_Attack, 0, "");
return;
};


 


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