Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Pokaż wątki - Toworish

Strony: [1] 2 3 4
1
Skrypty / Skrypty/Spacer waynet sprawa
« dnia: 2017-03-16, 19:33 »
Siemanko, jak wszyscy wiedzą ni chuja nie ogarniam ikarusa. Ale chciałem spytać o kilka rzeczy tych kolegów którzy go ogarniają.

1. czy da się wgl za pomocą pakietów skryptowych(ew nie koniecznie ikarusa)
zapisać coś do pliku w gothic?

2. Czy istnieje możliwość zwrócenia waynetu (jeśli 1==true) to do pliku ew np do zspy czy gdziekolwiek?

btw piszę waynet, być może nawet nie do końca dobrze rozumiem pojęcie waynet. Chciałbym dostać listę pozycji waypointów danego świata. Najlepiej gdyby się udało to nazwa+pozycja x,y,z.

2
Sprzęt, oprogramowanie / Raspberry Pi 3
« dnia: 2017-02-03, 04:31 »
https://botland.com.pl/moduly-i-zestawy-raspberry-pi-3/5576-raspberry-pi-3-model-b-wifi-bluetooth-1gb-ram-12ghz.html

Macie? Polecacie?  macie sposób na zainstalowanie na tym windowsa? i czy dobrze myślę robiąc wirtualny ram z karty sd to zwiększy mi ładnie ram, a nie tak jak z dysku że teoretycznie?

3
MDS i animacje / Prefixy animacji
« dnia: 2016-12-29, 19:41 »
Witam, chciałem się dowiedzieć co oznaczają te przedrostki w mds'ah jak:
T_blabla
S_blabla

ma to jakieś znaczenie?

mianowicie mój problem polega na tym że kiedyś z nudów zacząłem sobie przeskalowywać cały humans

Ostatnio znalazłem te pliki i postanowiłem dokończyć dzieła, gdy wszystko zaczęło zbliżać sie ku końcowi, podczas testów okazało się że chcąc nauczyć drugi humans walki bronią zacząłem od 1h gothic zczytuje że:
ani already defined: T_RUN_2_1H

wnioskuję że to wina tego że standardowy humans taką posiada?

@gothic1210 Jakoś zawsze zapominam że każdy temat może kiedyś kogoś na coś naprowadzić i powinien mieć intuicyjną nazwę.

4
Offtopic / VPS
« dnia: 2016-11-03, 21:01 »
Siema, nie mam pojęcia czy to jest dobry dział, chciałem was zapytać czy nie zna ktoś z was jakiegoś dobrego hostingu VPS poza minthost, bo widzę że minthost jest strasznie pobugowany i same z nim problemy. Polecacie coś, działaliście z jakimiś VPS'ami?

5
Skrypty / Czym jest Npc_CreateSpell
« dnia: 2016-09-13, 18:49 »
Siema wie ktokolwiek może czym jest  Npc_CreateSpell                (var instance n0, var int i1) szukałem jakiegoś przykładu w skryptach ale nie zostało to nigdzie użyte, użyłem tego ale nic się nie dzieje gdy tego użyję:/

6
Skrypty / Timer Pomysł Toworisha
« dnia: 2016-08-21, 17:12 »
Siema, sory za orty i interpunkcję ale to mój znak rozpoznawczy ;p

Timer? Tak timer wywoływanie czegoś co jakiś czas lub na jakiś czas, nie mam pojęcia czy coś takiego istnieje jako gotowe w LeGo czy też w Ikarusie, ale wpadłem na pomysł jak to zrobić za pomocą Frame Functions.


Czyli co? Czyli Lego i ikarus zainicjuj bo inaczej lipa, linka nie podam, tym razem jesteście zdani na poszukiwania :) w samouczkach w dziale skrypty znajdziecie wszystko co trezba.

No wiec tak przykład pierwszy item który zwiększa nam skille walki na minutę(Standardowo w moich poradnikach wszystko z grubsza wyjaśnine w komentarzu)
const int time = 0;//stała czasu do wywołania lub do zaprzestania.
const int stop = 0;//stała potrzebna po to aby pewn funkcja nie wywoływała się co sekundę a tylko raz, niżej wyjaśnię.



func void SkillUpp()//wiadomo, ale jak coś to jest to funkcja zwiększająca skille.
{
B_AddFightSkill (hero, NPC_TALENT_1H, Npc_GetTalentSkill (hero, NPC_TALENT_1H)+40);//GetTalent mogłem zrobić na zmiennych ale nie chciałem śmiecić.
B_AddFightSkill (hero, NPC_TALENT_2H, Npc_GetTalentSkill(hero, NPC_TALENT_2H)+40);//Ogólnie te cztery linijki dodają do 1h/2h/kuszy/łuku 40.
B_AddFightSkill (hero, NPC_TALENT_BOW, Npc_GetTalentSkill (hero, NPC_TALENT_BOW)+40);//Czyli jak masz 20 1h to dzięki temu masz 60 :D
B_AddFightSkill (hero, NPC_TALENT_CROSSBOW, Npc_GetTalentSkill (hero, NPC_TALENT_CROSSBOW)+40);
};

func void SkillBack()
{
B_AddFightSkill (hero, NPC_TALENT_1H, Npc_GetTalentSkill (hero, NPC_TALENT_1H)-41);//Tutaj odejmujemy dodaną wcześniej wartość.
B_AddFightSkill (hero, NPC_TALENT_2H, Npc_GetTalentSkill(hero, NPC_TALENT_2H)-41);// Nie potrafię pojąć dlaczego ale musiałem dać 41
B_AddFightSkill (hero, NPC_TALENT_BOW, Npc_GetTalentSkill (hero, NPC_TALENT_BOW)-41);//Bo inaczej odejmowało 39 a nie 40 <>
B_AddFightSkill (hero, NPC_TALENT_CROSSBOW, Npc_GetTalentSkill (hero, NPC_TALENT_CROSSBOW)-41);
};


func void MyTimer()//Funkcja timera
{
  time = time + 1;//stała czasu równa się stała czasu dodać 1 i tak co sekundę
  print(IntToString(time));// to tylko taki print, do niczego nie potrzebny, do testów ale zostawiam go tak w razie "W"
if(stop == 0)//Pamiętasz na górze pisałem o tym stopie, widzisz jesli tego nie dasz to co sekundę doda ci 40 do każdego skilla
{
SkillUpp();//wywołujemy funkcję w której dodajemy po 40 do talentów walki
}
if(time == 1)//tutaj też zweiązane z tym stopem musimy zmienić jego wartość w pierwszej sekundzie aby się właśnie więcej nie wywołało
{
stop = 1;//chyba wiesz o co chodzi?
};
if(time == 60)// tu zaś znaczy że jeśli upłynie 60 sekund
{
print("wywołaj");//kolejny print też tylko testowy
SkillBack();//wywołujemy funkcję odejmowania tego co dodaliśmy naszym umiejętnością walki
time = 0;// zerujemy zmienną czasu aby wszystko można było zrobić jeszcze raz od nowa
stop = 0;//tak jak wyżej.
};
};

func void MyTimerApply()//funkcja dzięki której wywołamy cały ten timer.
{
FF_ApplyOnceExt (MyTimer, 1000, 60);//FF_AppluOnceExt(funkcja którą chcesz wywołać, co ile ma się wywołać w tym przypadku co jedną sekundę, no i ile razy ma się wywołać zawsze daj tyle ile dajesz w if time
};


INSTANCE mieszek (C_Item)//To jest item po użyciu którego wywołujemy naszą funkcję. To tylko przykład robisz jak chcesz!!!
{
name = "Zwiększ swoje atrybuty na minutę";

mainflag = ITEM_KAT_FOOD;
flags = ITEM_MULTI;

visual = "ItMi_Pocket.3ds";
material = MAT_LEATHER;
scemeName = "MAPSEALED";
on_state[0] = ATT_UP_TIMER;

description = "1h/2h/łuk/kusza+40";

};
func void ATT_UP_TIMER()
{
MyTimerApply();// że po użyciu itemu wywołamy timer który zwiększy nam skille na 60 sekund
};

Oczywiście to tylko przykład a możecie robić co chcecie i jak chcecie tym sposobem.





PRZYKŁAD 2!!!
Czyli wywoływanie czegoś cały czas, np co godzinę -1 hp

const int time = 0;//stała czasu do wywołania lub do zaprzestania.

func void MyTimer()//Funkcja timera
{
  time = time + 1;//stała czasu równa się stała czasu dodać 1 i tak co sekundę
  print(IntToString(time));// to tylko taki print, do niczego nie potrzebny, do testów ale zostawiam go tak w razie "W"

if(time == 3600)// co godzinę czyli co 3600 sekund :D
{
print("wywołaj");//kolejny print też tylko testowy
hero.attribute[ATR_HITPOINTS] = hero.attribute[ATR_HITPOINTS]-1;// hp gracza równa się hp gracza minus 1
time = 0;// zerujemy zmienną czasu aby się zapętliło.
};
};

func void MyTimerApply()//funkcja którą musimy wywołać w startup.d w metodzie initGlobal w ten sposób: MyTimerApply();.
{
FF_ApplyOnceExt (MyTimer, 1000, -1);//ZAUWAŻ!!!! że teraz dałem -1 zamisat 60. A no bo -1 znaczy że funkcja jest wywoływana cały czas. dokładne info napisał Bogdan Zwei w poradniku Frame functions miast tick tocka
};

co do przykładu numer 2 nie mam pojęcia na ile to byłoby stabilne jeżeli chodzi o płynność gry. a i tak samo nie wiem jak zachowałoby się w stosunku do zapisu i wczytywania gry, jednak mimo to podaje patent, można sie bawić :)


Btw jeżeli któryś z bardziej zaawansowanych w świecie ikarusa/Lego zna prostszy i bardziej stabilny sposób na timer to fajnie by było gdyby się nim podzielił :)

Btw Gdzie to wkleić co nie? no normalnie najlepiej jak stworzycie nowy plik np timer.d

i parsujecie w gothic.src nie będę tłumaczył jak to zrobić jak nie umiesz tego to daj se wgl spokój xd

UWAGA!!!!! sposób nr1 najlepiej parsować tuż przed startup.d a sposób nr2 możecie parsować na samej górze zaraz po lego i ikarusie :)

7
Skrypty / Co pasek to inna ramka.
« dnia: 2016-06-30, 19:56 »
Siema. Wciąż jestem laikiem jeśli chodzi o ikarusa. (heheh wgl jestem laikiem) zastanawiam się czy da się jakoś spowodować dzięki ikarusowi że każdy pasek: życia/ wytrzymałości oraz many  będzie miał inną obramówkę.... czy trzeba jakoś wyłączyć stare paski i stworzyć zupełnie nowe?

8
MDS i animacje / Brak itemów przy wykonywaniu animacji
« dnia: 2016-05-16, 14:08 »
Witajcie :)

