Modyfikacja okna statystyk 3289 7

O temacie

Autor bgb

Zaczęty 23.04.2014 roku

Wyświetleń 3289

Odpowiedzi 7

bgb

bgb

Użytkownicy
posty848
Propsy593
Profesjabrak
  • Użytkownicy
Witam. Czy w G2NK możliwa jest modyfikacja okna statystyk bohatera by wyświetlana była dodatkowa obrona: np. przed ostrzami i przed obuchami osobno zamiast jednej obrony przed bronią? Z tego co wyczytałem możliwość ingerencji w to menu jest baaardzo ograniczone...

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Nie konwencjonalnymi sposobami. Informacje między skryptami rozgrywki (paczka content) a skryptami menu (paczka system) są wymieniane jedynie przez silnik. Nie ma bezpośrednich odniesień między nimi, są oddzielnie parsowane. Jedyny sposób na przekazanie informacji których nie przekazuje silnik, to bezpośrednio ingerując w pamięć - na przykład za pomocą Ikarusa. Wymaga to jednak znajomości podstaw programowania i działania silnika (ewentualnie kogoś kto napisze odpowiednie funkcje za ciebie).

bgb

bgb

Użytkownicy
posty848
Propsy593
Profesjabrak
  • Użytkownicy
Tak, to zadanie zapewne mnie przerasta... Tłumaczę obecnie moda, którego autor wprowadził właśnie podział obrony w pancerzach na blunt i edge. Wiem, że normalnie też jest ten podział tylko nie jest wyświetlany na zbrojach. Tutaj natomiast jest on widoczny także w grze na itemach no i.. docelowo miał być również w oknie statystyk. Niestety tam wyświetlają się tylko tradycyjne 4 wartości... Piąta ma na sztywno wpisane "??". Trochę mnie to raziło więc szukałem jakiegoś sposobu by to poprawić. Niestety wygląda na to, że tak już zostanie.. No chyba, że jakiś spec chciałby się tym pobawić, wtedy zapraszam do współpracy:P

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Aargh, nie doczytałem że chodzi o już istniejące parametry obrony, z jakiegoś powodu wydawało mi się że chodzi ci o całkiem nowe.

To akurat chyba da się zrobić dość łatwo, zerknę w te skrypty jak będę miał możliwość.

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko
Kiedyś na wogu znalazłem to:
    func void Update_Menu_Item(var string name, var string val) {
        var int itPtr;
        itPtr = MEM_GetMenuItemByString(name);
       
        if (!itPtr) {
            MEM_Error(ConcatStrings("Update_Menu_Item: Invalid Menu Item: ", name));
            return;
        };
       
        //void __thiscall zCMenuItem::SetText(val = val, line = 0, drawNow = true)
        const int SetText = 5114800;
       
        CALL_IntParam(true);
        CALL_IntParam(0);
        CALL_zStringPtrParam(val);
        CALL__thiscall(itPtr, SetText);
    };
   
    //wywołaj po LeGo_Init w INIT_GLOBALS
    func void Install_Character_Menu_Hook() {
        //at oCMenu_Status::SetLearnPoints
        const int done = false;
        if(!done) {
            HookEngineF(4707920, 6, Update_Character_Menu);
            done = true;
        };
    };

// Fill in this function according to your needs:
func void Update_Character_Menu() {
   //po zdefiniowaniu tekstu wpisujesz: Update_Menu_Item([nazwa opcji w menu w cudzysłowiu], [zmienna twojego tekstu])
/* przykład
    var int gold;
    gold = Npc_HasItems(hero, ItMi_Gold);
    var string s;
    s = ConcatStrings(IntToString(gold), " sztuk złota");
    Update_Menu_Item("MENU_ITEM_STATUS_HEADING", s);
sprawi, że na górze okna statystyk pojawi się liczba posiadanych sztuk złota */
   
};
To na pewno działa, sam używam.
 
Lieb Vaterland magst ruhig sein

bgb

bgb

Użytkownicy
posty848
Propsy593
Profesjabrak
  • Użytkownicy

bgb

