[G2 NK] Problem z nakładaniem hełmu 3861 13

O temacie

Autor Graveir

Zaczęty 30.03.2014 roku

Wyświetleń 3861

Odpowiedzi 13

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Heyah, moje pytanie dotyczy systematyki(przelicznika?)obrażeń broni w stosunku do potworów/npc(odporności?). Jak to jest zrobione, że mając broń zadającą 300 obrażeń od ostrza i 100 punktów siły zadaję trollowi, który ma 125 odporności przed bronią ~30 obrażeń(bez krytyka), a w przypadku sztyletu odbieram mu 5 hp? Z kolei drugi problem dotyczy miecza, który ma zamrażać przeciwnika. Teoretycznie jest dobrze, bo zazwyczaj przy 2-4 ciosie go unieruchamia, jednak nie pokazuje się efekt czaru na nim, tylko coś w rodzaju małego płatka śniegu na wysokości pasa. Tutaj skrypt w pliku B_AssessDamage:
func void B_U (var C_NPC oth, var C_NPC slf)
{

   if (Hlp_GetInstanceID(oth) == Hlp_GetInstanceID(hero))
   {
      var C_ITEM ready;
      var int obrazenia;

      ready = Npc_GetReadiedWeapon(hero);
      obrazenia = 1;

      if (Npc_HasItems(hero, SlayerOfHope) == TRUE && Hlp_IsItem(ready, SlayerOfHope) == TRUE) && !(Npc_IsInState(slf, Zs_MagicFreeze))
      {
            if (slf.flags != NPC_FLAG_IMMORTAL)
            {
Npc_ClearAIQueue(slf);
Wld_PlayEffect("spellFX_IceCube", slf, slf, 0, 0, 0, FALSE );
            B_MagicHurtNpc (slf, slf, obrazenia);
AI_StartState (slf, ZS_MagicFreeze, 0, "");
            }
else
{
Npc_ClearAIQueue(slf);
Wld_PlayEffect("spellFX_IceCube", slf, slf, 0, 0, 0, FALSE );
AI_StartState (slf, ZS_MagicFreeze, 0, "");
};
};
};
};
Pod "B_BeliarsWeaponSpecialDamage (other, self);" dodałem "B_U(other, self);". Gdzie jest pies pogrzebany? A i byłbym zapomniał. Ilość expa za przeczytanie pulpitu(np. tego w wieży Xardasa)można zmienić w jakimś skrypcie? Jeśli tak, to prosiłbym o podanie jego nazwy. Na razie to tyle.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

[G2 NK] Dwa pytania i jeden problem z mieczem.
#1 2014-03-30, 17:05(Ostatnia zmiana: 2014-03-30, 17:24)
Spróbuj tego do miecza runicznego:
Cytuj
   
Musisz "wyczyścić" perceptiony zamrożonego npc lub dodać do Zs_MagicFreeze.d tą linijkę, aby nie wypisywać za każdym razem przy nowym mieczu. Użyj tej funkcji:
func void B_ClearPerceptions(var C_Npc slf)
Najlepiej daj pod Npc_ClearAiQueue.
A do pulpitu wypróbuj tego triku:
Cytuj
Wejdź w folder dialog_Mobsis i wyszukaj plik Bookstand.D . Nazwy mogą być inne, ale początek powinien zaczynać się nazwą Bookstand i szukaj tam funkcji B_GivePlayerXP. Jeśli chcesz zobaczyć do jakiego to jest pulpitu to w spacerze, jak zaznaczysz pulpit będziesz miał napisane OnStateFunc: nazwa. Potem szukasz w pliku bookstand tej nazwy i wułala.

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Dobra, problem z mieczem został rozwiązany w zadowalającym mnie stopniu tak samo jak exp za czytanie książek. Ale pytanie z obrażeniami ciągle pozostaje otwarte.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Splash

Splash

Moderator
posty4211
Propsy3414
ProfesjaNierób
  • Moderator
