Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Ergebnis 1 bis 9 von 9
  1. Beiträge anzeigen #1 Zitieren
    Abenteurer Avatar von Maximus93
    Registriert seit
    Feb 2016
    Ort
    Braunschweig
    Beiträge
    68
     
    Maximus93 ist offline

    Größe der HP-Bar ändern

    Hey,

    ich habe hier ein Skript von Lehona gefunden, mit dem man die Textur der HP-Bar ändern kann.
    Aus dem Thread: https://forum.worldofplayers.de/foru...en+austauschen

    Code:
    var oCViewStatusBar bar; bar = _^(MEM_Game.hpBar);
    var int h; h = wrap(zCView@, bar.value_bar);
    View_SetTexture(h, "neueTextur.tga");
    bar.texValue = "neueTextur.tga");
    release(h);
    Ich frage mich, ob man es in der Art auch hinbekommt die Größe der HP-Bar zu ändern.
    Habe einiges ausprobiert, aber bekomme es leider nicht hin..
    Kann mir da vllt wer weiterhelfen?

  2. Beiträge anzeigen #2 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Code:
    var oCViewStatusBar bar; bar = _^(MEM_Game.hpBar);
    var zCView v; v = _^(bar.value_bar);
    var int X; X = v.vsizex;
    var int Y; Y = v.vsizey;
    ViewPtr_Resize(bar.value_bar, X*2, Y*2);
    
    v = _^(bar.range_bar);
    X = v.vsizex;
    Y = v.vsizey;
    ViewPtr_Resize(bar.range_bar, X*2, Y*2);
    
    v = _^(MEM_Game.hpBar);
    X = v.vsizex;
    Y = v.vsizey;
    ViewPtr_Resize(MEM_Game.hpBar, X*2, Y*2);
    So würde ich es versuchen. Es kann sein, dass du den letzten Block weglassen musst, aber so sollte die Bar dann doppelt so lang/hoch sein.
    Geändert von Lehona (13.11.2019 um 01:53 Uhr)

  3. Beiträge anzeigen #3 Zitieren
    Abenteurer Avatar von Maximus93
    Registriert seit
    Feb 2016
    Ort
    Braunschweig
    Beiträge
    68
     
    Maximus93 ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Code:
    var oCViewStatusBar bar; bar = _^(MEM_Game.hpBar);
    var zCView v; v = _^(bar.value_bar);
    var int X; X = v.vsizex;
    var int Y; Y = v.vsizey;
    ViewPtr_Resize(bar.value_bar, X*2, Y*2);
    
    v = _^(bar.range_bar);
    X = v.vsizex;
    Y = v.vsizey;
    ViewPtr_Resize(bar.range_bar, X*2, Y*2);
    
    v = _^(MEM_Game.hpBar);
    X = v.vsizex;
    Y = v.vsizey;
    ViewPtr_Resize(MEM_Game.hpBar, X*2, Y*2);
    So würde ich es versuchen. Es kann sein, dass du den letzten Block weglassen musst, aber so sollte die Bar dann doppelt so lang/hoch sein.

    Das funktioniert schon mal wunderbar, vielen dank!

    Wenn man die HP-Bar derart verändern kann, ist es ggf. auch möglich ein View_AddText darauf zu erstellen, welches mittig von der Bar die Lebenspunkte als Text darstellt?
    Ich probiere da selber viel rum und habe die Lebenspunkte bisher als Text mit einem Print_Ext über der Bar realisiert.. keine Ahnung, ob das die beste Lösung ist..



    //EDIT
    Ich habe jetzt einen Text mit den Lebenspunkten, aber es funktioniert noch nicht wirklich. Und zwar liegt der Text unter dem eigentlichen Lebensbalken und wird erst sichtbar, wenn man Leben verloren hat... (s.Bild)

    Code:
    ViewPtr_DeleteText(MEM_Game.hpBar);
    ViewPtr_AddText(MEM_Game.hpBar, 4096, 2000, IntToString(hero.attribute[ATR_HITPOINTS]), PF_Font, RGBA(255,255,255,255));


    [Bild: da4711-1573615943.jpg]
    Geändert von Maximus93 (13.11.2019 um 04:35 Uhr)

  4. Beiträge anzeigen #4 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.446
     
    Lehona ist offline
    Du hast zwei Möglichkeiten: Entweder erstellst du einen eigenen View (oder Print) mit dem Text, damit der über der Lebensleiste steht, oder du fügst den Text an die bar.value_bar anstatt MEM_Game.hpBar. Dann wird der auf den letzten Meter sehr schwierig zu lesen (weil er immer in der Mitte der übrig bleibenden Lebenspunkte ist).

  5. Beiträge anzeigen #5 Zitieren
    Abenteurer Avatar von Maximus93
    Registriert seit
    Feb 2016
    Ort
    Braunschweig
    Beiträge
    68
     
    Maximus93 ist offline
    Okay, habe jetzt glaub ich eine "saubere" Lösung, soweit ich das beurteilen kann
    In der Init erstelle ich ein neues View, welches genau über der HP-Bar liegt.
    Im Loop wird die Größe und Position der HP-Bar angepasst und die HP werden als Text genau mittig in dem neuen View eingefügt.
    @Lehona: Um die Größe der HP-Bar zu ändern, genügt lediglich folgende Zeile aus deinem Skript: ViewPtr_Resize(MEM_Game.hpBar, Bar_Size_x, Bar_Size_y);

    Ich finde nur komisch, dass ich im Loop immer wieder die Größe und Position der HP-Bar festlegen muss. Wenn ich die beiden Zeilen aber in Interface_Init schreibe, die in init_global aufgerufen wird, passiert nix.

    Und momentan wird der HP-Text über der HP-Bar angezeigt. Bekommt man es vllt hin, dass der neue View auf der HP-Bar im Vordergrund liegt?
    Bekomme das mit 'View_Top' leider nicht hin.. (vllt muss man hierfür eine neue eigene HP-Bar erstellen, weil man auf die originale nix im Vordergrund hin bekommt?!)

    Code:
    const int Bar_Size_x = 1079;
    const int Bar_Size_y = 200;
    const int HP_Bar_xPos = 100; //von links
    const int HP_Bar_yPos = 300; //von unten
    var int HP_Text;
    
    func void Interface_Init(){    
        HP_Text = View_New();
        View_Resize(HP_Text, Bar_Size_x, Bar_Size_y);
        View_MoveTo(HP_Text, HP_Bar_xPos, PS_VMax - HP_Bar_yPos - Bar_Size_y);
        View_Open(HP_Text);
    };
    
    func void Interface_Loop(){    
        //HP-Bar
        ViewPtr_Resize(MEM_Game.hpBar, Bar_Size_x, Bar_Size_y);    
        ViewPtr_MoveTo(MEM_Game.hpBar, HP_Bar_xPos, PS_VMax - HP_Bar_yPos);
            
        var int HP_Player_Before;
        if(hero.attribute[ATR_HITPOINTS] != HP_Player_Before)
        {
            //HP-Player
            var string HP_Player;
            HP_Player = ConcatStrings(IntToString(hero.attribute[ATR_HITPOINTS]), "/");
            HP_Player = ConcatStrings(HP_Player,IntToString(hero.attribute[ATR_HITPOINTS_MAX]));        
            
            //HP-Text
            var int HP_Text_Length; HP_Text_Length = Print_ToVirtual(Print_GetStringWidth(HP_Player, PF_Font), PS_X );
            var int HP_Text_Height; HP_Text_Height = Print_ToVirtual(Print_GetFontHeight(PF_Font), PS_Y );
    
            var int HP_Text_xPos; HP_Text_xPos = (PS_VMAX / 2) - (Print_ToVirtual(HP_Text_Length, Bar_Size_x) / 2);
            var int HP_Text_yPos; HP_Text_yPos = (PS_VMAX / 2) - (Print_ToVirtual(HP_Text_Height, Bar_Size_y) / 2);
    
            View_DeleteText(HP_Text);
            View_AddText(HP_Text, HP_Text_xPos, HP_Text_yPos, HP_Player, PF_Font);    
            
            //HP-Player before
            HP_Player_Before = hero.attribute[ATR_HITPOINTS];
        };
    };
    Geändert von Maximus93 (14.11.2019 um 00:14 Uhr)

  6. Beiträge anzeigen #6 Zitieren
    Local Hero
    Registriert seit
    Feb 2013
    Beiträge
    236
     
    pawbuj ist offline
    how u run that code, by FrameFuncs?

  7. Beiträge anzeigen #7 Zitieren
    Abenteurer Avatar von Maximus93
    Registriert seit
    Feb 2016
    Ort
    Braunschweig
    Beiträge
    68
     
    Maximus93 ist offline
    In init_global I run:
    • Interface_Init();
    • FF_ApplyOnceExt(Interface_Loop, 50, -1);


    So yes, I run the loop by FrameFunc.

  8. Beiträge anzeigen #8 Zitieren
    Local Hero
    Registriert seit
    Feb 2013
    Beiträge
    236
     
    pawbuj ist offline
    Zitat Zitat von Maximus93 Beitrag anzeigen
    In init_global I run:
    • Interface_Init();
    • FF_ApplyOnceExt(Interface_Loop, 50, -1);


    So yes, I run the loop by FrameFunc.

    I just run the code and the hp text is under the HP Bar not inside the bar as on your screenshot.

    Is that effect u want?

    Anyway it would be nice to add same effect for focused NPCs as well!

  9. Beiträge anzeigen #9 Zitieren
    Abenteurer Avatar von Maximus93
    Registriert seit
    Feb 2016
    Ort
    Braunschweig
    Beiträge
    68
     
    Maximus93 ist offline
    Zitat Zitat von pawbuj Beitrag anzeigen
    I just run the code and the hp text is under the HP Bar not inside the bar as on your screenshot.

    Is that effect u want?

    Anyway it would be nice to add same effect for focused NPCs as well!

    Eehm wait..

    The screenshot belongs only to the following small code. With that code the text is hidden when you have full life, because it lays in the background of the HP value bar. Its not good at all in my opinion.
    Code:
    ViewPtr_DeleteText(MEM_Game.hpBar);
    ViewPtr_AddText(MEM_Game.hpBar, 4096, 2000, IntToString(hero.attribute[ATR_HITPOINTS]), PF_Font, RGBA(255,255,255,255));


    Thats why I made my longer second code. There I create a whole new view, which is above the bar, because I see no possibilty to display the view in front of the HP-Bar. It appears in the background always..
    Maybe someone knows how to get this working. Maybe I have to create a whole new HP-Bar but i dont know actually.

    I want to add the effect for player HP, focused NPC HP and Mana!
    Geändert von Maximus93 (13.11.2019 um 20:01 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide