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
@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.

2
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

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

4
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?

5
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ą).

6
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.

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

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

9
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?

10
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?

11
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.

12
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.

13
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?

14
Skrypty / [G2] Party member atakujący innego npc?
« dnia: 2019-12-25, 13:23 »
Czy istnieje jakiś sposób, żeby sprawdzić, czy bohater nie należy do instancji Other? Bo chciałbym zrobić tak, żeby postać, która posiada self.aivar[AIV_PARTYMEMBER] = TRUE; atakowała postać, którą my zaatakujemy lub która zaatakowała nas. Głównie chodzi o "globalny" aivar, żeby nie trzeba było rozpisywać tego do wszystkich skryptów. Coś na zasadzie:
Npc_SetTarget (self, other);
B_Attack (self, other, AR_NONE, 0);
Ale tak, żeby "other" nie był traktowany jako "pc_hero", tylko pozostałe postacie. Istnieje taka możliwość? Bo wiem, że w przypadku potworów wystarczyło zmienić nastawienie gildii, a z racji, że tutaj chciałbym u różnych postaci takie coś mieć, to zmiany nastawień w dialogach mijają się z celem.

15
Dodam, że jak użyję "AI_PlayAniBS       (self, "T_STAND_2_FREEZE_VICTIM", BS_UNCONSCIOUS); " to postać unieruchamia się na parę sekund + traci hp czasowo, ale dziwnie to wygląda, żeby npc po oberwaniu czarem ognia zamarzał.

16
Hej. Takie pytanie - gdzie można zmienić/stworzyć skrypt podobny do skryptu bryły lodu/lodowej fali dla konkretnej instancji czaru? Chodzi mi dokładnie o coś takiego, że npc po oberwaniu czarem załącza animację S_FIRE_VICTIM na powiedzmy 10 sekund, w tym czasie traci 10 hp(czyli po 1 hp/s) i atakuje nas? Próbowałem przerobić ZS_MagicFreeze, ale coś nie wyszło.
// *****************
// B_StopMagicFreeze1
// *****************

func void B_RestartFreeze1()
{
if (Npc_GetLastHitSpellID(self) == SPL_IceCube)
|| (Npc_GetLastHitSpellID(self) == SPL_IceWave)
{
Npc_SetStateTime(self,0);
};
};


func void B_StopMagicFreeze1()
{
Npc_PercEnable (self, PERC_ASSESSMAGIC, B_AssessMagic);

Npc_ClearAIQueue(self);
AI_StandUp (self);

if (self.guild < GIL_SEPERATOR_HUM)
{
B_AssessDamage();
}
else
{
Npc_SetTempAttitude (self, ATT_HOSTILE); //falls nicht schon Gilden-Attitüde hostile ist
};

// nach Aufruf dieses Befehles wird die Loop über return LOOP_END beendet
};

// **************
// ZS_MagicFreeze1
// **************

func int ZS_MagicFreeze1()
{
Npc_PercEnable (self, PERC_ASSESSMAGIC, B_RestartFreeze1); // falls ein NSC nochmal von einem Freezespell getroffen wurde, so muss die State Time reseted werden

Npc_StopAni(self, "S_FIRE_VICTIM"); // falls der NSC am Zappeln ist, brich die Ani ab

// Opfer wird in Bodystate Unconscious versetzt
if (!C_BodyStateContains(self, BS_UNCONSCIOUS))
{
AI_PlayAniBS (self, "T_STAND_2_FREEZE_VICTIM", BS_UNCONSCIOUS);
Wld_PlayEffect("VOB_MAGICBURN",  self, self, 0, 0, 0, FALSE );
};
self.aivar[AIV_FreezeStateTime] = 0;
};



