Nowy pasek 7491 16

O temacie

Autor diegomez

Zaczęty 30.12.2012 roku

Wyświetleń 7491

Odpowiedzi 16

diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt

diegomez
Labirynt

Nowy pasek
2012-12-30, 02:31(Ostatnia zmiana: 2012-12-30, 09:57)
Witajcie
Od jakiegoś czasu chcę zrobić nowy pasek na ekranie gothica.
póki co chcę tylko, żeby był. (Bez tekstury i bez określonego celu. Tak po prostu.)

No i mam dwa skrypty na ten pasek, ale każdy zawiera błędy (lub ja coś źle robię). Jeden pochodzi z LeGO wiki, a drugi od mojego kolegi, który zgodził się go dla mnie napisać. (Jak kolega będzie chciał być wymieniony to może pisać w temacie).

To pierwszy skrypt (LeGO wiki)

instance Bar_1(GothicBar) {
    x = 100;
    y = 20;
};

func void Example_1() {
    FF_ApplyOnce(Loop_1);
};

func void Loop_1() {
    var int MyBar;
    if(!Hlp_IsValidHandle(MyBar)) {
        MyBar = Bar_Create(Bar_1); // Unsere Bar_1
    };

    Bar_SetMax(MyBar, hero.exp_next);
    Bar_SetValue(MyBar, hero.exp);
};


    FF_ApplyOnce(Loop_1);

