[G2:NK]Skrypt jedzenia,które leczy i dodaje statystyki 7217 7

O temacie

Autor Graveir

Zaczęty 2.01.2011 roku

Wyświetleń 7217

Odpowiedzi 7

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Znając życie po przeczytaniu tego tematu posypią się w moją stronę komentarze typu "Jest tego od groma na forum","Poszukaj uważnie,a znajdziesz","Przecież każdy głupi to wie" itp.No,ale się nudzę i postanowiłem coś napisać.
No to zaczynamy zabawę.Wklejam skrypt jedzenia,które nazwałem "Wódka".
// ****************************************
INSTANCE ItFo_Wodka (C_Item)
{
   name = "Wódka";

   mainflag = ITEM_KAT_FOOD;
   flags = ITEM_MULTI;

   value = 30;

   visual = "ItFo_Booze.3DS";
   material = MAT_LEATHER;
   scemeName = "POTION";
   on_state[0] = Use_Wodka;

   description = name;

   TEXT[1] = NAME_Bonus_HP;
   COUNT[1] = 20;
   TEXT[2] = NAME_Bonus_Mana;
   COUNT[2] = 20;
   TEXT[5] = NAME_Value;
   COUNT[5] = 30;
};

   FUNC VOID Use_Wodka()
   {

      Npc_ChangeAttribute (self, ATR_HITPOINTS, 20);
      Npc_ChangeAttribute (self, ATR_MANA, 20);
      const int Wodka_Bonus = 0;

      if (Npc_IsPlayer (self))
      {

         Wodka_Bonus = Wodka_Bonus + 1;

         if (Wodka_Bonus == 1)
         {
            PrintScreen ("Czuję się świeżo", -1, 25, FONT_ScreenSmall,2 );
         };

         if (Wodka_Bonus == 2)
         {
            PrintScreen ("Siła pudziana", -1, 25, FONT_ScreenSmall,2 );
            B_RaiseAttribute (self, ATR_STRENGTH,5);
         };

         if (Wodka_Bonus == 3)
         {
            PrintScreen ("Moc Sarumana", -1, 25, FONT_ScreenSmall,2 );
            B_RaiseAttribute (self, ATR_MANA_MAX,25);
         };

         if (Wodka_Bonus == 4)
         {
            PrintScreen ("Szybkość Legolasa", -1, 25, FONT_ScreenSmall,2 );
            B_RaiseAttribute (self, ATR_DEXTERITY,25);
         };

         if (Wodka_Bonus == 4)
         {
            PrintScreen ("Wytrzymałość trolla", -1, 25, FONT_ScreenSmall,2 );
            B_RaiseAttribute (self, ATR_HITPOINTS_MAX,15);
         };

         if (Wodka_Bonus == 5)
         {
            PrintScreen ("Chyba już nic się nie dzieje", -1, 25, FONT_ScreenSmall,2 );
            Wodka_Bonus = 0;
         };

      };

   };
Większość części skryptu na pewno wiele osób zna,ale wytłumaczę wszystkie(tak na wszelki wypadek-jak coś źle wytłumaczę to niech ktoś poprawi to będę wdzięczny).
INSTANCE ItFo_WodkaJest to po prostu instancja przedmiotu(inaczej kod przedmiotu,najważniejsza rzecz w całym skrypcie!).
name = "Wódka";Po prostu nazwa przedmiotu wyświetlana w grze.
mainflag = ITEM_KAT_FOOD;Tutaj tak naprawdę sam nie wiem,ale w tym miejscu wskazujemy,do jakiej kategorii zaliczamy przedmiot(jedzenie,pancerz,broń,przedmiot).
flags = ITEM_MULTI;Tutaj zostawiamy bez zmian(a co do mainflag,jeśli robimy skrypt jedzenia to zostawiamy bez zmian).
value = 30;Wartość przedmiotu(przy sprzedaży w grze jest zawsze zaniżana).
visual = "ItFo_Booze.3DS";Czyli nazwa modelu w formacie .3ds ginu.
material = MAT_LEATHER;Materiał z jakiego zrobiony jest przedmiot(ale to raczej nie ma wpływu w grze).
scemeName = "POTION";Tutaj komenda odwołująca się do skryptu wywoływania animacji picia.
on_state[0] = Use_Wodka;Tutaj zostawiamy bez zmian,bo jest potrzebne do funkcji użycia wódki.
description = name;Czyli coś w stylu tytułu głównego(możemy zmienić name na jakiś opis np.Najlepsza wódka w Khorinis]).Po zmianie jak najedziemy na przedmiot to powinniśmy zobaczyć nazwę+opis np.Wódka,a poniżej napis(opis)Najlepsza wódka w Khorinis.
  TEXT[1] = NAME_Bonus_HP;
   COUNT[1] = 20;
   TEXT[2] = NAME_Bonus_Mana;
   COUNT[2] = 20;
   TEXT[5] = NAME_Value;
   COUNT[5] = 30;
};
Tutaj jest część odpowiedzialna za wyświetlanie nazw związanych z tym,co daje użycie przedmiotu.Pokażę,mniej więcej jak to wygląda w grze.
  TEXT[1] = NAME_Bonus_HP;
   COUNT[1] = 20;
