G2NK - Nowa linijka w menu statystyk 5120 19

O temacie

Autor Lobos

Zaczęty 17.04.2017 roku

Wyświetleń 5120

Odpowiedzi 19

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Siemka
Da rade dorobić bez ikarusa dodatkową ochronę tu gdzie zaznaczyłem na czerwono ?
Dodałem skrypt podobny do pozostałych czterech w Menu_status.d ale nawet się nic niepojawiło.
 

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
Dopisałeś to do tego:
instance MENU_STATUS(C_MENU_DEF)
{
items[0] = "MENU_ITEM_STATUS_HEADING";
items[1] = "MENU_ITEM_PLAYERGUILD";
items[2] = "MENU_ITEM_LEVEL_TITLE";
items[3] = "MENU_ITEM_LEVEL";
items[4] = "MENU_ITEM_TALENT_7_TITLE";
items[5] = "MENU_ITEM_TALENT_7_CIRCLE";
items[6] = "MENU_ITEM_TALENT_7_SKILL";
items[7] = "MENU_ITEM_EXP_TITLE";
items[8] = "MENU_ITEM_EXP";
items[9] = "MENU_ITEM_LEVEL_NEXT_TITLE";
items[10] = "MENU_ITEM_LEVEL_NEXT";
items[11] = "MENU_ITEM_LEARN_TITLE";
items[12] = "MENU_ITEM_LEARN";
items[13] = "MENU_ITEM_ATTRIBUTE_HEADING";
items[14] = "MENU_ITEM_ATTRIBUTE_1_TITLE";
items[15] = "MENU_ITEM_ATTRIBUTE_2_TITLE";
items[16] = "MENU_ITEM_ATTRIBUTE_3_TITLE";
items[17] = "MENU_ITEM_ATTRIBUTE_4_TITLE";
items[18] = "MENU_ITEM_ATTRIBUTE_1";
items[19] = "MENU_ITEM_ATTRIBUTE_2";
items[20] = "MENU_ITEM_ATTRIBUTE_3";
items[21] = "MENU_ITEM_ATTRIBUTE_4";
items[22] = "MENU_ITEM_ARMOR_HEADING";
items[23] = "MENU_ITEM_ARMOR_1_TITLE";
items[24] = "MENU_ITEM_ARMOR_2_TITLE";
items[25] = "MENU_ITEM_ARMOR_3_TITLE";
items[26] = "MENU_ITEM_ARMOR_4_TITLE";
items[27] = "MENU_ITEM_ARMOR_11_TITLE";
items[28] = "MENU_ITEM_ARMOR_1";
items[29] = "MENU_ITEM_ARMOR_2";
items[30] = "MENU_ITEM_ARMOR_3";
items[31] = "MENU_ITEM_ARMOR_4";
items[32] = "MENU_ITEM_ARMOR_11";
items[33] = "MENU_ITEM_TALENTS_HEADING";
items[34] = "MENU_ITEM_TALENT_1_TITLE";
items[35] = "MENU_ITEM_TALENT_1_SKILL";
items[36] = "MENU_ITEM_TALENT_1";
items[37] = "MENU_ITEM_TALENT_2_TITLE";
items[38] = "MENU_ITEM_TALENT_2_SKILL";
items[39] = "MENU_ITEM_TALENT_2";
items[40] = "MENU_ITEM_TALENT_3_TITLE";
items[41] = "MENU_ITEM_TALENT_3_SKILL";
items[42] = "MENU_ITEM_TALENT_3";
items[43] = "MENU_ITEM_TALENT_4_TITLE";
items[44] = "MENU_ITEM_TALENT_4_SKILL";
items[45] = "MENU_ITEM_TALENT_4";
items[46] = "MENU_ITEM_TALENT_8_TITLE";
items[47] = "MENU_ITEM_TALENT_8_SKILL";
items[48] = "MENU_ITEM_TALENT_9_TITLE";
items[49] = "MENU_ITEM_TALENT_9_SKILL";
items[50] = "MENU_ITEM_TALENT_10_TITLE";
items[51] = "MENU_ITEM_TALENT_10_SKILL";
items[52] = "MENU_ITEM_TALENT_5_TITLE";
items[53] = "MENU_ITEM_TALENT_5_SKILL";
items[54] = "MENU_ITEM_TALENT_12_TITLE";
items[55] = "MENU_ITEM_TALENT_12_SKILL";
items[56] = "MENU_ITEM_TALENT_14_TITLE";
items[57] = "MENU_ITEM_TALENT_14_SKILL";
items[58] = "MENU_ITEM_TALENT_15_TITLE";
items[59] = "MENU_ITEM_TALENT_15_SKILL";
items[60] = "MENU_ITEM_TALENT_13_TITLE";
items[61] = "MENU_ITEM_TALENT_13_SKILL";
items[62] = "MENU_ITEM_TALENT_16_TITLE";
items[63] = "MENU_ITEM_TALENT_16_SKILL";
items[64] = "MENU_ITEM_TALENT_17_TITLE";
items[65] = "MENU_ITEM_TALENT_17_SKILL";
items[66] = "MENU_ITEM_TALENT_19_TITLE";
items[67] = "MENU_ITEM_TALENT_19_SKILL";
items[68] = "MENU_ITEM_TALENT_20_TITLE";
items[69] = "MENU_ITEM_TALENT_20_SKILL";
items[70] = "MENU_ITEM_TALENT_21_TITLE";
items[71] = "MENU_ITEM_TALENT_21_SKILL";
items[72] = "MENU_ITEM_TALENT_11_TITLE";
items[73] = "MENU_ITEM_TALENT_11_SKILL";
dimx = 4192;
dimy = 5192;
flags = flags | MENU_OVERTOP | MENU_NOANI;
backpic = STAT_BACK_PIC;
};
Ja mam tak - ty możesz mieć inaczej. Ważne, że musisz dopisać twój obiekt do tej instancji.
 

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