func int ZS_MagicFreeze1_Loop ()
{
// EXIT LOOP IF...

if (Npc_GetStateTime(self) >= 10)
{
B_StopMagicFreeze1();
return LOOP_END;
};

// LOOP FUNC
if (Npc_GetStateTime(self) != self.aivar[AIV_FreezeStateTime])
{
self.aivar[AIV_FreezeStateTime] = Npc_GetStateTime(self);

// ------ Damage abziehen, aber NICHT sterben (immer mindeststens 1 LE behalten) ------
if (self.attribute[ATR_HITPOINTS] > (self.attribute[ATR_HITPOINTS] - SPL_Damage_ChargeFireball1))
{
// feuer wesen erhalten doppelten schaden
if (self.guild == GIL_FIREGOLEM)
|| (self.aivar[AIV_MM_REAL_ID] == ID_FIREWARAN)
|| (self.aivar[AIV_MM_REAL_ID] == ID_DRAGON_FIRE)
{
B_MagicHurtNpc (other, self, SPL_Damage_ChargeFireball1/2);
return LOOP_CONTINUE;
};

// eis wesen erhalten halben schaden
if (self.guild == GIL_ICEGOLEM)
|| (self.aivar[AIV_MM_REAL_ID]==ID_DRAGON_ICE)
{
B_MagicHurtNpc (other, self, SPL_Damage_ChargeFireball1*2);
return LOOP_CONTINUE;
};

// rest ganz normal
B_MagicHurtNpc (other, self, 5);
};
};

return LOOP_CONTINUE;
};


func void ZS_MagicFreeze1_End()
{

};

Skrypt przerobionego ZS'a. Do tego skrypt czaru:
// ******************
// SPL_ChargeFireball1
// ******************

const int SPL_Cost_ChargeFireball1 = 20; //4*40
const int STEP_ChargeFireball1 = 5;
const int SPL_Damage_ChargeFireball1 = 30;

INSTANCE Spell_ChargeFireball1 (C_Spell_Proto)
{
time_per_mana = 100;
damage_per_level = SPL_Damage_ChargeFireball1;
damageType = DAM_MAGIC;
canTurnDuringInvest     = TRUE;
};

func int Spell_Logic_ChargeFireball1 (var int manaInvested)
{
if (self.attribute[ATR_MANA]<STEP_ChargeFireball1)
{
return SPL_DONTINVEST;
};

if (manaInvested <= STEP_ChargeFireball1*1)
{
self.aivar[AIV_SpellLevel] = 1; //Start mit Level 1
return SPL_STATUS_CANINVEST_NO_MANADEC;
}
else if (manaInvested > (STEP_ChargeFireball1*1))
&& (self.aivar[AIV_SpellLevel] <= 1)
{
self.attribute[ATR_MANA] = (self.attribute[ATR_MANA] - STEP_ChargeFireball1);

if (self.attribute[ATR_MANA]<0)
{
    self.attribute[ATR_MANA]=0;
};

self.aivar[AIV_SpellLevel] = 2;

return SPL_NEXTLEVEL; //Lev2 erreicht
}
else if (manaInvested > (STEP_ChargeFireball1*2))
&& (self.aivar[AIV_SpellLevel] <= 2)
{
self.attribute[ATR_MANA] = (self.attribute[ATR_MANA] - STEP_ChargeFireball1);

if (self.attribute[ATR_MANA]<0)
{
    self.attribute[ATR_MANA]=0;
};
self.aivar[AIV_SpellLevel] = 3;
return SPL_NEXTLEVEL; //Lev3 erreicht

}
else if (manaInvested > (STEP_ChargeFireball1*3))
&& (self.aivar[AIV_SpellLevel] <= 3)
{
self.attribute[ATR_MANA] = (self.attribute[ATR_MANA] - STEP_ChargeFireball1);

if (self.attribute[ATR_MANA]<0)
{
    self.attribute[ATR_MANA]=0;
};
self.aivar[AIV_SpellLevel] = 4;
return SPL_NEXTLEVEL; //Lev4 erreicht
}
else if (manaInvested > (STEP_ChargeFireball1*3))
&& (self.aivar[AIV_SpellLevel] == 4)
{
        return SPL_SENDCAST;
};



return SPL_STATUS_CANINVEST_NO_MANADEC;

};