Tutaj wykrywa mi błąd, że nie zna tego. (Unknown identifier (czy coś takiego)

Drugi skrypt (kolegi)
func void Pasek()
{

var int pas = 997;
Bar_SetMax(pas, 1000);
Bar_SetValue(pas, 1000);
Bar_Create(pas);
Bar_MoveTo(pas, 6000, 7000);
Bar_Show(pas);
};

var int pas = 997;    -- tutaj jest błąd, że nie ma średnika, ale jak patrzę na func void Pasek() to wiem, że tam średnika być nie powinno.

Każdy skrypt umieszczam w startupie na początku przed wszystkim innym. Oczywiście deklaruje to też w INIT_GLOBAL, ale ze względu na wcześniejsze błędy nie mam jak sprawdzić czy są one poprawne.


Niestety mam bardzo małe doświadczenie w tych rzeczach, więc w zasadzie to wszystko to dla mnie eksperymenty.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Nie chce mi się tłumaczyć ci całości problemu, odpowiem tylko na pytanie o średnik - błąd rzeczywiście jest, po prostu w Daedalusie nie można przypisywać wartości zmiennej definiując ją. Musisz zrobić to w dwóch osobnych poleceniach:
var int pas;
pas = 997;

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Cytuj
FF_ApplyOnce(Loop_1);

Tutaj wykrywa mi błąd, że nie zna tego. (Unknown identifier (czy coś takiego)
Kod funkcji Loop_1 musisz umieścić przed jej wywołaniem (przed funkcją Example_1).

Parser czyta od góry do dołu, w ustalonej kolejności, nie "skacze" po pliku i nie sprawdza, czy jakaś funkcja została później zadeklarowana.

diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt
Nie chce mi się tłumaczyć ci całości problemu, odpowiem tylko na pytanie o średnik - błąd rzeczywiście jest, po prostu w Daedalusie nie można przypisywać wartości zmiennej definiując ją. Musisz zrobić to w dwóch osobnych poleceniach:
var int pas;
pas = 997;

Dobrze jest tylko mam jeszcze dwa unknown identifier. Bar_MoveTo i po tym Bar_Show.


Kod funkcji Loop_1 musisz umieścić przed jej wywołaniem (przed funkcją Example_1).

Parser czyta od góry do dołu, w ustalonej kolejności, nie skacze po pliku i nie sprawdza, czy jakaś funkcja została później zadeklarowana.


Faktycznie tu też byłby błąd, ale chodzi mi o to że nie zna samego FF_ApplyOnce. Kompilator jeszcze nie wspomina nic o Loop_1.


Istnieją jakieś dobre zamiany do tych trzech nieznanych identyfikacji ?
 


diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt
Tak na pewno.
Błędów przy kompilowaniu nie było. I jak ustawiłem to czerwone plamy krwi na ekranie były.
Potwory miały czerwony kolor itd
 

Mark56

Mark56

Moderator
som veľký magič
posty1632
Propsy1846
ProfesjaAnimator
  • Moderator
  • som veľký magič
tak przypadkiem , może dałeś swój skrypt parsować przed skryptami LeGo i Ikarus ...  :pokerface:
 


diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt
Nie
 

diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt

diegomez
Labirynt

Nowy pasek
#8 2012-12-31, 16:28(Ostatnia zmiana: 2013-01-03, 13:00)
Jako iż ten post będzie znacznie różnił się od poprzedniego posta to napiszę doubla.

Gothiców z zainstalowanym ikariusem mam 3 z czego 2 na przenośnym dysku.
No i wziełem swój przenośny dysk na inny komputer, gdzie mam zainstaloway win 7.
W startupie skopiowałem ten skrypt paska (z LeGO) no i sprawdziłem czy działa.
Błąd był taki sam. Unknown identifier FF_ApllyOneCośTam.
Więc trochę pokombinowałem i napisałem coś takiego.

instance Bar_1(GothicBar)
{    x = 100;    y = 20;
};

func void Loop_1()
{    
  var int MyBar;  
  if(!Hlp_IsValidHandle(MyBar))
   {
        MyBar = Bar_Create(Bar_1); // Unsere Bar_1    
   };  
   
  Bar_SetMax(MyBar, hero.exp_next);    
  Bar_SetValue(MyBar, hero.exp);
};



func void Example_1()
{  
  //FF_ApplyOnce(Loop_1);
};

Pasek jest tak jak chciałem bez funkcji, no ale teraz fajnie by było jakąś funkcję dodać zwłaszcza, że jestem nie daleko od jej napisania.


Edit: Znacie jakiś sposób na działanie FF_ApplyOnce
 

diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt
Pozwolono mi na napisanie kolejnego posta pod dwoma poprzednimi.
Mam kilka pytań do tych pasków.

1. Czy skrypt paska, którym obecnie się zajmuję zawiera już teksturę paska? I jeśli nie to czy to przez to nie widzę wzrastającego exp w pasku ?
2. Wie ktoś co dokładnie robi ten FF_ApplyOnce ? No i czy można go jakoś obejść.
3. ...co jeszcze mogę zrobić ?

Oto obecny skrypt paska. Dodałem mały element do Example1, ale z tego co widzę to nic w grze nie zmienia.

instance Bar_1(GothicBar)
{    x = 100;    y = 20;
};

func void Loop_1()
{    
  var int MyBar;  
  if(!Hlp_IsValidHandle(MyBar))
   {
        MyBar = Bar_Create(Bar_1);    
   };  
   
  Bar_SetMax(MyBar, hero.exp_next);    
  Bar_SetValue(MyBar, hero.exp);
};



func void Example_1()
{  
var int bar; bar = Bar_Create(GothicBar@);
Bar_SetPercent(bar, 50);
  //FF_ApplyOnce(Loop_1);
};
 

Mark56

Mark56

Moderator
som veľký magič
posty1632
Propsy1846
ProfesjaAnimator
  • Moderator
  • som veľký magič

Mark56
Moderator

Nowy pasek
#10 2013-01-05, 01:51(Ostatnia zmiana: 2013-01-05, 01:52)
widac nie masz pojecia co robisz ...
LeGO - bars

to twój kawałek kodu :
instance Bar_1(GothicBar)
{    x = 100;    y = 20;
};

ale ty robisz tylko instancje tego prototypu który jest już v skryptach LeGo
prototype GothicBar(Bar) {
    x = Print_Screen[PS_X] / 2;
    y = Print_Screen[PS_Y] - 20;
    barTop = 3;
    barLeft = 7;
    width = 180;
    height = 20;
    backTex = "Bar_Back.tga";
    barTex = "Bar_Misc.tga";
    value = 100;
    valueMax = 100;
};

twoja instancja zawiera tylko dane które się zmieniają , reszta jest ustawiona jak v prototype (odziedziczona).

instance Bar_1(GothicBar)
{   x = 100;
    y = 20;
    backTex = "nazwa tekstury podkladu.tga";
    barTex = "nazwa tekstury paska.tga";
};

FF_applyonce : tak jest zaprogramowane

func void FF_ApplyOnce(var func function) {
    FF_ApplyOnceExt(function, 0, -1);
};

by go zrozumiec potrzebujesz zrozumiec to
func void FF_ApplyOnceExt(var func function, var int delay, var int cycles) {
    if(FF_Active(function)) {
        return;
    };
    FF_ApplyExt(function, delay, cycles);
};
i tez mniej więcej cale framefunctions.d ....

co dla ciebie jest ważne to - ze jak v którymkolwiek skrypcie dasz to FF_applyonce(funkcja) a wywołasz to więcej razy, to tak naprawdę tylko raz jest twoja funkcja aplikowana pomocą FF_Apply. Funkcja  bedze odnawiana co klatkę enginu :)  v nieskoczno .

Jak bede mial ochote to otestuje i moze jescze ci pomoge , originalny skript napewno dziala
 


diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt

diegomez
Labirynt

Nowy pasek
#11 2013-01-06, 17:32(Ostatnia zmiana: 2013-01-06, 17:39)
Wytłumacz mi bardziej jak zrobić by ten pasek się na bieżąco aktualizował.

póki co wykorzystałem kilka linijek kodu, które mi pokazałeś niżej by gothic nie wywalał błędu na FF_ApplyOnce
To tego zauważyłem, że nie ważne co wpiszę w instance Bar_1 to i tak wszystko jest kopiowane z prototype. Więc prototype też lekko zmieniałem.

Obecnie mój skrypt wygląda tak. Być może robię to śmiesznie dla tych zaawansowanych, no ale cóż... jeszcze wielu rzeczy z tego nierozumiem.

instance Bar_1(GothicBar)
{     x = 100;    
y = 20;
backTex = "Bar_Back.tga";
    barTex = "Bar_EXP.tga";

};

func void FF_ApplyOnceExt(var func function, var int delay, var int cycles) {
    if(FF_Active(function)) {
        return;
    };
    FF_ApplyExt(function, delay, cycles);
};

func void FF_ApplyOnce(var func function) {
    FF_ApplyOnceExt(function, 0, -1);
};

func void Loop_1()
{    
  var int MyBar;  
  if(!Hlp_IsValidHandle(MyBar))
   {
        MyBar = Bar_Create(Bar_1);    
   };  
   
  Bar_SetMax(MyBar, hero.exp_next);    
  Bar_SetValue(MyBar, hero.exp);
};


func void Example_10()
{  
var int bar; bar = Bar_Create(GothicBar@);
Bar_SetPercent(bar, 50);
  FF_ApplyOnce(Loop_1);
};


O ile pasek już widać to i tak nie chce mi lecieć razem z doświadczeniem. Nie wiem czy to wina porytego Example, ale jak usunę z nich dwie liniki nad FF_ApplyOnce to pasek jest bez koloru i nie działa. Podejrzewam, że to w tym jest problem, ale nie wiem co z nim zrobić. Nie wiem jak naprawić tę funkcję pokazywania exp.



widac nie masz pojecia co robisz ...

Niestety mam bardzo małe doświadczenie w tych rzeczach, więc w zasadzie to wszystko to dla mnie eksperymenty.
 

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
:facepalm:  te funkcje są już utworzone:
func void FF_ApplyOnceExt(var func function, var int delay, var int cycles) {
    if(FF_Active(function)) {
        return;
    };
    FF_ApplyExt(function, delay, cycles);
};

func void FF_ApplyOnce(var func function) {
    FF_ApplyOnceExt(function, 0, -1);
};
Spróbuj go tak inicjować klej to do INIT_GLOBAL
if(!FF_Active (Loop_1)){
FF_Apply (Loop_1);
};
 

diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt

diegomez
Labirynt

Nowy pasek
#13 2013-01-06, 17:58(Ostatnia zmiana: 2013-01-06, 18:10)
:facepalm:  te funkcje są już utworzone:

Wiem, ale co miałem zrobić jak i tak FF_ApplyOnce nie działał ? Skoro są i nie przeszkadzają to niech są. Zwłaszcza, że działa FF_ApplyOnce.

Edit: A niech mnie kule biją. To działa :D
Dzięki za pomoc Wam wszystkim.  :ok:  



Tematu możecie jeszcze nie zamykać, bo pewnie jeszcze o inne paski spytam niedługo :D
 

diegomez

diegomez

Labirynt
posty452
Propsy63
  • Labirynt
Dobra, mówiłem że jeszcze o coś zapytam to pytam.
Wiecie może gdzie można edytowa paski zapisane w silniku gothica ?
Chodzi mi tu między innymi o mane, życie i ?tlen.
Jak zrobi by każdy był widoczny, zmieniane ich położenia i takie tam. Wiecie może ?
 

Mark56

Mark56

Moderator
som veľký magič
posty1632
Propsy1846
ProfesjaAnimator
  • Moderator
  • som veľký magič

Mark56
Moderator

Nowy pasek
#15 2013-01-07, 13:30(Ostatnia zmiana: 2013-01-07, 13:52)
ikarus , skript lehony na ciagle vydoczy pasek many
co do paskov to sa v ikarusie , intern/engineclassess g2/oCGame.d
class oCGame {
.....
    var int hpBar;                  //oCViewStatusBar*
    var int swimBar;                //oCViewStatusBar*
    var int manaBar;                //oCViewStatusBar*
    var int focusBar;               //oCViewStatusBar*



......
}
jak dobrze pamiętam to v zcMenu.d jest klassa oCViewStatusBar . masz tam zmienne ktore ich dotycza....
Ne wiem na pewno ale tak poprostu ich nie mozna zmieniać , chyba mszysz zrobić nova instancje i ja połączyć ze hp/swim/mana/focusbar...
 


EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Taki skrypt o jaki pytasz jest już na wogu, w temacie o ikarusie.
 


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