Minimalne obrażenia w Gothicu 2 wynosi 5 pkt. Natomiast 30 obrażeń zadajesz jeśli nie zadajesz krytycznego ciosu. Im więcej % wyuczonej walki danym rodzajem broni tym większa szansa (co oczywiście sam wiesz). Obrażenia zadawane bez krytycznego ciosu są obliczane przez silnik.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Dobra, czyli 300 obrażeń od ostrza i 200 od magii powinno mnie zadowolić. A mam pytanie - gdzie tutaj jest błąd przy przenoszeniu hełmów do G2? Bo cały czas mi wyskakuje napis "Nie można nosić tego hełmu z tą zbroją":
FUNC VOID Equip_helms()
    {
    nakrycie = True;
    if (pancerz == True) && (nakrycie == True)
        {
        PrintScreen        ("Nie możesz nosić hełmu razem z tą zbroją!", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
        AI_UnequipArmor (hero);
        }
        else
        {
        PrintScreen        ("Hełm założony", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
        };
    };

    FUNC VOID UnEquip_helms()
    {
    nakrycie = False;
    };
Oraz skrypt hełmu:
INSTANCE PALHELM(C_Item)
{
    name                    =    "Hełm Paladyna";
   
    mainflag                =    ITEM_KAT_ARMOR;
    flags                    =    0;
   
    protection [PROT_EDGE]    =    10;
    protection [PROT_BLUNT] =     10;
    protection [PROT_POINT] =     15;
    protection [PROT_FIRE]     =     5;
    protection [PROT_MAGIC] =     10;

    value                    =    500;

    wear                    =    WEAR_Head;

    visual                    =    "ItAr_Pal_Helm.3ds";
    visual_skin                =    1;
    material                =    MAT_METAL;
    on_equip        =    Equip_helms;
    on_unequip    =    UnEquip_helms;
   
    description                =    name;

    TEXT[1]                    =    NAME_Prot_Edge;           
    COUNT[1]                =     protection    [PROT_EDGE];
   
    TEXT[2]                    =    NAME_Prot_Point;       
    COUNT[2]                =     protection    [PROT_POINT];
   
    TEXT[3]                 =    NAME_Prot_Fire;           
    COUNT[3]                =     protection    [PROT_FIRE];
   
    TEXT[4]                    =    NAME_Prot_Magic;       
    COUNT[4]                =     protection    [PROT_MAGIC];
   
    TEXT[5]                    =    NAME_Value;           
    COUNT[5]                =     value;
};
Moim celem jest takie coś, że:
1)Po założeniu Ciężkiego Pancerza Łowcy Smoków/Średniego Pancerza Łowcy Smoków/Pancerza Paladyna/Pancerza Rycerza i próbie założenia hełmu wyskakuje napis "Nie można nosić zbroi", przez co zdejmuje się pancerz i jest sam hełm założony(a przy próbie założenia zbroi przy nałożonym hełmie jest to samo, czyli nie zakłada się pancerz, a sam hełm).
2)W innych przypadkach(jeśli nie ma założonych/nie próbuje się założyć w/w pancerzy) wyskakuje napis "Założono hełm" wraz ze zbroją.
Edit: Przykładowa zmiana skryptu Pancerza Paladyna:
INSTANCE ITAR_PAL_H (C_Item)
{
name = "Pancerz paladyna";

mainflag = ITEM_KAT_ARMOR;
flags = 0;

protection [PROT_EDGE] = 150;
protection [PROT_BLUNT] = 150;
protection [PROT_POINT] = 150;
protection [PROT_FIRE] = 100;
protection [PROT_MAGIC] = 50;

value = VALUE_ITAR_PAL_H;

wear = WEAR_TORSO;

visual = "ItAr_Pal_H.3ds";
visual_change = "Armor_Pal_H.asc";
visual_skin = 0;
material = MAT_METAL;
on_equip = equip_ppal;
on_unequip = unequip_ppal;

description = name;

TEXT[1] = NAME_Prot_Edge;
COUNT[1] = protection [PROT_EDGE];

TEXT[2] = NAME_Prot_Point;
COUNT[2] = protection [PROT_POINT];

TEXT[3] = NAME_Prot_Fire;
COUNT[3] = protection [PROT_FIRE];

TEXT[4] = NAME_Prot_Magic;
COUNT[4] = protection [PROT_MAGIC];

TEXT[5] = NAME_Value;
COUNT[5] = value;
};

func void equip_ppal()
{
pancerz = True;
};

func void unequip_ppal()
{
pancerz = False;
};
Edit2: Zmieniłem nazwę tematu, żeby nie zakładać nowego.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Splash

Splash

Moderator
posty4211
Propsy3414
ProfesjaNierób
  • Moderator
Ponieważ ta funkcja wywołuje się tylko raz. Dzieje się to po założeniu hełmu. Masz funkcję, która sprawdza, czy masz założoną zbroję, ale nie masz funkcji, która sprawdza czy masz założony już hełm podczas zakładania zbroi.

