zmiana koloru czcionki innych npc (g1) 8480 37

O temacie

Autor pawbuj

Zaczęty 23.03.2014 roku

Wyświetleń 8480

Odpowiedzi 37

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
Co do ticktocka: tak. Używaj go tylko wtedy kiedy coś ma się dziać co jakiś czas (cóż, niektóre funkcje trzeba wywoływać nawet co klatkę). Prawie nigdy do sprawdzania czy akurat coś się dzieje, bo prawie zawsze można zamiast tego zrobić tak żeby twoja funkcja się wywołała dopiero wtedy kiedy to się dzieje.

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
próbuję inicjować funkcję przez hookengine, ale działa tylko przez tick tocka, ktoś mnie poprawi co robię źle?
FUNC VOID STARTUP_WORLD ()
{
Wld_InsertItem (TICK, "OC1");
Wld_SendTrigger("TICK_TOCK");
HookEngine(7093113, 8, "EVT_UPDATESTATUS_FOCUSNAME",COPY_INSTR);

Startup_Sub_Newcamp ();
Startup_Sub_Oldcamp ();
Startup_Sub_Psicamp ();
Startup_Sub_Demontower ();
Startup_Sub_Freeminecamp ();
Startup_Sub_Surface ();

//die folgende Zeile gilt nur, bis die INIT_...-Funktionen von Ulf unterstützt werden.
INIT_WORLD ();
PlayVideo ("INTRO.BIK");

};
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
pochwalę się, że uruchomiłem zmianę koloru  nazwy npc w zależności od jego nastawienia tylko przy użyciu perceptionu.

