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.


Wiadomości - Graveir

Strony: [1] 2 3 ... 76
1
Skrypty / Przedmioty z kategorii pozostałe
« dnia: 2021-01-24, 14:07 »
Takie szybkie pytanie. Poprzenosiłem sobie parę rzeczy z G1 do G2 i jest mały problem z wyświetlaniem ich wartości podczas handlu. Bo o ile wszystkie pozostałe rzeczy, typu bronie, pisma itp w trakcie handlu pokazują ich wartość sprzedaży, tak przedmioty z kategorii "pozostałe" typu trofea zwierzęce, kubki i reszta mają pokazaną wartość ogólną. Z podstawowymi przedmiotami(z G2) tego problemu nie ma. Czy tak powinno być czy po prostu tak przekombinowałem u siebie grę, że się popsuła pod tym względem?

2
Od dwóch-trzech dni mam problem z błędem znajdującym się w tytule. Na dsc padło podejrzenie, że mogłem coś pojebać z Humans.mds, więc wyciągnąłem plik Humans.msb i Humans.mdh z oryginalnego .vdfa G2, zdekompilowałem Gothic Sourcerem i podmieniłem plik Humans.mds z moimi przeróbkami na ten oryginalny(kasując wcześniej z folderu _compiled w/w Humansy). I nic to nie dało. Problem pojawia się w momencie wygenerowania pliku Humans.msb(jeśli usunę go i zacznę nową grę, to za pierwszym razem błąd nie wyskakuje, natomiast przy drugim odpaleniu nowej gry[czyli w momencie, kiedy plik jest wygenerowany] wyskakuje błąd).
https://ibb.co/xFBrdXk <-- screen błędu
https://ibb.co/nmNT5zt <-- końcówka Zspy z błędem

3
Podbijam

4
Skrypty / Gothic 2 npc nie reaguje na wyciągnięty czar.
« dnia: 2020-10-25, 17:45 »
Mam dwa problemy z wymienionym tematem. A mianowicie:
1)Wyciągam czar, który ma zmienione nazwy visualfx i pfx(różniące się od "nazwy czaru") i npc mają wywalone na fakt ich wyciągnięcia. Więc zamiast powiedzieć "Skończ z tą magią" po prostu nie reagują. Jednak czar "wyświetla" się poprawnie w ręce.
2)Wyciągam czar, który ma takie same nazwy(przykładowo Firerain2 w każdym skrypcie) i npc na niego reagują, jednak zamiast pojawić się odpowiedni efekt w ręce, jest trzymana runa.
Dodatkowo za ubicie czarem nie dostaję expa, a npc zamiast oglądać walkę i przykładowo zaatakować nas po zabiciu innego npc'a, mówią tylko "O walka" i wracają do swoich rutyn(nawet nie atakują).
Skrypt czaru(lekkie zmiany w stosunku do tego, co podrzucał Nefario z Rozdroży)
const int SPL_COST_Pyrokinesis1 = 10;
const int SPL_DAMAGE_Pyrokinesis1 = 30;
 
instance Spell_Pyrokinesis1(C_Spell_Proto)
{
time_per_mana = 500;
damage_per_level = SPL_DAMAGE_Pyrokinesis1;
spellType = SPELL_BAD;
damagetype = DAM_MAGIC;
targetCollectAlgo = TARGET_COLLECT_FOCUS;
targetCollectRange = 1000;
targetCollectType = TARGET_TYPE_NPCS;
};
 
 
func int Spell_Logic_Pyrokinesis1(var int manaInvested)
{
if(!Npc_IsInState(other,zs_psidefense) || Npc_IsPlayer(other))
{
if(self.attribute[ATR_MANA] < SPL_COST_Pyrokinesis1)
{
return SPL_DONTINVEST;
};
if(Npc_GetActiveSpellIsScroll(self))
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll;
}
else
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_COST_Pyrokinesis1;
};
Npc_ClearAIQueue(other);
AI_StandupQuick(other);
AI_StartState(other,zs_psidefense,1,"");
B_MagicHurtNpc(self,other,SPL_DAMAGE_Pyrokinesis1);
if(other.attribute[ATR_Hitpoints] <= 0)
{
Npc_ClearAIQueue(other);
AI_Standup(other);
return SPL_SENDCAST;
};
}
else if(Npc_IsInState(other,zs_psidefense))
{
if(self.attribute[ATR_MANA] < SPL_COST_Pyrokinesis1)
{
return SPL_DONTINVEST;
};
if(Npc_GetActiveSpellIsScroll(self))
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll;
}
else
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_COST_Pyrokinesis1;
};
Npc_ClearAIQueue(other);
AI_StandupQuick(other);
AI_StartState(other,zs_psidefense,1,"");
B_MagicHurtNpc(self,other,SPL_DAMAGE_Pyrokinesis1);
if(other.attribute[ATR_Hitpoints] <= 0)
{
Npc_ClearAIQueue(other);
AI_Standup(other);
return SPL_SENDCAST;
};
};

