Problemy z wstawianiem pierwszych NPC 154612 279

O temacie

Autor Buła

Zaczęty 24.10.2008 roku

Wyświetleń 154612

Odpowiedzi 279

Militiant

Militiant

Użytkownicy
posty32
Profesjabrak
  • Użytkownicy
W Gothic.src mam STORY\NPC\*.d
Co mam tam wpisać?
 

Fabio

Fabio

The Modders
posty3466
Propsy2150
ProfesjaSkrypter
  • The Modders
Nic, bo jest git.

Militiant

Militiant

Użytkownicy
posty32
Profesjabrak
  • Użytkownicy
No to co mam więc zrobić żeby NPCe się pojawiali
 

bogu9821

bogu9821

Użytkownicy
posty404
Propsy185
ProfesjaProgramista
  • Użytkownicy
 
while(false) Do();

Militiant

Militiant

Użytkownicy
posty32
Profesjabrak
  • Użytkownicy
Rutyna Hamlara
Cytuj
FUNC VOID Rtn_Start_2001 ()
{
TA_Position (00,00,22,00,"WP_HAMLARHOME");
TA_Position (22,00,00,00,"WP_HAMLARHOME");
};
Hamlar w pliku startup.d
Cytuj
Wld_InsertNpc            ( SFB_2001_Hamlar, "HAMLARHOME" );//StandAround
A w grze nie mam co pokazać, po prostu ich nie ma.
 

bogu9821

bogu9821

Użytkownicy
posty404
Propsy185
ProfesjaProgramista
  • Użytkownicy
Rutyna Hamlara
Cytuj
FUNC VOID Rtn_Start_2001 ()
{
TA_Position (00,00,22,00,"WP_HAMLARHOME");
TA_Position (22,00,00,00,"WP_HAMLARHOME");
};
Hamlar w pliku startup.d
Cytuj
Wld_InsertNpc            ( SFB_2001_Hamlar, "HAMLARHOME" );//StandAround
A w grze nie mam co pokazać, po prostu ich nie ma.

Zauważ, że w rutynie masz "WP_HAMLARHOME" a w startupie "HAMLARHOME" ;)
 
while(false) Do();

Militiant

Militiant

Użytkownicy
posty32
Profesjabrak
  • Użytkownicy
Okej działa, dzięki wielkie!
 

R4zor

R4zor

Użytkownicy
posty456
Propsy141
ProfesjaGracz
  • Użytkownicy
Chciałbym się dowiedzieć jak dodać nowy rodzaj ciała i twarzy (chodzi o tekstury). Wcześniej próbowałem samemu sobie jakoś poradzić:
1. Dodałem tekstury w formacie .tga do odpowiednich folderów
Hum_Body_Naked_V15_C0 (Textures/NPCs/Body) i Hum_Head_V170_C0 (Textures/NPCs/Head)
2. Następnie dopisałem w AI_Constants.d -> const int Body_Tex_D = 15; (dla ciała) Face_N_Tester = 170; (dla twarzy)
3. Zmieniłem w "visuals" w skrypciem mojej postaci:
Mdl_SetVisual      (self,"HUMANS.MDS");
Mdl_SetVisualBody (self,   "hum_body_Naked0", Body_Tex_D, 0,   "Hum_Head_Bald", Face_N_Tester, 0, ITAR_MayaZombie_Addon);

Mimo powyższych zmian/poprawek postać po przywołaniu jej w grze ma inny wygląd (przedostatni rodzaj tekstury twarzy i ciała z AI_Constants.d
tzn. Face_N_ZombieMud = 162 oraz BodyTexBabe_S = 12)

Dziękuję z góry za wszelkie podpowiedzi i pomoc.

Fabio

Fabio

The Modders
posty3466
Propsy2150
ProfesjaSkrypter
  • The Modders
Pokaż kod.

Cruc

Cruc

Użytkownicy
posty666
Propsy232
Profesjabrak
  • Użytkownicy
