Jump to content

Kenshi Torres

Miembro
  • Contador contenido

    321
  • Ingreso

  • Última visita

  • Días ganados

    31

Mensajes publicados por Kenshi Torres

  1. hace 4 horas, iMixx - legionm2.com dijo:

    Hola denuevo!

    Tengo este problema con la quest de inicio, todo bien pero al cerrar el cuadro
    se quedan las letras. Saben qué podrá ser?

    Gracias!

    Debes iniciar sesión para ver el contenido del archivo adjunto en esta publicación.

    Como implementaste ese sistema lo tienes

  2. Elixir rojo y azul como en estos servidores pvp.
    buscar en char_item.ccp

    Quote

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

    Agrega abajo:

    Quote

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

    búscar en char_item.ccp

    Quote

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

    Agrega abajo

    Quote

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

     

  3. Server/game/src/skill.h se abre y se busca;

    Quote
    
    SKILL_FLAG_FIRE = (1 << 26),

    agrega abajo

    Quote
    
    SKILL_FLAG_PARTY = (1 << 27),

    char_skill.cpp se abre y busca;

    Quote
    
    SKILL_RESIST_PENETRATE

    agrega este codigo debajo de:

    SKILL_RESIST_PENETRATE

    };

     

    struct FPartyPIDCollector
    {
        std::vector <DWORD> vecPIDs;
        FPartyPIDCollector()
        {
        }
        void operator () (LPCHARACTER ch)
        {
        vecPIDs.push_back(ch->GetPlayerID());
        }
    };

    Buscar en el mismo archivo;

     

        if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
            pkVictim = this;

    El siguiente codigo se agrega a continuación:

     

    if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim) pkVictim = this;

    Buscar en el mismo archivo;

     

       if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
            pkVictim = this;

    agrega a continuación:

     

       if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim)
            pkVictim = this;

    Buscar en el mismo archivo;

     

     if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
            ComputeSkill(dwVnum, this);
        else if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK))
            ComputeSkill(dwVnum, pkVictim);
        else if (dwVnum == SKILL_BYEURAK)
            ComputeSkill(dwVnum, pkVictim);
        else if (dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill())
            ComputeSkill(dwVnum, pkVictim);
    
        m_dwLastSkillTime = get_dword_time();
    
        return true;
    }
    
    remplaza por los siguientes códigos:
    

     

        if (IS_SET(pkSk->dwFlag, SKILL_FLAG_SELFONLY))
            ComputeSkill(dwVnum, this);
        else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && !GetParty() && !pkVictim)
            ComputeSkill(dwVnum, this);
        else if (IS_SET(pkSk->dwFlag, SKILL_FLAG_PARTY) && GetParty())
        {
            FPartyPIDCollector f;
            GetParty()->ForEachOnMapMember(f, GetMapIndex());
            for (std::vector <DWORD>::iterator it = f.vecPIDs.begin(); it != f.vecPIDs.end(); it++)
            {
                LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(*it);
                ComputeSkill(dwVnum, ch);
            }
        }
        else if (!IS_SET(pkSk->dwFlag, SKILL_FLAG_ATTACK))
            ComputeSkill(dwVnum, pkVictim);
        else if (dwVnum == SKILL_BYEURAK)
            ComputeSkill(dwVnum, pkVictim);
        else if (dwVnum == SKILL_MUYEONG || pkSk->IsChargeSkill())
            ComputeSkill(dwVnum, pkVictim);
    
        m_dwLastSkillTime = get_dword_time();
    
        return true;
    }

    guild.cpp se abre y se busca;

     

     if ((pkSk->dwFlag & SKILL_FLAG_SELFONLY))
        {
            // 이미 걸려 있으므로 사용하지 않음.
            if (ch->FindAffect(pkSk->dwVnum))
                return;
    
            victim = ch;
        }

    El siguiente codigo se agrega a continuación:

      if ((pkSk->dwFlag & SKILL_FLAG_PARTY))
        {
            if (ch->FindAffect(pkSk->dwVnum))
                return;
    
            victim = ch;
        }

    abre en Navicat;
    Navicat 
    => Player => skill_proto =haga clic con el botón derecho en > y diga " Table design".
    Llegamos al "setFlag" st y añadimos el valor "PARTY" al final.

    Después de agregar este valor, presionamos el botón "OK" y lo grabamos. Luego ingresamos skil_proto con el clic izquierdo y agregamos los valores de los ids "

    dwVnum" a continuación en la columna "setFlag".

    Agregamos el valor "PARTY" a los valores 94, 95, 96, 109, 110 y 111 dwVnum 

  4. Explicación 

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
    : Cuando comienza el duelo, el efecto es 3-2-1 go. Muy agradable. Si está editando archivos tipo ws, le sugiero que lo instale 

     

    service.h:

    #define ENABLE_3_2_1_GO

    pvp.cpp:

     

    # buscar
    
    void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
     
    # agregar debajo
     
    #ifdef ENABLE_3_2_1_GO
    EVENTINFO(start_duel_efect_info)
    {
        LPCHARACTER ch1;
        LPCHARACTER ch2;
        CPVP * pkPVP;
        BYTE state;
    
        start_duel_efect_info()
        : ch1( NULL )
        ,ch2( NULL )
        ,pkPVP( NULL )
        ,state( 0 )
        {
        }
    };
    
    EVENTFUNC(start_duel_efect)
    {
        start_duel_efect_info * info = dynamic_cast<start_duel_efect_info *>(event->info);
    
        if ((info == NULL) || (info->ch1 == NULL) || (info->ch2 == NULL) || (info->pkPVP == NULL)) return 0;
    
        switch (info->state)
        {
            case 0:
            {
                info->ch1->SpecificEffectPacket("d:/ymir work/effect/pvp/3.mse");
                info->ch2->SpecificEffectPacket("d:/ymir work/effect/pvp/3.mse");
                info->state++;
                return PASSES_PER_SEC(1);
                break;
            }
            case 1:
            {
                info->ch1->SpecificEffectPacket("d:/ymir work/effect/pvp/2.mse");
                info->ch2->SpecificEffectPacket("d:/ymir work/effect/pvp/2.mse");
                info->state++;
                return PASSES_PER_SEC(1);
                break;
            }
            case 2:
            {
                info->ch1->SpecificEffectPacket("d:/ymir work/effect/pvp/1.mse");
                info->ch2->SpecificEffectPacket("d:/ymir work/effect/pvp/1.mse");
                info->state++;
                return PASSES_PER_SEC(1);
                break;
            }
            case 3:
        {
            info->ch1->SpecificEffectPacket("d:/ymir work/effect/pvp/go.mse");
            info->ch2->SpecificEffectPacket("d:/ymir work/effect/pvp/go.mse");
            if (info->pkPVP->Agree(info->ch1->GetPlayerID()))
            {
                info->ch2->ChatPacket(CHAT_TYPE_INFO, "Duelul cu: %s a inceput!", info->ch1->GetName());
                info->ch1->ChatPacket(CHAT_TYPE_INFO, "Duelul cu: %s a inceput!", info->ch2->GetName());
            }
            return 0;
            break;
        }
    }
        return 0;
    }
    #endif
    
    # buscar
    
    void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
     
    # Remplazar
     
    #ifdef ENABLE_3_2_1_GO
    void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
    {
        if (pkChr->IsDead() || pkVictim->IsDead() || pkChr->FindAffect(AFFECT_PVP_START))
            return;
    
        CPVP kPVP(pkChr->GetPlayerID(), pkVictim->GetPlayerID());
    
        CPVP * pkPVP;
    
        if (pkPVP = Find(kPVP.m_dwCRC))
        {
            start_duel_efect_info * info = AllocEventInfo<start_duel_efect_info>();
            info->ch1 = pkChr;
            info->ch2 = pkVictim;
            info->pkPVP = pkPVP;
            info->state = 0;
            pkChr->AddAffect(AFFECT_PVP_START, APPLY_NONE, 0, 0, 5, 0, false);
            event_create(start_duel_efect, info, 0);
            return;
        }
    
        pkPVP = M2_NEW CPVP(kPVP);
    
        pkPVP->SetVID(pkChr->GetPlayerID(), pkChr->GetVID());
        pkPVP->SetVID(pkVictim->GetPlayerID(), pkVictim->GetVID());
    
        m_map_pkPVP.insert(map<DWORD, CPVP *>::value_type(pkPVP->m_dwCRC, pkPVP));
    
        m_map_pkPVPSetByID[pkChr->GetPlayerID()].insert(pkPVP);
        m_map_pkPVPSetByID[pkVictim->GetPlayerID()].insert(pkPVP);
    
        pkPVP->Packet();
    
        char msg[CHAT_MAX_LEN + 1];
        snprintf(msg, sizeof(msg), "Ai fost provocat la duel de: %s.", pkChr->GetName()); //e el
    
        pkVictim->ChatPacket(CHAT_TYPE_INFO, msg);
        pkChr->ChatPacket(CHAT_TYPE_INFO, "L-ai provocat la duel pe: %s.", pkVictim->GetName()); //is eu
    
        // NOTIFY_PVP_MESSAGE
        LPDESC pkVictimDesc = pkVictim->GetDesc();
        if (pkVictimDesc)
        {
            TPacketGCWhisper pack;
    
            int len = MIN(CHAT_MAX_LEN, strlen(msg) + 1);
    
            pack.bHeader = HEADER_GC_WHISPER;
            pack.wSize = sizeof(TPacketGCWhisper) + len;
            pack.bType = WHISPER_TYPE_SYSTEM;
            strlcpy(pack.szNameFrom, pkChr->GetName(), sizeof(pack.szNameFrom));
    
            TEMP_BUFFER buf;
    
            buf.write(&pack, sizeof(TPacketGCWhisper));
            buf.write(msg, len);
    
            pkVictimDesc->Packet(buf.read_peek(), buf.size());
        }
        // END_OF_NOTIFY_PVP_MESSAGE
    }
    #else
    void CPVPManager::Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim)
    {
        if (pkChr->IsDead() || pkVictim->IsDead())
            return;
    
        CPVP kPVP(pkChr->GetPlayerID(), pkVictim->GetPlayerID());
    
        CPVP * pkPVP;
    
        if ((pkPVP = Find(kPVP.m_dwCRC)))
        {
            // ???oC? ?o ?O?c¬c¬e ??!¤I c©I??!
            if (pkPVP->Agree(pkChr->GetPlayerID()))
            {
                pkVictim->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%scYO!Au?C cYe!Aa c©???!"), pkChr->GetName());
                pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%scYO!Au?C cYe!Aa c©???!"), pkVictim->GetName());
            }
            return;
        }
    
        pkPVP = M2_NEW CPVP(kPVP);
    
        pkPVP->SetVID(pkChr->GetPlayerID(), pkChr->GetVID());
        pkPVP->SetVID(pkVictim->GetPlayerID(), pkVictim->GetVID());
    
        m_map_pkPVP.insert(map<DWORD, CPVP *>::value_type(pkPVP->m_dwCRC, pkPVP));
    
        m_map_pkPVPSetByID[pkChr->GetPlayerID()].insert(pkPVP);
        m_map_pkPVPSetByID[pkVictim->GetPlayerID()].insert(pkPVP);
    
        pkPVP->Packet();
    
        char msg[CHAT_MAX_LEN + 1];
        snprintf(msg, sizeof(msg), LC_TEXT("%scYO?? cYe!Aac©??!í?!í C©¬c©?cY?cY?. c©A©©!iC?!¤Ac¬e cYe!AaYi??Cc¬| C????a."), pkChr->GetName());
    
        pkVictim->ChatPacket(CHAT_TYPE_INFO, msg);
        pkChr->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s?c§!AO cYe!Aac©??!í?!í C©¬c©?cY?cY?."), pkVictim->GetName());
    
        // NOTIFY_PVP_MESSAGE
        LPDESC pkVictimDesc = pkVictim->GetDesc();
        if (pkVictimDesc)
        {
            TPacketGCWhisper pack;
    
            int len = MIN(CHAT_MAX_LEN, strlen(msg) + 1);
    
            pack.bHeader = HEADER_GC_WHISPER;
            pack.wSize = sizeof(TPacketGCWhisper) + len;
            pack.bType = WHISPER_TYPE_SYSTEM;
            strlcpy(pack.szNameFrom, pkChr->GetName(), sizeof(pack.szNameFrom));
    
            TEMP_BUFFER buf;
    
            buf.write(&pack, sizeof(TPacketGCWhisper));
            buf.write(msg, len);
    
            pkVictimDesc->Packet(buf.read_peek(), buf.size());
        }
        // END_OF_NOTIFY_PVP_MESSAGE
    }
    #endif
    
    # buscar
    
    bool CPVPManager::Dead(LPCHARACTER pkChr, DWORD dwKillerPID)
    
    # remplazar
     
    #ifdef ENABLE_3_2_1_GO
    bool CPVPManager::Dead(LPCHARACTER pkChr, DWORD dwKillerPID)
    {
        CPVPSetMap::iterator it = m_map_pkPVPSetByID.find(pkChr->GetPlayerID());
    
        if (it == m_map_pkPVPSetByID.end())
            return false;
    
        bool found = false;
    
        sys_log(1, "PVPManager::Dead %d", pkChr->GetPlayerID());
        TR1_NS::unordered_set<CPVP*>::iterator it2 = it->second.begin();
    
        while (it2 != it->second.end())
        {
            CPVP * pkPVP = *it2++;
    
            DWORD dwCompanionPID;
    
            if (pkPVP->m_players[0].dwPID == pkChr->GetPlayerID())
                dwCompanionPID = pkPVP->m_players[1].dwPID;
            else
                dwCompanionPID = pkPVP->m_players[0].dwPID;
    
            if (dwCompanionPID == dwKillerPID)
            {
                if (pkPVP->IsFight())
                {
                    pkPVP->SetLastFightTime();
                    pkPVP->Win(dwKillerPID);
                    found = true;
                    break;
                }
                else if (get_dword_time() - pkPVP->GetLastFightTime() <= 15000)
                {
                    found = true;
                    break;
                }
            }
        }
    
        LPCHARACTER pkChrW = CHARACTER_MANAGER::instance().FindByPID(dwKillerPID);
        pkChrW->SpecificEffectPacket("d:/ymir work/effect/pvp/win.mse");
    
        return found;
    }
    #else
    bool CPVPManager::Dead(LPCHARACTER pkChr, DWORD dwKillerPID)
    {
        CPVPSetMap::iterator it = m_map_pkPVPSetByID.find(pkChr->GetPlayerID());
    
        if (it == m_map_pkPVPSetByID.end())
            return false;
    
        bool found = false;
    
        sys_log(1, "PVPManager::Dead %d", pkChr->GetPlayerID());
        TR1_NS::unordered_set<CPVP*>::iterator it2 = it->second.begin();
    
        while (it2 != it->second.end())
        {
            CPVP * pkPVP = *it2++;
    
            DWORD dwCompanionPID;
    
            if (pkPVP->m_players[0].dwPID == pkChr->GetPlayerID())
                dwCompanionPID = pkPVP->m_players[1].dwPID;
            else
                dwCompanionPID = pkPVP->m_players[0].dwPID;
    
            if (dwCompanionPID == dwKillerPID)
            {
                if (pkPVP->IsFight())
                {
                    pkPVP->SetLastFightTime();
                    pkPVP->Win(dwKillerPID);
                    found = true;
                    break;
                }
                else if (get_dword_time() - pkPVP->GetLastFightTime() <= 15000)
                {
                    found = true;
                    break;
                }
            }
        }
    
        return found;
    }
    #endif

    affect.h:

     

    # buscar
    
    AFFECT_DRAGON_SOUL_DECK_1 = 542,
    
    # Agregar debajo
    
    #ifdef ENABLE_3_2_1_GO
        AFFECT_PVP_START = 543,
        AFFECT_PVP_WIN = 544,
    #endif
    
    # buscar
    
    AFF_BITS_MAX
    
    # Agregar debajo
    
    #ifdef ENABLE_3_2_1_GO
        AFF_PVP_START,
        AFF_PVP_WIN,
    #endif

    Finalmente, si desea que los archivos a los que he dado efecto agreguen un índice adicional, tire su paquete y luego tírelo a una carpeta, si desea desactivarlo, tírelo a su paquete actual.

     

     

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

×
×
  • Crear nuevo...