Page 1 of 2 12 ÚltimoÚltimo
Resultados 1 a 10 de 12
  1. #1
    Fundador PerfectZone Mentor's Avatar


    Data de Ingresso
    Jun 2013
    Posts
    2,850
    Thanks Thanks Given 
    784
    Thanks Thanks Received 
    2,193
    Thanked in
    355 Posts
    Mencionado
    804 Post(s)
    MEU HUMOR
    Twisted
    País
    Brazil

    Red Dragon + Golden Dragon Invasion Map Flying - MuEmu

    Pessoal bom dia, vim postar esse possível fix das invasões dos Goldem dragon e Red Dragon que não mostram eles sobrevoando as cidades que ocorre a invasão, não cheguei a testar, e isso requer um pouco de conhecimento para poder aplicar isso a sua source MuEmu que tem esse bug.

    Vamos ao que interessa

    Em GameServer/Data/GameServerInfo - Event.dat

    BUSCAR "InvasionManagerSwitch = 1" e abaixo coloque isso:

    Código:
    FlyingDragonsSwitch = 1 //Activa/Desactiva los dragones volando
    FlyingDragonsKillBossSwitch = 1 //Activa/Desactiva sacar los dragones al matar al boss
    Agora crie na sua fonte o arquivo FlyingDragons.cpp e adicione essas linhas:

    Código:
    #include "stdafx.h"
    #include "Protocol.h"
    #include "FlyingDragons.h"
    #include "Util.h"
    
    cDragonMaps gDragonMaps;
    
    void cDragonMaps::DeleteFlyingDragons () //Dragones verificar si alguno no se finalizó
    {
        for (int n=0; n<MAX_MAP; n++){
            if (mapasDragones[n].EndTime<=time(0)){
                if (mapasDragones[n].index==1 || mapasDragones[n].index==3){
                    mapasDragones[n].Ok=0;
                    mapasDragones[n].index=-1;
                    GCEventStateSendToAll(n, 0, mapasDragones[n].index);
                }
            }
        }
    }
    
    void cDragonMaps::AddFlyingDragons(int mapa, int invasionTime, int index) //Dragones agregar al mapa y setearlos
    {
        if (mapasDragones[mapa].Ok==1 && mapasDragones[mapa].index==index){
            if (mapasDragones[mapa].EndTime<(time(0)+invasionTime)){
                mapasDragones[mapa].EndTime=(time(0)+invasionTime);
            }
        } else {
            mapasDragones[mapa].Ok=1;
            mapasDragones[mapa].index=index;
            mapasDragones[mapa].EndTime=(time(0)+invasionTime);
        }
        GCEventStateSendToAll(mapa, 1, index); //Dragones meter al iniciar una invasión
    }
    
    void cDragonMaps::FlyingDragonsBossDieProc(int mapa) //Quitar dragones al matar al boss
    {
        for (int n=0; n<MAX_MAP; n++){
            if (mapasDragones[n].index==mapasDragones[mapa].index){
                mapasDragones[n].Ok=0;
                mapasDragones[n].index=-1;
                GCEventStateSendToAll(n, 0, mapasDragones[n].index);
            }
        }
    }
    
    void cDragonMaps::FlyingDragonsCheck(int mapa, int index) //Dragones verificar mapa para insertar
    {
        if (mapasDragones[mapa].Ok==1)
            GCEventStateSend(index,1,mapasDragones[mapa].index);
    }
    Crie também o arquivo FlyingDragons.h e adicione essas linhas:

    Código:
    #pragma once
    
    #include "Map.h"
    
    class cDragonMaps
    {
    public:
        //Dragones métodos
        void DeleteFlyingDragons ();
        void AddFlyingDragons(int mapa, int invasionTime, int index);
        void FlyingDragonsBossDieProc(int mapa);
        void FlyingDragonsCheck(int mapa, int index);
    private:
        //Dragones variables de uso
        struct Maps
        {
            int Ok;
            time_t EndTime;
            int index;
        };
    
        Maps mapasDragones[MAX_MAP];
    };
    
    extern cDragonMaps gDragonMaps;
    Agora vá no seu arquivo ServerInfo.h e busque por essa linha:
    Código:
    int m_InvasionManagerSwitch;
    Abaixo dela adicione isso:
    Código:
    int m_FlyingDragonsSwitch; //Dragones Server Switch
        int m_FlyingDragonsKillBossSwitch; //Dragones Kill Boss Server Switch
    Em ServerInfo.cpp busque por:
    Código:
    this->m_InvasionManagerSwitch = GetPrivateProfileInt(section,"InvasionManagerSwitch",0,path);
    Abaixo dela adicione isso:
    Código:
    this->m_FlyingDragonsSwitch = GetPrivateProfileInt(section,"FlyingDragonsSwitch",0,path); //Dragones Server Switch
    
        this->m_FlyingDragonsKillBossSwitch = GetPrivateProfileInt(section,"FlyingDragonsKillBossSwitch",0,path); //Dragones Kill Boss Server Switch
    Em DSProtocol.cpp adicione esse include #include "FlyingDragons.h" e depois busque nesse mesmo aquivo por essa função:
    Código:
    void DGCharacterInfoRecv(SDHP_CHARACTER_INFO_RECV* lpMsg)
    No final da função vai ter essa parte:
    Código:
    }
    
        LogAddConnect(LOG_BLUE,"[Obj][%d] LogInCharacter (%s)",lpObj->Index,lpObj->Name);
    }
    Acrescente essa if antes da linhas que citei acima:
    Código:
    if (gServerInfo.m_FlyingDragonsSwitch==1){
            //Dragones Meter al loguear con personaje
            gDragonMaps.FlyingDragonsCheck(lpObj->Map, lpObj->Index);
    Em InvasionManager.cpp adicione o include: #include "FlyingDragons.h" e busque nesse mesmo arquivo essa função:
    Código:
    void CInvasionManager::SetMonster(INVASION_INFO* lpInfo,INVASION_RESPWAN_INFO* lpRespawnInfo,INVASION_MONSTER_INFO* lpMonsterInfo)
    Nessa função acrescente isso:
    Código:
    lpObj->MaxRegenTime = ((lpMonsterInfo->RegenType==0)?(lpInfo->InvasionTime*1000):lpMonsterInfo->RegenTime);
    
            if(lpObj->Class == lpInfo->BossIndex && lpInfo->BossMessage != -1)
            {
                LogAdd(LOG_EVENT,"[Invasion Manager] Index(%d) Boss Position (Map: %d X: %d Y: %d)",lpInfo->Index,lpObj->Map,lpObj->X,lpObj->Y);
    
            }
    
            //Dragones setear variables al iniciar una invasión
            if (gServerInfo.m_FlyingDragonsSwitch==1){
                if (lpInfo->Index==1){
                    gDragonMaps.AddFlyingDragons(lpObj->Map, lpInfo->InvasionTime, 1);
                }
                if (lpInfo->Index==2){
                    gDragonMaps.AddFlyingDragons(lpObj->Map, lpInfo->InvasionTime, 3);
                }
            }
    
    
            if(this->AddMonster(lpInfo,index) == 0)
            {
                gObjDel(index);
                continue;
            }
    
        }
    }
    Ainda nesse CPP busque pela função:
    Código:
    void CInvasionManager::MonsterDieProc(LPOBJ lpObj,LPOBJ lpTarget)
    E acrescente:
    Código:
    if(this->GetMonster(lpInfo,lpObj->Index) == 0)
            {
                continue;
            }
    
            if(lpObj->Class == lpInfo->BossIndex)
            {
                if (gServerInfo.m_FlyingDragonsKillBossSwitch==1 && gServerInfo.m_FlyingDragonsSwitch==1){
                    //Quitar dragones al matar al boss
                    if (lpInfo->Index==1){
                        gDragonMaps.FlyingDragonsBossDieProc(lpObj->Map);
                    }
                    else if (lpInfo->Index==2){
                        gDragonMaps.FlyingDragonsBossDieProc(lpObj->Map);
                    }
                }
    
                if (lpInfo->BossMessage != -1){
                    gNotice.GCNoticeSendToAll(0,0,0,0,0,0,gMessage.GetMessage(lpInfo->BossMessage),lpTarget->Name);
                    continue;
                }
            }
        }
    }
    Agora vamos em ObjectManager.cpp e buscar pela função:
    Código:
    bool CObjectManager::CharacterGameClose(int aIndex)
    No final da função acrescente:
    Código:
    gObjClearViewport(lpObj);
    
        //Dragones sacar al salir del personaje
        GCEventStateSend(lpObj->Index, 0, 1);
        GCEventStateSend(lpObj->Index, 0, 3);
    
        LogAddConnect(LOG_USER,"[Obj][%d] LogOutCharacter (%s)",lpObj->Index,lpObj->Name);
    
        memset(lpObj->Name,0,sizeof(lpObj->Name));
    
        lpObj->Connected = OBJECT_LOGGED;
        return 1;
    }
    Em Protocol.h adicione:
    Código:
    void GCEventStateSendToAll(int map,BYTE state,BYTE event); //Dragoes Funcion
    Em Protocol.cpp adicione:
    Código:
    //Dragoes function para checar mapa de invasión e todos os personajes
    void GCEventStateSendToAll(int map ,BYTE InvasionState, BYTE InvasionIndex)
    {
        for ( int n=0; n<MAX_OBJECT ; n++ )
        {
            if ( gObj[n].Type == OBJECT_USER && map == gObj[n].Map )
            {
                GCEventStateSend(n, InvasionState, InvasionIndex);
            }
        }
    }
    Em User.cpp adicione o include: #include "FlyingDragons.h" e depois busque pela função:
    Código:
    void gObjEventRunProc()
    No final dela acrescente:
    Código:
    #if(GAMESERVER_UPDATE>=402)
    
        gMossMerchant.MainProc();
    
        #endif
    
        gRaklion.MainProc();
    
        if (gServerInfo.m_FlyingDragonsSwitch==1){
            //Dragones quitar
            gDragonMaps.DeleteFlyingDragons();
        }
    }
    Ainda nesse cpp busque pela função:
    Código:
    BOOL gObjMoveGate(int aIndex,int gate)
    E acrescente no final dela:
    Código:
    if(lpObj->Type == OBJECT_USER)
        {
            lpObj->LastTeleportTime = 10;
        }
    
        if (gServerInfo.m_FlyingDragonsSwitch==1){
            //Dragones meter al cambiar de mapa
            gDragonMaps.FlyingDragonsCheck(lpObj->Map, lpObj->Index);
        }
    
        return 1;
    
        ERROR_JUMP:
    Bom, como eu disse requer um pouco de conhecimento, espero que isso sirva e em breve estarei criando um vído mostrando como adicionar esse código para facilitar.

    Créditos pelo fix:
    kayito
    Last edited by Mentor; 19/06/2020 at 10:26 AM.
    Perfect Zone Brasil



    Inscreva-se no meu canal clicando [Somente membros podem ver os links. ]

  2. The Following 2 Users Say Thank You to Mentor For This Useful Post:


  3. #2
    Developer C++ rafhael's Avatar
    Data de Ingresso
    Jun 2019
    Posts
    31
    Thanks Thanks Given 
    13
    Thanks Thanks Received 
    194
    Thanked in
    11 Posts
    Mencionado
    0 Post(s)
    País
    Brazil
    Eu uso esse sistema, porém ao terminar o tempo de invasão que no meu caso é 1 hora, os dragões continuam sobrevoando, se mudar de mapa e voltar eles somem, mas se você se manter no mesmo mapa você assiste os dragões infinitamente!

  4. #3
    Membro caiojuan92's Avatar
    Data de Ingresso
    Jun 2020
    Posts
    112
    Thanks Thanks Given 
    24
    Thanks Thanks Received 
    5
    Thanked in
    5 Posts
    Mencionado
    5 Post(s)
    País
    Brazil
    Acredito que é necessário colocar uma interrupção em algum momento

  5. #4
    Developer C++ rafhael's Avatar
    Data de Ingresso
    Jun 2019
    Posts
    31
    Thanks Thanks Given 
    13
    Thanks Thanks Received 
    194
    Thanked in
    11 Posts
    Mencionado
    0 Post(s)
    País
    Brazil
    [QUOTE=caiojuan92;48039]Acredito que é necessário colocar uma interrupção em algum momento

    CORRIGIDO!
    Código:
    #include "stdafx.h"
    #include "Protocol.h"
    #include "FlyingDragons.h"
    #include "Util.h"
    
    cDragonMaps gDragonMaps;
    
    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
    
    cDragonMaps::cDragonMaps() // OK
    {
    
    }
    
    cDragonMaps::~cDragonMaps() // OK
    {
    
    }
    
    void cDragonMaps::Init() // OK
    {
        for (int n = 0; n < MAX_MAP; n++)
        {
            this->mapasDragones[n].Ok = 0;
            this->mapasDragones[n].EndTime = 0;
            this->mapasDragones[n].index = -1;
        }
    }
    
    void cDragonMaps::DeleteFlyingDragons() 
    {
        for (int n = 0; n<MAX_MAP; n++) {
            if (mapasDragones[n].EndTime <= time(0)) {
                if (mapasDragones[n].index == 1 || mapasDragones[n].index == 3) {
                    mapasDragones[n].Ok = 0;
                    mapasDragones[n].index = -1;
    //FIX REMOVER EFEITO AO TERMINAR TEMPO DE INVASÃO
                    GCEventStateSendToAll(n, 0, 1);
                    GCEventStateSendToAll(n, 0, 3);
                }
            }
        }
    }
    
    void cDragonMaps::AddFlyingDragons(int mapa, int invasionTime, int index)
    {
        if (mapa == MAP_ATLANS) return; //FIX REMOVER EFEITO DE ATLANS ONDE APARECIAM CENTENAS DE DRAGÕES
    
        if (mapasDragones[mapa].Ok == 1 && mapasDragones[mapa].index == index) {
            if (mapasDragones[mapa].EndTime<(time(0) + invasionTime)) {
                mapasDragones[mapa].EndTime = (time(0) + invasionTime);
            }
        }
        else {
            mapasDragones[mapa].Ok = 1;
            mapasDragones[mapa].index = index;
            mapasDragones[mapa].EndTime = (time(0) + invasionTime);
        }
        GCEventStateSendToAll(mapa, 1, index);
    }
    
    void cDragonMaps::FlyingDragonsBossDieProc(int mapa)
    {
        for (int n = 0; n<MAX_MAP; n++) {
            if (mapasDragones[n].index == mapasDragones[mapa].index) {
                mapasDragones[n].Ok = 0;
                mapasDragones[n].index = -1;
                //FIX REMOVER EFEITO AO TERMINAR TEMPO DE INVASÃO
                GCEventStateSendToAll(n, 0, 1);
                GCEventStateSendToAll(n, 0, 3);
            }
        }
    }
    
    void cDragonMaps::FlyingDragonsCheck(int mapa, int index)
    {
        if (mapasDragones[mapa].Ok == 1)
            GCEventStateSend(index, 1, mapasDragones[mapa].index);
    }
    Last edited by rafhael; 06/07/2020 at 04:57 PM.

  6. The Following 2 Users Say Thank You to rafhael For This Useful Post:


  7. #5
    Iniciante admkollaa's Avatar
    Data de Ingresso
    Oct 2015
    Posts
    3
    Thanks Thanks Given 
    19
    Thanks Thanks Received 
    0
    Thanked in
    0 Posts
    Mencionado
    0 Post(s)

    erro compilar

    Fiz os procedimentos, só que estou enroscado nisso aqui na hora de compilar 1>FlyingDragons.obj : error LNK2001: unresolved external symbol "void __cdecl GCEventStateSendToAll(int,unsigned char,unsigned char)" (?GCEventStateSendToAll@@YAXHEE@Z)
    Isso aqui eu achei "GCEventStateSendToAll" mas esse aqui não "void __cdecl" <---- sera que tenho que adicionar isso . desculpa , ignorância em downgrade.
    Last edited by admkollaa; 26/07/2020 at 10:46 AM. Razão: edit destaque palavras

  8. #6
    Membro VIP Wilian Ramalho's Avatar
    Data de Ingresso
    Jul 2020
    Posts
    36
    Thanks Thanks Given 
    85
    Thanks Thanks Received 
    11
    Thanked in
    7 Posts
    Mencionado
    1 Post(s)
    País
    Brazil
    Já existe o vídeo a respeito ?

  9. #7
    Membro robsonsoares's Avatar
    Data de Ingresso
    May 2017
    Posts
    185
    Thanks Thanks Given 
    148
    Thanks Thanks Received 
    22
    Thanked in
    18 Posts
    Mencionado
    7 Post(s)
    MEU HUMOR
    Amazed
    País
    Brazil
    [QUOTE=rafhael;48382]
    Citação Originally Posted by caiojuan92 Ver Post
    Acredito que é necessário colocar uma interrupção em algum momento

    CORRIGIDO!
    Código:
    #include "stdafx.h"
    #include "Protocol.h"
    #include "FlyingDragons.h"
    #include "Util.h"
    
    cDragonMaps gDragonMaps;
    
    //////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////
    
    cDragonMaps::cDragonMaps() // OK
    {
    
    }
    
    cDragonMaps::~cDragonMaps() // OK
    {
    
    }
    
    void cDragonMaps::Init() // OK
    {
        for (int n = 0; n < MAX_MAP; n++)
        {
            this->mapasDragones[n].Ok = 0;
            this->mapasDragones[n].EndTime = 0;
            this->mapasDragones[n].index = -1;
        }
    }
    
    void cDragonMaps::DeleteFlyingDragons() 
    {
        for (int n = 0; n<MAX_MAP; n++) {
            if (mapasDragones[n].EndTime <= time(0)) {
                if (mapasDragones[n].index == 1 || mapasDragones[n].index == 3) {
                    mapasDragones[n].Ok = 0;
                    mapasDragones[n].index = -1;
    //FIX REMOVER EFEITO AO TERMINAR TEMPO DE INVASÃO
                    GCEventStateSendToAll(n, 0, 1);
                    GCEventStateSendToAll(n, 0, 3);
                }
            }
        }
    }
    
    void cDragonMaps::AddFlyingDragons(int mapa, int invasionTime, int index)
    {
        if (mapa == MAP_ATLANS) return; //FIX REMOVER EFEITO DE ATLANS ONDE APARECIAM CENTENAS DE DRAGÕES
    
        if (mapasDragones[mapa].Ok == 1 && mapasDragones[mapa].index == index) {
            if (mapasDragones[mapa].EndTime<(time(0) + invasionTime)) {
                mapasDragones[mapa].EndTime = (time(0) + invasionTime);
            }
        }
        else {
            mapasDragones[mapa].Ok = 1;
            mapasDragones[mapa].index = index;
            mapasDragones[mapa].EndTime = (time(0) + invasionTime);
        }
        GCEventStateSendToAll(mapa, 1, index);
    }
    
    void cDragonMaps::FlyingDragonsBossDieProc(int mapa)
    {
        for (int n = 0; n<MAX_MAP; n++) {
            if (mapasDragones[n].index == mapasDragones[mapa].index) {
                mapasDragones[n].Ok = 0;
                mapasDragones[n].index = -1;
                //FIX REMOVER EFEITO AO TERMINAR TEMPO DE INVASÃO
                GCEventStateSendToAll(n, 0, 1);
                GCEventStateSendToAll(n, 0, 3);
            }
        }
    }
    
    void cDragonMaps::FlyingDragonsCheck(int mapa, int index)
    {
        if (mapasDragones[mapa].Ok == 1)
            GCEventStateSend(index, 1, mapasDragones[mapa].index);
    }

    sou novo onde add essa função??

  10. #8
    Membro VIP Wilian Ramalho's Avatar
    Data de Ingresso
    Jul 2020
    Posts
    36
    Thanks Thanks Given 
    85
    Thanks Thanks Received 
    11
    Thanked in
    7 Posts
    Mencionado
    1 Post(s)
    País
    Brazil
    FlyingDragons.cpp

  11. The Following 2 Users Say Thank You to Wilian Ramalho For This Useful Post:


  12. #9
    Fundador PerfectZone Mentor's Avatar


    Data de Ingresso
    Jun 2013
    Posts
    2,850
    Thanks Thanks Given 
    784
    Thanks Thanks Received 
    2,193
    Thanked in
    355 Posts
    Mencionado
    804 Post(s)
    MEU HUMOR
    Twisted
    País
    Brazil
    Só lembrando que se não tiver esse cpp você vai ter de criar tanto o FlyingDragons.cpp quanto o FlyingDragons.h
    Perfect Zone Brasil



    Inscreva-se no meu canal clicando [Somente membros podem ver os links. ]

  13. The Following 2 Users Say Thank You to Mentor For This Useful Post:


  14. #10
    Developer C++ Maykon's Avatar
    Data de Ingresso
    Jan 2015
    Posts
    213
    Thanks Thanks Given 
    192
    Thanks Thanks Received 
    630
    Thanked in
    40 Posts
    Mencionado
    64 Post(s)
    MEU HUMOR
    Innocent
    Qual a diferença do evento original da webzen ?

Page 1 of 2 12 ÚltimoÚltimo

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • You may not post Resposta(s)
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •  
Sobre nós
Somos uma comunidade em atividade a 8 anos que aborda assuntos relacionados a games em geral, principalmente games MMORPG. e que busca sempre ajudar os membros através de conteúdos, tutoriais e suporte...
Nossos anunciantes
Hinetworks
VelozHost
InovHost
Rede Sociais