/* if(self.attribute[ATR_MANA] < SPL_COST_Pyrokinesis1)
{
return SPL_DONTINVEST;
};
*/

/* if(Npc_GetStateTime(other) >= 1)
{
Npc_SetStateTime(other,0);
//B_MagicHurtNpc(self,other,SPL_DAMAGE_Pyrokinesis1);
if(Npc_GetActiveSpellIsScroll(self))
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_Cost_Scroll;
}
else
{
self.attribute[ATR_MANA] = self.attribute[ATR_MANA] - SPL_COST_Pyrokinesis1;
};
if(other.attribute[ATR_Hitpoints] <= 0)
{
Npc_ClearAIQueue(other);
AI_Standup(other);
return SPL_SENDCAST;
};
};
*/
return SPL_NEXTLEVEL;
};
 
func void Spell_Cast_Pyrokinesis1(var int spellLevel)
{
self.aivar[AIV_SelectSpell] += 1;
};
Wpisy do Constants.d
const int SPL_Pyrokinesis1 = 125;
"Pyrokinesis1" // 125 SPL_Pirokineza
Wpis do Spell_ProcessMana.d
if (activeSpell == SPL_Pyrokinesis1 ) { return Spell_Logic_Pyrokinesis1 (manaInvested); };
ZS_Psidefense.d
func void ZS_PsiDefense()
{
PrintDebugNpc (PD_ZS_CHECK, "ZS_PsiDefense");

Npc_PercEnable  (self, PERC_ASSESSDAMAGE , ZS_ReactToDamage);
Npc_PercEnable (self, PERC_ASSESSSTOPMAGIC, B_StopPsiDefense);

if ( !Npc_HasBodyFlag(self, BS_FLAG_INTERRUPTABLE) )
{
PrintDebugNpc (PD_MAGIC, "bodystate not interuptable, standing up...");
AI_StandUp (self);
};
};


func void ZS_PsiDefense_Loop()
{
PrintDebugNpc (PD_ZS_LOOP, "ZS_PsiDefense Loop");
if ( !Npc_IsDead(self) && !Npc_IsInState(self, ZS_Unconscious) && !C_BodystateContains(self,BS_SWIM) &&  !C_BodystateContains(self,BS_DIVE) )
{
PrintDebugNpc (PD_MAGIC, "...NSC ist nicht bewußtlos / tot / schwimmend / tauchend");
AI_PlayAni (other, "S_CON_VICTIM");
};
};


func void ZS_PsiDefense_End()
{
PrintDebugNpc (PD_ZS_CHECK, "ZS_PsiDefense End");

};

func void B_StopPsiDefense ()
{
Npc_PercEnable (self, PERC_ASSESSMAGIC, B_AssessMagic); //falls in diesem Frame (während des Ausführens des B_) noch ein neuer Spruch wirkt

Npc_ClearAIQueue(self);
AI_StandUp (self);

if (self.guild < GIL_SEPERATOR_HUM)
{
B_AssessDamage();
AI_ContinueRoutine (self);
}
else
{
Npc_SetTempAttitude (self, ATT_HOSTILE);
AI_ContinueRoutine (self);
};
};
VisualFXInst.d
INSTANCE spellFX_Pyrokinesis1(CFx_Base_Proto)
{
visname_S = "MFX_Pyrokinesis1_INIT";
visAlpha = 1;

emtrjmode_s = "FIXED";
emTrjOriginNode = "ZS_RIGHTHAND";
emtrjtargetnode = "BIP01 HEAD";
emtrjnumkeys = 1;
emtrjnumkeysvar = 1;
emtrjangleelevvar = 15;
emtrjangleheadvar = 0;
emtrjdynupdatedelay = 0;
emFXInvestTarget_S = "spellFX_Pyrokinesis1_target";
emTrjTargetRange = 0;
emTrjTargetElev = 0;

};


