Władca pierścieni 6259 5

O temacie

Autor Mikotsune

Zaczęty 6.08.2018 roku

Wyświetleń 6259

Odpowiedzi 5

Mikotsune

Mikotsune

Czas Honoru
posty364
Propsy288
Profesjabrak
  • Czas Honoru

Mikotsune
Czas Honoru

Władca pierścieni
2018-08-06, 09:32(Ostatnia zmiana: 2018-08-06, 09:41)
Opatentowałem sposób na zakładanie większej ilości pierścieni, oraz określony przez nas limit założonych pierścieni. W dodatku jest to wszystko na podstawowych skryptach! Nic tylko brać!



Edytujemy wszystkie pierścienie. W instancji każdego pierścienia musimy ustawić flagę:

flags = ITEM_THROW;
W ten oto sposób możemy zakładać wszystkie pierścienie jeden za drugim w nieskończoność.

Teraz czas na limit pierścieni.

Pokażę na przykładzie pierścienia: itri_prot_fire_01
Resztę pierścieni sami sobie dodajcie XD Dodanie nowych pierścieni jest bardzo proste. Później pokażę jak to zrobić.

Na początek tworzymy nowy plik, do którego wklejamy poniższy skrypt. W Gothic.src wpisać ten plik przed itemami.
const int MaxEquippedRings = 10; //Maksymalna liczba założonych pierścieni

var int ring_prot_fire_01; //Zmienna pierścienia (JEDNA ZMIENNA DLA JEDNEGO PIERŚCIENIA!)

func int EquippedRings()
{
return (ring_prot_fire_01);
};

func void EquipRings (var c_npc slf, var int itm, var int amount)
{
if(amount == 1)
{
EquipItem(slf, itm);
}
else if(amount == 2)
{
EquipItem(slf, itm);
EquipItem(slf, itm);
}
else if(amount == 3)
{
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
}
else if(amount == 4)
{
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
}
else if(amount == 5)
{
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
}
else if(amount == 6)
{
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
}
else if(amount == 7)
{
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
}
else if(amount == 8)
{
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
}
else if(amount == 9)
{
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
}
else if(amount >= 10)
{
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);
EquipItem(slf, itm);

CreateInvItems(slf, itm, (amount - 10));
};
};

Poniższy skrypt dodajemy na sam początek funkcji on_equip:
if (EquippedRings() == MaxEquippedRings)
{
var int AllRings; AllRings = Npc_HasItems(self, itri_prot_fire_01);
var int EquippedRings; EquippedRings = ring_prot_fire_01;
Npc_RemoveInvItems(self, itri_prot_fire_01, AllRings);

if(AllRings > EquippedRings)
{
CreateInvItems(self, itri_prot_fire_01, (AllRings-EquippedRings));
};

EquipRings (self, itri_prot_fire_01, EquippedRings);
}
else
{
ring_prot_fire_01 += 1;
};

Do on_unequip dodajemy:
ring_prot_fire_01 -= 1;
W ten sposób można zakładać maksymalnie 10 pierścieni o instancji itri_prot_fire_01.

=========================
Dodawanie nowych pierścieni
=========================

Otwieramy nasz nowy plik:

var int ring_prot_fire_01;
var int ring_prot_fire_02; //Dodajemy nową zmienną

func int EquippedRings()
{
   return (ring_prot_fire_01 + ring_prot_fire_02); //Wpisujemy nową zmienną tutaj
};


Teraz przechodzimy do pliku z pierścieniami. Kopiujemy skrypt z on_equip z pierwszego pierścienia i wklejamy do funkcji on_equip drugiego pierścienia.

Zmieniamy zmienną pierścienia na nową zmienną.
Zmieniamy instancję pierścienia na instancję nowego pierścienia.


func void equip_itri_prot_fire_02()
{
   if (EquippedRings() == MaxEquippedRings)
   {
      var int AllRings; AllRings = Npc_HasItems(self, itri_prot_fire_02);
      var int EquippedRings; EquippedRings = ring_prot_fire_02;
      Npc_RemoveInvItems(self, itri_prot_fire_02, AllRings);
      
      if(AllRings > EquippedRings)
      {
         CreateInvItems(self, itri_prot_fire_02, (AllRings-EquippedRings));
      };
      
      EquipRings (self, itri_prot_fire_02, EquippedRings);
   }
   else
   {
      ring_prot_fire_02 += 1;
   };
   self.protection[PROT_FIRE] += RI_PROTFIRE02;
};

func void unequip_itri_prot_fire_02()
{
   ring_prot_fire_02 -= 1;
   self.protection[PROT_FIRE] -= RI_PROTFIRE02;
};


GOTOWE! Teraz wystarczy tylko dodać resztę pierścieni z gry :F

=================================
Maksymalna liczba założonych pierścieni
=================================

Żeby zmienić liczbę pierścieni, które można założyć, trzeba zmienić liczbę w stałej i skrypt. Pokażę na przykładzie liczby 12.
const int MaxEquippedRings = 12;

Funkcja EquipRings.
func void EquipRings (var c_npc slf, var int itm, var int amount)
{
   if(amount == 1)
   {
      EquipItem(slf, itm);
   }
   else if(amount == 2)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
   }
   else if(amount == 3)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
   }
   else if(amount == 4)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
   }
   else if(amount == 5)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
   }
   else if(amount == 6)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
   }
   else if(amount == 7)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
   }
   else if(amount == 8)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
   }
   else if(amount == 9)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
   }
   else if(amount == 10)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
   }
   else if(amount == 11)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
   }
   else if(amount >= 12)
   {
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      EquipItem(slf, itm);
      
      CreateInvItems(slf, itm, (amount - 12));
   };

};



Gotowe, to wszystko. Teraz flaga ITEM_RING nie jest używana i można ją zastąpić na przykład kolczykami, które będzie można założyć tylko 2, bądź użyć tego jako dułale*
 
How can I see roses... and only feel thorns...

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Zamiast powtarzać, to lepiej użyć jakiejś pętli. ;)

https://www.worldofgothic.de/modifikation/index.php?go=daedalus - punkt 13. Schleifen.

Chyba pakiety skryptowe dają możliwość użycia pętli. Jeśli nie, to wyżej jest rozwiązanie. :)

Mikotsune

Mikotsune

Czas Honoru
posty364
Propsy288
Profesjabrak
  • Czas Honoru
Działa? Działa XDD W grze tego nie widać :F
 
How can I see roses... and only feel thorns...

bogu9821

bogu9821

Użytkownicy
posty406
Propsy185
ProfesjaProgramista
  • Użytkownicy
 
while(false) Do();

Sorfarius

Sorfarius

Użytkownicy
EroSennin!
posty459
Propsy12
ProfesjaNierób
  • Użytkownicy
  • EroSennin!
nie prościej wklepać marvina? xd
 
Nie wierzę w żadnego Boga, bo nie muszę. Życie mnie nauczyło że w życiu liczą się dwie wartości, więzi i marzenia.
Kosmos jest ogromny, a my jesteśmy tylko pyłkiem na tle miliardów innych istot żywych, bo sądząc że jesteśmy jedyną inteligentną cywilizacją z jednym słusznym Bogiem we wszechświecie, tylko dajecie oznakę ogromnej ignorancji i głupoty.

Splash

Splash

Moderator
posty4207
Propsy3409
ProfesjaNierób
  • Moderator
nie prościej wklepać marvina? xd
Niby co?
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie


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