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 - carelion

Strony: [1] 2 3 ... 8
1
Pytania i problemy / Czas na wybór dialogu
« dnia: 2020-05-02, 22:22 »
Ewentualnie użyj tick tocków :F

2
Skrypty / Długa bądź wieczna noc w G1
« dnia: 2018-01-30, 11:53 »
Ewentualnie (znów korzystając z Ikarusa :P) można użyć funkcji z WOGa autorstwa Milky-Way'a do "sztucznej" zmiany pory dnia nie wpływając na aktualną godzinę w grze.
https://forum.worldofplayers.de/forum/threads/969446-Skriptpaket-Ikarus-3/page3?p=16336461#post16336461

3
Ja natomiast bym w momencie zadania obrażeń sprawdzał czy osoba atakująca ma odpaloną animacje dla ataku lpm+a oraz czy osoba otrzymująca obrażenia ma animacje ppm+a, jeśli tak to zmniejszałbym bądź usuwał obrażenia lub inne rzeczy które chcesz :ok:

4
Gry / stare gry które wciąż inspirują
« dnia: 2017-08-31, 19:19 »
Disciples 2: Powrót Galleana oraz dodatek Bunt Elfów.

5
MDS i animacje / Blender, Czy napewno mirror?
« dnia: 2017-07-26, 11:35 »
Gdy już posiadasz dwa naramienniki dzięki modyfikatorze Mirror w zakładce Modifiers, naciśnij przycisk Apply w modyfikatorze tak jak na poniższym zdjęciu:
Spoiler

Następnie zaznacz naramienniki, wejdź w Edit Mode i zaznacz wszystkie wierzchołki (2x A). Teraz możesz podzielić dwa naramienniki na oddzielne obiekty. By to wykonać, naciśnij przycisk P i zaznacz By loose parts. Gotowe! Teraz naramienniki powinny być oddzielnymi elementami  :ok:

6
Skrypty / Wczytanie świata bez menu.
« dnia: 2017-05-06, 14:25 »
Na wogu w temacie z modyfikacją są dostępne jej skrypty. Wystarczy poszukać  :D

7
Skrypty / Wczytanie świata bez menu.
« dnia: 2017-05-06, 10:24 »
Nie potrzeba wcale do tego AST, wbrew pozorom da się to wykonać za pomocą Ikarusa, jednak prawdopodobnie będzie z tym więcej zabawy  :ok:

1. Najpierw musisz wywołać grę z parametrem -nomenu by gra po uruchomieniu pomijała menu i wczytała świat(proponuje poczytać poradnik:http://themodders.org/index.php?topic=13223.0)
2. Następnie wyłączyć działanie tego parametru w grze za pomocą Ikarusa. Zastosowano to w modzie Irrwichtel, więc proponuje zajrzeć do jego skryptów.
3. Włączyć menu po wczytaniu świata i zmienić by po wciśnięciu nowa gra został wczytany inny Zen.

8
Pytania i problemy / Pochodnia nie świeci się
« dnia: 2017-04-27, 18:37 »
Co do modelu... spróbuj przywrócić pierwotną nazwę kości oraz ustaw im odpowiednie relacje, bo przy imporcie się psuje :/

Ustaw by twój model twojej pochodni był rodzicem "ZS_POS0_DIST" i "Bip01 Fire" a problem "more than BIP01 etc." powinien już nie występować.

Jeszcze zauważyłem, że mimo nie edytowania pozycji żadnego z obiektów w edytorze, kość ze "światłem" może być lekko przesunięta w grze w dół (Oczywiście to nie problem, by to edytować  :D).

9
Pytania i problemy / Pochodnia nie świeci się
« dnia: 2017-04-26, 19:15 »
Jedyne co jeszcze przychodzi mi do głowy to:
1) Być może model jest nieco wadliwy?
2) Czy w ogóle posiadasz plik FIRETREE_LARGE.ZEN? Bo o ile się nie mylę, występuje on tylko w gothic 1. A bez niego twoja pochodnia też się nie zaświeci.

10
Pytania i problemy / Pochodnia nie świeci się
« dnia: 2017-04-25, 21:19 »
Lampa w spacerze wstawiona jest prawidłowo. Co do błędu też go miałem, gdy wstawiałem nowy model lampy, ale nie doświadczyłem żadnych błędów z jej użytkowaniem. W polu "fireSlot" wpisujesz nazwę kości z modelu, z której będzie emitować światło oraz wyświetlać efekt PFX.