Swoją drogą w funkcji zakładania zbroi powinieneś dodać ten warunek :
if (Npc_IsPlayer (self))Bo inaczej zmienna pancerz będzie równa true dlatego, że inni npc mają już założoną tą zbroję.
 
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.
Cytuj
FUNC VOID Equip_helms()
    {
    nakrycie = True;
    if (pancerz == True) && (nakrycie == True)
        {
        PrintScreen        ("Nie możesz nosić hełmu razem z tą zbroją!", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
        AI_UnequipArmor (hero);
        }
        else
        {
        PrintScreen        ("Hełm założony", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
        };
    };

    FUNC VOID UnEquip_helms()
    {
    nakrycie = False;
    };
Masz zapisane, że jeśli pancerz wynosi true i nakrycie wynosi true, zbroja zostaje zdjęta, bo nie można nosić hełmu z tą zbroją.
 
: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.

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Czyli przy pancerzu funkcja powinna tak wyglądać czy inaczej?
Spoiler
func void equip_ppal()
{
if (Npc_IsPlayer (self))
{
pancerz = True;
};
};

func void unequip_ppal()
{
if (Npc_IsPlayer (self))
{
pancerz = False;
};
};
Edit: Zmieniłem w funkcji zakładania na takie coś:
func void equip_ppal()
{
if (Npc_IsPlayer (hero))
{
pancerz = True;
};
};

func void unequip_ppal()
{
if (Npc_IsPlayer (hero))
{
pancerz = False;
};
};
I teraz napisy wyskakują mi tak jak powinny, tylko jest coś dziwnego. Jeśli jako pierwszy założę pancerz i próbuję założyć hełm to zdejmuje mi zbroję, a zostawia nałożony hełm. Jednak jeśli najpierw nałożę hełm to zakłada zbroję i nie ściąga hełmu(co wygląda co najmniej dziwnie).
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
FUNC VOID Equip_helms()
    {
      if (Npc_IsPlayer (hero)) {
    nakrycie = True;
    if (pancerz == True) && (nakrycie == True)
        {
        PrintScreen        ("Hełm założony", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
        }
        else
        {
         PrintScreen        ("Nie możesz nosić hełmu razem z tą zbroją!", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
        AI_UnequipArmor (hero);
        };
      };
    };

    FUNC VOID UnEquip_helms()
    {
      if (Npc_IsPlayer (hero)) {
           nakrycie = False;
      };
    };
Ciesz się, że mam dobry dzień. Kod powinien wyglądać tak...




W zasadzie, to najlepiej by było tak:
FUNC VOID Equip_helms()
    {
      if (Npc_IsPlayer (hero)) {
    if (pancerz == True)
        {
        PrintScreen        ("Hełm założony", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
        }
        else
        {
         PrintScreen        ("Nie możesz nosić hełmu razem z tą zbroją!", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
        AI_UnequipArmor (hero);
        };
      };
    };

    FUNC VOID UnEquip_helms(){};

czyli bez zbędnego nakrycie.
 
: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.

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
FUNC VOID Equip_helms()
    {
    if (pancerz == True)
        {
        PrintScreen        ("Nie możesz nosić hełmu razem z tą zbroją!", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
        AI_UnequipArmor (hero);
        }
        else
        {
        PrintScreen        ("Hełm założony", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
        };
    };

    FUNC VOID UnEquip_helms()
    {

    };
Tak wygląda funkcja zakładania hełmów, jednak nadal po wcześniejszym założeniu hełmu mogę założyć ciężki pancerz, a po założeniu ciężkiego pancerza przed nałożeniem hełmu ściąga mi się zbroja(czyli pierwsza część dalej nie działa, a druga się zgadza z moimi oczekiwaniami).
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

[G2 NK] Problem z nakładaniem hełmu
#12 2014-04-06, 15:38(Ostatnia zmiana: 2014-04-06, 21:23)
Do zakładania hełmu zrób tak;
Spoiler
func void Equip_przykladowyHelm()
{
   if (Npc_IsPlayer(self))
   {
      if (Pancerz == false)
      {
         PrintScreen ("Hełm założony!", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
         Ai_PlayAni (self, "r_ScratchHead"); // Taki bonusik :P
         nakrycie = true;
      }
      else
      {
         PrintScreen ("Nie możesz nosić hełmu razem z tą zbroją!", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
         AI_UnequipArmor (hero);
      };
   };
};

func void UnEquip_przykladowyHelm()
{
   nakrycie = false;
};

A przy zbroi:
Spoiler
func void Equip_przykladowaZbroja()
{
   if (Npc_IsPlayer(self))
   {
      if (nakrycie == false)
      {
         PrintScreen ("Zbroja założona!", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
         Ai_PlayAni (self, "r_ScratchLShoulder"); // Taki bonusik :P
         Pancerz = true;
      }
      else
      {
         PrintScreen ("Nie możesz nosić zbroi z tym hełmem!", -1, 27, "FONT_OLD_20_WHITE.TGA", 3 );
         AI_UnequipArmor (hero);
      };
   };
};

func void UnEquip_przykladowaZbroja()
{
   Pancerz = false;
};

Żadnych zmiennych nie zmieniaj.

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Dobra, problem zasadniczo rozwiązany. Zasadniczo, bo dalej jest mały problem z nakładaniem się hełmu na zbroję, ale to już mniej uciążliwe niż wcześniej.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti


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