[BSM] Jak zrobić sprint na klawiszu shift 16084 15

O temacie

Autor RafalBudzis

Zaczęty 29.04.2012 roku

Wyświetleń 16084

Odpowiedzi 15

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Potrzebne rzeczy:
- zainicjowany ikarus http://themodders.org/index.php?/topic/16580-inicjowanie-pakietow-skryptowych/
- Szybki Tick_tock w świecie lub co klatkowy jak ogarniacie ikarusa http://themodders.org/index.php?/topic/17057-bsmadministrowanie-tick-tockami/
- notatnik

A więc zaczynamy najpierw robimy zmienna
var int sprint;która będzie pamiętała w jakim stanie jest sprint ustalmy takie stany:
1 - włączanie
2 - włączony
3 - wyłączanie
4 - wyłączony
Do naszego tick_tocka dołączamy taki skrypt
if(MEM_KeyState(KEY_LSHIFT)==KEY_HOLD){

if (sprint == 4){
sprint = 1;
};

if (sprint == 1) {
if !(C_BodyStateContains(hero, BS_FALL)||C_BodyStateContains(hero, BS_JUMP)) {
sprint = 2;
Mdl_ApplyOverlayMDS(hero, "HUMANS_SPRINT.MDS");
};
};

}else{
if (sprint == 2){
sprint = 3;
};

if (sprint == 3)  {
sprint = 4;
Mdl_RemoveOverlayMDS(hero, "HUMANS_SPRINT.MDS");
};
};


Nie ma tu chyba nic nie jasnego jedyne co możecie się pytać po co ta linijka.
if !(C_BodyStateContains(hero, BS_FALL)||C_BodyStateContains(hero, BS_JUMP)) {Już tłumacze przy zmianie MDS`a postac na ułamek sekundy wykonuje animacje stania. Jeśli włączyć by sprint (zmiane mds`a) przy spadaniu można by uratować się od śmierci a więc ta linijka jest dość ważna.

Teraz została nam edycja pliku ini swojego moda
[OVERRIDES]
...
KEYS.keySlow=3600
...
Dzięki dodaniu KEYS.keySlow=3600 ustawienie przycisku w grze ulegnie zmianie i powolne chodzenie postaci będziemy mieli na prawym shifcie a lewy będzie "wolny" od funkcji dzieki czemu sprint będzie działał ok.

Jeśli chcecie wykorzystać ten sposób w swoim modzie proszę o dopisanie ze : "Modyfikacja korzysta ze skryptów Budzis Skrypt Mod".

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.

if(MEM_KeyState(KEY_LSHIFT)==KEY_HOLD){

if (sprint == 4){
sprint = 1;
};

if (sprint == 1) {
if !(C_BodyStateContains(hero, BS_FALL)||C_BodyStateContains(hero, BS_JUMP)) {
sprint = 2;
Mdl_ApplyOverlayMDS(hero, "HUMANS_SPRINT.MDS");
};
};

}else{
if (sprint == 2){
sprint = 3;
};

if (sprint == 3)  {
sprint = 4;
Mdl_RemoveOverlayMDS(hero, "HUMANS_SPRINT.MDS");
};
};



Przetestowałem tak dla jaj twój skrypt i powiem, że nie działa on dobrze. Jak się trzyma klawisz SHIFT, to postać dostaje MDS#msg1033450a i zaraz mu go odbiera.
 
: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.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Nie wiem jakim cudem skoro w BSM 4.0 wszystkim działa
i większości czytających tutek tez działa.

Może być tak ze ten klawisz dalej jest blokowany przez mds`a "wolnego". Spróbuj zmienić ten klawisz w gothic.ini albo zmień klawisz shifta na inny.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Nie wiem jakim cudem skoro w BSM 4.0 wszystkim działa
i większości czytających tutek tez działa.

Może być tak ze ten klawisz dalej jest blokowany przez mds`a "wolnego". Spróbuj zmienić ten klawisz w gothic.ini albo zmień klawisz shifta na inny.

Robiłem to, i tak się zapętla i daje +1, +2, +3, +4 - włącza i wyłącza MDS jednocześnie.
 
: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.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
To mam jeszcze jeden pomysł. Tick_Tock jest za wolny i nie znajduje ci tego ze trzymasz klawisz ale pewny nie jestem.

jak by coś możesz spr jeszcze okrojony

               if(MEM_KeyState(KEY_LSHIFT)==KEY_HOLD){


                        if (sprint == 1) {
                                sprint = 2;
                                Mdl_ApplyOverlayMDS(hero, "HUMANS_SPRINT.MDS");
                        };

                }else{

                        if (sprint == 2)  {
                                sprint = 1;
                                Mdl_RemoveOverlayMDS(hero, "HUMANS_SPRINT.MDS");        
                        };
                };

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
To mam jeszcze jeden pomysł. Tick_Tock jest za wolny i nie znajduje ci tego ze trzymasz klawisz ale pewny nie jestem.

jak by coś możesz spr jeszcze okrojony

               if(MEM_KeyState(KEY_LSHIFT)==KEY_HOLD){


                        if (sprint == 1) {
                                sprint = 2;
                                Mdl_ApplyOverlayMDS(hero, "HUMANS_SPRINT.MDS");
                        };

                }else{

                        if (sprint == 2)  {
                                sprint = 1;
                                Mdl_RemoveOverlayMDS(hero, "HUMANS_SPRINT.MDS");        
                        };
                };