FOgidel

FOgidel

Użytkownicy
posty60
Propsy100
ProfesjaSkrypter
  • Użytkownicy
O ile już masz tę obronę i ona działa, to możesz zrobić taki myk, że dodasz umiejętność (jeśli Ci jakaś została, bo widzę, że użyłeś) i będziesz pilnować, żeby wartość tej umiejętności równała się wartości obrony (no i musisz zrobić te nazwy od 0 przez 1,2,3,itd. do np. 300). A jak nie zostały Ci umiejętności, to możesz jeszcze imię wykorzystać.
 

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Dobra napis się pojawił. Zapomniałe dodać jednej linijki w tej funkcji ale teraz mam większy problem

instance MENU_ITEM_ARMOR_5_TITLE(C_MENU_ITEM_DEF)
{
posx = STAT_A_X1;
posy = STAT_ARM_Y + (STAT_DY * 4);
text[0] = "Obuchy";
fontname = STAT_FONT_DEFAULT;
flags = flags & ~IT_SELECTABLE;
};

instance MENU_ITEM_ARMOR_5(C_MENU_ITEM_DEF)
{
posx = STAT_A_X3;
posy = STAT_ARM_Y + (STAT_DY * 4);
fontname = STAT_FONT_DEFAULT;
flags = flags & ~IT_SELECTABLE;
};

Jak teraz to przypisać do obrażeń otrzymywanych przez ten typ broni ?
Szukałem w skryptach jaka funkcja odpowiada za to że ochrona w statach jest wyświetlana i naliczana przy napisie "broń" czy "pociski" ale niczego nie znalazłem. Da się to zrobić na standardowych skryptach ?
 

TheKetrab

TheKetrab

Użytkownicy
posty334
Propsy217
ProfesjaProducent
  • Użytkownicy
W Constants.d znalazłem:

//
// PROTECTION TYPES v2.0
//
CONST INT PROT_BARRIER = DAM_INDEX_BARRIER ;
CONST INT PROT_BLUNT = DAM_INDEX_BLUNT ;
CONST INT PROT_EDGE = DAM_INDEX_EDGE ;
CONST INT PROT_FIRE = DAM_INDEX_FIRE ;
CONST INT PROT_FLY = DAM_INDEX_FLY ;
CONST INT PROT_MAGIC = DAM_INDEX_MAGIC ;
CONST INT PROT_POINT = DAM_INDEX_POINT ;
CONST INT PROT_FALL = DAM_INDEX_FALL ;
CONST INT PROT_INDEX_MAX = DAM_INDEX_MAX ;