func void Spell_Cast_ChargeFireball1(var int spellLevel)
{
self.attribute[ATR_MANA] = (self.attribute[ATR_MANA] - STEP_ChargeFireball1);

if (self.attribute[ATR_MANA]<0)
{
self.attribute[ATR_MANA]=0;
};

self.aivar[AIV_SelectSpell] += 1;
};
No i wpis do B_AssessMagic:
if (Npc_GetLastHitSpellID(self) == SPL_ChargeFireball1)
{
Npc_ClearAIQueue (self);
//B_ClearPerceptions (self); //Sonst reagiert der NPC nicht!
AI_StartState(self, ZS_MagicFreeze1, 0, "");
return;
};
Problem jest tego typu, że po drugim trafieniu dopiero odgrywana jest animacja, która trwa w nieskończoność. Do tego na npc nie pojawia się efekt ognia(czyt. nie płonie) i nie zabiera mu tych dodatkowych hp[czyli zamiast dostać powiedzmy 40 dmg otrzymuje 30).

17
Witam, takie pytanie. Ostatnio udało mi się znaleźć na rosyjskim forum skrypty do telekinezy, jednak mam dziwny problem polegający na tym, że po wyciągnięciu runy zamiast efektu czaru w ręce pojawia się runa. Z racji, że w pliku PfxInstMagic.d znajdują się już pfxy odpowiedzialne za Telekinezę, to pomyślałem, że wystarczy dorobić instancję w pliku VisualFxInst.d(ponieważ w normalnym G2 nie występuje). Dlatego przeniosłem ją z G1, jednak o ile sam skrypt czaru i jego użycie działa w miarę dobrze, to po wyciągnięciu czaru do użytku jest pokazana runa(chyba, że przytrzyma się spację i pokaże się animacja czaru). Tutaj wpis do VisualFxInst.d
INSTANCE spellFX_Telekinesis(CFx_Base_Proto)
{
visname_S = "MFX_Telekinesis_INIT";
emtrjmode_s = "FIXED";
emTrjOriginNode = "ZS_RIGHTHAND";
emtrjnumkeys = 2;
emtrjnumkeysvar = 1;
emtrjangleelevvar = 2.;
emtrjangleheadvar = 0.;
emtrjeasefunc_s = "LINEAR";
emtrjloopmode_s = "NONE";
emtrjdynupdatedelay = 0.;
emFXInvestOrigin_S = "spellFX_Telekinesis_ORIGIN";
emTrjTargetRange = 0;
emTrjTargetElev = 0;
};

INSTANCE spellFX_Telekinesis_KEY_INIT (C_ParticleFXEmitKey)
{
visname_s = "MFX_Telekinesis_INIT";
emtrjeasevel   = 0.01;
};

INSTANCE spellFX_Telekinesis_KEY_INVEST_1 (C_ParticleFXEmitKey)
{
visname_s = "MFX_Telekinesis_TARGET";
emtrjeasevel   = 2000;
sfxid = "MFX_Telekinesis_STARTINVEST";
sfxisambient = 1;
};


INSTANCE spellFX_Telekinesis_KEY_CAST (C_ParticleFXEmitKey)
{
visname_s = "MFX_Telekinesis_TargetEnd";

};

