C++ [C++] Piccoli Comandi poco utili

Stato
Discussione chiusa ad ulteriori risposte.

Ikarus_

Utente Emerald
8 Settembre 2012
1,047
23
560
443
Ultima modifica da un moderatore:
Salve Community ,

Vi disturbo per una release relativamente sciocca , ma preferisco pubblicare anche queste fesserie piuttosto che lasciarle marcire nella mia ROM.

Sono dei nuovi comandi e funzioni da usare in lua:

1. pc.is_invisible
2. pc.set_invisibility
3. npc.purge_by_race

Non sono comandi complicati che necessitano di molte spiegazioni , ma meglio che vi spieghi l'utilizzo:

pc.is_invisible() ->(ritorna vero se il pg attualmente invisibile , falso se è visibile)

pc.set_invisibility(parametro) * ->(passando il parametro 0 rendi il player visibile - passando il parametro 1 il player scompare )

npc.purge_by_race (parametro) ->( passando come parametro la razza (comunemente chiamata vnum) del mob , si purgeranno tutti i mob della razza indicata MA SOLO NELLA MAPPA IN CUI CI SI TROVA )



Scrivo in inglese l'installazione del codice perchè sono abituato così (in realtà anche il codice usa un dizionario inglese ).

C++:
//search :

LPCHARACTER CHARACTER_MANAGER::SpawnMobRandomPosition(DWORD dwVnum, long lMapIndex)

//add before -WARNING BEFORE :
#ifdef IKARUS_QUEST_COMMAND

struct FuncPurgeAllMobByRace
{
    DWORD m_race;
 
    FuncPurgeAllMobByRace(DWORD race) : m_race(race)
    {
    }

    void operator () (LPENTITY ent)
    {

        if (ent->IsType(ENTITY_CHARACTER))
        {
            LPCHARACTER pkChr = (LPCHARACTER) ent;

            if(pkChr->IsPC())
                return;
            if(pkChr->GetRaceNum() != m_race )
                return;
            M2_DESTROY_CHARACTER(pkChr);
        }
    }
};

bool CHARACTER_MANAGER::PurgeAllMobByRace( DWORD race , LPSECTREE_MAP map )
{
    if(race < 0 || !map )
        return false;
    FuncPurgeAllMobByRace purge_all_mob(race);
    map->for_each(purge_all_mob);
    return true;
}


#endif

C++:
//search :

        LPCHARACTER        SpawnMobRandomPosition(DWORD dwVnum, long lMapIndex);

//add before -WARNING BEFORE

#ifdef IKARUS_QUEST_COMMAND
        bool            PurgeAllMobByRace( DWORD race , LPSECTREE_MAP map );
#endif

C++:
//search:

#include "desc.h"

//add under:

#ifdef IKARUS_QUEST_COMMAND
#include "sectree_manager.h"
#endif


////////////////////////////////////////////////

//search :

    int npc_get_exp(lua_State* L)
    {
        lua_pushnumber(L, CQuestManager::instance().GetCurrentNPCCharacterPtr()->GetMobTable().dwExp);
        return 1;
    }


//add under :

#ifdef IKARUS_QUEST_COMMAND
    int npc_purge_by_race(lua_State* L)
    {
        LPCHARACTER pc = CQuestManager::Instance().GetCurrentCharacterPtr();       
        LPSECTREE_MAP pcMap = SECTREE_MANAGER::instance().GetMap(pc->GetMapIndex());
        DWORD race = (DWORD)lua_tonumber(L , 1);
        if( !pcMap || !lua_isnumber(L , 1) || !race )
        {
            sys_err("Ikarus >> npc_purge_by_race : if(!pcMap || !lua_isnumber(L , 1) || !race ) , return before purge ");
            return 1;
        }
        CHARACTER_MANAGER::Instance().PurgeAllMobByRace(  race , pcMap);
        return 2;
    }
#endif



//////////////////////////////////////////////////////

//search :

            { "purge",                npc_purge            },

//add under :


#ifdef IKARUS_QUEST_COMMAND
            { "purge_by_race",        npc_purge_by_race    },
#endif

C++:
//add between the others define
#define IKARUS_QUEST_COMMAND

Codice:
//search :

    int pc_get_start_location(lua_State * L)

//add before WARNING BEFORE

#ifdef IKARUS_QUEST_COMMAND
    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

///////////////////////////////////////////////////////////////////////

//search:

            { "set_warp_location_local",pc_set_warp_location_local },

//add under :


#ifdef IKARUS_QUEST_COMMAND
            { "is_invisible",        pc_get_invisibility},
            { "set_invisibility",        pc_set_invisibility},
#endif



A differenza delle ultime release che ho visto , questo codice è opera delle mie manine (non che sia nulla di cui vantarsi , anzi è roba da nulla e lo dico chiaro ) e non è stato semplicemente leakerato in giro.
Prego in anticipo per il tempo che ho perso a scriverlo (10 minuti a scrivere , mezzoretta per testare).
Non voglio like per questa roba da nulla quindi astenetevi dal pigiare quel tasto ( come se servisse dirvelo :asd: ).

Questi comandi sono stati scritti per aiutare un utente in help development , ma mi pareva utile rilasciarli in un thread a sè.

Vi rilascio anche una quest che ho scritto per testare i comandi , nel caso qualcuno voglia testarli prima di usarli. Siete liberi di non usare questa quest.

Codice:
quest test_command begin
    state start begin
   
        when letter begin
            send_letter("test_command")
        end
       
        when info or button begin
            say("Scegli cosa fare : ")
            say("")
            local test_to_do = select("test comando get_inv","test comando set_inv","test comando purge","nulla")
            if test_to_do == 1 then
                if pc.is_invisible() then
                    chat("Sei invisibile")
                else
                    chat("Sei visibile")
                end
            elseif test_to_do == 2 then
                say("Scegli come vuoi settare l'invisibilità ")
                say("")
                local inv_to_set = select("Visibile","Invisibile","Nulla")
                if inv_to_set != 3 then
                    pc.set_invisibility(inv_to_set - 1)
                end
            elseif test_to_do == 3 then
                say("Scegli la razza da purgare")
                say("")
                local race = tonumber(input())
                npc.purge_by_race(race)
            end
        end
    end
end

Agli haters che non vedono l'ora di screditarmi dico : risparmiatevela , sto dicendo io stesso che è robetta da poco. Nessuno vi obbliga ad usarla, nessuno vi impedisce di scrivervi i vostri MEGA SYSTEM ULTRA PROFFESSIONNAALL.

Se per caso sta leggendo qualcuno che sta aspettando lo sharing system (prestito item a tempo) sappiate che lo rilascio a breve ( non so ancora quando di preciso ma questione di giorni ).
Per motivi personali e per via del mio trasloco da una casa ad un altra , ho dovuto ritardarne l'uscita.
(non che serva giustificarsi per una free released , però giusto anche che sappiate le circostanze)

Per qualunque problema , sono disponibile per aiutarvi.


Enjoy ;)
 

Ikarus_

Utente Emerald
8 Settembre 2012
1,047
23
560
443
Sto facendo un secondo system per scusarmi del ritardo e li rilascio insieme.
Si tratta del DamageRecordSystem , anche se esistes già ma io lo sto rivedendo a modo mio...
Insieme al System rilascerò anche mappa arena fatta da me e i mob "fake player" che hanno l aspetto di un player e ricevono danno con i mezzi come player (ma sono mob)
Seppur sei san Tommaso che non mi credi, ritieniti soddisfatto che io ti abbia calcolato visto.il fastidio che provi a causare.
 
Stato
Discussione chiusa ad ulteriori risposte.