natomiast co do interakcji z mobami tak nie mogę zrobić i nadal proszę o pomoc z aktywacją hook engine w startup.d.
 

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Pawbuj, kiedyś już taki skrypt napisałem, a raczej dopisałem swoje w funkcji Focusname jaką oferuje LeGo. Jak chcesz jej użyć, musisz sobie zmienić tylko kolory. Fragment wygląda tak :
if(Hlp_Is_oCMobContainer(her.focus_vob)) { //jeśli patrzysz na skrzynię
    var oCMobContainer Chest; Chest = MEM_PtrToInst(her.focus_vob);
    if (Chest._oCMobLockable_bitfield == false) //jeśli skrzynia jest otwarta
    {
        if (Chest.containList_next > 0) // jeśli skrzynia ma jakieś przedmioty
        {
        col = Focusnames_Color_Friendly(); // jej nazwa ma kolor zielony
        }
        else
        {
        col = Focusnames_Color_Neutral(); // jeśli jest pusta, kolor jest biały
        };
    }
    else
    {
    col = Focusnames_Color_Angry(); // jeśli jest zamknięta, jej nazwa jest na pomarańczowo
    }
    else if(Hlp_Is_oCMobDoor(her.focus_vob)) { // jeśli patrzysz na drzwi
    var oCMobDoor Door; Door = MEM_PtrToInst(her.focus_vob);
    if (Door._oCMobLockable_bitfield == false)
    {
    col = Focusnames_Color_Neutral(); // jeśli drzwi są otwarte, ich nazwa jest na biało
    }
    else
    {
    col = Focusnames_Color_Angry(); // jeśli zamknięte, ich nazwa jest na pomarańczowo
    };   
};

@Splash, ten skrypt pisany jest pod g2_ w G1 nie działa niestety.
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

zmiana koloru czcionki innych npc (g1)
#24 2014-04-07, 15:39(Ostatnia zmiana: 2014-04-07, 15:49)
Ja mam skrypt do g1 na:
zmiana nazwy skrzyni:
Spoiler
func void Chest_Renamer()
{
    var oCNpc her;
    var oCMob Mob;
    var oCMobContainer Skrzynia;
    var zCPar_Symbol symb;


    her = Hlp_GetNpc ( hero );
    Mob = MEM_PtrToInst ( her.focus_vob );
    Skrzynia = MEM_PtrToInst ( her.focus_vob );


    MEM_ReinitParser();
    symb = MEM_PtrToInst ( MEM_ReadIntArray ( currSymbolTableAddress, MoB.focusNameIndex ) );


    if ( !her.focus_vob ) { return; };
    if ( !Hlp_Is_oCMobContainer ( her.focus_vob ) ) { return; };


    if ( Skrzynia.containList_next != 0 )
    {
        if ( locked == true )
        {
            symb.content = CALLINT_GetStringAddress("Kufer(zamkniety)");
        }
            else
        {
            symb.content = CALLINT_GetStringAddress("Kufer");
        };
    }
    else
    {
        if ( locked == true )
        {
            symb.content = CALLINT_GetStringAddress("Pusty Kufer(zamkniety)");
        }
            else
        {
            symb.content = CALLINT_GetStringAddress("Pusty Kufer");
        };
    };
};
zmiana koloru nazwy skrzyni:
Spoiler
var int locked;
func void FocusColor()
{
    var oCNpc her;
    var oCMobLockable Zamek;
    var int ptr;
    var int col;
    const int zCView__SetFontColor = 7339392;         //0x6FFD80 Changed


    her = Hlp_GetNpc ( hero );
    Zamek = MEM_PtrToInst ( her.focus_vob );


    if ( !her.focus_vob )
    {
        col = RGBA ( 255,255,255,255 ); //Biały
        ptr = MEM_Alloc ( 4 );
        MEM_WriteInt ( ptr, col );
        CALL_IntParam ( ptr );
        CALL__thiscall ( MEM_ReadInt ( screen_offset ), zCView__SetFontColor );
        MEM_Free ( ptr );
    return;
    };


    if ( !Hlp_Is_oCMobLockable ( her.focus_vob ) ) { return; };


    if ( Zamek.bitfield & oCMobLockable_bitfield_locked )
    {
        col = RGBA ( 255,0,0,255 ); //Czerwony
        locked = true;
    }
    else
    {
        col = RGBA ( 255,255,255,255 ); //Biały
        locked = false;
    };


    ptr = MEM_Alloc ( 4 );
    MEM_Free ( ptr );
    CALL__thiscall ( MEM_ReadInt ( screen_offset ), zCView__SetFontColor );
    CALL_IntParam ( ptr );
    MEM_WriteInt ( ptr, col );
};
Sprawdzaj te dwie funkcje co klatkę.

Wymagania to skrypt RGBA:
Spoiler
func int RGBA(var int r, var int g, var int b, var int a) {
    if(!a){if(!b){if(!g){if(!r){return 1;};};};};
    return ((r&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_RED)
          |((g&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_GREEN)
          |((b&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_BLUE)
          |((a&zCOLOR_CHANNEL)<<zCOLOR_SHIFT_ALPHA);
};

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
daj jakiegoś screena odnośnie koloru tych skrzyń, gra mi się uruchamia , ale wywala po chwili call stack..

pytanie: sam pisałeś tą funkcję?
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

zmiana koloru czcionki innych npc (g1)
#26 2014-04-07, 17:51(Ostatnia zmiana: 2014-04-07, 18:14)
Nie. Mój wkład własny to tabulacja i CALLINT_GetStringAddress(W nowszym ikarusie nie było funkcji, której użyłem mając starego ikarusa. Po przejściu na nowego zmieniłem na ten). Masz ikarusa 1.1.4 ? Upewnij się.
Spróbuj tej kolejności:
Cytuj
_Intern\Ikarus\Ikarus_Const_G1.d
_Intern\Ikarus\EngineClasses_G1\*.d
_Intern\Ikarus\Ikarus.d
_Intern\Ikarus\RGBA.d
_Intern\Ikarus\ChestColorChanger.d
_Intern\Ikarus\Chest_Renamer.d
Jeśli się kłócisz do kolejności to tu masz co napisał autor IKARUSA w dołączonym do niego readme.
Cytuj
Zunächst ist die Datei Ikarus_Const_G|x| zu parsen,
danach alle Dateien im Ordner "EngineClasses_G|x|"
und zuletzt Ikarus.d (unabhängig von der Gothic Version).
Tak. Kolejność też może mieć na to wpływ( u mnie tak było ). Jak chcesz to dodaj FLOAT.D, ale on jest niezależny od ikarusa wg. autora.
Cytuj
Die Datei float.d enthält eine von Ikarus unabhängige Funktionensammlung
um mit Floatingpointwerten (bzw. zREAL) zu rechnen.

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
nie zgadza mi się twój adres dla zmiany koloru, jest z g2.

jeżeli nie jest to problem, nadal proszę o małego screena.

dla g1 jest taki: const int zCView_SetFontColor_offset = 7339392; //6FFD80 thiscall(zCColor)
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

zmiana koloru czcionki innych npc (g1)
#28 2014-04-07, 19:54(Ostatnia zmiana: 2014-04-08, 18:33)
Screena nie zrobie bo nie mam g1, ale pamiętam, że działało po zmianie kolejności parsowania skryptów ( zrób kolejność jaką Ci wypisałem)
Adres użyty przy zmienianiu koloru:
const int zCView__SetFontColor = 7339392;         //0x6FFD80 ChangedAdres który ty piszesz:
const int zCView_SetFontColor_offset = 7339392;   //6FFD80 thiscall(zCColor)Zobacz, że to są dwa różne adresy. O co ty się czepiasz?
Wejdź w IKARUS.D i sprawdź czy masz takie napisy:
Cytuj
//######################################################
//
//  Kern des Skriptpakets "Ikarus"
//      Autor      : Sektenspinner
//      Co-Autor   : Gottfried
//       Version    : 1.2.0
//
//######################################################

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
te dwa warunki w ogóle u mnie nie działają właściwie.

pierwszy działa na każdym mobie, drugi w ogóle nie działa. z tego co sprawdziłem na wogu są to niezbędne warunki do wywołania funkcji, kiedy mob jest zamknięty/otwarty.  masz link do najnowszego ikara? ciekawe co jest powodem.

if ( !Hlp_Is_oCMobLockable ( her.focus_vob ) ) { return; };


    if ( Zamek.bitfield & oCMobLockable_bitfield_locked )
    {
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Tu jest nowy adres:
const int zCView__SetFontColor = 8034576;    // Address in g1: 7339392 but in g2: 8034576
Chwilę pogrzebałem w silniku i znalazłem.
A co do skryptów to mi działa na g2.
Tu jest ikarus 1.2.0
http://exodus.worldofgothic.com/team/Sektenspinner/Ikarus_Skriptpaket.zip

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
ciekawe czemu to nie działa na g1. może na g1 nie działa w ten sposób, a przykłady na wogu były na bazie skryptów do g2nk.

taką mam kolejność w gothic.src

_INTERN\INTERN.SRC
_INTERN\MAGIC_INTERN.D

_INTERN\Floats32.D
_INTERN\Float32ToString.D
_INTERN\IntToHex.D

_INTERN\ENGINECLASSES\*.D
_INTERN\IKARUS.D
_Intern\Ikarus_Lexer.d
_INTERN\IKARUS_HLP_FUNCS.D
_Intern\I_Functions.d


_INTERN\IKARUSFUNCTS.D
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio

chicken
RaveN Studio

zmiana koloru czcionki innych npc (g1)
#32 2014-05-06, 22:17(Ostatnia zmiana: 2014-05-06, 22:24)
Ja nie mialem problemow w g1 i g2.  Dales to do tick tocka? Tick tock jest sprawny? Cos wyskakuje, ze nie dziala?
Edit @down: daj do tick tock

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Ja nie mialem problemow w g1 i g2.  Dales to do tick tocka? Tick tock jest sprawny? Cos wyskakuje, ze nie dziala?

dałem to do perców, ale one działają na 200%. może mam starą wersję ikara?? mam tego z CZ.
 

chicken

chicken

RaveN Studio
posty1230
Propsy559
ProfesjaNierób
  • RaveN Studio
Perceptiony to zmysly i nie maja nic wspolnego. Nie wiem co za problem dac do ticka. Na percach nie zadziala.

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
jesteś już kolejną osobą , która mnie w ten sposób przekonuje, a praktyka pokazuje co innego. wysle niedługo linka ze zdjęciem.
 

inż. Avallach

inż. Avallach

Administrator
posty7661
Propsy5239
NagrodyV
ProfesjaProgramista
  • Administrator
To ja dodam od siebie że chociaż to ja jestem tym który zawsze przekonuje powinno się używac perców (lub hooków) zamiast tick tocków gdzie tylko się da, ale będę zaskoczony jak dasz radę to zrobić na samych percach. Po prostu nie kojarzę żadnego perca który by się tu nadał, którego chcesz użyć? Kiedy chesz żeby następowała zmiana koloru?

pawbuj

pawbuj

Użytkownicy
posty1625
Propsy135
ProfesjaSkrypter
  • Użytkownicy
powiem tylko, że są perce które funkcjonują bez przerwy (z wyjątkiem kilku trybów np. zs_attack)   śą aktywne z częstotliwością nie gorszą niż do ustawienia w tick tocku. który w tym przypadku jest dalece nie praktyczny.
 


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