Wydaje się, że PROT_BARRIER to protection nie używany w G2NK (tak samo damage barrier). Możesz stworzyć idento wykorzystując właśnie BARRIER zmieniając na co tam chcesz; w twoim przypadku jak się domyślam obuchy.
 

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Taki typ ataku i obrony jest już gotowy w skryptach gothica, sęk w tym by to przypisać do statystyk
 

Splash

Splash

Moderator
posty4207
Propsy3403
ProfesjaNierób
  • Moderator
Najlepiej będzie wykorzystać BLUNT. Są to pozostałości po pierwszym Gothicu potrzebne do walki z kamiennym golemem. W Gothic 2 obrażenia obuchowe nie zostały wykorzystane w żadnej broni. Każda broń zadaje obrażenia od ostrzy, a silnik odświeża statystyki ochrony przed bronią sprawdzając jedynie PROT_EDGE. Dlatego użycie pakietów skryptowych jest konieczne. Inaczej w oknie statystyk cały czas będzie wyświetlana liczba 0.
https://forum.worldofplayers.de/forum/threads/1126551-Skriptpaket-LeGo-2/page11?p=20906914&viewfull=1#post20906914
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Draks

Draks

Użytkownicy
Gothic 2 Nowy porządek
posty1714
Propsy766
ProfesjaGrafik 3D
  • Użytkownicy
  • Gothic 2 Nowy porządek
Z tego co wiem to w Lhiverze dodali bez ikarusa :p
 

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko
@Splash a to nie jest przypadkiem tak, że zostały wykorzystane, tylko wszystkie pancerze i potwory mają przed nimi taką samą ochronę co przed EDGE, ergo nie da się tego wykryć?
Odnośnie samego problemu, zrobiłem to samo, do wyświetlania tego w menu statystyk wykorzystałem funkcję znalezioną na wogu, faktycznie to się wyświetla, ale menu statystyk pokazuje złe wartości tej obrony. Nie znalazłem na razie sposobu by to poprawić.
 
Lieb Vaterland magst ruhig sein

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
@Splash
Zostały wykorzystane, w skryptach broń ma albo blunt albo edge ale same pancerze zawsze mają tyle samo obrony na blunt co i na egde dlatego nie widać różnicy.
@Draks
Faktycznie, dało rade zdekompilować te skrypty ale nadal niewiem gdzie szukać tych funkcji. W menu_status.d jest tylko nazwa która ma się wyświetlać w statystykach w grze.
@Zucklov Udało ci się to na zwykłych skryptach ? I na czym polega ten błąd ?

Wie ktoś z was jaki skrypt odpowiada za ilość wyświetlanych punktów ochrony w menu statystyk ?
Mam jeden pomysł
 

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko
Nie, funkcja wykorzystująca Ikarusa i LeGo. Napisałem, na czym polega błąd; w oknie statystyk wyświetlają się nieprawdziwe wartości. Nie zauważyłem w tych błędach nawet jakiegoś algorytmu, który pozwoliłby mi napisać funkcję matematyczną, która mogłaby to naprawić.
 
Lieb Vaterland magst ruhig sein

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Dobra, ogarnę to na tych 4 podstawowych pozycjach, akurat ochrona przed ogniem będzie mi do niczego nie potrzebna, wykorzystam ją.
Można zamknąć.
 

bgb

bgb

Użytkownicy
posty848
Propsy592
Profesjabrak
  • Użytkownicy
