Ten sam miecz w jednej jak i w dwóch rękach 7047 31

O temacie

Autor CichoCiemnyGra

Zaczęty 10.05.2014 roku

Wyświetleń 7047

Odpowiedzi 31

CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Witam. Chciałbym zrobić tak, aby mając określoną siłę mógłbym nosić dwuręczny miecz w jednej ręce. Mając np. 150 siły nosimy miecz w dwóch rękach, a mając 300 siły nosimy w jednej ręce. Pomocy.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Ten sam miecz w 1 jak i w 2 rekach
#1 2014-05-10, 12:05(Ostatnia zmiana: 2014-05-10, 15:10)
Napisz odpowiednią funkcję on_equip, która będzie:
sprawdzała poziom siły zakładającego - czy jest wyższy od progu
    jeśli tak, to sprawdzała czy miecz jest ustawiony jako dwuręczny
        jeśli tak, to zmieniała go w jednoręczny (zmiana flag)
        następnie ściągała
        następnie zakładała ponownie
    jeśli nie, to sprawdzała czy miecz jest ustawiony jako jednoręczny
        jeśli tak, to zamienia go w dwuręczny (zmiana flag)
        następnie ściągała
        następnie zakładała ponownie

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Moim zdaniem lepiej by było zmieniać flag przez FrameFunction, ponieważ w funkcji on_equip może nie działać.

if (NazwaDanejBroni.flag & ITEM_2HD_SWD) && (hero.attribute[ATR_STRENGTH] >= 300)
{
      NazwaDanejBroni.flag = ITEM_SWD;
}
else if (NazwaDanejBroni.flag & ITEM_SWD) && (hero.attribute[ATR_STRENGTH] < 300)
{
      NazwaDanejBroni.flag = ITEM_2HD_SWD;
};
Zapewne jakieś debugi co do tego będą potrzebne (if (jednoręczna && flaga = jednoręczna)...) itd.
 
: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.

CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Mozna troche jasniej ?
Nie wiem gdzie co napisac  :lol2:

Post połączony: 2014-05-10, 12:47
Ma byc cos takiego ?
W skrypcie miecza dalem:


on_state[0]   =   UseUriziel;


FUNC VOID UseUriziel()
   {
      if (ItMw_Uriziel.flag & ITEM_2HD_SWD) && (hero.attribute[ATR_STRENGTH] >= 300)
      {
         ItMw_Uriziel.flag = ITEM_SWD;
      }
   else if (ItMw_Uriziel.flag & ITEM_SWD) && (hero.attribute[ATR_STRENGTH] < 300)
      {
         ItMw_Uriziel.flag = ITEM_2HD_SWD;
      };
   };
 

Splash

Splash

Moderator
posty4210
Propsy3412
ProfesjaNierób
  • Moderator
On_state wywołuje funkcję po użyciu przedmiotu, a nie po założeniu. Aby zadziałało, on_state[0] zamień na on_equip. Druga rzecz to to, że jest tam drobny błąd. 
ItMw_Uriziel.flag
Brakuje litery S
ItMw_Uriziel.flags
Trzeci problem stanowi to, że gdy broń jest założona, a bohater ma mniej niż 300 pkt. siły i np. wyuczy się u jakiegoś nauczyciela brakującej ilości siły miecz nadal będzie dwuręczny. Broń musi zostać zdjęta i ponownie założona lub przy każdej funkcji dodającej siły takie jak nauczyciele, mikstury, tablice itd. musisz dodać wszędzie warunek, który będzie sprawdzał czy bohater ma założoną broń.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Nie, miałeś napisać to co ja podałem. To co napisał Bogdan po pierwsze nie będzie działać bo pomieszał typy, a po drugie nawet gdyby działało, to dopiero po założeniu, ściągnięciu i założeniu miecza. Kiepskie rozwiązanie.

