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

O temacie

Autor CichoCiemnyGra

Zaczęty 10.05.2014 roku

Wyświetleń 7048

Odpowiedzi 31

CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Takie cos ?
Cytuj
FUNC VOID EquipUriziel()
   {
      if (ItMw_Uriziel.flags & ITEM_2HD_SWD) && (hero.attribute[ATR_STRENGTH] >= 300)
      {
         ItMw_Uriziel.flags = ITEM_SWD;
      }
   else if (ItMw_Uriziel.flags & ITEM_SWD) && (hero.attribute[ATR_STRENGTH] < 300)
      {
         ItMw_Uriziel.flags = ITEM_2HD_SWD;
      };
   };
   FUNC VOID UnEquipUriziel()
   {
   
   };
 


CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Nie wiem co dalej, nie jestem az tak zaawansowany w skryptach jak Ty.
 


CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
To jest juz chyba zrobione. Napisales, ze to tylko czesc, wiec co dalej ?
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Przecież napisałem - to jest zrobione źle. Jedynie fragmenty są poprawne. Musisz napisać sam. Mogę ci jedynie rozpisać to dokładniej linijka po linijce. Z osobna są bardzo proste. Podam ci tylko gotowy fragment warunków, bo on zawiera nie taką oczywistą operację bitową.
1. Zdefiniuj stałą liczbową określającą próg siły
2. Zdefiniuj funkcję, która będzie uruchamiana przy zakładaniu miecza
3. Zdefiniuj zmienną c_item (przykładowo o nazwie miecz), w której będziesz przechowywał założony miecz
4. Zapisz w tej zmiennej miecz, którego ma założonego self
5. Sprawdź, czy self ma więcej siły niż próg siły i "(miecz.flags & ITEM_2HD_SWD)"
    6. Jeśli tak, ustaw flagi itemu na flagę miecza jednoręcznego
    7. Zdejmij założone bronie z self
    8. Załóż npcowi self miecz zapisany w zmiennej w linijce 4
9. Jeśli nie, ale za to self ma mniej siły niż próg siły i "(miecz.flags & ITEM_SWD)"
    10. Jeśli tak, ustaw flagi itemu na flagę miecza dwuręcznego
    11. Zdejmij założone bronie z self
    12. Załóż npcowi self miecz zapisany w zmiennej w linijce 4

Bogdan napisał ci linijki 5 i 9, niestety z błędem, bo użył po prostu identyfikatora miecza, zamiast zmiennej przechowującej ten konkretny miecz.

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

Ten sam miecz w jednej jak i w dwóch rękach
#26 2014-05-10, 20:10(Ostatnia zmiana: 2014-05-10, 20:30)
Cytat: Avallach
bo użył po prostu identyfikatora miecza, zamiast zmiennej przechowującej ten konkretny miecz.
Dla gothica to chyba żadna różnica jeśli odniesiemy się bezpośrednio do identyfikatora jakiejś rzeczy(instance), czy poprzez zmienną/stałą przechowującą dane na konkretną rzecz.

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
A sposób z instancją działa? Przecież chodzi o to żeby zmienić flagi konkretnego obiektu.
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Cytat: Avallach
bo użył po prostu identyfikatora miecza, zamiast zmiennej przechowującej ten konkretny miecz.
Dla gothica to chyba żadna różnica jeśli odniesiemy się bezpośrednio do identyfikatora jakiejś rzeczy(instance), czy poprzez zmienną/stałą przechowującą dane na konkretną rzecz.
dla gothic jest róznica. lepiej podmieniać 2 różne instance o takim samym visualu, wiem z praktyki i o tym swego czasu pisał Sektenspinner
 

CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Cytuj
FUNC VOID EquipUriziel()
   {
      if (hero.attribute[ATR_STRENGTH] >= 250)
      {
         CreateInvItems (self, ItMw_1h_Uriziel, 1);
         Npc_RemoveInvItems (self, ItMw_2h_Uriziel, 1);
      }
      else
      {
      };
   };
   
   FUNC VOID UnEquipUriziel()
   {
   };
Tyle kombinowania a wystarczy takie cos.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Nie do końca, gracz skończy bez założonego żadnego miecza, będzie musiał wchodzić do ekwipunku i zakładać znowu. Żeby to ominąć, musisz skryptem ściągnąć bronie z postaci i założyć na nowo.  Do tego mylisz hero i self, chociaż tu akurat nie robi to dużej różnicy.

To co proponujesz wymagałoby zrobienia dwóch wersji miecza, ale pod wieloma względami to lepsze rozwiązanie (edycja pojedynczej broni to ciężka sprawa). W każdym razie można to jeszcze skrócić:
FUNC VOID Equip1hUriziel()
   {
      if (self.attribute[ATR_STRENGTH] >= 250)
      {
         CreateInvItems (self, ItMw_1h_Uriziel, 1);
         Npc_RemoveInvItems (self, ItMw_2h_Uriziel, 1);
      };
   };

CichoCiemnyGra

CichoCiemnyGra

Użytkownicy
posty51
Propsy2
Profesjabrak
  • Użytkownicy
Nie myle self z hero. Nie zmienilem tego poniewaz nie robi to roznicy, i tak gramy 1 postacia w grze.

Jesli zaloze dany miecz (200 sily) i ustawie kodem 250 sily (to samo co nauka u postaci) to miecz nadal mam ten sam, dwureczny. Jak zaloze miecz od nowa, to miecz zaklada na plecy 2H, ale w ekwipunku nie ma tego miecza, jest tylko stworzony miecz 1H (CreateInvItems), mimo to moge normalnie nim walczyc, mimo ze nie ma go w ekwipunku. Jak zaloze stworzony miecz jest juz wszystko dobrze.

Mozna tez dopisac pare linijek, ktore beda zakladac stworzony miecz.


Dzieki za pomoc :)
 


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