W grze zamiast Text i Name_Bonus_Hp będzie pisało Premia punktów życia 20(czyli po użyciu odzyskujemy 20 hp)
  TEXT[2] = NAME_Bonus_Mana;
   COUNT[2] = 20;
Tutaj podobnie jak wyżej,z tym,że tutaj jest premia punktów magicznych.
  TEXT[5] = NAME_Value;
   COUNT[5] = 30;
Tutaj wartość przedmiotu(w grze będzie Wartość = 30)
  FUNC VOID Use_Wodka()
   {
Tutaj zaczyna się funkcja tego przedmiotu(UWAGA!musi być koniecznie taka sama,jak w linijce on_state[0]
     Npc_ChangeAttribute (self, ATR_HITPOINTS, 20);
      Npc_ChangeAttribute (self, ATR_MANA, 20);
Oznacza to,że po spożyciu odzyskujemy 20 punktów many i 20 punktów życia.
     const int Wodka_Bonus = 0;
Tutaj jest stała funkcji,nic nie musimy z nią robić.

      if (Npc_IsPlayer (self))
      {
Tutaj warunek If(jeśli).Tutaj chyba chodzi o to,że jeśli NPC to gracz to zadziała funkcja(niech mnie jakiś skrypter poprawi,bo tutaj na 100% się machnąłem w tłumaczeniu).
Wodka_Bonus = Wodka_Bonus + 1;
Oznacza to naliczanie funkcji(takie coś jak było przy zadaniu od tego nowicjusza w gothic(w Nowym Obozie)dawał nam w nagrodę za rozdanie ziela do wyboru trzy z pięciu zwojów).
        if (Wodka_Bonus == 1)
         {
            PrintScreen ("Czuję się świeżo", -1, 25, FONT_ScreenSmall,2 );
         };
Tutaj oznacza,że jeśli użyjemy pierwszy raz tej wódki,to pojawia się napis(mniej więcej na środku ekranu) taki,jaki ustaliliśmy sobie po PrintScreen ("Nasz napis").I najlepiej zostawić dalsze części tak,jak ja mam,bo mogą być problemy.
        if (Wodka_Bonus == 2)
         {
            PrintScreen ("Siła pudziana", -1, 25, FONT_ScreenSmall,2 );
            B_RaiseAttribute (self, ATR_STRENGTH,5);
         };
Tutaj po drugim użyciu zwiększa nam się siła o 5 punktów.Przy dalszych jest tak samo,ale wkleję ostatnią część,bo tam jest pewna funkcja.
if (Wodka_Bonus == 5)
         {
            PrintScreen ("Chyba już nic się nie dzieje", -1, 25, FONT_ScreenSmall,2 );
            Wodka_Bonus = 0;
         };
Oznacza to,że po 5 wypiciu wódki,resetuje się licznik.Czyli jeśli wypijemy wódkę szósty raz,to będzie taki sam efekt,jak za pierwszym razem(czyli napis "Czuję się świeżo").
No to tyle.Jeśli już był taki temat to przepraszam,ale szukałem w tutorialach i jedynie znalazłem tutorial do broni i pancerzy,ale do jedzenia nie.
Edit:Dobra 2 błędy znalezione przez Gothera poprawione.
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Gother

Gother

Użytkownicy
Nieskromny Mistrz Gothica
posty446
Propsy255
ProfesjaScenarzysta
  • Użytkownicy
  • Nieskromny Mistrz Gothica
Ten tutorial zawiera błędy!

Cytuj
visual = "ItFo_Booze.3DS";


Czyli animacja przedmiotu(w moim wypadku korzystamy z tego jak z ginu).
Nie animacja, a nazwa modelu w formacie .3ds wina.

Cytuj
scemeName = "POTION";


Tutaj to chyba jest coś związane z jakim "rodzajem"jest związany przedmiot.
W "" została wzięta komenda odwołująca się do skryptu wywoływania animacji picia.

Dalej nie czytałem.
 

jendrzejs

jendrzejs

Użytkownicy
posty586
Propsy31
Profesjabrak
  • Użytkownicy
Cytuj
if (Wodka_Bonus == 4) /Tu jest dobrze
         {
            PrintScreen ("Szybkość Legolasa", -1, 25, FONT_ScreenSmall,2 );
            B_RaiseAttribute (self, ATR_DEXTERITY,25);
         };
 
         if (Wodka_Bonus == 4)/Tu znowu 4 ? Zmień na 5
         {
            PrintScreen ("Wytrzymałość trolla", -1, 25, FONT_ScreenSmall,2 );
            B_RaiseAttribute (self, ATR_HITPOINTS_MAX,15);
         };
 
         if (Wodka_Bonus == 5)/Powinno być 6
         {
            PrintScreen ("Chyba już nic się nie dzieje", -1, 25, FONT_ScreenSmall,2 );
            Wodka_Bonus = 0;
         };

Nie wiem czy takie było twoje zamierzenie, ale jeśli nie to pomyliłeś numerki.
 

Tasilvar

Tasilvar

Użytkownicy
zwykły user
posty264
Propsy17
ProfesjaSkrypter
  • Użytkownicy
  • zwykły user
if (Wodka_Bonus == 4) /Tu jest dobrze
{
PrintScreen ("Szybkość Legolasa", -1, 25, FONT_ScreenSmall,2 );
B_RaiseAttribute (self, ATR_DEXTERITY,25);
};

if (Wodka_Bonus == 4)/Tu znowu 4 ? Zmień na 5
{
PrintScreen ("Wytrzymałość trolla", -1, 25, FONT_ScreenSmall,2 );
B_RaiseAttribute (self, ATR_HITPOINTS_MAX,15);
};

if (Wodka_Bonus == 5)/Powinno być 6
{
PrintScreen ("Chyba już nic się nie dzieje", -1, 25, FONT_ScreenSmall,2 );
Wodka_Bonus = 0;
};

A nie prościej byłoby zastosować switch'a ?
 

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
Nie znam się na czymś takim(co to wg jest??).Aha i faktycznie pomyliły mi się numerki=)
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Royal

Royal

Użytkownicy
posty8
  • Użytkownicy
 
agrhhh!! :D

Graveir

Graveir

Użytkownicy
Avatar Twilight Sparkle / Pożeracz serc
posty1275
Propsy235
ProfesjaGracz
  • Użytkownicy
  • Avatar Twilight Sparkle / Pożeracz serc
To,czyli co?Jakieś błędy wyskakują,bonus się nie pojawia czy co dokładnie?
 
Mój obecny sprzęt PC:
Intel core i5-4590
8 gb ram
Geforce GTX 1050Ti

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
  FUNC VOID Use_Wodka()
   {
      const int Wodka_Bonus = 0;
   };
Czy przez to wartość nie będzie ustawiana na zero przy każdym wywołaniu? Zapisanie i wczytanie ponownie na pewno przywróci do zera.
 
Życzę wam seksu analnego po stronie biernej.
Dropbox +500 mb na start
LowPoly
Wykonanie modelu niskopoligonowego to sztuka kompromisu. Nie jest to jedynie uproszczenie modelu wysokopoligonowego, ale głęboka modyfikacja oraz podejmowanie decyzji często zmieniających wygląd pierwotny obiektu, tak by przy najmniejszej ilości trójkątów uzyskać jak najwierniej odwzorowany kształt oryginału. Nie można też zapomnieć o tym iż musi nadal wyglądać przekonywająco i tak balansować by uzyskać efekt optymalny.

Podstawowym założeniem jest, że model nie powinien mieć zbędnych, niewidocznych dla gracza detali włączonych w geometrie. Większość obiektów jakie znajdują się w grze powinna prezentować się najlepiej z odległości około 3-5 metrów. Wszelkie detale, które zanikają, wydają się płaskie lub zlewają się z bryłą modelu należy uznać za zbędne i pozostawić je na normal mapie.

Fakt, iż gracz będzie w stanie podejść bliżej do obiektu i zobaczyć go z mniejszej niż 3m odległości nie powinno stanowić większego problemu, gdyż większą rolę odgrywają wtedy tekstury oraz dodatkowy detal zależny od materiału obiektu. To właśnie kompromis między wydajnością, a szczegółowością otoczenia.

Detal, którego nie widać z 3-5 metrów nie powinnien istnieć w geometrii modelu.
Krawędzie znajdujące się blisko siebie, które zlewają się z większej odległości należy uprościć do wspólnej płaszczyzny


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