INSTANCE spellFX_Telekinesis_Origin (CFx_Base_Proto)
{
visname_S = "MFX_Telekinesis_BRIDGE";
emtrjmode_s = "TARGET LINE";
emtrjeasevel   = 0.001;
emTrjOriginNode = "BIP01 R Hand";
emtrjdynupdatedelay = 0.;
lightPresetname = "AURA";
sfxid = "MFX_Telekinesis_INVEST";
sfxisambient = 1;
};
Oraz Pfx z oryginalnego Gothica 2:
INSTANCE MFX_TELEKINESIS_INIT (C_PARTICLEFX)
{
     ppsvalue = 600.000000000;
     ppsscalekeys_s = "1";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 10.000000000;
     shptype_s = "SPHERE";
     shpfor_s = "object";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "10";
     shpscalekeys_s = "1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2.000000000;
     dirmode_s = "TARGET"; //TARGET
     dirfor_s = "object";
     dirmodetargetfor_s = "OBJECT";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180.000000000;
     dirangleelevvar = 180.000000000;
     velavg = 0.001000000;
     lsppartavg = 150.000000000;
     flygravity_s = "0 0 0";
     flycolldet_b = 0;
     visname_s = "MFX_SLEEP_STAR.TGA";
     visorientation_s = "NONE";
     vistexisquadpoly = 1;
     vistexanifps = 18.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "100 255 255";
     vistexcolorend_s = "255 255 0";
     vissizestart_s = "10 10";
     vissizeendscale = 0.010000000;
     visalphafunc_s = "ADD";
     visalphastart = 255.000000000;
     visalphaend = 255.000000000;
};

INSTANCE MFX_TELEKINESIS_BRIDGE (C_PARTICLEFX)
{
     ppsvalue = 250.000000000;
     ppsscalekeys_s = "1 2 3 2";
     ppsislooping = 1;
     ppsissmooth = 1;
     ppsfps = 2.000000000;
     shptype_s = "SPHERE";
     shpfor_s = "WORLD";
     shpoffsetvec_s = "0 0 0";
     shpdistribtype_s = "RAND";
     shpdim_s = "4";
     shpscalekeys_s = "1 3 5 3 1";
     shpscaleislooping = 1;
     shpscaleissmooth = 1;
     shpscalefps = 2.000000000;
     dirmode_s = "TARGET";
     dirfor_s = "WORLD";
     dirmodetargetfor_s = "WORLD";
     dirmodetargetpos_s = "0 0 0";
     dirangleheadvar = 180.000000000;
     dirangleelevvar = 180.000000000;
     velavg = 0.800000012;
     velvar = 0.200000003;
     lsppartavg = 500.000000000;
     flygravity_s = "0 0 0";
     visname_s = "MFX_SLEEP_STAR.TGA";
     visorientation_s = "NONE";
     vistexisquadpoly = 1;
     vistexanifps = 18.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "100 255 255";
     vistexcolorend_s = "100 255 255";
     vissizestart_s = "10 10";
     vissizeendscale = 2.000000000;
     visalphafunc_s = "ADD";
     visalphastart = 255.000000000;
     trltexture_s = "WHITECLOUD.TGA";
};

INSTANCE MFX_TELEKINESIS_TARGET (C_PARTICLEFX)
{
     ppsvalue = 1500.000000000;
     ppsislooping = 1;
     shptype_s = "SPHERE";
     shpfor_s = "object";
     shpdistribtype_s = "RAND";
     shpdistribwalkspeed = 0.000300000;
     shpdim_s = "40";
     dirmode_s = "RAND"; //RAND
     dirfor_s = "OBJECT";
     dirmodetargetfor_s = "OBJECT";
     velavg = 0.001000000;
     lsppartavg = 200.000000000;
     flygravity_s = "0";
     visname_s = "MFX_SLEEP_STAR.TGA";
     visorientation_s = "VELO";
     vistexisquadpoly = 1;
     vistexanifps = 10.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "255 255 255";
     vistexcolorend_s = "100 255 255";
     vissizestart_s = "30 30";
     vissizeendscale = 1.000000000;
     visalphafunc_s = "ADD";
     visalphaend = 255.000000000;
};