A skompilowało w ogóle Twoje tekstury?
 
while (!success) try{...}

Najlepszy modder od gothic multiplayer - polecam pytać go o wszystko!

R4zor

R4zor

Użytkownicy
posty456
Propsy141
ProfesjaGracz
  • Użytkownicy

Postać robiłem wzorując się na kodzie PC_ItemFeller.d
kod postaci
INSTANCE mr_Tester(NPC_DEFAULT)
// PlayerInstanz
{
   //-------- primary data --------
   name          = "Tester";
   Npctype         = NPCTYPE_MAIN;
   guild         = GIL_NONE;
   level         = 30;
   voice         = 15;
   id            = 2002;
   
   //--------- abilities --------
   attribute[ATR_STRENGTH] =      100;
   attribute[ATR_DEXTERITY] =      100;
   attribute[ATR_MANA_MAX] =      400;
   attribute[ATR_MANA] =         400;
   attribute[ATR_HITPOINTS_MAX] =   400;
   attribute[ATR_HITPOINTS] =      400;
   
   exp            = (500*((level+1)/2)*(level+1));
   exp_next      = (500*((level+2)/2)*(level+1));

//-------- visuals --------
   //                   animations
   Mdl_SetVisual      (self,"HUMANS.MDS");
   //                     Body-Mesh         Body-Tex      Skin-Color   Head-MMS          Head-Tex      Teeth-Tex    Armor-Tex
   Mdl_SetVisualBody (self,   "hum_body_Naked0",    BodyTex_D,      0,         "Hum_Head_Pony",    Face_N_Tester,   0,          ITAR_MayaZombie_Addon);
   //oryginalnie: Mdl_SetVisualBody (self,   "hum_body_Naked0",    BodyTex_Player,   0,         "Hum_Head_Bald",    FACE_N_Player,   0,          ITAR_PAL_H);
Reszta kodu jest identyczna jak u Itemfellera (tzn. ekwipunek, zdolności itd. nie ruszałem tego).
A tutaj fragment jak to wygląda w AI_Constants:
// *****************************
// Konstanten für B_SetNpcVisual
// *****************************

// ------ Nacktmesh-Texturen für Männer und Frauen (je 4) ------
//---------ADD ON----------------------
const int BodyTex_T = 10; //tätowierte psionikerhaut
const int BodyTexBabe_F = 11; //Fellkragen Babe
const int BodyTexBabe_S = 12;//das kleine Schwarze

//nowe
const int BodyTex_D = 15;

// ------- Gesichter für Männer ------
/-----------------ADD ON---------------------------------
const int Face_N_Fortuno = 159;

//Piraten
const int Face_P_Greg = 160;
const int Face_N_Pirat01 = 161;
const int Face_N_ZombieMud = 162;

//nowe
const int Face_N_Tester = 170;

@Cruc no właśnie nie, musiałem ręcznie je skompilować do formatu .TEX ( Hum_Body_Naked_V15_C0-C.TEX i Hum_Head_V170_C0-C.TEX)

Fabio

Fabio

The Modders
posty3466
Propsy2150
ProfesjaSkrypter
  • The Modders
Raczej to ma nic do rzeczy, ale ostatnie to 162, a ty od razu 170 wrzuciłeś. Weź może ustaw o numer jeden większy i sprawdź różnice. Czyli ustaw Face_N_Tester = 163;

R4zor

R4zor

Użytkownicy
posty456
Propsy141
ProfesjaGracz
  • Użytkownicy
Spróbowałem wprowadzając tą małą zmianę, niestety nadal nie działa.
Ponownie wrzuciłem też odpowiednie tekstury do folderu (oczywiście usuwając stare _compiled) i zauważyłem, że nowe tekstury ciała jak i twarzy nie chcą się automatycznie skompilować tj. poprzednim razem, muszę robić to ręcznie.

Fabio

Fabio

The Modders
posty3466
Propsy2150
ProfesjaSkrypter
  • The Modders
Jeśli nie chcą się kompilować, to jest to jakiś znak, że jest coś z nimi nie tak. Co to za tekstury? Własne czy z neta? Ręcznie konwertując do .tex używasz gomana?

R4zor

R4zor

Użytkownicy
posty456
Propsy141
ProfesjaGracz
  • Użytkownicy
Tekstury są z neta; gdy je konwertuje do .tex gomanem plik ma mniejszą objętość (oryginalne mają po 171 KB, a dodane przeze mnie tylko 129). Spróbuję użyć innej tekstury i dam znać czy będzie poprawnie działać.

Edit: Nadal występuje ten sam problem, ale myślę że pewnie jest tj. wyżej napisane - wina tekstur. Prawdopodobnie po reinstalacji gothica i narzędzi do niego wszystko będzie działać. Dzięki za pomoc.

R4zor

R4zor

Użytkownicy
posty456
Propsy141
ProfesjaGracz
  • Użytkownicy
Po ponownej instalacji gothica wszystko działa poprawnie - dodałem nowe tekstury twarzy i ciała. Pojawił się jednak pewien mały defekt graficzny:
screen
Ta ziarnistość/migotanie tekstur nie jest jakimś palącym problemem, aczkolwiek gryzie się z pozostałymi, oryginalnymi teksturami. Jak ktoś zna rozwiązanie tego problemu, niech da znać.
Dziękuję wszystkim za pomoc.

Fabio

Fabio

The Modders
posty3466
Propsy2150
ProfesjaSkrypter
  • The Modders
Jak konwertujesz gomanem to przy mipmap musi być większa wartość.

R4zor

R4zor

Użytkownicy
posty456
Propsy141
ProfesjaGracz
  • Użytkownicy
Dawno nie modyfikowałem skryptów w Gothicu 2 dlatego chciałbym zapytać o parę kwestii.

Skrypt postaci (Nazwa pliku: pc_hermes | Lokalizacja: _Work/Data/Scripts/Content/Story/NPC)
instance pc_hermes(NPC_DEFAULT)
{
name[0] = "Hermes";
guild = GIL_NONE;
id = 5000;
voice = 5;
flags = NPC_FLAG_IMMORTAL;
npctype = NPCTYPE_FRIEND;

b_setattributestochapter(self,6);
fight_tactic = FAI_HUMAN_MASTER;

b_createambientinv(self);
EquipItem(self,itmw_1h_pal_sword);

b_setnpcvisual(self,MALE,"Hum_Head_Pony",FACE_N_LEFTY,BODYTEX_N,ITAR_SLD_M);
Mdl_SetModelFatness(self,0);
Mdl_ApplyOverlayMds(self,"Humans_Relaxed.mds");

b_givenpctalents(self);
b_setfightskills(self,65);

daily_routine = rtn_start_5000;
};

func void rtn_start_5000()
{
ta_smoke_joint (8,0,10,0,"NW_XARDAS_TOWER_IN1_31");
ta_stand_armscrossed (10,0,23,0,"NW_XARDAS_TOWER_IN1_31");
ta_sleep (23,0,8,0,"NW_XARDAS_TOWER_IN1_31");
};


Pytania:
1. Jakie pliki potrzebne są tylko do dodania postaci do świata i jak je poprawnie zmodyfikować?
Dodaję postać do _Work/Data/Scripts/Content/Story/NPC i reparsuję skrypty GothicStarter_mod -> wpisując w konsolę kod "pc_hermes" nie pojawia się żadna postać (tak jakby nie istniała w plikach gry...)
Dodając go do startup.d:
func void startup_newworld_part_xardas_01()
{

   Wld_InsertNpc(pc_hermes,"NW_XARDAS_START");
   Wld_InsertNpc(none_100_xardas,"NW_XARDAS_START");

};

przy uruchamianiu gry wyskakuje błąd: U:PAR:CONTENT\STORY\STARTUP.D: Uknown Identifier: PC_HERMES
EDIT:
Dopiero gdy ręcznie wpiszę go w plik Gothic.src wszystko działa poprawnie... tzn. postać pojawia się w świecie gry, kod działa i nie ma błędów.

2. ^Dlaczego nie uwzględnia mi dodanego npca przy reparsowaniu skryptów? (tylko muszę ręcznie dodawać jak pisałem wyżej)

3. Jak dokładnie używać redefixa do dialogów, bo u mnie wyskakuje następujący błąd:
https://imgur.com/a/pCFww7Y
<----------- z tym sobie poradziłem

Z góry dziękuję za pomoc i udzielone odpowiedzi.

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
1., 2. Wpis STORY\NPC\*.d w gothic.src powinien być wcześniej niż wpis STORY\Startup.d

MrSnooker

MrSnooker

Użytkownicy
posty13
Profesjabrak
  • Użytkownicy


Dzisiaj o 21:34

    Szybka Edycja
    Więcej

Witam, stworzona postać nie chce zmienić rutyny. próbowałem komend takich jak:

B_StartOtherRoutine (self,"wait");
i
Npc_ExchangeRoutine (self,"wait");
kod postaci wygląda tak:

instance NONE_01_Test(NPC_DEFAULT)
{
name[0] = "Test";
guild = GIL_NONE;
id = 01;
voice = 7;
flags = NPC_FLAG_IMMORTAL;
npctype = NPCTYPE_MAIN;
aivar[AIV_TOUGHGUY] = TRUE;
aivar[AIV_TOUGHGUYNEWSOVERRIDE] = TRUE;
aivar[AIV_IGNORE_THEFT] = TRUE;
b_setattributestochapter(self,6);
fight_tactic = FAI_HUMAN_MASTER;
EquipItem(self,itmw_2h_sld_sword);
b_setnpcvisual(self,MALE,"Hum_Head_Bald",FACE_B_NORMAL_KIRGO,BODYTEX_B,itar_djg_crawler);
Mdl_SetModelFatness(self,0);
Mdl_ApplyOverlayMds(self,"Humans_MILITIA.mds");
b_givenpctalents(self);
b_setfightskills(self,60);
daily_routine = rtn_prestart_01;
};


func void rtn_prestart_01()
{
ta_Stand_Armscrossed(8,0,23,0,"MOB_01");
ta_Stand_Armscrossed(23,0,8,0,"MOB_01");
};

func void rtn_wait_01()
{
ta_Stand_Eating(8,0,23,0,"MOB_03");
ta_Stand_Eating(23,0,8,0,"MOB_03");
};

kod w dialogach, gdzie chcę tego użyć:


func void DIA_NONE_01_Test_zadanie_info()
{
AI_Output(other,self,"DIA_NONE_01_Test_zadanie_15_00"); //Co mam zrobić?
AI_Output(self,other,"DIA_NONE_01_Test_zadanie_01_01"); //Zbierz 5 roślin leczniczych i 2 menzurki.
Log_CreateTopic (TOPIC_ADDON_TEST1, LOG_MISSION);
Log_SetTopicStatus (TOPIC_ADDON_TEST1, LOG_RUNNING);
B_LogEntry (TOPIC_ADDON_TEST1, "Mam zebrać 5 roślin leczniczych i 2 menzurki.");
AI_Output(other,self,"DIA_NONE_01_Test_zadanie_15_02"); //Jasne.
AI_Output(self,other,"DIA_NONE_01_Test_zadanie_01_02"); //Jak już zbierzesz co trzeba wróć do mnie, sprawdzimy inne rodzaje zadań.
AI_StopProcessInfos(self);
B_StartOtherRoutine (self,"wait");
};
Zamiana kolejności z ai_stopprocessinfos nic nie daje, zmiana nazwy rutyny również. Postać dalej stoi w miejscu ze skrzyżowanymi rękami, zamiast przemieścić się jesć w inne miejsce. Skrypt podczas kompilacji bez błędów.
 


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