Co do pliku startup.d spróbowałbym, bym dodać ten fragment do Init_Global, skąd już na pewno powinno się wywołać(sprawdzone info  :ok:).

11
Pytania i problemy / Pochodnia nie świeci się
« dnia: 2017-04-24, 23:16 »
Czyli albo pochodnie są źle skonfigurowane w zenie albo coś spierniczyłeś w startup.d i wciąż nie wywołuje funkcji Wld_SetMobRoutine.

Może mógłbyś pokazać ten fragment kodu z startup.d oraz ss okna z właściwościami tej pochodni w spacerze?  :P

12
Pytania i problemy / Pochodnia nie świeci się
« dnia: 2017-04-24, 23:02 »
STARTUP_SWIAT wywoła się tylko za pierwszym razem gdy wejdziesz do tego świata, natomiast INIT_SWIAT za każdym razem gdy będziesz do niego wchodził(W tym podczas wczytywania gry).

13
Pytania i problemy / Pochodnia nie świeci się
« dnia: 2017-04-24, 22:53 »
Mam to oczywiście w INIT_SUB_SWIAT.
O ile się nie mylę INIT_SUB wywołuje się tylko dla światów złączonych opcją Macros w spacerze.
Weźmy tu jako przykład świat Khorinis, który jest wczytywany na start do gry jako NewWorld.zen.
ZEN ten składa się z kilku mniejszych złączonych ze sobą za pomocą Macros, m.in. wśród nich jest NewWorld_Part_City_01.zen, który odpowiada za portową cześć miasta.
Gdy wchodzisz na teren jednego z zenów, które zostały połączone Macrosem, wywołuje się funkcja INIT_SUB_NazwaMniejszegoZenaNaKtorymWszedles. Czyli gdy wejdziesz do portu w khorinis, wywoła się funkcja  INIT_SUB_NewWorld_Part_City_01.

Tak samo w twoim przypadku jeśli twój świat został połączony za pomocą Macros, i nazywa się WORLD.ZEN a nazwa zena na którego terenie znajdują się pochodnie nazywa się np. WORLD_POCHODNIE.ZEN to tworzysz funkcje INIT_SUB_WORLD_POCHODNIE.

Mam nadzieję że da się zrozumieć to co napisałem  :pokerface:

14
Pytania i problemy / Pochodnia nie świeci się
« dnia: 2017-04-24, 22:10 »
Wld_SetMobRoutine (00,00, "FIREPLACE", 1);
                //czas,   prefix,    ,czy ma świecić = 1-tak, 0-nie
Podana funkcja zapali(zaświeci) wszystkie moby(oCMobFire) z prefixem FIREPLACE w nazwie modelu o godzinie 00:00.

Czyli załóżmy że jeśli twój model pochodni nazywa się TORCH_CITY_01.ASC to funkcja ma wyglądać w nast. sposób:
Wld_SetMobRoutine (hh,mm, "TORCH", 1);

15
Skrypty / Ikarus (Pakiet skryptów)
« dnia: 2017-03-19, 21:13 »
Spróbuj tego:
//enum zTMat_AlphaFunc
const int RND_ALPHA_FUNC_MAT_DEFAULT = 0;
const int RND_ALPHA_FUNC_NONE = 1;         
const int RND_ALPHA_FUNC_BLEND = 2;
const int RND_ALPHA_FUNC_ADD     = 3;               
const int RND_ALPHA_FUNC_SUB    = 4;
const int RND_ALPHA_FUNC_MUL = 5;     
const int RND_ALPHA_FUNC_MUL2 = 6;     
const int RND_ALPHA_FUNC_TEST = 7;
const int RND_ALPHA_FUNC_BLEND_TEST = 8;

func int zCMaterial_SearchName(var string _mname) { //return zCMaterial
CALL_zStringPtrParam(STR_Upper(_mname));
CALL__cdecl(zCMaterial__SearchName);
return CALL_RetValAsInt();
};

func void zCMaterial_SetAlpha(var string _mname, var int blendType, var int alpha) {
var int mat; mat = zCMaterial_SearchName(_mname);
if(!mat) { return; };
MEM_WriteInt(mat+116, blendType);
MEM_WriteInt(mat+56, RGBA(255, 255, 255, alpha));
};
Wywołaj tylko raz:
zCMaterial_SetAlpha("NazwaMaterialu",  RND_ALPHA_FUNC_BLEND, alpha);
Na pierwszym lepszym materiale działa bez problemu:
Spoiler