INSTANCE spellFX_Pyrokinesis1_KEY_CAST (C_ParticleFXEmitKey)
{
pfx_ppsIsLoopingChg = 1;
};

INSTANCE spellFX_Pyrokinesis1_TARGET(CFx_Base_Proto)
{
visname_S = "MFX_Pyrokinesis1_TARGET";

emtrjmode_s = "FIXED";
emTrjOriginNode = "BIP01 HEAD";
lightPresetname = "FIRESMALL";
emTrjTargetRange = 0;
emTrjTargetElev = 0;
sendAssessMagic = 1;
emtrjdynupdatedelay = 0.01;

sfxid = "MFX_Telekinesis_target";
sfxisambient = 1;
};
PFXInstMagic.d
INSTANCE MFX_Pyrokinesis1_INIT (C_PARTICLEFX)
{
     ppsvalue = 800.000000000;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 1.000000000;
     shptype_s = "SPHERE";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "15";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2.000000000;
     dirmode_s = "NONE";
     dirfor_s = "object";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180.000000000;
     dirangleelevvar = 180.000000000;
     velavg = 0.010000000;
     lsppartavg = 150.000000000;
     flygravity_s = "0 0 0";
     flycolldet_b = 0;
     visname_s = "HUMANBURN.TGA";
     visorientation_s = "VELO";
     vistexisquadpoly = 1;
     vistexanifps = 18.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "255 255 255";
     vistexcolorend_s = "255 150 0";
     vissizestart_s = "5 5";
     vissizeendscale = 8.000000000;
     visalphafunc_s = "ADD";
     visalphastart = 255.000000000;
};

INSTANCE MFX_Pyrokinesis1_ORIGIN (C_PARTICLEFX)
{
     ppsvalue = 20.000000000;
     ppsscalekeys_s = "3 2 1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 2.000000000;
     shptype_s = "SPHERE";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpisvolume = 1;
     shpdim_s = "30";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2.000000000;
     dirmode_s = "TARGET";
     dirfor_s = "object";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180.000000000;
     dirangleelevvar = 180.000000000;
     velavg = 0.008000000;
     velvar = 0.029999999;
     lsppartavg = 2000.000000000;
     flygravity_s = "0 0 0";
     flycolldet_b = 0;
     visname_s = "FIREFLARE.TGA";
     visorientation_s = "NONE";
     vistexanifps = 18.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "255 220 220";
     vistexcolorend_s = "255 220 220";
     vissizestart_s = "10 10";
     vissizeendscale = 8.000000000;
     visalphafunc_s = "ADD";
     visalphastart = 100.000000000;
};

INSTANCE MFX_Pyrokinesis1_TARGET (C_PARTICLEFX)
{
     ppsvalue = 50.000000000;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 2.000000000;
     shptype_s = "SPHERE";
     shpfor_s = "WORLD";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "200";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2.000000000;
     dirmode_s = "TARGET";
     dirfor_s = "object";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180.000000000;
     dirangleelevvar = 180.000000000;
     velavg = 0.300000012;
     lsppartavg = 1000.000000000;
     flygravity_s = "0 0 0";
     flycolldet_b = 0;
     visname_s = "FIREFLARE.TGA";
     visorientation_s = "NONE";
     vistexanifps = 18.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "20 0 0";
     vistexcolorend_s = "255 200 200";
     vissizestart_s = "10 10";
     vissizeendscale = 20.000000000;
     visalphafunc_s = "ADD";
     visalphastart = 255.000000000;
     visalphaend = 50.000000000;
     trlfadespeed = 0.400000006;
     trltexture_s = "MFX_PYROKINESIS_TARGETTRAIL.TGA";
     trlwidth = 4.000000000;
};
Więc przy tym, co jest teraz, wywołuje się "akcja" problemu nr 2.