Pomyślałem że być może jest szansa na to że ktoś wie jak rozwiązać mój problem i pomoże, posłużę się tutaj animacją kłucia miecza, chodzi mi o to że gdy jej użyje, czy to w AI_playani czy tam w marvinie play ani t_BSANVIL_S0_2_S1 to hero wykonuje tą animacje ale nie pojawiają mu się w rękach itemy takie jak stal oraz młotek. Mam w mdsie tak:
Anvil - useWithItem = BS_SWORD_RAWHOT
     ani            ("t_BSANVIL_Stand_2_S0"        1    "s_BSANVIL_S0"        0.1    0.0    M.    "Hum_BSAnvil_Jue00.asc"        F    0    2)

            ani            ("s_BSANVIL_S0"                1    "s_BSANVIL_S0"        0.0    0.0    M.    "Hum_BSAnvil_Jue00.asc"        F    3    3)
            ani            ("t_BSANVIL_S0_2_Stand"        1    ""                    0.0    0.1    M.    "Hum_BSAnvil_Jue00.asc"        R    0    2)

            ani            ("t_BSANVIL_S0_2_S1"        1    "s_BSANVIL_S1"        0.0    0.0    M.    "Hum_BSAnvil_Jue00.asc"        F    4    9)
            {
                *eventTag    (4    "DEF_CREATE_ITEM"    "ZS_LEFTHAND"    "ItMiSwordrawhot")
                *eventTag    (4    "DEF_CREATE_ITEM"    "ZS_RIGHTHAND"    "ItMw_1H_Mace_L_04")
            }

            ani            ("s_BSANVIL_S1"                1    "s_BSANVIL_S1"        0.0    0.0    M.    "Hum_BSAnvil_Jue00.asc"        F    10    47)
            ani            ("t_BSANVIL_S1_2_S0"        1    "s_BSANVIL_S0"        0.0    0.0    M.    "Hum_BSAnvil_Jue00.asc"        R    4    9)
            {
                *eventTag    (4    "DEF_DESTROY_ITEM")
                *eventTag    (4    "DEF_DESTROY_ITEM")
            }
Ale mimotego itemy się nie pojawiają:/
Jest jeszcze jakiś dodatkowy sposób żeby przy zwykłym użyciu animacji te przedmioty się pojawiały na rękach? oczywiście przy kowadełku wszystko śmiga jak talala :)

Edit: kombinowałem, zmieniałem klatki na 0/1/2 i różne inne ale to nie pomogło.

9
MDS i animacje / Problem ze zbroją.
« dnia: 2016-05-07, 07:32 »
Siema, mam nadzieję że piesze w dobrym dziale, jeśli nie to przepraszam. Otóż mam problem z jedną zbroją, a polega on na tym że:

Raz kraszuje gre przy pierwszym założeniu, raz po założeniu, zdjęciu i założeniu jeszcze raz, a czasem zakłądam zdejmuje, przekładam z niej na inną z innej na nią i też skraszuje, po prostu różnie jej się to widzi, dodam że z problemem nie spotkałem się podczas gry na rozpakowanych plikach poprzez GS tylko po wrzuceniu gotowej paczki do czystej kopii gothica, i uruchomieniu jako zwykła gra ^^ oraz na serwerze na który ta paczka się mieli.

Log z acces:
======================================= UNHANDLED EXCEPTION OCCURED ======================================================
======================================= CRASH INFOS: =====================================================================
Gothic II - 2.6 (fix), Parser Version: 50
User:  Toworish,  CPUType: 586,  Mem: 0 MB total, 0 MB free
Camera: Pos(2204.89355/-1115.55212/-4895.61035), At(0.929909647/-0.34027642/-0.139570788)
Startup Options:
=============================================== CALLSTACK : ==============================================================
0023:005CF07A (0x0135F538 0x0135F544 0x00000000 0x0135F95C) Gothic2.exe, zCMeshSoftSkin::RenderSoftSkin()+474 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zProgMeshProto.cpp, line 3197+16 byte(s)
0023:0057A740 (0x0135F95C 0x00000001 0x0135F95C 0x00000000) Gothic2.exe, zCModel::Render()+608 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zModel.cpp, line 2300+36 byte(s)
0023:00601A51 (0x00000000 0x07E7C0F4 0x0000003F 0x00000001) Gothic2.exe, zCVob::Render()+1153 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zVob.cpp, line 1681+10 byte(s)
0023:0077D5DB (0x15129168 0x00245560 0x137381E0 0x0000002D) Gothic2.exe, oCVob::Render()+555 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oVob.cpp, line 713
0023:0052DBAF (0x00000001 0x13738034 0x17FE0940 0x00000000) Gothic2.exe, zCBspTree::RenderVobList()+2831 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zBsp.cpp, line 2342
0023:00530A24 (0x12750AC8 0x0083C10C 0x127528E0 0x00000000) Gothic2.exe, zCBspTree::Render()+2468 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zBsp.cpp, line 3551
0023:00621835 (0x00000001 0x127528E0 0x00000000 0x0135FCA8) Gothic2.exe, zCWorld::Render()+309 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zWorld.cpp, line 794
0023:006C87EB (0x00400000 0x01C933B3 0x0135FECC 0x7EFDE000) Gothic2.exe, oCGame::Render()+331 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oGame.cpp, line 2658
0023:00425E6E (0x0082F0EC 0x00000000 0x000602EE 0x127528E0) Gothic2.exe, CGameManager::Run()+1598 byte(s), P:\dev\g2addon\release\Gothic\_bert\oGameManager.cpp, line 767+47 byte(s)
0023:0078188B (0x0000002C 0x00049B2D 0x00000002 0x00000000) Gothic2.exe, MainProg()+75 byte(s), P:\dev\g2addon\release\Gothic\_ulf\Phoenix.cpp, line 111
0023:00503270 (0x00400000 0x00000000 0x01C933B3 0x0000000A) Gothic2.exe, HandledWinMain()+928 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1169
0023:00502DFD (0x0135FED0 0x00000000 0x01C933B3 0x0000000A) Gothic2.exe, WinMain()+141 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1054+17 byte(s)
0023:007D43F8 (0x00000004 0x0000FFFF 0x000000B8 0x00000000) Gothic2.exe, WinMainCRTStartup()+224 byte(s)

Potrafi ktoś z tego coś wyczytać?

10
MDS i animacje / Latanie, co z czym zjeść
« dnia: 2016-05-02, 09:23 »
Siema, zaciekawiła mnie możliwość zrobienia latania w gothic, tak jak w moich chińskich bajkach :D

spojrzałem jakby to bylo ze szkieletem magiem, patrzę i mówię spoko animacje opierają się o humans:)

Tylko jest pewien problem, mianowicie tam nawet jak podniosę wysokość animacji to szkielet odrazu leci na swoją wysokość, a ona opiera się na wysokości podłoża, czyli polece kawałek gdzie podłoże jest niżej i zdechnę xd

Chciałem zapytać was o zdanie, co zrobilibyście na moim miejscu. Trzebaby było zrobić coklatkową animację zwnoszenia się i później jako opadanie puszczać ją od tyłu? do tego na każdej wysokości dorobić zachowywanie się pc jakie ruchy bezczynności i jakie ruchy poruszania się w lewo/prawo/ na przód/ do tyłu?

11
Pytania i problemy / Kilka tekstur w jednej
« dnia: 2016-04-21, 21:14 »
Siema, dziś tak bardziej działałem sobie w 3d i tak jeden modelik ciała zriggowałem ze szkieletem i myyk do ASC odpalam gothica a ten bezduszny program mi mówi że to asc ma za dużo tekstur, ma ich 5 :D

Jeśli chodzi o grafikę a szczególnie 2d to potrafie jedynie w paincie fjuta namazać, a zastanowiło mnie czy niema czegoś takiego jak zrobienie tych 5 tekstur w jedną, tak aby model sobie czytał te tekstury jakoś po nazwach, tak abym nie musiał mapować modelu w jedną teksturę, bo to dla mnie nieosiągalne xd

Macie jakieś pomysły kochani graficy?

12
Skrypty / Nowe menu statystyk.
« dnia: 2016-03-10, 08:03 »
Noo witam :D
Na wstępie chciałbym dodać że gdyby nie pomoc Splash'a oraz SiemaczyS'a ten tutek wgl by nie powstał.
Podziękowania też dla Rafała Budzis'a, będziemy używać jego przeźroczystej czcionki z BudzisSkryptMod'a

Do napisania tego samouczka skłonił mnie ten temat: http://themodders.org/index.php?topic=26035.0
Darkmodders'a głowiłem się, doszedłem do wniosku że się nie da i trzeba napisać nowe menu. Jak się później okazało niepotrzebnie bo w tamtym temacie jest podany sposób na edycję standardowego Menu_Status.d

Ale to nic, może ktoś uzna że mój sposób jest mu wygodniejszy, ja się nauczyłem przynajmniej czegoś nowego..


Zaczynamy, do tego sposobu jak i tego który podał SiemaczyS w temacie powyzej wymagany jest ikarus oraz lego. więc jeśli ich nie macie odsyłam was do : http://themodders.org/index.php?topic=16580

Jest? ok:
idziemy do: _work\data\Scripts\System\Menu\Menu_Status.d
i zamieniamy jego zawartość na:
instance MENU_STATUS (C_MENU_DEF)
{
items[0] = "MENU_ITEM_STATUS_HEADING";
// ---------------------------------------------
items[2] = "MENU_ITEM_LEVEL";
items[4] = "MENU_ITEM_EXP";
items[6] = "MENU_ITEM_LEVEL_NEXT";

};

instance MENU_ITEM_STATUS_HEADING(C_MENU_ITEM_DEF)
{

};

instance MENU_ITEM_LEVEL(C_MENU_ITEM_DEF)
{
posx = 60; posy = 60;
fontName = STAT_FONT_BRAK;
flags = flags & ~IT_SELECTABLE;
};

INSTANCE MENU_ITEM_EXP(C_MENU_ITEM_DEF)
{
posx = 60; posy = 60;
fontName = STAT_FONT_BRAK;
flags = flags & ~IT_SELECTABLE;
};

INSTANCE MENU_ITEM_LEVEL_NEXT(C_MENU_ITEM_DEF)
{
posx = 60; posy = 60;
fontName = STAT_FONT_BRAK;
flags = flags & ~IT_SELECTABLE;
};
To trzeba zostawić, bo są to rzeczy jakoś chyba zakodowane w silniku gry :D

