Domanda [DOMANDA]Abilitare e disabilitare invisibilità

Stato
Discussione chiusa ad ulteriori risposte.

Th3~J0k3r

Utente Emerald
18 Agosto 2011
1,435
59
148
423
Ultima modifica:
Salve ragazzi, sono qui per chiedervi se ci fosse un modo per abilitare e disabilitare l'invisibilità ai player tramite quest senza abilitare il comando inv nel CMD.

So che esiste la bandiera bianca, ma non capisco come settare la durata di essa.

Grazie a chi mi aiuta. :orgoglio:
 
Ultima modifica:
Ti sto per mandare un pò di codice per la sorgente client , poi se vuoi testarlo male non fa.

edit _ : sorgente server .-. mi ero appena alzato dal riposino .-.
 
Ultima modifica:
Bhe se ti interessa passare a file più aggiornati , ecco comodi comandi per lua per aggiungere , rimuovere invisibilità e anche per conoscere se il player al momento è già invisibile o meno.
C++:
//search int pc_get_start_location(lua_State * L) in questlua_pc.cpp

before it paste this :

#ifdef IKARUS_QUEST_INV
  
int pc_get_invisibility(lua_State * L)
    {
        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();

        if (ch->IsAffectFlag(AFF_INVISIBILITY))
        {
            lua_pushboolean(L, true);
            return 1;
        }
        else
        {
            lua_pushboolean(L, false);  
            return 1;
        }
    }
 
    int pc_set_invisibility(lua_State * L)
    {
        if(!lua_isnumber(L,1) )
        {
            sys_err("Ikarus >> Error in pc.set_invisibility (for add inv inserti 1 , to remove inv use 0.)");
            return 1;
        }
        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
        int StateToSet = (int) lua_tonumber(L,1);
        if (ch->IsAffectFlag(AFF_INVISIBILITY))
        {
            if(StateToSet > 0)
            {
                sys_err("ikarus >> try to set invisibility to 1 , already set to 1 ! ");
                return 1;
            }
            ch->RemoveAffect(AFFECT_INVISIBILITY);
            return 2;
        }
        else
        {
            if(StateToSet <= 0)
            {
                sys_err("Ikarus >> try to remove invisibility , already removed.");
                return 1;
            }
            ch->AddAffect(AFFECT_INVISIBILITY, POINT_NONE, 0, AFF_INVISIBILITY, INFINITE_AFFECT_DURATION, 0, true);
            return 2;
        }
   
    }
#endif



//then search :
            { "set_warp_location_local",pc_set_warp_location_local },

//under it paste this :

#ifdef IKARUS_QUEST_INV
            { "get_invisibility",        pc_get_invisibility},
            { "set_invisibility",        pc_set_invisibility},
#endif

//enjoy

WARNING : Non testato , appena scritto.

Comunque sarebbero da inserire in codice sorgente server per chi non lo avesse capito dal codice.
 
Bhe se ti interessa passare a file più aggiornati , ecco comodi comandi per lua per aggiungere , rimuovere invisibilità e anche per conoscere se il player al momento è già invisibile o meno.
C++:
//search int pc_get_start_location(lua_State * L) in questlua_pc.cpp

before it paste this :

#ifdef IKARUS_QUEST_INV
    int pc_get_invisibility(lua_State * L)
    {
        if (ch->IsAffectFlag(AFF_INVISIBILITY))
        {
            lua_pushboolean(L, true);
            return 1;
        }
        else
        {
            lua_pushboolean(L, false);
            return 1;
        }
    }
 
    int pc_set_invisibility(lua_State * L)
    {
        if(!lua_isnumber(L,1) )
        {
            sys_err("Ikarus >> Error in pc.set_invisibility (for add inv inserti 1 , to remove inv use 0.)");
            return 1;
        }
        LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
        StateToSet = (int) lua_tonumber(L,1);
        if (ch->IsAffectFlag(AFF_INVISIBILITY))
        {
            if(StateToSet > 0)
            {
                sys_err("ikarus >> try to set invisibility to 1 , already set to 1 ! ");
                return 1;
            }
            ch->RemoveAffect(AFFECT_INVISIBILITY);
            return 2;
        }
        else
        {
            if(StateToSet <= 0)
            {
                sys_err("Ikarus >> try to remove invisibility , already removed.");
                return 1;
            }
            ch->AddAffect(AFFECT_INVISIBILITY, POINT_NONE, 0, AFF_INVISIBILITY, INFINITE_AFFECT_DURATION, 0, true);
            return 2;
        }
    
    }
#endif



//then search :
            { "set_warp_location_local",pc_set_warp_location_local },

//under it paste this :

#ifdef IKARUS_QUEST_INV
            { "get_invisibility",        pc_get_invisibility},
            { "set_invisibility",        pc_set_invisibility},