Tick_Tock jest wywoływany co 0.100 sec. czyli 0.1 sec inaczej. :)  Ale i tak się pląta... A w sumie, wal to, najwyżej inni się będą z tym męczyć! ^^  Ja mam skrypt sprintu (sam odpowiadałeś na mój temat, chyba, to wiesz :D )
 
: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.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
0.1 sekundy to 10 klatek na sekundę więc zdecydowanie za mało (chyba ze w modyfikacji zrobiłeś ograniczenie do 10 fps`ów)

Ja w BMS zrobiłem szybkość 0.009 czyli działa ok nawet przy 110 klatkach na sekundę więc mam spory zapas.

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
0.1 sekundy to 10 klatek na sekundę więc zdecydowanie za mało (chyba ze w modyfikacji zrobiłeś ograniczenie do 10 fps`ów)

Ja w BMS zrobiłem szybkość 0.009 czyli działa ok nawet przy 110 klatkach na sekundę więc mam spory zapas.


Ło, no to dam to co 0.001 sec :D  Raczej zadziała, ale i tak mi to nie potrzebne. Wolę jak się klika raz i się aktywuje, a drugi raz jak się klika to dezaktywuje - zaoszczędzisz klawiaturę. ^^
 
: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.

Lehona

Lehona

Użytkownicy
posty196
Propsy190
  • Użytkownicy
For events such as catching keystrokes a function that is called every frame should be used. This can easily be achieved by the use of LeGo or slightly more complicated with Ikarus:

Let's assume you've got a trigger (Tick_Tock?) in your world that is called "MYTICK_TOCK" and executes "myFrameFunction". The FireDelay has to be any number above 0.
func void myFrameFunction() {
    Wld_SendTrigger("MYTICK_TOCK");
    var oCTriggerScript myTrigger;
    myTrigger = MEM_PtrToInst (MEM_SearchVobByName ("MYTICK_TOCK"));
    myTrigger._zCVob_nextOnTimer = MEM_Timer.totalTimeFloat;

    /* now do whatever you want to do every frame */
};


This function will now be executed exactly once per frame (I don't think triggers with an absurdly low fireDelay such as 0.000001 will fire more often than once per frame anyway, but I'm not sure) and is therefore optimal for responding to key-events.
 
Unless specified otherwise, my posts are always about Gothic 2 Night of the Raven.

Star wars

Star wars

Użytkownicy
posty19
Propsy3
  • Użytkownicy
A mi wyrzuca błąd: "Undefined function: C_BodyStateContains" - jak to naprawić ?
 

Splash

Splash

Moderator
posty4209
Propsy3412
ProfesjaNierób
  • Moderator
Zła kolejność parsowania. Nie wiem, w której linijce w gothic.src w G1 jest ustawione, a nawet nie wiem, w którym pliku jest funkcja C_BodyStateContains, ale sprint musi być parsowany po niej.
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Vanarius

Vanarius

Riquer Team
Początkujący Modder
posty332
Propsy62
ProfesjaGrafik 3D
  • Riquer Team
  • Początkujący Modder
Może, mi ktoś wyjaśnić, gdzie znajduje się Tick_Tock oraz gdzie mam wpisać pierwszą zmienną ?
 

Toworish

Toworish

Użytkownicy
http://chomikuj.pl/ToWoRiSh
posty1664
Propsy254
ProfesjaNierób
  • Użytkownicy
  • http://chomikuj.pl/ToWoRiSh
Zmienną możesz dać nad funkcją ticktocka, a do tworzenia ticktocków masz tuotriale, nawet w mojej paczce runy przywołania klona
 
Niebawem...Pierdolnę se poradniki do Goticzka. Albo i nie, bo sie mnie nie chce.

Halicor

Halicor

Użytkownicy
Hauptsturmfuhrer
posty365
Propsy57
ProfesjaNierób
  • Użytkownicy
  • Hauptsturmfuhrer
Zmiast tick tocka użyłem LeGo lecz gdy naciskam lub przytrzymuję lewy shift to nic się nie dzieje.
var int sprint;

func void Speed()
{
    FF_ApplyOnce(Loop_2);
};

func void Loop_2()
{
if(MEM_KeyState(KEY_LSHIFT)==KEY_HOLD){

if (sprint == 4){
sprint = 1;
};

if (sprint == 1) {
if !(C_BodyStateContains(hero, BS_FALL)||C_BodyStateContains(hero, BS_JUMP)) {
sprint = 2;
Mdl_ApplyOverlayMDS(hero, "HumanS_Sprint.MDS");
};
};

}else{
if (sprint == 2){
sprint = 3;
};

if (sprint == 3)  {
sprint = 4;
Mdl_RemoveOverlayMDS(hero, "HumanS_Sprint.MDS");
};
};
};
Tylko nie bijcie jak coś źle napisałem  :F

kaczka

kaczka

RaveN Studio
Definitely not kaczka!
posty2280
Propsy2392
NagrodyV
ProfesjaLvl designer
  • RaveN Studio
  • Definitely not kaczka!
Zmień np na "Z". Pod LSHIFT jest już przypisane chodzenie w gothic (domyślnie bezimienny biega)
 

Halicor

Halicor

Użytkownicy
Hauptsturmfuhrer
posty365
Propsy57
ProfesjaNierób
  • Użytkownicy
  • Hauptsturmfuhrer
Jak w Gothic.ini zrobię taką zmiane [OVERRIDES]
...
KEYS.keySlow=3600
...
Do dzieje się to co RafalBudzis napisał czyli chodzenie przeskakuje pod prawy shift i tak się stało


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