teraz idziemy do: _work\data\Scripts\System\Menu\Menu_Defines.d
Pod linijką: const string MENU_FONT_BRIGHT = "font_old_10_white_hi.tga";wklejamy:
const string STAT_FONT_BRAK = "100.tga";To poprostu przeźroczysta czcionka aby nam nie wyświetlało ilości lvl/exp/nextexp z orginalnego menu statystyk.
Okej to by bylo tyle z folderem system, idziemy teraz do:
_work\data\scripts\content\story\text.d
szukamy tabeli: CONST STRING TXT_TALENTSI zmieniamy jej zawartość na:
CONST STRING TXT_TALENTS [23] =
{
"", //NPC_TALENT_UNKNOWN = 0;
"", //NPC_TALENT_1H = 1;
"", //NPC_TALENT_2H = 2;
"", //NPC_TALENT_BOW = 3;
"", //NPC_TALENT_CROSSBOW = 4;
"", //NPC_TALENT_PICKLOCK = 5; //wird jetzt per DEX geregelt UND es gibt nur noch Level 0 und 1 (nicht mehr 2)
"", //altes Pickpocket aus Gothic 1 - NICHT benutzen! Bleibt als Relikt im Code = 6;
"", //NPC_TALENT_MAGE = 7; // Magiekreis
"", //NPC_TALENT_SNEAK = 8;
"", //raus //NPC_TALENT_REGENERATE = 9;
"", //raus //NPC_TALENT_FIREMASTER = 10;
"", //NPC_TALENT_ACROBAT = 11;
"", //NPC_TALENT_PICKPOCKET = 12; //NEUES Pickpocket
"", //NPC_TALENT_SMITH = 13;
"", //NPC_TALENT_RUNES = 14;
"", //NPC_TALENT_ALCHEMY = 15;
"", //NPC_TALENT_TAKEANIMALTROPHY = 16;
"", //NPC_TALENT_FOREIGNLANGUAGE = 17;
"", //NPC_TALENT_WISPDETECTOR = 18;
"", //NPC_TALENT_C = 19;
"", //NPC_TALENT_D = 20;
"", //NPC_TALENT_E = 21;
"" //NPC_TALENT_F = 22;

};

Szukamy też:
CONST STRING TXT_TALENTS_SKILLSI zmieniamy jej zawartość na:
CONST STRING TXT_TALENTS_SKILLS [23] =
{
"", //NPC_TALENT_UNKNOWN = 0;
"", //NPC_TALENT_1H = 1;
"", //NPC_TALENT_2H = 2;
"", //NPC_TALENT_BOW = 3;
"", //NPC_TALENT_CROSSBOW = 4;
"", //NPC_TALENT_PICKLOCK = 5; //wird jetzt per DEX geregelt UND es gibt nur noch Level 0 und 1 (nicht mehr 2)
"", //altes Pickpocket aus Gothic 1 - NICHT benutzen! Bleibt als Relikt im Code = 6;
"", //NPC_TALENT_MAGE = 7; // Magiekreis
"", //NPC_TALENT_SNEAK = 8;
"", //raus //NPC_TALENT_REGENERATE = 9;
"", //raus //NPC_TALENT_FIREMASTER = 10;
"", //NPC_TALENT_ACROBAT = 11;
"", //NPC_TALENT_PICKPOCKET = 12; //NEUES Pickpocket
"", //NPC_TALENT_SMITH = 13;
"", //NPC_TALENT_RUNES = 14;
"", //NPC_TALENT_ALCHEMY = 15;
"", //NPC_TALENT_TAKEANIMALTROPHY = 16;
"", //NPC_TALENT_FOREIGNLANGUAGE = 17; //ADDON
"", //NPC_TALENT_WISPDETECTOR = 18;
"", //NPC_TALENT_C = 19;
"", //NPC_TALENT_D = 20;
"", //NPC_TALENT_E = 21;
"" //NPC_TALENT_F = 22;
};

Mamy? Noo to już jesteśmy blisko końca :)

Teraz tak Tworzymy sobię plik o nazwie: Zmienne_MenuStatus.d
w folderze _work/data/content/story
i definiujemy go w pliku gothic.src pod Story_Globals.d

Zawartość Zmienne_MenuStatus:
  // --------------------------------------------//
 // ---------- ZMIENNE LICZBOWE ----------------//
// --------------------------------------------//

// ---- Zmienna MenuStatus ---- //
var int StatusScreenOpen;

// ---- Reputacja ---- //
var int RepKDW;

// ---- VIEW ---- //
var int View;


// ---- Zmienne pos x atr.mana ----//
var int ManaX;//x, x2, x3 zmienne pozycji many
var int ManaX2;// czyli są to zmienne liczbowe które wyświetlimy w menu :)
var int ManaX3;

// -- Zmienne pos x atr.hp --//
var int HpX;//jak wyżej z maną. Tylko tutaj z hp
var int HpX2;
var int HpX3;


   // ------------------------------------------ //
  // ---------- ZMIENNE ----------------------- //
 // ------------------------------------------ //

// ---- LVL ----//
var int lvl;//Zmienna liczbowa poziomu.

// ---- MANA-KRĘGI ---- //
var int manakreise;

// ---- EXP ---- //
var int exp;

// ---- N.EXP ---- //
var int nexp;

// ---- LP ---- //
var int lp;

   // --------------------------------------- //
  // ------------- ATRYBUTY ---------------- //
 // --------------------------------------- //
 
// ---- Siła ---- //
var int str;

// ---- Zręka ---- //
var int dex;

// ---- Mana ---- //
var int mana;// zmienna liczbowa many
var int mmana;// zmienna liczbowa max many

// ---- PŻ ---- //
var int hp; // zmienna hp
var int mhp;// max hp

   // ------------------------------------- // 
  // ---------- OCHRONA ------------------ //
 // ------------------------------------- //
 
// ---- Przed bronią ---- //
var int edgw;

// ---- Przed strzałami ---- //
var int edgp;

// ---- Przed ogniem ---- //
var int edgf;

// ---- Przed magią ---- //
var int edgm;

   // ---------------------------------- //
  // --------- UMIEJĘTNOŚCI ----------- //
 // ---------------------------------- //
 
// ---- 1H ---- //
var int posX1h; //zmienna pozycji było to już wyjaśniane
var int posX1h2;
var int posX1h3;
var int posX1h4; // "%"
var int JedenH; // Procent szansy trafienia 1h

// ---- 2H ---- //
var int posX2h; //zmienna pozycji było to już wyjaśniane
var int posX2h2;
var int posX2h3;
var int posX2h4; // "%"
var int DwaH; // Procent szansy trafienia 2h

// ---- Łuk ---- //
var int posXbow; //zmienna pozycji było to już wyjaśniane
var int posXbow2;
var int posXbow3;
var int posXbow4; // "%"
var int BoW; // Procent szansy trafienia Łuk

// ---- Kusza ---- //
var int posXCboW; //zmienna pozycji było to już wyjaśniane
var int posXCboW2;
var int posXCboW3;
var int posXCboW4; // "%"
var int CboW; // Procent szansy trafienia Kusza

  // --------------------------------------------//
 // ---------- ZMIENNE TEKSTOWE ----------------//
// --------------------------------------------//

var string guild;//zmienna tekstowa gildii

   // ------------------------------------------ //
  // ---------- ZMIENNE ----------------------- //
 // ------------------------------------------ //
// ---- LVL ----//
var string lvlt;//Zmienna tekstowa lvl.

// ---- MANA-KRĘGI ---- //
var string manakreiseT;

// ---- EXP ---- //
var string expt;

// ---- N.EXP ---- //
var string nexpt;

// ---- LP ---- //
var string lpt;

   // --------------------------------------- //
  // ------------- ATRYBUTY ---------------- //
 // --------------------------------------- //
// ---- Siła ---- //
var string strt;

// ---- Zręka ---- //
var string dext;

// ---- Mana ---- //
var string manat;// zmienna tekstowa many
var string mmanat;// zmienna tekstowa max many

// ---- PŻ ---- //
var string hpt;
var string mhpt;

   // ------------------------------------- // 
  // ---------- OCHRONA ------------------ //
 // ------------------------------------- //
// ---- Przed bronią ---- //
var string edgwt;

// ---- Przed strzałami ---- //
var string edgpt;

// ---- Przed ogniem ---- //
var string edgft;

// ---- Przed magią ---- //
var string edgmt;

   // ---------------------------------- //
  // --------- UMIEJĘTNOŚCI ----------- //
 // ---------------------------------- //
// ---- 1H ---- //
var string skill1h; //zielony|wojownik|Mistrz
var string JedenHtext;

// ---- 2H ---- //
var string skill2h; //zielony|wojownik|Mistrz
var string DwaHtext;

// ---- Łuk ---- //
var string skillbow; //zielony|wojownik|Mistrz
var string BowText;

// ---- Kusza ---- //
var string skillCboW; //zielony|wojownik|Mistrz
var string CboWText;

// ---- Skradanie się ---- //
var string SkillSneak; // -|Uczony

// ---- Włamywanie się ---- //
var string SkillPicklock; // -|Uczony

// ---- Kradzież ---- //
var string SkillPickpocket;

// ---- Tworzenie run ---- //
var string SkillRunes;

// ---- Alchemia ---- //
var string SkillAlchemy;

// ---- Kowalstwo ---- //
var string SkillSmith;

// ---- Patroszenie ---- //
var string SkillTakeAnimalTrophy;

// ---- REPUTACJA ---- //
var string RepKdwT;

Mamy? ok.

ja zwykłem w _work/data/scripts/content tworzyć folder o nazwie _misc i taki też tworzymy