FOgidel Ci dobrze napisał. Musisz wykorzystać jedną z obecnych w skryptach, ale nieużywanych w grze umiejętności, która pozwala na "połączenie" pomiędzy skryptami z gothic.dat i menu.dat. Dokładnie tak właśnie dodałem tę dodatkową obronę, gdy jeszcze zajmowałem się spolszczaniem L'hivera. Było to w wersji bodajże 0.91, zanim jeszcze oryginalny rosyjski mod miał ten "feature". Cały myk polega na tym, by przypisywać wartość obrony do wartości tej niewykorzystanej umiejętności i oczywiście trzeba też zadbać by ta wartość była uaktualniana np. poprzez wsadzenie funkcji do onequip i unequip pancerzy, pasów, pierścieni (wszystkiego co modyfikuje obronę).

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Ookej.. to już wiem po co były te funkcje on_equip. No dobra, dziękuje zaraz sie z tym pobawie i sprawdze

Post połączony: 2017-04-20, 19:54
Cholera udało się.. :) Niesądziłem że dam rade. Jednego tylko nie rozumiem. W L'hiverze ten bonus który uaktualnia obronę wynosi "5" wiec przy zakładaniu pancerza wszystkie wartości podnoszą się o 5. Niewiem dlaczego tak jest zrobione, ja dałem na 0 i śmiga wszystko aż miło.
 

bgb

bgb

Użytkownicy
posty848
Propsy592
Profesjabrak
  • Użytkownicy
Szczerze mówiąc to nie wiem co masz na myśli z tym bonusem :P Najlepiej wklej fragment skryptu z lhivera, o którym mowisz.

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
spoko :)

Funkcja "prostująca"
func void Equip_ITAR_MIL_L()
{
if(Npc_IsPlayer(self))
{
MILArmor_Equipped = TRUE;
if(MIL01_Equipped == TRUE)
{
self.protection[PROT_EDGE] += BA_Bonus01;
self.protection[PROT_BLUNT] += BA_Bonus01;
self.protection[PROT_POINT] += BA_Bonus01;
self.protection[PROT_MAGIC] += BA_Bonus01;
self.protection[PROT_FIRE] += BA_Bonus01;
};
ATR_EDGEDEFENSE = self.protection[PROT_EDGE];
Npc_SetTalentSkill(self,NPC_TALENT_EDGEDEFENSE,ATR_EDGEDEFENSE);
};
};

func void UnEquip_ITAR_MIL_L()
{
if(Npc_IsPlayer(self))
{
MILArmor_Equipped = FALSE;
if(MIL01_Equipped == TRUE)
{
self.protection[PROT_EDGE] -= BA_Bonus01;
self.protection[PROT_BLUNT] -= BA_Bonus01;
self.protection[PROT_POINT] -= BA_Bonus01;
self.protection[PROT_MAGIC] -= BA_Bonus01;
self.protection[PROT_FIRE] -= BA_Bonus01;
};
ATR_EDGEDEFENSE = self.protection[PROT_EDGE];
Npc_SetTalentSkill(self,NPC_TALENT_EDGEDEFENSE,ATR_EDGEDEFENSE);
};
};

A tu ten bonus o którym pisałem.
Jest zadeklarowany w IT_Addon_Belts.d
const int BA_Bonus01 = 5;
Tak jest w oryginalnym L'hiverze, ten bonus jest stosowany nie tylko do pasów ale też do niektórych pancerzy z L'hivera. Wydało mi się dziwne że ta wartość wynosi 5, zamiast 0.
 

Siemekk

Siemekk

Złote Wrota
Untersturmfuhrer
posty2143
Propsy1151
ProfesjaProgramista
  • Złote Wrota
  • Untersturmfuhrer
Odświeżanie Tick-Tockiem też mogłoby być. W dodatku skrypt miałby +- 10 linijek.
 

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

Zucklov

Zucklov

Quest Pack Team
Sztywniutko
posty1220
Propsy1241
ProfesjaSkrypter
  • Quest Pack Team
  • Sztywniutko
Ale Tick Tocka trzeba byłoby dodać do wszystkich zenów Spacerem. Imo lepsze są FrameFunctions z LeGo.
 
Lieb Vaterland magst ruhig sein

bgb

bgb

Użytkownicy
posty848
Propsy592
Profesjabrak
  • Użytkownicy
Spoiler
spoko :)