16
Materiały / Oświetlenie efektów zaklęć
« dnia: 2016-11-30, 18:52 »
W miarę czytelny skrypt dodający oświetlenie zaklęć trzymanych w dłoni, jak i tych, które są rzucone (pociski).
Mam nadzieję, że komuś się przyda  :ok:
const int zCParticleFX__Load = 5959152; //0x005AEDF0
const int zCVobLight__zCVobLight = 6323472; //0x607D10
const int zCWorld__AddVobAsChild = 6440352; //0x6245A0
const int zCWorld__RemoveVob = 6441840; //0x624B70

const int oCVisualFX__DoMovements = 4814160; //0x00497550 / 6
const int oCVisualFX__EndEffect = 4803712; //0x00494C80 / 9

const int sizeof_zCVobLight = 392; //0x188

const int SPELL_DYNAMICLIGHT_RANGE = 150; //Range of light for Vobs
const float SPELL_STATICLIGHT_RANGE = 0.004; //Range of light for LevelMesh

func int GetPfxColor(var string pfxname)
{
CALL_zStringPtrParam(pfxname); //zCParticleFX name
CALL__cdecl(zCParticleFX__Load);
var int PFX_ptr; PFX_ptr = CALL_RetValAsInt(); //zCParticleFX
var int ParticleEm; ParticleEm = MEM_ReadInt(PFX_ptr+84); //zCParticleFX.m_pEm
var string ParticleColS; ParticleColS = MEM_ReadString(ParticleEm+412); //zCParticleEmitter.m_sVisTexColorStart
var string ParticleColE; ParticleColE = MEM_ReadString(ParticleEm+432); //zCParticleEmitter.m_sVisTexColorEnd

var int PFXColS[3]; var int PFXColE[3];
PFXColS[0] = STR_ToInt(STR_Split(ParticleColS, " ", 0)); PFXColE[0] = STR_ToInt(STR_Split(ParticleColE, " ", 0));
PFXColS[1] = STR_ToInt(STR_Split(ParticleColS, " ", 1)); PFXColE[1] = STR_ToInt(STR_Split(ParticleColE, " ", 1));
PFXColS[2] = STR_ToInt(STR_Split(ParticleColS, " ", 2)); PFXColE[2] = STR_ToInt(STR_Split(ParticleColE, " ", 2));

return RGBA((PFXColS[0]+PFXColE[0])/2, (PFXColS[1]+PFXColE[1])/2, (PFXColS[2]+PFXColE[2])/2, 255);
};

func int VFX_isSpell(var string vfx) {
var int vfx_l; vfx_l = STR_Len(vfx);
if(vfx_l<10) { return false; };
if(STR_Compare(STR_SubStr(vfx, 0, 3), "MFX")) { return false; };
if(!STR_Compare(STR_SubStr(vfx, vfx_l-5, vfx_l-1), "_INIT"))
||(!STR_Compare(STR_SubStr(vfx, vfx_l-5, vfx_l-1), "_CAST")) { return true; };

return false;
};

func int AddLightToVFX(var int VFXPtr) {
var int lightPtr; lightPtr = MEM_Alloc(sizeof_zCVobLight);
    CALL__thiscall(lightPtr, zCVobLight__zCVobLight);

var zCVobLight light; light = _^(lightPtr);

//Configure
light.lightColor = GetPfxColor(MEM_ReadString(ECX+288)); //PFX name
light.range = mkf(SPELL_DYNAMICLIGHT_RANGE);
light.rangeInv = castToIntf(SPELL_STATICLIGHT_RANGE);

light.bitfield = zCVobLight_bitfield_isTurnedOn;

MEM_CopyWords(VFXPtr+60, lightPtr+60, 16);

CALL_PtrParam(MEM_ReadInt(VFXPtr+36)); //zCVisualFX._zCVob_globalVobTreeNode
    CALL_PtrParam(lightPtr);
    CALL__thiscall(_@(MEM_World), zCWorld__AddVobAsChild);

return lightPtr;
};

func void VisualFX_DoMovements() {
var String PFXName; PFXName = MEM_ReadString(ECX+288);

if(!VFX_isSpell(PFXName)) { return; };
if(MEM_ReadInt(ECX+216)>0) { return; }; //Check if zCVobLight is created

MEM_WriteInt(ECX+216, AddLightToVFX(ECX));
};