#endif

//enjoy

WARNING : Non testato , appena scritto.

Non male! Cioè se qualcuno potesse testarlo e conferma la sua funzionalità sarebbe molto utile. Si potrebbe realizzare qualche script interessante che usi queste funzioni.

P.S. Ma queste sono modifiche da applicare alla parte server o client ? Credo vadano applicate alla parte server.. sbaglio ?
 
P.S. Ma queste sono modifiche da applicare alla parte server o client ? Credo vadano applicate alla parte server.. sbaglio ?

Si in codice sorgente del binario game.
Quando ti ho scritto il primo
Ti sto per mandare un pò di codice per la sorgente client , poi se vuoi testarlo male non fa.

edit _ : sorgente server .-. mi ero appena alzato dal riposino .-.
Mi ero appena alzato , ero mezzo rincoglionito , ora che mi sono svegliato lo sono solo per un quarto invece. :asd:
 
Ultima modifica:
Corretto un piccolo errore nel messaggio precedente. Nel caso qualcuno lo avesse già copiato per testarlo , rifatelo :asd:.
Ora che l'ho riletto e corretto da sveglio , sono abbastanza certo che funzioni.

Per chi non lo sapesse , serve anche aggiungere un istruzione al compilatore per far si che lo stesso compili il codice aggiunto.
Bisogna aggiungere un "[HASHTAG]#define[/HASHTAG] IKARUS_QUEST_INV" nel file dove inserite questo genere di define.
In genere si usa il file "service.h" in common folder , altrimenti potete inserirlo dove ritenete più adatto (a patto che venga ereditato da questlua_pc.cpp)

Non dimenticate di aggiungere le funzioni in quest_functions altrimenti il qc non compila lo script lua.

EDIT:
Come usare i nuovi comandi lua :
pc.set_invisibility(1) --> rende invisibili
pc.set_invisibility(0)--->rende visibili
pc.get_invisibility() --> return true (vero) per pg invisibili , return false (falso) per pg visibili.

cosa succede se eseguo pc.set_invisibility(1) su un pg già invisibile? nulla , una scritta in syserr del channel che ti avvisa della svista.
idem se provate a togliere l'invisibilità a un player che non la tiene , solo scritta in syserr.
 
Corretto un piccolo errore nel messaggio precedente. Nel caso qualcuno lo avesse già copiato per testarlo , rifatelo :asd:.
Ora che l'ho riletto e corretto da sveglio , sono abbastanza certo che funzioni.

Per chi non lo sapesse , serve anche aggiungere un istruzione al compilatore per far si che lo stesso compili il codice aggiunto.
Bisogna aggiungere un "[HASHTAG]#define[/HASHTAG] IKARUS_QUEST_INV" nel file dove inserite questo genere di define.
In genere si usa il file "service.h" in common folder , altrimenti potete inserirlo dove ritenete più adatto (a patto che venga ereditato da questlua_pc.cpp)

Non dimenticate di aggiungere le funzioni in quest_functions altrimenti il qc non compila lo script lua.

EDIT:
Come usare i nuovi comandi lua :
pc.set_invisibility(1) --> rende invisibili
pc.set_invisibility(0)--->rende visibili
pc.get_invisibility() --> return true (vero) per pg invisibili , return false (falso) per pg visibili.

cosa succede se eseguo pc.set_invisibility(1) su un pg già invisibile? nulla , una scritta in syserr del channel che ti avvisa della svista.
idem se provate a togliere l'invisibilità a un player che non la tiene , solo scritta in syserr.
Ottimo, potresti fare anche una release a parte così magari la vedono più persone!
 
Non mi pare abbastanza importante da fare una release.
Magari dopo averlo testato , fai pure una release se vuoi, ti autorizzo io...

Inviato dal mio LG-D855 utilizzando Tapatalk
 
Non mi pare abbastanza importante da fare una release.
Magari dopo averlo testato , fai pure una release se vuoi, ti autorizzo io...

Inviato dal mio LG-D855 utilizzando Tapatalk
Secondo me lo è, cioè aggiungendo funzioni dai l'opportunità di creare script sempre più originali. Non è che sia uno stravolgimento nel campo LUA però fa la sua bella parte
 
Secondo me lo è, cioè aggiungendo funzioni dai l'opportunità di creare script sempre più originali. Non è che sia uno stravolgimento nel campo LUA però fa la sua bella parte
Allora rilasciale tu stesso se lo pensi.

Prima testale magari però...

Inviato dal mio LG-D855 utilizzando Tapatalk
 
Stato
Discussione chiusa ad ulteriori risposte.

DISCUSSIONI SIMILI

Indietro
Top Bottom