Funkcja "prostująca"
func void Equip_ITAR_MIL_L()
{
if(Npc_IsPlayer(self))
{
MILArmor_Equipped = TRUE;
if(MIL01_Equipped == TRUE)
{
self.protection[PROT_EDGE] += BA_Bonus01;
self.protection[PROT_BLUNT] += BA_Bonus01;
self.protection[PROT_POINT] += BA_Bonus01;
self.protection[PROT_MAGIC] += BA_Bonus01;
self.protection[PROT_FIRE] += BA_Bonus01;
};
ATR_EDGEDEFENSE = self.protection[PROT_EDGE];
Npc_SetTalentSkill(self,NPC_TALENT_EDGEDEFENSE,ATR_EDGEDEFENSE);
};
};

func void UnEquip_ITAR_MIL_L()
{
if(Npc_IsPlayer(self))
{
MILArmor_Equipped = FALSE;
if(MIL01_Equipped == TRUE)
{
self.protection[PROT_EDGE] -= BA_Bonus01;
self.protection[PROT_BLUNT] -= BA_Bonus01;
self.protection[PROT_POINT] -= BA_Bonus01;
self.protection[PROT_MAGIC] -= BA_Bonus01;
self.protection[PROT_FIRE] -= BA_Bonus01;
};
ATR_EDGEDEFENSE = self.protection[PROT_EDGE];
Npc_SetTalentSkill(self,NPC_TALENT_EDGEDEFENSE,ATR_EDGEDEFENSE);
};
};

A tu ten bonus o którym pisałem.
Jest zadeklarowany w IT_Addon_Belts.d
const int BA_Bonus01 = 5;
Tak jest w oryginalnym L'hiverze, ten bonus jest stosowany nie tylko do pasów ale też do niektórych pancerzy z L'hivera. Wydało mi się dziwne że ta wartość wynosi 5, zamiast 0.

To co wkleiłeś wyżej to oryginalna gothicowa funkcja, występująca przy pasach i pancerzach. Jak ustawisz w niej bonus na 0 to nie dostaniesz 5 dodatkowej obrony, gdy założysz np. pas strażnika + zbroja strażnika. Funkcja odświeżająca wartość obrony to jest tylko to:

func void edge_def_update()
{
if(Npc_IsPlayer(self))
{
ATR_EDGEDEFENSE = self.protection[PROT_EDGE];
Npc_SetTalentSkill(self,NPC_TALENT_EDGEDEFENSE,ATR_EDGEDEFENSE);
};
};

I to powinieneś wszędzie poustawiać w pancerzach/pasach/biżuterii:
on_equip = edge_def_update;
on_unequip = edge_def_update;

Po prostu do tych itemów, które już mają swoje funkcje on_equip oraz on_unequip dopisałem osobno te odświeżanie. Teraz jak o tym pomyślę to głupie, że przepisywałem całą funkcję od nowa bo też wystarczyłoby przecież tam powsadzać edge_def_update i by grało.

A i jeszcze coś. Nie zapomnij wsadzić tej funkcji odświeżającej także do init_global() w startupie bo inaczej po wczytaniu zapisu obrona nie będzie się wyświetlać. Chyba trzeba też było dodać coś takiego do instancji pc_hero żeby nie było problemów przy starcie nowej gry:
Npc_SetTalentSkill(self,NPC_TALENT_EDGEDEFENSE,0);
ATR_EDGEDEFENSE = 0;

Co do tick tocka, to tak jasne, że można go tutaj wykorzystać i sam to nawet rozważałem, ale w końcu wybrałem tę metodę (opierającą się na samych skryptach) bo chciałem uniknąć ingerencji w lhiverowe zeny przy spolszczaniu moda (musiałbym dodawać te tick tocki przy każdej kolejnej wersji spolszczenia Lhivera). Jednak jak ktoś robi swojego moda to jak najbardziej pomysł godny rozważenia. No i tak jak Zucklov wspomniał jest jeszcze FF, który byłby najwygodniejszy, no ale kolega chciał uniknąć Ikarusa.

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Dzięki bgb, już wszystko działa jak trzeba, testowałem obrażenia na różnych pancerzach, różną bronią, dodałem też odpowiedni kod do startup i do pc_hero.d
Dzięki za pomoc
 


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