5
Skrypty / NPC nie reaguje na walkę z bandytą
« dnia: 2020-10-04, 16:25 »
Wszystkich npc'ów, którzy nie widzą przeciwnika. Chwilowo zrobiłem coś takiego
if (Npc_GetAttitude(self, other) == ATT_HOSTILE)
|| (Npc_GetAttitude(self, victim) == ATT_HOSTILE)
&& (self.guild != GIL_BDT)
{

if (other.guild == GIL_BDT)
{
B_Attack (self, other, AR_GuildEnemy, -1);
Print("1");//Sonderfall: Weiter im Text (BDT werden oben abgehandelt)
return;
}
else
{
B_Attack (self, victim, AR_GuildEnemy, -1);
Print("2");
return;
};
};
I w tym wypadku npc się odwraca i atakuje bandytę, tylko nie wiem, czy później to się nie odbije na jakiś innych postaciach(aczkolwiek w przypadku pirata, który nie jest agresywnie nastawiony, npc się odwraca i ogląda walkę - czyli tak, jak być powinno).

6
Skrypty / NPC nie reaguje na walkę z bandytą
« dnia: 2020-10-04, 12:35 »
Próbowałem pozmieniać w plikach wartości AIV_EnemyOverride true na false i na odwrót. Jednak nic to nie dało. A to Invicible wygląda na to, że dotyczy tylko rozmów, żeby postać nie była atakowana.
Edit: Wygląda na to, że coś tutaj leży
// ------ NUR in WatchFight gehen, wenn kein Feind am Start ------
if (Npc_GetAttitude(self, other) == ATT_HOSTILE)
|| (Npc_GetAttitude(self, victim) == ATT_HOSTILE)
{

if (self.guild == GIL_BDT)
{
Print("1");//Sonderfall: Weiter im Text (BDT werden oben abgehandelt)
}
else
{
Print("2");
Npc_SendPassivePerc    (self, PERC_ASSESSFIGHTSOUND, self, other);
return;
};
};
Przy ataku bandyty(GIL_BDT w skrypcie) npc ma wywalone, dopóki nie stanie mu przed oczami, gdzie każdy pozostały, który jest na linii wzroku atakuje go. Natomiast jeśli zmienię self.guild na other.guild, wtedy postać się obraca, ale zamiast atakować bandytę, to ogląda walkę(czyli Print 1 się wyzwala), a przy normalnym wariancie wyskakuje print 2 bez obracania.

7
Skrypty / NPC nie reaguje na walkę z bandytą
« dnia: 2020-10-03, 15:03 »
Hej, takie pytanie. Od jakiegoś czasu próbuję ogarnąć sprawę dołączania innych npc'ów do walki z postacią bandyty. Jednak nie mogę znaleźć, w którym pliku to może siedzieć, bo w B_Attack i ZS_Attack próbowałem pozmieniać/pododawać parę opcji, które teoretycznie mogłyby "naprawić" problem. A mianowicie chodzi o to, że jeśli wdam się w walkę z innym npc'em(lub potworem), który nie należy do bandytów, to pozostałe postacie w zasięgu percepcji reagują na walkę(obserwują), natomiast jeśli za plecami takiego npc'a walczę z bandytą, to dopóki nie pokaże się praktycznie przed twarzą npc'a, to ten go nie zaatakuje.

8
@outlander Obok freepointa do SmallTalka dodałem waypoint SMALLTALK_KOPACZ i umieściłem go w skrypcie kopacza - i teraz normalnie podchodzi i gada.
@Fabio Akurat to nie jest oryginalny świat. To po prostu zen przekonwertowany przez GothicZen, więc mogą być jakieś komplikacje. Ale po zapisaniu i wczytaniu gry kopacz stoi już normalnie. I włączyłem w Gothic.ini subTitles=1
subTitlesPlayer=1
subTitlesAmbient=0
subTitlesNoise=1
Ale fakt, jest to dość mocno zbugowane, bo po wczytaniu pokaże 1 dialog i następnych już nie pokazuje. A Uniona i tak nie mogę używać, bo "operuję" na Ikarusie + Lego. Aczkolwiek dzięki.