INSTANCE MFX_TELEKINESIS_TARGETEND (C_PARTICLEFX)
{
     ppsvalue = 1500.000000000;
     ppsscalekeys_s = "1";
     ppsfps = 10.000000000;
     shptype_s = "SPHERE";
     shpfor_s = "object";
     shpdistribtype_s = "RAND";
     shpdistribwalkspeed = 0.000300000;
     shpdim_s = "40";
     dirmode_s = "RAND";
     dirfor_s = "OBJECT";
     dirmodetargetfor_s = "OBJECT";
     velavg = 0.050000001;
     lsppartavg = 2000.000000000;
     flygravity_s = "0 -0.0008 0";
     flycolldet_b = 1;
     visname_s = "MFX_SLEEP_STAR.TGA";
     visorientation_s = "VELO";
     vistexisquadpoly = 1;
     vistexanifps = 10.000000000;
     vistexaniislooping = 1;
     vistexcolorstart_s = "200 255 255";
     vistexcolorend_s = "100 255 255";
     vissizestart_s = "30 30";
     vissizeendscale = 1.000000000;
     visalphafunc_s = "ADD";
     visalphastart = 255.000000000;
};
Do pliku Constants.d dodałem również:
const string spellFxInstanceNames[MAX_SPELL] =
{
"Telekinesis",  // 64 SPL_Reserved_64
Próbowałem również stworzyć osobną instancję(w VisualFx dopisując 1 do Telekinesis), ale wtedy czar zamiast focusować voby(itemy na ziemi) focusuje postacie.
TL:TR - dlaczego zamiast pokazać mi efekt czaru w ręce, pokazuje runę?

18
W innych miejscach zawierających końcówkę .3ds - nie ma moich. Na dowód mogę zamiast screena nagrać nawet filmik, w którym pokazuję zawartość wszystkich miejsc z w/w końcówką.

19
Tak wygląda trigger, którego nie widzę(w spacerze), po otworzeniu świata w notepadzie.
childs2400=int:0
[% oCTriggerChangeLevel:zCTrigger:zCVob 24577 3333]
pack=int:0
presetName=string:
bbox3DWS=rawFloat:-21293.9922 -318.297546 29748.5059 -19564.1172 521.514587 30128.4824
trafoOSToWSRot=raw:0000803f0000008000000000000000000000803f0000000000000080000000800000803f
trafoOSToWSPos=vec3:-20396.125 184.566315 29702.9824
vobName=string:OW_OLDMINE_ENTER
visual=string:
showVisual=bool:1
visualCamAlign=enum:0
visualAniMode=enum:0
visualAniModeStrength=float:0
vobFarClipZScale=float:1
cdStatic=bool:0
cdDyn=bool:1
staticVob=bool:0
dynShadow=enum:0
zbias=int:0
isAmbient=bool:0
[visual % 0 0]
[]
[ai % 0 0]
[]
triggerTarget=string:
flags=raw:07
filterFlags=raw:3f
respondToVobName=string:
numCanBeActivated=int:-1
retriggerWaitSec=float:0
damageThreshold=float:0
fireDelaySec=float:0
levelName=string:OLDWORLD\OLDMINE.zen
startVobName=string:OM_122
[]
Czyli powinien się nazywać "OW_OLDMINE_ENTER" na liście w zakładce Surface.3ds, w folderze cCTriggerChangeLevel. Która u mnie wygląda tak:
https://zapodaj.net/ef495535bb112.jpg.html
Jak widać - nie ma takowego.

20
2) Sprawdzałem pod innymi pozycjami(surface.3ds, oldcamp.3ds i tego typu nazwy) - nie ma tam moich.
3) Edytuję dobrą mapę, ponieważ dodawałem je do zena Górniczej Doliny, więc dziwne by było, gdybym się pomylił.
1) Nie są widoczne na liście ani w okolicach, w których są odpalane. Czyli tak jakby nie istniały bezpośrednio, ale "wtopiły" się w zen.

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