Reset sprintu oraz paski (poraz kolejny) 6388 23

O temacie

Autor Siemekk

Zaczęty 11.12.2015 roku

Wyświetleń 6388

Odpowiedzi 23

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Witam. Bez zbędnego gadania chciałbym zrobić reset sprintu. Mam skrypt (baaardzo pomógł z nim mi splash) sprintu z wytrzymałością. Problem pojawia się dopiero gdy wytrzymałość spadnie do 0  i trzymamy Shift to wtedy postać dostaje padaczki. Zrobiłem taką funkcję resetu :
func void Sprint_reset () // reset
{
RESETSPRINTU = 0;
};

Oraz skrypt staminy i klawisza:
if (MEM_KeyState(KEY_LSHIFT)==KEY_HOLD)&&(Stamina>1) && (RESETSPRINTU==0)
    {
//*******************************************************************
if (Stamina < 1)
    {
    sprint = false;
    Mdl_RemoveOverlayMds  (hero, "HUMANS_SPRINT.MDS");
    MDS_Applied = false;
    Stamina = 0;
RESETSPRINTU = 1;
FF_ApplyOnceExt(Sprint_reset, 10000, 1); // reset po 5 sekundach zaczerpnięty ze skryptu marka z tematu o animacji
   };
Jednak reset się nie wywołuje gdy dodałem jeszcze warunek resetu do funcji else if.... to postać cały czas sprintowała. Zmienne oczywiście są.
Oraz pytanie do paska. Czy można jakoś wymuścić zmianę koloru tex paska np. gdy jesteśmy zatruci? Dodam iż że mam własne paski i nie korzystam z pasków z silnika(mam je ukryte). Z góry dzięki za pomoc.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Spróbowałbym tak: Oczywiście nad funkcją var int RESETSPRINTU;
if (RESETSPRINTU==0)      {
if (MEM_KeyState(KEY_LSHIFT)==KEY_HOLD)&&(Stamina>1)
   {
   RESETSPRINTU = 1;
//*******************************************************************
if (Stamina < 1)
$$ if (RESETSPRINTU==1)
{
    sprint = false;
    Mdl_RemoveOverlayMds  (hero, "HUMANS_SPRINT.MDS");
    MDS_Applied = false;
    Stamina = 0;
   RESETSPRINTU = 3;
   FF_ApplyOnceExt(Sprint_reset, 10000, 1); // reset po 5 sekundach zaczerpnięty ze skryptu marka z tematu o animacji
};
   };
      };
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Jak chcesz, żeby sprint Ci działał? Jak chcesz reset sprintu po 10 sekundach, to ustaw func Sprint_Reset na wywoływanie co sekunda (ja polecam 10 razy na sekundę) i dać (jak co sekundę) RESETSPRINTU = 10; albo (jeśli 10 razy na sekundę) RESETSPRINTU = 100; i w FF odejmować RESETSPRINTU o 1.

Czasami jak czas się zbliża do (w twoim przypadku) 10 sekund, możesz zgubić klatkę i dostać delikatnego laga, przez co funkcja się nie wywoła.
 
: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.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
@toworish Wychodzi na to samo co ja robiłem tylko że jeden warunek jest ważniejszy... Ale to i tak nie ma znaczenia, ponieważ nacisnę shift i klawisz biegu to sprint się nie wyłącza już nigdy a stamina spada :/ dodam też że jeśli wywalę reset to działa normalnie ale "padaczka".
Poprawiłem także formułkę funkcji resetu:func void Sprint_reset () // reset
{
if (RESETSPRINTU >=1){
RESETSPRINTU -= 1;
}
else if (RESETSPRINTU <1){
RESETSPRINTU = 0;
};
};
A to niżej tzn. zwiększenie zmiennej:
RESETSPRINTU = 10;
FF_ApplyOnceExt(Sprint_reset, 1000, 1);
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Nie wiem, ja jak coś robię przy gothicu, to zazwyczaj metodą prób i błędów używając wiedzy która mi została z dawnych lat, gdy robiłem ostatnio jedną rzecz to własnie podobnym sposobem uzyskałem włączenie jej i wyłączenie xd, ostatnio i tak mało osób się udziela na górnym forum, to sam próbuję pomóc nawet myląc się xd noo i przy okazji nabije tyle postów że mi się fjut w spodniach nie zmieści xd
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
 
: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.

Splash

Splash

Moderator
posty4210
Propsy3412
ProfesjaNierób
  • Moderator
var int tired; //zmienna globalna
if (MEM_KeyState (KEY_LSHIFT) == KEY_HOLD && Stamina > 1 && tired == false)
if (Stamina < 1)
{
sprint = false;
Mdl_RemoveOverlayMds (hero, "HUMANS_SPRINT.MDS");
MDS_Applied = false;
Stamina = 0;
tired = true;
};
Wywołać tą funkcję np. co 1,5 sekundy:
func void Sprint_Tired ()
{
    var int tired_time;

    if (tired == true)
    {
    tired_time += 1;

        if (tired_time == 2)
        {
        tired = false;
        tired_time = 0;
        };
    };
};
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
@Bogdan miałeś rację. Wystarczyło zmienić ze 100 na 1000 i przerobić warunki ale działa. Minus jest taki że pasek odświeża się co sekundę co nie ładnie wygląda.... Można to jakoś ominąć czy musi zostać. @Splash zrobiłem tak jak mówiłeś i wywołałem funkcję co 1.5s ale postać dalej się tnie :/
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Dla paska zrób osobną funkcję.
 
: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.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
@Bogdan mógłbyś mi wyjaśnić trochę jaśniej jak ? Poradzę sobie z takim czymś tylko nie wiem jak miała by ta funkcja dla paska wyglądać (w sensie np. jeżeli stamina =10 itd.)
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Minus jest taki że pasek odświeża się co sekundę co nie ładnie wygląda.... Można to jakoś ominąć czy musi zostać.

Dla paska zrób osobną funkcję.

Myślałem, że pasek masz...
 
: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.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
@Bogdan jeśli oto chodzi. Tak mam pasek tylko mi chodzi o to aby płynnie stamina uciekała ponieważ wygląda to tak że po sekundzie ucina pasek o 5% co brzydko wygląda.
var int VSTBarVisible;                          

instance Bar_4(GothicBar)          
{       x = 100; //100                
     y = 855; //20                  
     width = 200;   //180        
     height = 20;   //20
   backTex = "BAR_BACK_ORG.tga";
      barTex = "BAR_Stamina.tga";  
};
var int MyBar4;
func void loop_4()
{
    if(!Hlp_IsValidHandle(MyBar4))
    {
    MyBar4 = Bar_Create(Bar_4);   
    VSTBarVisible = 1;
    
    };
   Bar_SetMax(MyBar4,  200);  
    Bar_SetValue(MyBar4, stamina);
   };
func void HideBar ()
{
    if (MEM_Game.pause_screen || !InfoManager_HasFinished()) 
    {
      Bar_Delete (MyBar4);
    Bar_Hide (MyBar4);
    }
    else
    {
    loop_4();
    };
};
Tak wygląda mój pasek.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Zrób nowy FF... To wszystko co miałem na myśli. Nowa funkcja dla samego paska + FF.
 
: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.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Dobra wiem już co i jak. Mam teraz pytanie czy istnieje jakiś kod (nie wiem jak nazwać) który by wyłączał naszą funkcję z gry? tzn. chcę zrobić tak:if (tired_time == 3)
        {
        tired = false;
      tired_time = 0;
      FF_Apply (SprintAktywacja);
      };
oraz if (Stamina < 1)
    {
    sprint = false;
    Mdl_RemoveOverlayMds  (hero, "HUMANS_SPRINT.MDS");
    MDS_Applied = false;
    Stamina = 0;
   tired = true;
   FF_ApplyOnceExt(Sprint_Tired, 1000, 5);
 //kod na zablokowanie funkcji aby potem spowrotem się uruchomiła w tired... (wyłączenie funkcji z Startup)
 };
Próbowałem z FF_Remove (); ale się nie wyłącza. Więc ktoś mi może powiedzieć czy to ma szanse zadziałać a jeśli ma to nazwę funkcji która wyłącza.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Zrób po prostu zmienną. Jeśli będzie wynosiła true, będzie kończyć funkcję.

Przykład:
if (functionBlockVariable == true)
{     return;     };

if (Stamina < 1)
    {
    sprint = false;
    Mdl_RemoveOverlayMds  (hero, "HUMANS_SPRINT.MDS");
    MDS_Applied = false;
    Stamina = 0;
   tired = true;
   FF_ApplyOnceExt(Sprint_Tired, 1000, 5);
 //kod na zablokowanie funkcji aby potem spowrotem się uruchomiła w tired... (wyłączenie funkcji z Startup)
 };

Info: Return powoduje, ze funkcja zostaje zakończona i (w tym przypadku) zaczynana od początku.
 
: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.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
@Bogdan próbowałem tak ale dalej nie wychodzi. Może to będzie wazne bo zapomniałem o ty mpowiedzieć :F. A więc funkcja sprintu rozkłada się na bodajże 3 warunki if. Wygląda ona mniej więcej tak: func void sprintaktywacja()
{   
   if (MEM_KeyState(KEY_LSHIFT)==KEY_HOLD)&&(Stamina>1) 
    {
    if !(C_BodyStateContains(hero, BS_FALL)||C_BodyStateContains(hero, BS_STAND)||C_BodyStateContains(hero, BS_MOD_TRANSFORMED)||C_BodyStateContains(hero, BS_JUMP)||C_BodyStateContains(hero, BS_SNEAK)||C_BodyStateContains(hero, BS_SWIM)||C_BodyStateContains(hero, BS_DIVE)||C_BodyStateContains(hero, BS_INVENTORY)||C_BodyStateContains(hero, BS_ITEMINTERACT)||C_BodyStateContains(hero, BS_MOBINTERACT   )||C_BodyStateContains(hero, BS_MOBINTERACT_INTERRUPT)||C_BodyStateContains(hero, BS_CLIMB)||C_BodyStateContains(hero, BS_DEAD)||C_BodyStateContains(hero, BS_PARADE)||C_BodyStateContains(hero, BS_SIT)||C_BodyStateContains(hero, BS_UNCONSCIOUS)||C_BodyStateContains(hero, BS_PETRIFIED)||C_BodyStateContains(hero, BS_CASTING)||C_BodyStateContains(hero, BS_STUMBLE)||C_BodyStateContains(hero, BS_DROPITEM)||C_BodyStateContains(hero, BS_THROWITEM)||C_BodyStateContains(hero, BS_TAKEITEM)){
   sprint = true;
 
        if (!MDS_Applied) && (RESETSPRINTU==0)
        {
        Mdl_ApplyOverlayMds  (hero, "HUMANS_SPRINT.MDS");
        MDS_Applied = true;
       };
    };
   }
    else
    {
   if!(C_BodyStateContains(hero, BS_FALL)||C_BodyStateContains(hero, BS_JUMP))
   {
      sprint = false;
 
        if (MDS_Applied)
        {
        Mdl_RemoveOverlayMds  (hero, "HUMANS_SPRINT.MDS");
        MDS_Applied = false;
        };
      };
   };
};


Body state nie mają znaczenia. Dałem je po to aby npc nie wariował pod wodą itp.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
var int twojaBlokada;
func void sprintaktywacja()
{   
   if (twojaBlokada == true)
   {
      return;
   };

   if (MEM_KeyState(KEY_LSHIFT)==KEY_HOLD)&&(Stamina>1)
    {
    if !(C_BodyStateContains(hero, BS_FALL)||C_BodyStateContains(hero, BS_STAND)||C_BodyStateContains(hero, BS_MOD_TRANSFORMED)||C_BodyStateContains(hero, BS_JUMP)||C_BodyStateContains(hero, BS_SNEAK)||C_BodyStateContains(hero, BS_SWIM)||C_BodyStateContains(hero, BS_DIVE)||C_BodyStateContains(hero, BS_INVENTORY)||C_BodyStateContains(hero, BS_ITEMINTERACT)||C_BodyStateContains(hero, BS_MOBINTERACT   )||C_BodyStateContains(hero, BS_MOBINTERACT_INTERRUPT)||C_BodyStateContains(hero, BS_CLIMB)||C_BodyStateContains(hero, BS_DEAD)||C_BodyStateContains(hero, BS_PARADE)||C_BodyStateContains(hero, BS_SIT)||C_BodyStateContains(hero, BS_UNCONSCIOUS)||C_BodyStateContains(hero, BS_PETRIFIED)||C_BodyStateContains(hero, BS_CASTING)||C_BodyStateContains(hero, BS_STUMBLE)||C_BodyStateContains(hero, BS_DROPITEM)||C_BodyStateContains(hero, BS_THROWITEM)||C_BodyStateContains(hero, BS_TAKEITEM)){
   sprint = true;
 
        if (!MDS_Applied) && (RESETSPRINTU==0)
        {
        Mdl_ApplyOverlayMds  (hero, "HUMANS_SPRINT.MDS");
        MDS_Applied = true;
       };
    };
   }
    else
    {
   if!(C_BodyStateContains(hero, BS_FALL)||C_BodyStateContains(hero, BS_JUMP))
   {
      sprint = false;
 
        if (MDS_Applied)
        {
        Mdl_RemoveOverlayMds  (hero, "HUMANS_SPRINT.MDS");
        MDS_Applied = false;
        };
      };
   };
};


Musisz zmienić zmienną na true tam, gdzie ma się blokować sprint.
Jeśli to nie podziała, to znaczy, że kłamiesz.

Btw, samo słowo "return" znaczy "wróć/zwróć".
 
: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.

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
@Bogdan Działa bez problemu. Więc część ze sprintem można zamknąć teraz bym prosił o podpowiedź co do zmiany tex paska  gdy zmienna osiągnie wartość true.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.

Splash

Splash

Moderator
posty4210
Propsy3412
ProfesjaNierób
  • Moderator
Pasek to tylko tekstura wyświetlana na ekranie, więc można ją zmieniać używając funkcji View_SetTexture.
var _bar bar; bar = get (MyBar4);
View_SetTexture (bar.v0, "nazwatekstury.tga"); //ramka
View_SetTexture (bar.v1, "nazwatekstury.tga"); //pasek
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Siemekk

Siemekk

Złote Wrota
posty2143
Propsy1154
ProfesjaProgramista
  • Złote Wrota
Super. Dzięki Splash i Bogdan za pomoc. Temat można zamknąć.
 

P.S A Splash w szafie i nie ma psychy by mi dać bana.


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