9
Hai. Mam taki dziwny problem, że dodałem sobie parę postaci i w ich rutynach pododawałem TA_Smalltalk w bliskich sobie Freepointach, żeby było wiadomo, która postać gada z którą. Jednak o ile Jesse(pierwszy skrypt) o godzinie 14 poprawnie wykonuje swoją rutynę i staje w danym freepoincie, to kopacz(skrypt drugi) stoi jak wryty i się nie rusza. Dopiero jak wejdę za pomocą marvina w jego ciało i podejdę +- 4 cm w stronę Jessiego, to odblokowuje się i normalnie prowadzi rozmowę. Gdzie jest pies pogrzebany?
instance VLK_564_Jesse (Npc_Default)
{
//-------- primary data --------

name = "Jesse";
npctype = npctype_main;
guild = GIL_NONE;     
level = 4;


voice = 20;
id = 7038;


//-------- abilities --------

attribute[ATR_STRENGTH] = 20;
attribute[ATR_DEXTERITY] = 10;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
attribute[ATR_HITPOINTS_MAX] = 88;
attribute[ATR_HITPOINTS] = 88;

//-------- visuals --------
// animations
Mdl_SetVisual (self,"HUMANS.MDS");
Mdl_ApplyOverlayMds (self,"Humans_Tired.mds");
// body mesh, head mesh, hairmesh, face-tex, hair-tex, skin
Mdl_SetVisualBody (self,"hum_body_Naked0",2,1,"Hum_Head_FatBald", Face_N_NormalBart_Huno,  1,VLK_ARMOR_L);

fight_tactic = FAI_HUMAN_COWARD;


//-------- Talents  --------                                   

////Npc_SetTalentSkill (self, NPC_TALENT_1H,1);

//-------- inventory --------                                   

EquipItem (self, ItMw_1h_Nailmace_01);
CreateInvItem (self, ItMwPickaxe);
CreateInvItem (self, Itfo_Potion_Water_01);

aivar[AIV_GUILD] = KOP;
//-------------Daily Routine-------------
daily_routine = Rtn_Start_7038;
};



FUNC VOID Rtn_start_7038 ()
{
TA_Stand_Drinking (08,00,12,00,"OCR_OUTSIDE_HUT_66");
TA_Cook_Pan (12,00,14,00,"OCR_OUTSIDE_HUT_63_COOK");
TA_Smalltalk (14,00,17,00,"FP_SMALLTALK_A_EFIRE_D");
TA_Sit_All (17,00,20,00,"SIT_1");
TA_Sleep (20,00,08,00,"OCR_HUT_66");
};
A tu skrypt Kopacza
instance VLK_575_Buddler (Npc_Default)
{
//-------- primary data --------

name = "Kopacz";
npctype = npctype_ambient;
guild = GIL_NONE;     
level = 4;


voice = 20;
id = 7039;


//-------- abilities --------

attribute[ATR_STRENGTH] = 20;
attribute[ATR_DEXTERITY] = 10;
attribute[ATR_MANA_MAX] = 0;
attribute[ATR_MANA] = 0;
attribute[ATR_HITPOINTS_MAX] = 88;
attribute[ATR_HITPOINTS] = 88;

//-------- visuals --------
// animations
Mdl_SetVisual (self,"HUMANS.MDS");
Mdl_ApplyOverlayMds (self,"Humans_Tired.mds");
// body mesh, head mesh, hairmesh, face-tex, hair-tex, skin
B_SetNpcVisual (self, MALE, "Hum_Head_Bald", Face_N_NormalBart17, BodyTex_N, NO_ARMOR);
Mdl_SetModelFatness (self, 0);

fight_tactic = FAI_HUMAN_COWARD;

//-------- Talents --------                                   
aivar[AIV_GUILD] = KOP;

//-------- inventory --------                                   

EquipItem (self, ItMw_1h_Club_01);
CreateInvItem (self, ItFoApple);


//-------------Daily Routine-------------
daily_routine = Rtn_start_7039;
};