Kod jaki obaj podaliście: "NazwaDanejBroni.flag" / "ItMw_Uriziel.flag" nie powinien zadziałać. Problem w tym, że mylicie identyfikator z obiektem do którego się odnosi. Wy potrzebujecie nie tylko odniesienia do obiektu miecza, ale na dodatek do bardzo konkretnego jego wystąpienia - tego, którego właśnie zakłada postać gracza. W tej sytuacji dostarczy go funkcja zewnętrzna Npc_GetEquippedMeleeWeapon.

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
Oprócz tego co napisał Avallach trzeba jeszcze sprawdzić czy ten zakładany przedmiot to ten o który nam chodzi. I tu z pomocą przychodzi funkcja Hlp_IsItem (Nie wiem czy działa, nie testowałem ale z komentarzy wynika, że do tego służy).
 

CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Cytuj
nawet gdyby działało, to dopiero po założeniu, ściągnięciu i założeniu miecza. Kiepskie rozwiązanie.
Mi to nie przeszkadza, wazne zeby dzialalo :)
Jak ja mam to zrobic z tym on_equip ?
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
instance My_Weapon(C_ITEM)
{
...
...
...
on_equip = Equip_MyWeapon;  // przy zakładaniu broni
on_unequip = UnEquip_MyWeapon; // przy zdejmowaniu broni
...
...
};
func void Equip_MyWeapon() // przy zakładaniu broni
{
   // tutaj rób co chcesz
};

func vod UnEquip_MyWeapon() // przy zdejmowaniu broni
{
   // tutaj rób co chcesz
};

CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Tak to ja tez umiem :p
Ale co ja mam wpisac w "tutaj rób co chcesz" ?
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Zmień flagi.

CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Ale musze jeszcze ustawic sile, jezeli nie mam 300 sily to miecz bedzie nadal 2 reczny, i co mam wpisac ?
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Cytuj
Oprócz tego co napisał Avallach trzeba jeszcze sprawdzić czy ten zakładany przedmiot to ten o który nam chodzi. I tu z pomocą przychodzi funkcja Hlp_IsItem (Nie wiem czy działa, nie testowałem ale z komentarzy wynika, że do tego służy).
Nie, nie trzeba, bo ustawiamy przecież wywoływanie tej funkcji tylko dla danego miecza, nie dla wszystkich.

Cytuj
Tak to ja tez umiem :p
Ale co ja mam wpisac w "tutaj rób co chcesz" ?
To co napisałem ci w pierwszym poście.

CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
 


CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Cytuj
przepisz na kod to co ci podałem

Nie wiem jak to zrobic :huh:
 


CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Mam napisane to co podal chicken (func void). Nic dalej nie wiem  :wstyd:
Pisales cos o "Npc_GetEquippedMeleeWeapon" ale nie wiem co mam dalej napisac.
 

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
Funkcja Npc_GetEquippedMeleeWeapon zwraca obiekt C_ITEM (aktualnie założoną broń przez danego NPC'a).
Przykład jej poprawnego użycia:
var C_ITEM itm; //Deklarujemy zmienną C_ITEM
itm = Npc_GetEquippedMeleeWeapon(obiekt C_NPC, w twoim przypadku hero); //Przypisujemy do niej obiekt aktualnie założony przez NPC.
Jednak to jeszcze nie wszystko, należy jeszcze sprawdzić czy to właściwa broń. No i oczywiście zmienić flagi tej broni.
Polecam Ci pooglądać gothicowe skrypty i spróbować zrozumieć jak działają. (Ja tak zaczynałem)
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Cytuj
Mam napisane to co podal chicken (func void). Nic dalej nie wiem 
Pisales cos o "Npc_GetEquippedMeleeWeapon" ale nie wiem co mam dalej napisac.
Napiszę ci dwie linijki spośród tych które podałem, wybieraj. 
Pierwsza z nich to warunek sprawdzający czy siła bohatera jest większa lub równa podanemu progowi. Nawet tego nie potrafisz? Przecież Bogdan już ci to napisał.


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