Modyfikacja okna statystyk
#5 2014-11-29, 15:40(Ostatnia zmiana: 2014-12-03, 09:38)
Odświeżam temat. Kombinuję jak zrobić wyświetlanie wartości tej piątej obrony bez używania Lego i Ikarusa. Skrypter ze mnie żaden, ale po przestudiowaniu kilku tematów na forum, udało mi się podpiąć tą obronę pod umiejętność Regeneracji.
Działa to tak, że do każdej zbroi lub pasa trzeba dopisać funkcję on equip i unequip zmieniającą wartość dodanej zmiennej dla umiejętności Regeneracji (jeśli ktoś zna prostszy sposób byłoby miło, gdyby się podzielił:p )
func void Equip_ITAR_OREARMOR_EDGE()
{
    if(Npc_IsPlayer(self))
    {   
            ATR_REGENERATE = ATR_REGENERATE + 110;
            Npc_SetTalentSkill(self,NPC_TALENT_REGENERATE,ATR_REGENERATE);
    };
};

func void UnEquip_ITAR_OREARMOR_EDGE()
{
    if(Npc_IsPlayer(self))
    {   
        ATR_REGENERATE = ATR_REGENERATE - 110;
        Npc_SetTalentSkill(self,NPC_TALENT_REGENERATE,ATR_REGENERATE);
    };
};
Spróbowałem z jednym itemkiem i ucieszyłem się bo zadziałało. Problem w tym, że po wczytaniu save wyświetlana wartość na karcie statystyk resetuje się do 1 i trzeba znów ściągnąć i założyć item by wyświetlała się poprawnie. Jak to obejść?

Post połączony: 2014-11-29, 17:32
Hmm, wygląda na to że się udało ominąć ten problem. Dodałem:
Npc_SetTalentSkill(self,NPC_TALENT_REGENERATE,ATR_REGENERATE);do func void INIT_GLOBAL() w Startupie i przy wczytywaniu save obrona wyświetla się poprawnie! :joy:

Edit. Lekki update. Zamiast wpisywać ręcznie przy każdej zbroi jej wartość kodem:
ATR_REGENERATE = ATR_REGENERATE + X;
Npc_SetTalentSkill(self,NPC_TALENT_REGENERATE,ATR_REGENERATE);
(gdzie X to obrona przed ostrzami, dodatkowo trzeba jeszcze stworzyć analogiczną, tylko odejmującą funkcję)
Lepiej po prostu dać:
ATR_REGENERATE = self.protection[PROT_EDGE];
Npc_SetTalentSkill(self,NPC_TALENT_REGENERATE,ATR_REGENERATE);
Tym sposobem minimalizujemy ryzyko błędnego wyświetlania rzeczonej obrony, gdyż nie musimy już jej sami liczyć. No i oszczędzamy sobie zachodu oraz problemów przy dodatkowej obronie działającej tylko w określonych zestawach itemów (np. pasy z bonusami do zbroi, pierścienie i amulet wojownika z Jarkendaru). Minus jest taki, że wciąż trzeba dopisać do każdego itemku funkcje onequip i unequip, plus taki, że do większości itemów wystarczy jedna funkcja, którą potem tylko wywołujemy. Natomiast przy itemach, które standardowo miały już swoje funkcje onequip i unequip, wystarczy dopisać w każdej z nich ręcznie na końcu wyżej wymieniony kod i gitara. Zastanawiam się jeszcze czy da się to zrobić bardziej elegancko, ale poza tick tockiem nie widzę na razie alternatywy.

Sawik

Sawik

Moderator działu
Rebel
posty4772
Propsy3197
ProfesjaNierób
  • Moderator działu
  • Rebel
A nie dodaje Ci życia? 
 
Ż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

bgb

bgb

Użytkownicy
posty848
Propsy593
Profesjabrak
  • Użytkownicy

bgb

Modyfikacja okna statystyk
#7 2014-12-03, 00:23(Ostatnia zmiana: 2014-12-03, 00:49)
Nie, od regeneracji zycia jest Atr_regeneratehp bodajze. Ja uzywam tylko npc_talent_regenerate, a to wlasciwe jest pusta umiejetnosc, tzn. gotowa do zagospodarowania. Atr_regenerate natomiast to tylko moja podpięta zmienna, w sumie powinienem ją nazwać Atr_edgedefense by było czytelniej.


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