FUNC VOID Rtn_start_7039 ()
{
TA_Sleep (22,45,06,30,"OCR_HUT_67");
TA_Stand_Eating  (06,30,14,00,"OCR_OUTSIDE_HUT_67");
TA_Smalltalk (14,00,17,00,"FP_SMALLTALK_B_FIRE_E");
TA_Sit_All (17,00,22,45,"SIT_3");
};
2)Dodatkowo, jest jakiś "ludzki" sposób na zamienie instancji przedmiotu potrzebnego do otwierania skrzyni, jeśli nie ma się bazowego? Coś na zasadzie, że jeśli gra odczyta, że nie mamy w ekwipunku wytrychu(itke_lockpick), ale mamy przedmiot (itmi_wytrych), to nadal możemy próbować włamać się do skrzyni(i przy porażce tracimy ten drugi przedmiot)?
3)Pamięta ktoś, gdzie się włączało te boxy do dialogów "zewnętrznych", typu właśnie SmallTalk? Że widzimy, o czym rozmawiają postacie "między sobą"
4)I chwilowo ostatnie pytanie - jeśli postać kopacza(dodana do Startup.d) stoi dość nienaturalnie po rozpoczęciu gry, to może być to wina podłoża(nierówności/krzywa mapa itp)? Na zdjęciu widać, że wygląda to tak, jakby stał na jednej nodze.
https://imgur.com/a/6XneMOP

10
Znaczy wiem, gdzie leży błąd(przynajmniej teoretycznie), tylko po prostu chciałem wiedzieć, czy możliwe jest przejście gry pomimo tego.

11
Pytanie krótkie i zwięzłe. Czy ciągłe wyskakiwanie AV po wyłączeniu gry może uszkodzić zapisy gry? A jeśli tak, to czy na 100% czy to kwestia losowości - jednym uszkodzi, a innym nie?

12
Pytania i problemy / Gothic 2 - pozycja gracza na mapie?
« dnia: 2020-03-09, 22:33 »
Ogółem, to na dsc Siemekk napisał, że jest inna matematyka między G1, a G2. Bo z innej strony spróbowałem wykorzystać mapę Górniczej Doliny(ta uzupełniona przez Ur-Shaka) i również było przesunięcie(korzystałem z zena SO, ale wątpię, aby to było przyczyną).

13
Pytania i problemy / Gothic 2 - pozycja gracza na mapie?
« dnia: 2020-03-07, 16:17 »
No, raczej powinna być dokładna, bo jest(skrypt + tekstura) przeniesiona bezpośrednio z G1.

14
Pytania i problemy / Gothic 2 - pozycja gracza na mapie?
« dnia: 2020-03-02, 10:24 »
Ref.

15
Pytania i problemy / Gothic 2 - pozycja gracza na mapie?
« dnia: 2020-02-22, 12:12 »
Podbijam

16
Pytania i problemy / Gothic 2 - pozycja gracza na mapie?
« dnia: 2020-02-14, 21:47 »
Próbowałem ogarnąć Blenderem według poradnika, ale raczej to zbyt problematyczne. Czy jest jakiś inny sposób na rozwiązanie problemu lub sprawdzenie, czy przykładowo tekstura jest za mała?

17
Pytania i problemy / Gothic 2 - pozycja gracza na mapie?
« dnia: 2020-02-13, 17:34 »
Takie pytanie. Czy można w jakiś w miarę prosty sposób ustawić pozycję gracza na danej mapce lokacji? Konkretnie chodzi mi o szkic świątyni z G1. Patrząc po skrypcie innych map zauważyłem, że chyba funkcja "Doc_SetLevelCoords" odpowiada za pokazanie się znacznika postaci po otwarciu mapy. No i zrobiłem mały dopisek, przez co mój skrypt wygląda tak:
INSTANCE ItWrTemplemap(C_Item)
{
name = "Mapa";

mainflag = ITEM_KAT_DOCS;
flags = ITEM_MISSION;

value = 30;

visual = "ItWr_Map_01.3DS";
material = MAT_LEATHER;

scemeName = "MAP";
on_state[0] = UseTemplemap;

description = "Szkic świątyni";
TEXT[4] = NAME_Value; COUNT[4] = value;
};