func void VisualFX_EndEffect() {
var String PFXName; PFXName = MEM_ReadString(ECX+288);

if(!VFX_isSpell(PFXName)) { return; };
if(MEM_ReadInt(ECX+216)==0) { return; }; //Check if zCVobLight is not created

//Delete zCVobLight
CALL_PtrParam(MEM_ReadInt(ECX+216));
CALL__thiscall(_@(MEM_World), zCWorld__RemoveVob);
};

func void SpellLight_Init() {
HookEngineF(oCVisualFX__DoMovements, 6, VisualFX_DoMovements);
HookEngineF(oCVisualFX__EndEffect, 9, VisualFX_EndEffect);
};
UWAGA: Skrypt do działania wymaga pakietów skryptowych Ikarus&LeGo.
Album

17
Skrypty / Funkcja gaszenia ekranu.
« dnia: 2016-10-11, 08:31 »
Lub wykonać to po prostu za pomocą VFXów, w których o ile się nie mylę znajduję się już taki efekt :P

18
Skrypty / Ikarus (Pakiet skryptów)
« dnia: 2016-08-31, 19:49 »
Spróbuj stworzyć nową instancję voba za pomocą tego:
0x005FD940 static zCObject * __cdecl zCVob::_CreateNewInstance(void)następnie skonfiguruj go (pozycja trafoObjToWorld, wyglad itd...) i dodaj do świata wywołując to:
0x00624810 zCTree<zCVob> * __thiscall zCWorld::AddVob(zCVob *)Powinno działać bez waypointów w świecie  :ok:

19
Tak ja wyżej zostało powiedziane Jaszczuroczłek posiada animacje i szkielet orka jednak ich kości są inaczej rozstawione w ich modelach m.in. Ork stoi prosto natomiast Jaszczuroczłek jest lekko zgarbiony.
Inne pozycje kości nie wpływają na pozę w grze, ponieważ używają tych samych animacji, więc są identycznie zgarbieni.

Podsumowując  to wszystko: Nie masz czego zmieniać, bo nie ma czego  :P

20
Skrypty / Ikarus (Pakiet skryptów)
« dnia: 2016-08-25, 12:08 »
Nie wiem, czy komuś się może przyda, ale korzystając z wolnego czasu napisałem funkcje dzięki której możemy sterować ruchem animacji które są zapisane w MDS'ie jako "aniComb".
W grze wykorzystano to do ruchu głową postaci(domyślnie R+Strzałki), czy obrót torsu NPC w kierunku celu podczas celowania :D
func int oCNpc_GetModel(var int npc)
{
const int oCNpc__GetModel = 7571232; //0x00738720

CALL__Thiscall(npc, oCNpc__GetModel);
return CALL_RetValAsInt();
};

func int zCModel_GetAniIDFromAniName(var int model, var string aniName)
 {
const int zCModel__GetAniIDFromAniName = 6365296; //0x00612070

CALL_zStringPtrParam(aniName);
CALL__thiscall(model, zCModel__GetAniIDFromAniName);
return CALL_RetValAsInt();
 };
 
 func void zCModel_SetCombineAniXY(var int model, var int aniID, var int aniX, var int aniY)
 {
const int zCModel__SetCombineAniXY = 5764016; //0x0057F3B0
 
CALL_FloatParam(aniY);
CALL_FloatParam(aniX);
CALL_IntParam(aniID);
CALL__thiscall(model, zCModel__SetCombineAniXY);
 };
 
 func void Npc_SetCombAniXY(var c_npc npc, var string aniName, var int aniX, var int aniY)
 {
var int npcModel; npcModel = oCNpc_GetModel(_@(npc));

zCModel_SetCombineAniXY(npcModel, zCModel_GetAniIDFromAniName(npcModel, STR_Upper(aniName)), aniX, aniY);
 };
Przykład użycia funkcji:
//Najpierw odpalamy animacje
AI_PlayAni(hero, "T_LOOK");
//Parametry xFloat i yFloat muszą być w przedziale od 0.0 do 1.0.
Npc_SetCombAniXY(hero, "T_LOOK", xFloat, yFloat);
Oraz jak to wygląda w grze  :P:
https://www.youtube.com/watch?v=rPufvxGB2b8


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