Potem w Gothic.src dopisujemy prawie że na końcu tuż przed Startup.d taki wpis:
_Misc\*.d
Mamy? ok
To wchodzimy do folderu _misc i tworzymy plik o nazwie np: Menu.d
a w tym pliku wklejamy:
func void OpenStatusScreenHook () // Otwórz menu status
{

if(hero.attribute[ATR_MANA]<=9)// Oznacza że jeśli hero ma mniej lub równo: "9" many
{
ManaX = 1800; // pozycja/zmienna wyświetlania many to 1800
ManaX2 = ManaX + 100; // pozycja/zmienna ukośnika pomiędzy to 1800 z wyżej plus 100
ManaX3 = ManaX + 150; // pozycja/zmienna max many to 1800 plus 150
}else if(hero.attribute[ATR_MANA]<=99) // jeśli ma mniej bądź równo 99 many
{
ManaX = 1800; // x = 1400 trzeba dodać żeby wiedział czym jest mana x gdy np wczytasz grę czy coś :D
ManaX2 = ManaX + 150; // plus 150
ManaX3 = ManaX + 200; // plus 200  tu już jak wyżej tylko większe liczby
}else if(hero.attribute[ATR_MANA]<=999) // mniej bądź równo 999
{
ManaX = 1800; //wiadomo
ManaX2 = ManaX + 200;// plus 200
ManaX3 = ManaX + 250;// plus 250
}else if(hero.attribute[ATR_MANA]<=9999)// wiadomo
{
ManaX = 1800;//wiadomo
ManaX2 = ManaX + 300;//wiadomo
ManaX3 = ManaX + 350;//wiadomo
// UWAGA!! czemu zwiększamy pozycję "X" ? a no bo liczba 100 zajmuję więcej miejsca niż 10 i nie mogą na siebie nachodzić
};

if(hero.attribute[ATR_HITPOINTS]<=9)
{
HpX = 1800;// Tutaj to samo co było z maną
HpX2 = HpX + 100;
HpX3 = HpX + 150;
}else if(hero.attribute[ATR_HITPOINTS]<=99)
{
HpX = 1800;
HpX2 = HpX + 150;
HpX3 = HpX + 200;
}else if(hero.attribute[ATR_HITPOINTS]<=999)
{
HpX = 1800;
HpX2 = HpX + 200;
HpX3 = HpX + 250;
}else if(hero.attribute[ATR_HITPOINTS]<=9999)
{
HpX = 1800;
HpX2 = HpX + 250;
HpX3 = HpX + 300;
}; // aż dotąd.

if (hero.guild == 0)//jeśli hero ma gildie zerową
{
guild = "Brak";// to wyświetl jej nazwę (BRAK)
} else if (hero.guild == 1)//jesli ma gildię nr 1
{
guild = "Palladyn"; // wyświetli (PALLADYN)
}else if (hero.guild == 2) // i tak dalej.
{
guild = "Strażnik";
}else if (hero.guild == 3)
{
guild = "Obywatel";
}else if (hero.guild == 4)
{
guild = "Mag Ognia";
}else if (hero.guild == 5)
{
guild = "Nowicjusz";
}else if (hero.guild == 6)
{
guild = "Łowca Smoków";
}else if (hero.guild == 7)
{
guild = "Najemnik";
}else if (hero.guild == 8)
{
guild = "Farmer";
}else if (hero.guild == 9)
{
guild = "Bandyta";
}else if (hero.guild == 10)
{
guild = "Skazaniec";
}else if (hero.guild == 11)
{
guild = "Poszukiwacz";
}else if (hero.guild == 12)
{
guild = "Mieszkaniec";
}else if (hero.guild == 13)
{
guild = "Pirat";
}else if (hero.guild == 14)
{
guild = "Mag Wody";
}else if (hero.guild == 17)
{
guild = "Chrząszcz";
}else if (hero.guild == 18)
{
guild = "Owca";
}else if (hero.guild == 19)
{
guild = "Goblin";
}else if (hero.guild == 20)
{
guild = "Szkielet-goblin";
}else if (hero.guild == 21)
{
guild = "Prz. Szkielet Goblin";
}else if (hero.guild == 22)
{
guild = "Ścierwojad";
}else if (hero.guild == 23)
{
guild = "Olbrzymi szczur";
}else if (hero.guild == 24)
{
guild = "Polna bestia";
}else if (hero.guild == 25)
{
guild = "Krwiopijca";
}else if (hero.guild == 26)
{
guild = "Jaszczór";
}else if (hero.guild == 27)
{
guild = "Wilk";
}else if (hero.guild == 28)
{
guild = "Prz. Wilk";
}else if (hero.guild == 29)
{
guild = "Pełzacz";
}else if (hero.guild == 30)
{
guild = "Topielec";
}else if (hero.guild == 31)
{
guild = "Szkielet";
}else if (hero.guild == 32)
{
guild = "Prz. Szkielet";
}else if (hero.guild == 33)
{
guild = "Szkielet-Mag";
}else if (hero.guild == 34)
{
guild = "Zombie";
}else if (hero.guild == 35)
{
guild = "Zębacz";
}else if (hero.guild == 36)
{
guild = "Cieniostwór";
}else if (hero.guild == 37)
{
guild = "Szkielet-potwór";
}else if (hero.guild == 38)
{
guild = "Harpia";
}else if (hero.guild == 39)
{
guild = "Kamienny golem";
}else if (hero.guild == 40)
{
guild = "Ognisty golem";
}else if (hero.guild == 41)
{
guild = "Lodowy golem";
}else if (hero.guild == 42)
{
guild = "Prz. golem";
}else if (hero.guild == 43)
{
guild = "Demon";
}else if (hero.guild == 44)
{
guild = "Prz. demon";
}else if (hero.guild == 45)
{
guild = "Troll";
}else if (hero.guild == 46)
{
guild = "Wąż błotny";
}else if (hero.guild == 47)
{
guild = "Smok";
}else if (hero.guild == 48)
{
guild = "Kretoszczur";
}else if (hero.guild == 49)
{
guild = "Aligator";
}else if (hero.guild == 50)
{
guild = "Błotny golem";
}else if (hero.guild == 51)
{
guild = "Strażnik";
}else if (hero.guild == 52)
{
guild = "Kamienna puma";
}else if (hero.guild == 54)
{
guild = "Prz. Strażnik";
}else if (hero.guild == 55)
{
guild = "Prz.Zombie";
}else if (hero.guild == 59)
{
guild = "Ork";
}else if (hero.guild == 60)
{
guild = "Ork";
}else if (hero.guild == 61)
{
guild = "Ork-ożywieniec";
}else if (hero.guild == 62)
{
guild = "Smokowiec";
};//nooo kurwa wszystkie :)

   // ------------------------------------------ //
  // ---------- ZMIENNE ----------------------- //
 // ------------------------------------------ //
// ---- LVL ----------------------------------//
lvl = hero.level;//zmienna liczbowa lvl(var int lvl) to aktualny level hero.
lvlt = IntToString(lvl);// Zamień zmienną tekstową (var string lvlt) na zmienną liczbową lvl (var int lvl).

// ---- MANA-KRĘGI ----------------------- //
manakreise = Npc_GetTalentSkill(hero, NPC_TALENT_MAGE);// zmienna liczbowa manakreise to aktualny krąg magii hero.
manakreiseT = IntToString(manakreise);// zamień zmienną tekstową na liczbę kręgu magii.

// ---- EXP ----------------------------- //
exp = hero.exp; // zmienna liczbowa (var int exp) to doświadczenie hero.
expt = IntToString(exp); // zamień zmienną tekstową na liczbową aby ją wyświetlić

// ---- N.EXP ---- //
nexp = hero.exp_next; // zmienna liczbowa (var int nexp).
nexpt = IntToString(nexp); // zamiana zmiennej tekstowej (var string nexpt).

// ---- LP ---- //
lp = hero.lp; // Noo i to się tak ciągnie
lpt = IntToString(lp);

   // --------------------------------------- //
  // ------------- ATRYBUTY ---------------- //
 // --------------------------------------- //
// ---- Siła ----------------------------- //
str = hero.attribute[ATR_STRENGTH]; // było tłumaczone z tymi zmiennymi i zamianą.
strt = IntToString(str);

// ---- Zręka ---- //
dex = hero.attribute[ATR_DEXTERITY]; // też
dext = IntToString(dex);

// ---- Mana ---- // -- TUTAJ!!!!.... Mana i pż jest nieco bardziej skomplikowane:
mana = hero.attribute[ATR_MANA];// mana to aktualna ilość many hero
mmana = hero.attribute[ATR_MANA_MAX];// mmana to maxymalna ilość many hero
manat = IntToString(mana);// manat wyżej jako zmienna tekstowa. Teraz zmieniamy ją na zmienną liczbową
mmanat = IntToString(mmana);// jak wyżej chodzi o to aby wyświetlało ( CYFRĘ )

// ---- PŻ ---- //
hp = hero.attribute[ATR_HITPOINTS];
mhp = hero.attribute[ATR_HITPOINTS_MAX];
hpt = IntToString(hp);
mhpt = IntToString(mhp); // To samo co z maną i (max maną).

   // ------------------------------------- // 
  // ---------- OCHRONA ------------------ //
 // ------------------------------------- //
// ---- Przed bronią ------------------- //
edgw = hero.protection[PROT_EDGE];// tutaj standard było wyjaśnione
edgwt = IntToString(edgw);

// ---- Przed strzałami ---- //
edgp = hero.protection[PROT_POINT];
edgpt = IntToString(edgp);

// ---- Przed ogniem ---- //
edgf = hero.protection[PROT_FIRE];
edgft = IntToString(edgf);

// ---- Przed magią ---- //
edgm = hero.protection[PROT_MAGIC];
edgmt = IntToString(edgm);

   // ---------------------------------- //
  // --------- UMIEJĘTNOŚCI ----------- //
 // ---------------------------------- //
// ---- 1H -------------------------- //
if (Hero.HitChance[NPC_TALENT_1H] >=0) // jeśli szansa trafienia 1h hero jest wieksz bądź równa 0
{
skill1h = "Łamaga";// Wyświetli (Łamaga).
posX1h = 4200;// ustalenia pozycji dla tekstu
posX1h2 = posX1h+1400;
posX1h3 = posX1h2+600;
posX1h4 = posX1h3+100;
};
if (Hero.HitChance[NPC_TALENT_1H] >=30)// jeśli większa bądź równa 30
{
skill1h = "Wojownik"; // to wojownik
posX1h = 4200; // ustalenia pozycji tekstu
posX1h2 = posX1h+1400;
posX1h3 = posX1h2+700;
posX1h4 = posX1h3+150;
};
if (Hero.HitChance[NPC_TALENT_1H] >=60) // jesli większa bądź równa 60
{
skill1h = "Mistrz";// mistrz
posX1h = 4200;// jak wyżej
posX1h2 = posX1h+1400;
posX1h3 = posX1h2+500;
posX1h4 = posX1h3+150;
};
if (Hero.HitChance[NPC_TALENT_1H] ==100)// jesli równa 100 ponieważ to już 3 cyfry pozycje są inne
{
posX1h = 4200;
posX1h2 = posX1h+1400;
posX1h3 = posX1h2+500;
posX1h4 = posX1h3+200;
};
JedenH = Hero.HitChance[NPC_TALENT_1H]; // zmienna liczbowa (var int JedenH) to procent szansy trafienia 1h
JedenHtext = IntToString(JedenH);// Zamiana banana na ananasy.

// ---- 2H ---- //
if (Hero.HitChance[NPC_TALENT_2H] >=0) // jeśli szansa trafienia 2h hero jest wieksz bądź równa 0
{
skill2h = "Łamaga";// to zielony
posX2h = 4200;// ustalenia pozycji dla tekstu
posX2h2 = posX2h+1400;
posX2h3 = posX2h2+600;
posX2h4 = posX2h3+100;
};
if (Hero.HitChance[NPC_TALENT_2H] >=30)// jeśli większa bądź równa 30
{
skill2h = "Wojownik"; // to wojownik
posX2h = 4200; // ustalenia pozycji tekstu
posX2h2 = posX2h+1400;
posX2h3 = posX2h2+700;
posX2h4 = posX2h3+150;
};
if (Hero.HitChance[NPC_TALENT_2H] >=60) // jesli większa bądź równa 60
{
skill2h = "Mistrz";// mistrz
posX2h = 4200;// jak wyżej
posX2h2 = posX2h+1400;
posX2h3 = posX2h2+500;
posX2h4 = posX2h3+150;
};
if (Hero.HitChance[NPC_TALENT_2H] ==100)// jesli równa 100 ponieważ to już 3 cyfry pozycje są inne
{
posX2h = 4200;
posX2h2 = posX2h+1400;
posX2h3 = posX2h2+500;
posX2h4 = posX2h3+200;
};
DwaH = Hero.HitChance[NPC_TALENT_2H]; // jak w 1h
DwaHtext = IntToString(DwaH);

// ---- Łuk ---- //
if (Hero.HitChance[NPC_TALENT_BOW] >=0) // jeśli szansa trafienia Łukiem hero jest wieksz bądź równa 0
{
skillbow = "Ślepy";
posXbow = 4200;
posXbow2 = posXbow+1400;
posXbow3 = posXbow2+600;
posXbow4 = posXbow3+100;
};
if (Hero.HitChance[NPC_TALENT_BOW] >=30)// jeśli większa bądź równa 30
{
skillbow = "Strzelec";
posXbow = 4200;
posXbow2 = posXbow+1400;
posXbow3 = posXbow2+700;
posXbow4 = posXbow3+150;
};
if (Hero.HitChance[NPC_TALENT_BOW] >=60) // jesli większa bądź równa 60
{
skillbow = "Myśliwy";
posXbow = 4200;
posXbow2 = posXbow+1400;
posXbow3 = posXbow2+500;
posXbow4 = posXbow3+150;
};
if (Hero.HitChance[NPC_TALENT_BOW] ==100)// jesli równa 100 ponieważ to już 3 cyfry pozycje są inne
{
posXbow = 4200;
posXbow2 = posXbow+1400;
posXbow3 = posXbow2+500;
posXbow4 = posXbow3+200;
};
BoW = Hero.HitChance[NPC_TALENT_BOW];// jak w 1h i 2h
BowText = IntToString(BoW);

// ---- Kusza ---- //
if (Hero.HitChance[NPC_TALENT_CROSSBOW] >=0) // jeśli szansa trafienia Łukiem hero jest wieksz bądź równa 0
{
skillCboW = "Ślepy";
posXCboW = 4200;
posXCboW2 = posXCboW+1400;
posXCboW3 = posXCboW2+600;
posXCboW4 = posXCboW3+100;
};
if (Hero.HitChance[NPC_TALENT_CROSSBOW] >=30)// jeśli większa bądź równa 30
{
skillCboW = "Strzelec";
posXCboW = 4200;
posXCboW2 = posXCboW+1400;
posXCboW3 = posXCboW2+700;
posXCboW4 = posXCboW3+150;
};
if (Hero.HitChance[NPC_TALENT_CROSSBOW] >=60) // jesli większa bądź równa 60
{
skillCboW = "Myśliwy";
posXCboW = 4200;
posXCboW2 = posXCboW+1400;
posXCboW3 = posXCboW2+500;
posXCboW4 = posXCboW3+150;
};
if (Hero.HitChance[NPC_TALENT_CROSSBOW] ==100)// jesli równa 100 ponieważ to już 3 cyfry pozycje są inne
{
posXCboW = 4200;
posXCboW2 = posXCboW+1400;
posXCboW3 = posXCboW2+500;
posXCboW4 = posXCboW3+200;
};
CboW = Hero.HitChance[NPC_TALENT_CROSSBOW]; // jak w 1h i 2h i łuku.
CboWText = IntToString(CboW);

// ---- Skradanie się ---- //
if (Npc_GetTalentSkill (hero,NPC_TALENT_SNEAK) == TRUE)// Jeśli nauczył się skradania.
{
SkillSneak = "Uczony"; // wyświetli że uczony
} else { // a jak nie
SkillSneak = "-"; // to myślnik.
};

// ---- Włamywanie się ---- //
if (Npc_GetTalentSkill (hero,NPC_TALENT_PICKLOCK) == TRUE)
{
SkillPicklock = "Uczony";
} else {
SkillPicklock = "-"; // jak ze skradaniem.
};

// ---- Kradzież ---- //
if (Npc_GetTalentSkill (hero,NPC_TALENT_PICKPOCKET) == TRUE)
{
SkillPickpocket = "Uczony";
} else {
SkillPickpocket = "-"; // jak ze skradaniem.
};

// ---- Tworzenie run ---- //
if (Npc_GetTalentSkill (hero,NPC_TALENT_RUNES) == TRUE)
{
SkillRunes = "Uczony";
} else {
SkillRunes = "-"; // jak ze skradaniem.
};

// ---- Alchemia ---- //
if (Npc_GetTalentSkill (hero,NPC_TALENT_ALCHEMY) == TRUE)
{
SkillAlchemy = "Uczony";
} else {
SkillAlchemy = "-"; // jak ze skradaniem.
};

// ---- Kowalstwo ---- //
if (Npc_GetTalentSkill (hero,NPC_TALENT_SMITH) == TRUE)
{
SkillSmith = "Uczony";
} else {
SkillSmith = "-"; // jak ze skradaniem.
};

// ---- Patroszenie ---- //
if (Npc_GetTalentSkill (hero,NPC_TALENT_TAKEANIMALTROPHY) == TRUE)
{
SkillTakeAnimalTrophy = "Uczony";
} else {
SkillTakeAnimalTrophy = "-"; // jak ze skradaniem
};
// ---- REPUTACJA ---- //
RepKdwT = IntToString(RepKDW);
// RepKdwT (var string RepKdwT) zmienna tekstowa reputacji aby ją wyświetlić.
// RepKDW (var int RepKDW) zmienna liczbowa reputacji.



StatusScreenOpen = true; // menu status = true

View = View_Create(0, 0, PS_VMax, PS_VMax);//Stwórz View
View_Open(View);// Otwórz View
View_SetTexture(View, "Menu_Staty.tga");// Dodaj Teksturkę

// ---- Postać ---- //
View_AddText(View, 800, 1400, "POSTAĆ:", "FONT_OLD_10_WHITE.TGA" );

// ---- Gildia ---- //
View_AddText(View, 500, 1800, "Gildia:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 1800, guild, "FONT_OLD_10_WHITE.TGA" );

// ---- Poziom ----//
View_AddText(View, 500, 2000, "Poziom:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 2000, lvlt, "FONT_OLD_10_WHITE.TGA" );

// ---- Kręgi Magii ---- //
View_AddText(View, 500, 2200, "Magia:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 2200, "Krąg", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 2200, 2200, manakreiseT, "FONT_OLD_10_WHITE.TGA" );

// ---- Doświadczenie ---- //
View_AddText(View, 500, 2400, "Exp:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 2400, expt, "FONT_OLD_10_WHITE.TGA" );

// ---- Doświadczenie do następnego poziomu ---- //
View_AddText(View, 500, 2600, "N.Poziom:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 2600, nexpt, "FONT_OLD_10_WHITE.TGA" );

// ---- Punkty Nauki ---- //
View_AddText(View, 500, 2800, "Lp:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 2800, lpt, "FONT_OLD_10_WHITE.TGA" );

// ---- Atrybuty ---- //
View_AddText(View, 800, 3100, "ATRYBUTY:", "FONT_OLD_10_WHITE.TGA" );

// ---- Siła ---- //
View_AddText(View, 500, 3500, "Siła:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 3500, strt, "FONT_OLD_10_WHITE.TGA" );

// ---- Zręczność ---- //
View_AddText(View, 500, 3700, "Zręczność:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 3700, dext, "FONT_OLD_10_WHITE.TGA" );

// ---- Mana ---- //
View_AddText(View, 500, 3900, "Mana:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, ManaX, 3900, manat, "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, ManaX2, 3900, "/", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, ManaX3, 3900, mmanat, "FONT_OLD_10_WHITE.TGA" );

// ---- Hp ---- //
View_AddText(View, 500, 4100, "Pż:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, HpX, 4100, hpt, "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, HpX2, 4100, "/", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, HpX3, 4100, mhpt, "FONT_OLD_10_WHITE.TGA" );

// ---- OCHORONA ---- //
View_AddText(View, 800, 4400, "OCHRONA:", "FONT_OLD_10_WHITE.TGA" );

// ---- Broń ---- //
View_AddText(View, 500, 4800, "Przed Bronią:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 4800, edgwt, "FONT_OLD_10_WHITE.TGA" );

// ---- Pociski ----//
View_AddText(View, 500, 5000, "Przed Pociskami:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 5000, edgpt, "FONT_OLD_10_WHITE.TGA" );

// ---- Ogień ---- //
View_AddText(View, 500, 5200, "Przed Ogniem:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 5200, edgft, "FONT_OLD_10_WHITE.TGA" );

// ---- Magia ---- //
View_AddText(View, 500, 5400, "Przed Magią:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 1800, 5400, edgmt, "FONT_OLD_10_WHITE.TGA" );

// ---- UMIEJĘTNOŚCI ---- //
View_AddText(View, 4500, 1400, "UMIEJĘTNOŚCI:", "FONT_OLD_10_WHITE.TGA" );

// ---- Br. Jednoręczna ---- //
View_AddText(View, posX1h, 1800, "Broń jednoręczna:", "FONT_OLD_10_WHITE.TGA" );//broń 1h
View_AddText(View, posX1h2, 1800, skill1h, "FONT_OLD_10_WHITE.TGA" );// skill tekst
View_AddText(View, posX1h3, 1800, JedenHtext, "FONT_OLD_10_WHITE.TGA" );// skill procent
View_AddText(View, posX1h4, 1800, "%", "FONT_OLD_10_WHITE.TGA" );// "%" znaczek

// ---- Br. Dwóręczna ---- //
View_AddText(View, posX2h, 2000, "Broń dwuręczna:", "FONT_OLD_10_WHITE.TGA" );//broń 2h
View_AddText(View, posX2h2, 2000, skill2h, "FONT_OLD_10_WHITE.TGA" );// skill tekst
View_AddText(View, posX2h3, 2000, DwaHtext, "FONT_OLD_10_WHITE.TGA" );// skill procent
View_AddText(View, posX2h4, 2000, "%", "FONT_OLD_10_WHITE.TGA" );// "%" znaczek

// ---- Łuk ---- //
View_AddText(View, posXbow, 2200, "Cel. Łuk:", "FONT_OLD_10_WHITE.TGA" );//broń 2h
View_AddText(View, posXbow2, 2200, skillbow, "FONT_OLD_10_WHITE.TGA" );// skill tekst
View_AddText(View, posXbow3, 2200, BowText, "FONT_OLD_10_WHITE.TGA" );// skill procent
View_AddText(View, posXbow4, 2200, "%", "FONT_OLD_10_WHITE.TGA" );// "%" znaczek

// ---- Kusza ---- //
View_AddText(View, posXbow, 2400, "Cel. Kusza:", "FONT_OLD_10_WHITE.TGA" );//broń 2h
View_AddText(View, posXbow2, 2400, skillcbow, "FONT_OLD_10_WHITE.TGA" );// skill tekst
View_AddText(View, posXbow3, 2400, CboWText, "FONT_OLD_10_WHITE.TGA" );// skill procent
View_AddText(View, posXbow4, 2400, "%", "FONT_OLD_10_WHITE.TGA" );// "%" znaczek

// ---- Skradanie się ---- //
View_AddText(View, 4200, 2700, "Skradanie się:", "FONT_OLD_10_WHITE.TGA" );//Skradanie się
View_AddText(View, 5600, 2700, SkillSneak, "FONT_OLD_10_WHITE.TGA" );//uczony|-

// ---- Włamywanie się ---- //
View_AddText(View, 4200, 2900, "Włamywanie się:", "FONT_OLD_10_WHITE.TGA" );//Włamywanie się
View_AddText(View, 5600, 2900, SkillPicklock, "FONT_OLD_10_WHITE.TGA" );// Uczony|-

// ---- Kradzież ---- //
View_AddText(View, 4200, 3100, "Kradzież:", "FONT_OLD_10_WHITE.TGA" );//Kradzież
View_AddText(View, 5600, 3100, SkillPickpocket, "FONT_OLD_10_WHITE.TGA" );// Uczony|-

// ---- Tworzenie run ---- //
View_AddText(View, 4200, 3400, "Tworzenie run:", "FONT_OLD_10_WHITE.TGA" );//Kradzież
View_AddText(View, 5600, 3400, SkillRunes, "FONT_OLD_10_WHITE.TGA" );// Uczony|-

// ---- Alchemia ---- //
View_AddText(View, 4200, 3600, "Alchemia:", "FONT_OLD_10_WHITE.TGA" );//Kradzież
View_AddText(View, 5600, 3600, SkillAlchemy, "FONT_OLD_10_WHITE.TGA" );// Uczony|-

// ---- Kowalstwo ---- //
View_AddText(View, 4200, 3800, "Kowalstwo:", "FONT_OLD_10_WHITE.TGA" );//Kradzież
View_AddText(View, 5600, 3800, SkillSmith, "FONT_OLD_10_WHITE.TGA" );// Uczony|-

// ---- Patroszenie ---- //
View_AddText(View, 4200, 4100, "Patroszenie:", "FONT_OLD_10_WHITE.TGA" );//Kradzież
View_AddText(View, 5600, 4100, SkillTakeAnimalTrophy, "FONT_OLD_10_WHITE.TGA" );// Uczony|-

// ---- Reputacja ---- //
View_AddText(View, 4500, 4400, "REPUTACJA:", "FONT_OLD_10_WHITE.TGA" );

// ---- Reputacja u magów Wody ---- //
View_AddText(View, 4200, 4800, "Magowie wody:", "FONT_OLD_10_WHITE.TGA" );
View_AddText(View, 5600, 4800, RepKdwT, "FONT_OLD_10_WHITE.TGA" );

};

func void CloseScreenHook () //Zamknij menu status
{
    if (StatusScreenOpen) // jeśli menu status == true
    {
    View_Delete(View);// Usuń view

    StatusScreenOpen = false; // menu status = false
    };
};
// Skrypt napisany przez Splash'a z forum Themodders.org:
func void StatusScreenHookInit () // funkcja hook'a
{
const int done = false;// stała hooka, dowiedziałem się że jest ona wymagana przy niektórych hook'ah
// inaczej mogą być problemy że hook się aktywuje, a gdy zapiszesz i wczytasz grę aktywuje się po raz drugi.


    if (!done) // jeśli stała done nie jest sobą ^^
    {
    HookEngineF (4707920, 6, OpenStatusScreenHook); // spełnij warunki jesli menu status jest aktywne
    HookEngineF (5102048, 7, CloseScreenHook); // spełnij warunki jesli menu status jest nieaktywne funkcje z warunkami są wyżej.
    done = true; // don zamień na true
    };
 };

jak to zwykle w moich Samouczkach bywa, skrypty są wytłumaczone zgrubnie w komentarzach i daje wam przykładowy skrypt do modyfikacji wedle uznania.

Wejdźmy jeszcze do _work/data/content/story/startup.d i pod linijką:
LeGo_Init (LeGo_All);wklejcie:
StatusScreenHookInit ();
Wiecie chyba jak się wkleja tekstury co? noo tego nie tłumaczę. Avallah pisał że jak jest darmowy to można wrzucić chomika i tak też zrobię, aby nie zginęły te pliki. posłużyłem się teksturą menu z g1 oto link:
http://chomikuj.pl/ToWoRiSh/Gothic/Gothic+2/Tekstury+Menu

Hasło to menustatus

Aha. Aby zwiększyć reputację gdzie przykładowo dałem magów wody trzeba zwiększyć zmienną RepKDW

Np w jakimś dialogu po wykonaniu misjii dodać RepKDW = RepKDW+1;

można też zrobić procentowo dodając np 5 a znaczek procentu robimy tak jak przy 1h macie to wyżej objaśnione :)

Aa screen jakby co:
http://zapodaj.net/41ae26a21f291.jpg.html


Aaa btw. Zapomniałem dodać ze to jest do G2 bo jak się nie mylę to w g1 niema chyba LeGo czy cóś. Nawet jeśli jest to skrypt wymagałby modyfikacji.


13
Skrypty / Nowy system czarowania przez npc
« dnia: 2016-02-22, 19:26 »
Widzę że niektórzy mają problemy z B_SelectSpell najpierw wytłumaczę wam z grubsza mniej więcej orginalny skrypt: opis wszystkiego w zwykłym komentarzu aby było łatwiej, zresztą nawet wam, kopiujecie skrypt i macie to w notepadzie :)

No więc ciach:
// *************************************************************
// B_SelectSpell
// -------------
// Magieauswahl für Menschen und Monster
// Wenn Auswahlkriterien erfüllt (je nach Gilde unterschiedlich)
// --> TRUE, sonst FALSE
// Humans zaubern nur als KdF, PAL oder DMT
// *************************************************************

func int B_SelectSpell (var C_NPC slf, var C_NPC oth)// Funkcja ze zmiennymi c_npc
{
if (slf.npctype == NPCTYPE_FRIEND)//Jeśli typ npc naszego npc to przyjaciel
&& (Npc_IsPlayer (oth))// Jeśli gracz jest other czyli chyba bezim
&& (oth.guild < GIL_SEPERATOR_HUM) //Jeśli gracz znajduje się w przedziale dla gildii ludzkich
{
if (slf.guild == GIL_KDF) // Jeśli gildia naszego npc to mag ognia
|| (slf.aivar[AIV_MagicUser] == MAGIC_ALWAYS) // Albo ma wpisany AI magii ustawiony na używanie jej
{//to:
if (Npc_HasItems (slf, ItRu_Sleep) == 0)//Jeśli niema w eq runy pt "SEN"
{//to
CreateInvItems (slf, ItRu_Sleep, 1);//Towrzy ją
};

B_ReadySpell (slf, SPL_Sleep, SPL_Cost_Sleep);// Używa jej
return TRUE; //True story
}
else // A jak nie jest magiem ognia
{
return FALSE; //Nie potwierdzone info
};
};

// ------ Dementor -------
if (slf.guild == GIL_DMT) // Jeśli npc to poszukiwacz
&& (slf.aivar[AIV_MagicUser] == MAGIC_ALWAYS) //Jesli ma wpisany aivar magiczny ustawiony na używanie magii
{
// ------- in die Taschen -------
if (Npc_HasItems (slf, ItRu_InstantFireball) == 0) { CreateInvItems (slf, ItRu_InstantFireball, 1); };
if (Npc_HasItems (slf, ItRu_Deathbolt) == 0) { CreateInvItems (slf, ItRu_Deathbolt, 1); };
if (Npc_HasItems (slf, ItRu_Deathball) == 0) { CreateInvItems (slf, ItRu_Deathball, 1); };
if (Npc_HasItems (slf, ItRu_Firerain) == 0) { CreateInvItems (slf, ItRu_Firerain, 1); };//  Tworzy te runy
if (Npc_HasItems (slf, ItRu_Thunderstorm) == 0) { CreateInvItems (slf, ItRu_Thunderstorm, 1); };
if (Npc_HasItems (slf, ItRu_LightningFlash) == 0) { CreateInvItems (slf, ItRu_LightningFlash, 1); };
if (Npc_HasItems (slf, ItRu_Firestorm) == 0) { CreateInvItems (slf, ItRu_Firestorm, 1); };
if (Npc_HasItems (slf, ItRu_Skull) == 0) { CreateInvItems (slf, ItRu_Skull, 1); };

// ------------------------------

if (Hlp_GetInstanceID(slf) == Hlp_GetInstanceID(DMT_1299_OberDementor_DI)) //Jeśli nasz npc to "Czarny mag"
{
B_ReadySpell (slf, SPL_Skull, SPL_Cost_Skull); // Nasz npc zajebie nam ze skull'a (Ta taka czaszka co killa każdego i zabiera całą manę)
return TRUE;//Prawda
}
else
{
if (Npc_IsDrawingWeapon(slf))
{
return TRUE; // Żeby nic się nie stało jak wyciągnie broń.
};

// ------ Random für eine Serie ------
if (slf.aivar[AIV_SelectSpell] <= 0)// Jeśli AI naszego npc to Wybór czaru mniejszy bądź równy 0.
{
var int dK_rnd; dK_rnd = Hlp_Random(10); // Zmienna randomu (losowania) równa 10
slf.aivar[AIV_SelectSpell] += dK_rnd; //Tym samym dodajemy ją do naszego AI aby jakiś czar mu wylosowało.
};

if (slf.aivar[AIV_SelectSpell] < 10) // Jeśli AI wyboru czaru jest mniejszy niż 10
{
if (Kapitel <= 3) { B_ReadySpell (slf, SPL_InstantFireball , SPL_Cost_InstantFireball); return TRUE; } //jesli rozdział niejszy bądź równy 3 użyje małej kuli ognia
else if (Kapitel <= 4) { B_ReadySpell (slf, SPL_DeathBolt , SPL_Cost_DeathBolt); return TRUE; }// jeśli rozdział mniejszy bądź równy 4 użyje śmiertelnej fali jak dobrze pamiętam.
else /*Kap 5+*/ { B_ReadySpell (slf, SPL_DeathBall , SPL_Cost_DeathBall); return TRUE; };// jak wyżej niż 4 rozdział też Death ball
}
else if (slf.aivar[AIV_SelectSpell] == 10)// Jeśli wybór czaru jest równy 10
{
slf.aivar[AIV_SelectSpell] = 11; // Zamień go na 11

var int dK_Mega; dK_Mega = Hlp_Random(100); // Nowa zmienna randoma. Tym razem liczymy do stu.
if (dK_Mega <= 2) { B_ReadySpell (slf, SPL_Firerain , SPL_Cost_Firerain); return TRUE; }//jak random mniejszy bądź równy 2 to użyje deszczu ognia
else if (dK_Mega <= 5) { B_ReadySpell (slf, SPL_Thunderstorm, SPL_Cost_Thunderstorm); return TRUE; }// jak random mniejszy lub równy 5 to użyje kurwa nie pamietam. No użyje thunderstorma
else if (dK_Mega <= 10) { B_ReadySpell (slf, SPL_LightningFlash, SPL_Cost_LightningFlash); return TRUE; }// Dobra chyba łapiecie ocb?
else /*11-99*/ { B_ReadySpell (slf, SPL_Firestorm, SPL_Cost_Firestorm); return TRUE; };
}
else if (slf.aivar[AIV_SelectSpell] == 12) // Jeśli równy 12
{
slf.aivar[AIV_SelectSpell]=0;// Zamień na 0 xd
};
};

return TRUE; // Tu ma zwracać zawsze true bo inaczej odłoży czar
};
// Co do tych randomów to nie wiem, grałem w g2 milion razy a ani razu nie widziałem aby poszukiwacz walił skullem bądź deszczem ognia xd

// ------ Magier ------
if (slf.guild == GIL_KDF)// Jeśli gildia npc to mag ognia
|| (slf.aivar[AIV_MagicUser] == MAGIC_ALWAYS) // Ma AI używania magii
{
if (Npc_HasItems (slf, ItRu_Concussionbolt) == 0)
{
CreateInvItems (slf, ItRu_Concussionbolt, 1);
};

if (Npc_HasItems (slf, ItRu_InstantFireBall) == 0)
{
CreateInvItems (slf, ItRu_InstantFireBall, 1);
};

if (Npc_HasItems (slf, ItRu_Deathball) == 0)
{
CreateInvItems (slf, ItRu_Deathball, 1);
};

if (Npc_HasItems (slf, ItRu_FullHeal) == 0)
{
CreateInvItems (slf, ItRu_FullHeal, 1); // Tworzy runy już to objaśniałem.
};

if (self.attribute[ATR_HITPOINTS] < 100) // Jak ma mało hp
{
B_ReadySpell (slf, SPL_FullHeal, SPL_Cost_FullHeal);// Się leczy.
return TRUE;// prawda
}
else if (C_NpcHasAttackReasonToKill (self)) // Jednak jeśli nas atakuje w celu zabicia. Noo nas/ czy tam innego npc
{// to
if (self.flags == NPC_FLAG_IMMORTAL) // Jeśli ma flagę immortial
|| (Hlp_GetInstanceID(other) == Hlp_GetInstanceID(Raven))// Lub jeśłi chodzi o kruka
{
B_ReadySpell (slf, SPL_Deathball, SPL_Cost_Deathball); // Nakurwia death ballem
}
else
{
B_ReadySpell (slf, SPL_InstantFireball, SPL_Cost_InstantFireBall);// A jak nie to mała kula ognia
};
return TRUE;
}
else// a jak nie to wyżej
{
B_ReadySpell (slf, SPL_Concussionbolt, SPL_Cost_Concussionbolt);// To zwyczajny concissionbolt
return TRUE;
};
};

// ------ Paladin ------
if (slf.guild == GIL_PAL)// Jeśli to palladyn
{
if (slf.fight_tactic == FAI_NAILED) //Jeśli jego taktyka walki to FAI_NAILED
{
return FALSE;//Nie zwraca prawdy
};

if (Npc_HasItems (slf, ItRu_PalHolyBolt) == 0)
{
CreateInvItems (slf, ItRu_PalHolyBolt, 1);//Tworzy runę
};

if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_MELEE)// Jeśli jejst w jakiejś odległości od swojego przeciwnika
&& (C_NpcIsEvil(oth))// Jeśli przeciwnik jest zły
{
B_ReadySpell (slf, SPL_PalHolyBolt, SPL_Cost_PalHolyBolt);// Uzywa runy
return TRUE;//Prawda
}
else
{
return FALSE; //Jak nie to nie prawda
};
};

// ------ Skelett Magier ------
if (slf.guild == GIL_SKELETON_MAGE)// Jeśli jest szkieletem magiem
{
if (Npc_HasItems (slf, ItRu_SumSkel) == 0)
{
CreateInvItems (slf, ItRu_SumSkel, 1);
};

if (Npc_HasItems (slf, ItRu_IceCube) == 0)
{
CreateInvItems (slf, ItRu_IceCube, 1);
};

if (Npc_HasItems (slf, ItRu_Icebolt) == 0)
{
CreateInvItems (slf, ItRu_Icebolt, 1);// Tworzy runy
};

// ------ Spruchzyklus bei SUMMON beginnen ------
if (slf.aivar[AIV_SelectSpell] >= 6)//Jeśli selekt spell jest większy bądź równy 6
{
slf.aivar[AIV_SelectSpell] = 1; // To zamień na 1
};

if (!Npc_IsInState (oth, ZS_MagicFreeze)) // Jeśli jego przeciwnik jest zamrożony
&& (slf.aivar[AIV_SelectSpell] == 0) // I selekt spell jest równy 0
{
B_ReadySpell (slf, SPL_IceCube, SPL_Cost_IceCube); // Użyje ajskjuba
return TRUE;
}
else if (slf.aivar[AIV_SelectSpell] == 1) //Jeśli jeden
{
B_ReadySpell (slf, SPL_SummonSkeleton, SPL_Cost_SummonSkeleton);// To przywoła szkielety
return TRUE;
}
else
{
B_ReadySpell (slf, SPL_Icebolt, SPL_Cost_Icebolt);// A jak inny to użyje ajsbolta xd
return TRUE;
};
};

// ------ Eisgolem ------
if (slf.guild == GIL_ICEGOLEM) // Jeśli npc to lodowy golem
{
if (Npc_HasItems (slf, ItRu_IceCube) == 0)
{
CreateInvItems (slf, ItRu_IceCube, 1); // Nie tłumaczę
};

if (Npc_GetDistToNpc(slf,oth) < FIGHT_DIST_MELEE) // Jeśli odległość między nim a przeciwnikiem to zmienna bądź stała o nazwie "Fight_Dist_Melee"
|| (Npc_IsInState (oth, ZS_MagicFreeze)) // Lub przeciwnik jest zamrożony
{
return FALSE; //Nie prawda
}
else //Ewentualnie
{
B_ReadySpell (slf, SPL_IceCube, SPL_Cost_IceCube); //Użyje ajskjuba
return TRUE;

};
};

// ------ Feuergolem ------
if (slf.guild == GIL_FIREGOLEM)// Podobnie jak z lodowym, tylko ten jest ognisty
{
if (Npc_HasItems (slf, ItRu_InstantFireball) == 0)
{
CreateInvItems (slf, ItRu_InstantFireball, 1);
};

if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_MELEE)
{
B_ReadySpell (slf, SPL_InstantFireball, SPL_Cost_InstantFireball);
return TRUE;
}
else
{
return FALSE; //Nahkampfangriff
};
};


// ------ Sumpfdrache ------
if (slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_SWAMP)// Jeśli npc to bagienny smok
{
if (Npc_HasItems (slf, ItRu_InstantFireball) == 0)
{
CreateInvItems (slf, ItRu_InstantFireball, 1); //Wiecie
};

if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_DRAGON_MAGIC)// Wiecie
{
B_ReadySpell (slf, SPL_InstantFireball, SPL_Cost_InstantFireball);// Już chyba wiecie
return TRUE;
}
else
{
return FALSE; //Nahkampfangriff
};
};

// ------ Felsdrache ------
if (slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_ROCK)// Jak wyżej tylko smok z fortecy
{
if (Npc_HasItems (slf, ItRu_InstantFireball) == 0)
{
CreateInvItems (slf, ItRu_InstantFireball, 1);
};

if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_DRAGON_MAGIC)
{
B_ReadySpell (slf, SPL_InstantFireball, SPL_Cost_InstantFireball);
return TRUE;
}
else
{
return FALSE; //Nahkampfangriff
};
};

// ------ Feuerdrache ------
if (slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_FIRE)// Jak wyżej tylko smok ognisty
{
if (Npc_HasItems (slf, ItRu_InstantFireball) == 0)
{
CreateInvItems (slf, ItRu_InstantFireball, 1);
};

if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_DRAGON_MAGIC)
{
B_ReadySpell (slf, SPL_InstantFireball, SPL_Cost_InstantFireball);
return TRUE;
}
else
{
return FALSE; //Nahkampfangriff
};
};

// ------ Eisdrache ------
if (slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_ICE)// Jak wyżej tylko smok lodowy
{
if (Npc_HasItems (slf, ItRu_InstantFireball) == 0)
{
CreateInvItems (slf, ItRu_InstantFireball, 1);
};

if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_DRAGON_MAGIC)
{
B_ReadySpell (slf, SPL_InstantFireball, SPL_Cost_InstantFireball);
return TRUE;
}
else
{
return FALSE; //Nahkampfangriff
};
};

// ------ Untoter Drache (ENDGEGNER) ------
if (slf.aivar[AIV_MM_REAL_ID] == ID_DRAGON_UNDEAD)// Jak wyżej tylko smok ożywieniec
{
Npc_ClearAIQueue(self);
if (Npc_HasItems (slf, ItRu_Deathball) == 0)
{
CreateInvItems (slf, ItRu_Deathball, 1);
};

if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_DRAGON_MAGIC)
{
B_ReadySpell (slf, SPL_Deathball, SPL_Cost_Deathball);
return TRUE;
}
else
{
return FALSE; //Nahkampfangriff
};
};

// ------ Ork Schamane ------
if (slf.aivar[AIV_MM_REAL_ID] == ID_ORCSHAMAN) // Jeśli ork szaman reszte wiecie
{
if (Npc_HasItems (slf, ItRu_InstantFireball) == 0)
{
CreateInvItems (slf, ItRu_InstantFireball, 1);
};

if (Npc_GetDistToNpc(slf,oth) > FIGHT_DIST_MELEE)
{
B_ReadySpell (slf, SPL_InstantFireball, SPL_Cost_InstantFireball);
return TRUE;
}
else
{
return FALSE; //Nahkampfangriff
};
};


return FALSE; //wszystkie inne gildie
};

Teraz tak, jeśli załapaliście z grubsza to, to jeszcze pokażę wam jak zrobić swój skrypt systemu czarów dla swojego npc. hmm więc tak kluczowe jest stworzenie  nowego aivara noo w sumie stałej używania czarów:

Idziemy do: _Work/data/scripts/content/AI/Ai_Intern/AI_Constants.d

Szukamy:
const int AIV_MagicUser
zjeżdżacie na dół stałych AI
ostatni to powinien być:
const int AIV_SpellLevel                = 88;

Jeśli robicie na orginalnych skryptach to w linijce 341:
wklejacie:
// ------ Mój aivar magiczny -----
const int AIV_MyAiMage                  = 89;
const int    MAGIC_NOT               = 0;
const int    MAGIC_YES            = 1;

macie spoko:) teraz skrypt npc.Jego nie tłumacze oczywiście:
INSTANCE NONE_9999_Toworish (Npc_Default)
{
// ------ NSC ------
name = "Toworish";
guild = GIL_NONE;
id = 9999;
voice = 14;
flags       = 0;
npctype = NPCTYPE_AMBIENT;

// ------ AIVARS ------
//aivar[AIV_ToughGuy] = TRUE;
//aivar[AIV_ToughGuyNewsOverride] = TRUE;
aivar[AIV_IGNORE_Murder] = TRUE;
aivar[AIV_IGNORE_Theft] = TRUE;
aivar[AIV_IGNORE_Sheepkiller] = TRUE;
aivar[AIV_IgnoresArmor] = TRUE;
aivar[AIV_MyAiMage] = MAGIC_YES;//to jest kluczowe

// ------ Attribute ------
// B_SetAttributesToChapter (self, 6);
//----- Attribute ----
attribute [ATR_STRENGTH] = 0; //Siła
attribute [ATR_DEXTERITY] = 0; //Zręczność
attribute [ATR_HITPOINTS_MAX] = 300; //Maksymalna ilość życia
attribute [ATR_HITPOINTS] = 300; // Aktualna ilość życia
attribute [ATR_MANA_MAX] = 300; //Maksymalna ilość Many
attribute [ATR_MANA] = 300; // Aktualna ilość Many

// ------ Kampf-Taktik ------
fight_tactic = FAI_HUMAN_MASTER; // to jest kluczowe

// ------ Equippte Waffen ------


// ------ Inventory ------
//B_CreateAmbientInv (self);


// ------ visuals ------
B_SetNpcVisual (self, MALE, "Hum_Head_Psionic",Face_N_Xardas , BodyTex_N, ITAR_XARDAS);
Mdl_SetModelFatness (self, 0);
Mdl_ApplyOverlayMds (self, "Humans_Mage.mds");

// ------ NSC-relevante Talente vergeben ------
//B_GiveNpcTalents (self);

// ------ Kampf-Talente ------
//B_SetFightSkills (self, 30);
Npc_SetTalentSkill (self, NPC_TALENT_MAGE, 6);// to też się przyda

// ------ TA anmelden ------
daily_routine = Rtn_PreStart_9999;
};

FUNC VOID Rtn_PreStart_9999 ()
{
TA_Stand_ArmsCrossed (08,00,23,00,"WUJEK");
    TA_Stand_ArmsCrossed (23,00,08,00,"WUJEK");
};

Jeśli nie potrafisz dodać tego npc. Daj se spokój xd

Noo i ostatnie Nasza linijka w B_SelectSpell.d
Zrobimy system w którym npc zależnie od tego ile mamy many lub ile on ma życia  zaatakuje nas małą kulą ognia.
i kilka innych, wszystko z grubsza opisane.

Ważne aby było to przed tą na początku wyjaśnioną linijka:
return FALSE; //wszystkie inne gildie
//-------- Nowy system walki --------------
if (slf.aivar[AIV_MyAiMage] == MAGIC_YES) //Jeśli nasz stworzony wcześniej AI jest równy MAGIC_YES czyli 1
{
if (Npc_HasItems (NONE_9999_Toworish, ItRu_FireBolt) == 0) //Jeśli niema runy
{
CreateInvItems (NONE_9999_Toworish, ItRu_FireBolt, 1); // Tworzy ją
};
if (Npc_HasItems (NONE_9999_Toworish, ItRu_InstantFireball) == 0) //jak wyżej
{
CreateInvItems (NONE_9999_Toworish, ItRu_InstantFireball, 1);
};
if (Npc_HasItems (NONE_9999_Toworish, ItRu_Icelance) == 0)
{
CreateInvItems (NONE_9999_Toworish, ItRu_Icelance, 1); //Jak wyżej
};
if (Npc_HasItems (NONE_9999_Toworish, ItRu_SuckEnergy) == 0)
{
CreateInvItems (NONE_9999_Toworish, ItRu_SuckEnergy, 1);// Jak wyżej
};
if (Npc_HasItems (NONE_9999_Toworish, ItRu_Skull) == 0)
{
CreateInvItems (NONE_9999_Toworish, ItRu_Skull, 1);// Jak wyżej
};
if (Npc_HasItems (NONE_9999_Toworish, ItRu_FullHeal) == 0)
{
CreateInvItems (NONE_9999_Toworish, ItRu_FullHeal, 1);
};



if (NONE_9999_Toworish.attribute[ATR_HITPOINTS] <= 5) //Jeśli nasz npc ma mniej bądź równo 5 hp
{
B_ReadySpell (NONE_9999_Toworish, SPL_FullHeal, SPL_Cost_FullHeal); //Leczy się
return TRUE;
}
if (hero.attribute[ATR_MANA_MAX] <= 30) //Jeśli hero max mana jest mniejsz bądź równe 30
|| (NONE_9999_Toworish.attribute[ATR_HITPOINTS] >= 200) //Lub jeśli nasz npc ma więcej bądź równo 200 hp
// poniższe warunki nie spełnią się dopuki te dwa nie będą niespełnione, czyli jeśli hero będzie miał mniej niż 30 max many
// i jesli hp naszego npc nie będzie mniejsze niż 200
{
B_ReadySpell (NONE_9999_Toworish, SPL_FireBolt, SPL_Cost_FireBolt); //To używa czaru ognistej strzały
return TRUE; //Że potwierdzone info
}
if (Hero.guild == GIL_KDW) // Jeśli hero jest Magiem wody/spełni się dopiero jak dwa wyższe będa niestełnione
{
B_ReadySpell (NONE_9999_Toworish, SPL_InstantFireball, SPL_Cost_InstantFireball); //To npc się nie pierdoli i używa kuli ognia
return TRUE; //Że potwierdzone info
}
if (Hero.guild == GIL_KDF) //Jeśli hero to Mag Ognia
{
B_ReadySpell (NONE_9999_Toworish, SPL_Icelance, SPL_Cost_Icelance); //To npc używa czaru Lodowej lancy
return TRUE; //potwierdzone
}
if (NONE_9999_Toworish.attribute[ATR_HITPOINTS] <= 50) //jeśli nasz npc ma mniej bądź równo 50 hp
&& (NONE_9999_Toworish.attribute[ATR_HITPOINTS] > 10)//ale tylko jeśli ma więcej niż 10 aby argument niżej się wykonał.
{
B_ReadySpell (NONE_9999_Toworish, SPL_Skull, SPL_Cost_Skull); // To wali skullem
return TRUE;
}
if (NONE_9999_Toworish.attribute[ATR_HITPOINTS] == 10) //jeśli nasz npc ma równo 10 hp
{
B_ReadySpell (NONE_9999_Toworish, SPL_SuckEnergy, SPL_Cost_SuckEnergy); // To ssie naszą energię/ tylko przykład, ten czar jest stworzony dla hero, aby działał dla npc trzeba by było go przerobić
return TRUE;
};
};

Dodam tylko że można użyć multum warunków wszystko zależne od wyobraźni, można zrobić nawet warunek że jeśli jakiś tam npc w świecie gry ma ileśtam hp to nasz npc używa danego czaru.

Btw chciałem zrobić żeby npc się cofał o krok za każdym razem gdy zmienia czar, ale zapomniałem warunku xd może ktoś z modderów przeczyta i napisze :)

14
Skrypty / Jak działa mainflag i inne
« dnia: 2016-02-19, 20:10 »
Siema, chciałem prosić o prostą definicję mainflag w sensie co ona dokładnie robi, czy ona daje silnikowi instrukcję działania itemu?

chodzi o to że chciałem sobię zrobic poradnik na temat czaru pod klawisz ale bez waszej pomocy się nie objdzie

wywołam sobię B_ReadySpell (hero, 87, 0); i działa...
Ale kurwa tylko wtedy jak mam runę w eq i właściwie w skrypcie runy wymagane jest tyle:
INSTANCE ItRu_Towo (C_Item)
{
mainflag = ITEM_KAT_RUNE;
spell = SPL_Skull;
};

mainflaga i spell. chyba że macie jakiś pomysł na ominiecie tego. bo robienie efektem, to łooo w chuj roboty i to chyba bezsensownej, chyba że w ikarusie się da, bo takto efekty lecą nie z ręki a z łokcia hero, a jak stoi plecami to z pleców xd, chyba ze da się zwyczajnie ukryć item w eq jakoś ikarusem?

15
Skrypty / Dwa pytania odnośnie chyba ikarusa.
« dnia: 2016-02-13, 17:43 »
Siema, ikarus umożliwia napisanie czegoś takiego jak własny testmode? chodzi mi o komendy głównie że np wpiszemy sobie hp = 500 w grze i zmieni nasze hp na 500 xd jeśli jest to w ogóle możliwe, to czy jest to trudne?

i drugie, jest możliwe coś takiego jak wywoływanie efektu czaru np klawiszem, dokładniej chodzi mi o coś takiego jak zamiast wyciąga runę i się pierdoli to zwyczajnie ma namierzony cel wciska np "p" i odrazu wali w ten cel np kulą ognia czy nawet jak celu niema to wali efektem, tylko tak żeby zadawało obrażenia?

16
Skrypty / Współrzędne zamiast waypoint'a
« dnia: 2015-12-28, 07:55 »
Siema tak wiem że Waypoint to inaczej współrzędne, ale chodziłoby mi raczej o coś takiego jak możliwość ustalania NPC miejsca respawnu oraz rutyny, wskazując mu nie waypoint a współrzędne X,Y,Z które możemy odczytać wpisując marvin klikając alt+p

Cóż nie pytajcie po co mi to, bo po prostu zwyczajnie jest mi to potrzebne, najbardziej chyba z ciekawości, wiem że waypointy są potrzebne bo tworzą waynet po którym poruszają się npc, ale potrzebuje wstawić do gry npc dając mu zwyczajne współrzędne.

17
Sprzęt, oprogramowanie / Legalny Windows 7
« dnia: 2015-12-16, 08:39 »
Siema, zacząłem rozkminiać nad zakupem win7 czytam na necie i są różne wersje oem, box, upgrade.

Hmm...Ze wszystkich wynika że właściwie ograniczają się do użytkowania ich na jednym komputerze, co prawda np box pozwala zmienić komputer na inny, ale mnie raczej interesowało legalne korzystanie z jednej windy na dwóch komputerach które posiadam w domu, przecież to nonsens mieć jeden legalny a drugi Bandycki ^^

Jakie jest wasze zdanie Drodzy parafianie?

18
Siema, wiecie może gdzie dostane pełne spolszczenie wieśka 1 bo szukam na googlach i są spolsczenia, ale spolsczają one chyba tylko jakieś dialogi czy cóś, a np menu i launcher jest english, btw a może poprostu trzeba gdzieś właczyć to spolszczenie, nie mogę zarejestrować gry bo to wersja testowa :> wgl kiedyś grałem w 2 część wieska to miałem ładnie dubbing i napisy polskie, jak na Polską grę przystało

Edit:
Tylko dubbing mam aktualnie po polsku, a napisy i menu nie

Ewentualnie jeśli ktoś ma wieśka1 na kompie to może podesłał by odpowiednie pliki?

19
Offtopic / Błędne Ogniki
« dnia: 2015-12-03, 16:44 »
Siema, jakiś czas temu w sumie nie tak dawno, siedziałem z kilkoma osobami w czym jedna miała około 50 lat i zeszliśmy na temat, nadprzyrodzonych zjawisk, gadka szmatka, a ta osoba 50 mówi no a jak wytłumaczysz błędne ogniki? ja se myśle kurwa co on w gothica grał czy jak xd a ten mi mówi że jak byl mały to bywały sytuacje że się rolnik napierdolił w polu i w ciemną noc jak wstał chuj wie gdzie jest, paczy a tam ognisko, albo światelko i to światełko potrafiło wskazać mu drogę do hałupy ponoć, nie wiem jak w waszych stronach musielibyście się zapytać kogoś starszego xd ogólnie co o tym sądzicie? moze to tylko był wytwór ich umysłów? btw na wiki znalazłem całkowicie przeczące temu dane, piszą że ludzie starali się unikać błędnych ogników xd

20
Pytania i problemy / Modding TES: IV Oblivion
« dnia: 2015-12-02, 20:01 »
Siema, chciałem spytać czy Skyrim 4 też da się modować, czy tylko Skyrim 5 ? btw jest coś takiego jak Polski dubbing do Skyrim 4 i czy da się w Skyrim 4 ustawić obracanie postaci na klawisze "Q" "E"  coś jak w g2?

Strony: [1] 2 3 4
Do góry