FUNC VOID UseTemplemap()
{
if (Npc_IsPlayer(self))
{
B_SetPlayerMap(ItWrTemplemap);
};

var int nDocID;

nDocID = Doc_CreateMap ()   ; // DocManager
Doc_SetPages ( nDocID, 1 );
Doc_SetPage ( nDocID, 0, "Map_Temple.tga", 1 );  //  1 -> DO NOT SCALE
Doc_SetLevel ( nDocID, "OldWorld\ORCTEMPEL1.ZEN" ); // Positionsanzeige funzt nicht!
Doc_SetLevelCoords  (nDocID, -43000, 50000, 170000, -29000);
Doc_Show ( nDocID );
};
I o ile znacznik faktycznie się pojawił, to różnica w położeniu gracza jest dość znacząca. Poniżej zdjęcie pokazujące, gdzie jest wskaźnik, a gdzie faktycznie znajdowała się postać.
https://imgur.com/Q5iU1mk
Żółta kreska pokazuje miejsce, gdzie naprawdę stałem(przed pierwszą bramą), a wskaźnik pozycji był na schodach do 1 sali. Więc czy jest możliwość, żeby wskaźnik był tak dokładny jak w zwykłych mapach?

18
Skrypty / [G2] Party member atakujący innego npc?
« dnia: 2019-12-27, 20:50 »
Dobra, udało mi się stworzyć coś takiego:
if (!self.aivar[AIV_PARTYMEMBER] == TRUE)
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
AI_StartState (self, ZS_WatchFight, 0, ""); //Bogen und Magie geduldet bis zur AssessMurder-Wahrnehmung
return;
}
else if (self.aivar[AIV_PARTYMEMBER] == TRUE)
&& (Hlp_GetInstanceID(pc_hero) == Hlp_GetInstanceID(victim))
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
B_Attack (self, other, AR_NONE, 0);
PrintScreen ("Bezio jako ofiara", -1, -1, FONT_ScreenSmall, 2);
return;
}
else
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
B_Attack (self, victim, AR_NONE, 0);
PrintScreen ("Npc jako ofiara", -1, -1, FONT_ScreenSmall, 2);
return;
};
W B_AssessFightSound.d, w ZS_Unconscious.d dodałem:
// ------ NSC hat gegen Spieler verloren ------
if (self.guild < GIL_SEPERATOR_HUM)
|| (self.aivar[AIV_PARTYMEMBER] == TRUE) // tylko to
&& (Npc_IsPlayer(other))
{
I niby działa, tylko zauważyłem, że Rączka podczas misji zachowuje się jak Gorn podczas odbijania Wolnej Kopalni. Czyli czasami zaatakuje nas bez powodu, gdzie powinien atakować tylko Cassię/Ramireza/Jespera.
Edit: Co ciekawe, Aya też ignoruje Jespera. A Cassię i Ramireza atakuje.

19
Skrypty / [G2] Party member atakujący innego npc?
« dnia: 2019-12-27, 15:27 »
@Cruc Twoja porada podsunęła mi trop, ale jest drobny problem. Mianowicie w B_AssessFightSound.d lekko przerobiłem skrypt na takie coś(na samym dole):
if (!self.aivar[AIV_PARTYMEMBER] == TRUE)
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
AI_StartState (self, ZS_WatchFight, 0, ""); //Bogen und Magie geduldet bis zur AssessMurder-Wahrnehmung
return;
}
else if (self.aivar[AIV_PARTYMEMBER] == TRUE)
&& (Hlp_GetInstanceID(pc_hero) == Hlp_GetInstanceID(victim))
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
B_Attack (self, other, AR_NONE, 0);
PrintScreen ("Bezio jako ofiara", -1, -1, FONT_ScreenSmall, 2);
return;
}
else
{
Npc_ClearAIQueue (self);
B_ClearPerceptions (self);
B_Attack (self, victim, AR_NONE, 0);
PrintScreen ("Npc jako ofiara", -1, -1, FONT_ScreenSmall, 2);
return;
};
Aczkolwiek problem pojawia się w trakcie dialogów, które wywołują funkcję zaatakowania bohatera(przykładowo, rozmowa z bandytą przed jaskinią Braga). Testuję to na Aya_Testmodel i jeśli w trakcie dialoguję wybiorę opcję, która powoduje zaatakowanie nas przez niego, to Aya zdąży go zaatakować i zabić, zanim się skończy dialog[co buguje postać]. Natomiast w przypadku walki z Alrikiem, atakuje dopiero, kiedy on nas uderzy.

20
Skrypty / [G2] Party member atakujący innego npc?
« dnia: 2019-12-27, 11:43 »
Ewentualnie mógłby ktoś na chłopski rozum pokierować, czemu się przyjrzeć w skryptach?

Strony: [1] 2 3 ... 76
Do góry