kralhakan2009 1
kralhakan2009
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Vahsi Uzman 1
Vahsi Uzman
Cannn6161 1
Cannn6161
B 1
berione65
sen272 1
sen272
Mt2Hizmet 1
Mt2Hizmet
C 1
chengdu
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

MaviAyGames | ComputePoints Update()

MaviAy44

Emre Kırıcı
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye
Yönetici
Katılım
16 Tem 2019
Konular
715
Mesajlar
3,551
Çözüm
47
Online süresi
6mo 20d
Reaksiyon Skoru
2,110
Altın Konu
34
Başarım Puanı
309
MmoLira
19,559
DevLira
122
Ticaret - 100%
7   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

ComputePoints değerinden farkı nedir ?

- ComputePoints değerinin sonunda Update() fonksiyonu çalıştırılır. Update fonksiyonu yeniden hesaplanılan değerleri eskisiyle karşılaştırıp yenilerini güncelleme paketidir. Bu yapılanda ise update fonksiyonu yoktur.

service.h

Kod:
#define ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
char.h
Kod:
//Ara

ComputePoints

// Altına ekle

#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
    void            ComputePointsWithoutUpdatePacket();
#endif

char.cpp
Kod:
#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
void CHARACTER::ComputePointsWithoutUpdatePacket()
{
    long lStat = GetPoint(POINT_STAT);
    long lStatResetCount = GetPoint(POINT_STAT_RESET_COUNT);
    long lSkillActive = GetPoint(POINT_SKILL);
    long lSkillSub = GetPoint(POINT_SUB_SKILL);
    long lSkillHorse = GetPoint(POINT_HORSE_SKILL);
    long lLevelStep = GetPoint(POINT_LEVEL_STEP);

    long lAttackerBonus = GetPoint(POINT_PARTY_ATTACKER_BONUS);
    long lTankerBonus = GetPoint(POINT_PARTY_TANKER_BONUS);
    long lBufferBonus = GetPoint(POINT_PARTY_BUFFER_BONUS);
    long lSkillMasterBonus = GetPoint(POINT_PARTY_SKILL_MASTER_BONUS);
    long lHasteBonus = GetPoint(POINT_PARTY_HASTE_BONUS);
    long lDefenderBonus = GetPoint(POINT_PARTY_DEFENDER_BONUS);

    long lHPRecovery = GetPoint(POINT_HP_RECOVERY);
    long lSPRecovery = GetPoint(POINT_SP_RECOVERY);

    memset(m_pointsInstant.points, 0, sizeof(m_pointsInstant.points));
    BuffOnAttr_ClearAll();
    m_SkillDamageBonus.clear();

    SetPoint(POINT_STAT, lStat);
    SetPoint(POINT_SKILL, lSkillActive);
    SetPoint(POINT_SUB_SKILL, lSkillSub);
    SetPoint(POINT_HORSE_SKILL, lSkillHorse);
    SetPoint(POINT_LEVEL_STEP, lLevelStep);
    SetPoint(POINT_STAT_RESET_COUNT, lStatResetCount);

    SetPoint(POINT_ST, GetRealPoint(POINT_ST));
    SetPoint(POINT_HT, GetRealPoint(POINT_HT));
    SetPoint(POINT_DX, GetRealPoint(POINT_DX));
    SetPoint(POINT_IQ, GetRealPoint(POINT_IQ));

    SetPart(PART_MAIN, GetOriginalPart(PART_MAIN));
    SetPart(PART_WEAPON, GetOriginalPart(PART_WEAPON));
    SetPart(PART_HEAD, GetOriginalPart(PART_HEAD));
    SetPart(PART_HAIR, GetOriginalPart(PART_HAIR));
#ifdef ENABLE_ACCE_SYSTEM
    SetPart(PART_SASH, GetOriginalPart(PART_SASH));
#endif
#ifdef ENABLE_AURA_SYSTEM
    SetPart(PART_AURA, GetOriginalPart(PART_AURA));
#endif

    SetPoint(POINT_PARTY_ATTACKER_BONUS, lAttackerBonus);
    SetPoint(POINT_PARTY_TANKER_BONUS, lTankerBonus);
    SetPoint(POINT_PARTY_BUFFER_BONUS, lBufferBonus);
    SetPoint(POINT_PARTY_SKILL_MASTER_BONUS, lSkillMasterBonus);
    SetPoint(POINT_PARTY_HASTE_BONUS, lHasteBonus);
    SetPoint(POINT_PARTY_DEFENDER_BONUS, lDefenderBonus);

    SetPoint(POINT_HP_RECOVERY, lHPRecovery);
    SetPoint(POINT_SP_RECOVERY, lSPRecovery);

    int iMaxHP, iMaxSP;
    int iMaxStamina;

    if (IsPC())
    {
        // 최대 생명력/정신력
        iMaxHP = JobInitialPoints[GetJob()].max_hp + m_points.iRandomHP + GetPoint(POINT_HT) * JobInitialPoints[GetJob()].hp_per_ht;
        iMaxSP = JobInitialPoints[GetJob()].max_sp + m_points.iRandomSP + GetPoint(POINT_IQ) * JobInitialPoints[GetJob()].sp_per_iq;
        iMaxStamina = JobInitialPoints[GetJob()].max_stamina + GetPoint(POINT_HT) * JobInitialPoints[GetJob()].stamina_per_con;

        {
            CSkillProto* pkSk = CSkillManager::instance().Get(SKILL_ADD_HP);

            if (nullptr != pkSk)
            {
                pkSk->SetPointVar("k", 1.0f * GetSkillPower(SKILL_ADD_HP) / 100.0f);

                iMaxHP += static_cast<int>(pkSk->kPointPoly.Eval());
            }
        }

        SetPoint(POINT_MOV_SPEED, 111);
        SetPoint(POINT_ATT_SPEED, 112);
        PointChange(POINT_ATT_SPEED, GetPoint(POINT_PARTY_HASTE_BONUS));
        SetPoint(POINT_CASTING_SPEED, 100);
    }
    else
    {
        iMaxHP = m_pkMobData->m_table.dwMaxHP;
        iMaxSP = 0;
        iMaxStamina = 0;

        SetPoint(POINT_ATT_SPEED, m_pkMobData->m_table.sAttackSpeed);
        SetPoint(POINT_MOV_SPEED, m_pkMobData->m_table.sMovingSpeed);
        SetPoint(POINT_CASTING_SPEED, m_pkMobData->m_table.sAttackSpeed);
    }

    if (IsPC())
    {
        // 말 타고 있을 때는 기본 스탯이 말의 기준 스탯보다 낮으면 높게 만든다.
        // 따라서 말의 기준 스탯이 무사 기준이므로, 수라/무당은 전체 스탯 합이
        // 대채적으로 더 올라가게 될 것이다.
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
        if (GetMountVnum() && !GetWear(WEAR_COSTUME_MOUNT))
#else
        if (GetMountVnum())
#endif
        {
            if (GetHorseST() > GetPoint(POINT_ST))
                PointChange(POINT_ST, GetHorseST() - GetPoint(POINT_ST));

            if (GetHorseDX() > GetPoint(POINT_DX))
                PointChange(POINT_DX, GetHorseDX() - GetPoint(POINT_DX));

            if (GetHorseHT() > GetPoint(POINT_HT))
                PointChange(POINT_HT, GetHorseHT() - GetPoint(POINT_HT));

            if (GetHorseIQ() > GetPoint(POINT_IQ))
                PointChange(POINT_IQ, GetHorseIQ() - GetPoint(POINT_IQ));
        }
    }

    ComputeBattlePoints();

    if (iMaxHP != GetMaxHP())
    {
        SetRealPoint(POINT_MAX_HP, iMaxHP); // 기본HP를 RealPoint에 저장해 놓는다.
    }

    PointChange(POINT_MAX_HP, 0);

    if (iMaxSP != GetMaxSP())
    {
        SetRealPoint(POINT_MAX_SP, iMaxSP); // 기본SP를 RealPoint에 저장해 놓는다.
    }

    PointChange(POINT_MAX_SP, 0);

    SetMaxStamina(iMaxStamina);
    // @fixme118 part1
    int iCurHP = this->GetHP();
    int iCurSP = this->GetSP();

    m_pointsInstant.dwImmuneFlag = 0;

    for (int i = 0; i < WEAR_MAX_NUM; i++)
    {
        LPITEM pItem = GetWear(i);
        if (pItem)
        {
            pItem->ModifyPoints(true);
            SET_BIT(m_pointsInstant.dwImmuneFlag, GetWear(i)->GetImmuneFlag());
        }
    }

    // 용혼석 시스템
    // ComputePoints에서는 케릭터의 모든 속성값을 초기화하고,
    // 아이템, 버프 등에 관련된 모든 속성값을 재계산하기 때문에,
    // 용혼석 시스템도 ActiveDeck에 있는 모든 용혼석의 속성값을 다시 적용시켜야 한다.
    if (DragonSoul_IsDeckActivated())
    {
        for (int i = WEAR_MAX_NUM + DS_SLOT_MAX * DragonSoul_GetActiveDeck();
            i < WEAR_MAX_NUM + DS_SLOT_MAX * (DragonSoul_GetActiveDeck() + 1); i++)
        {
            LPITEM pItem = GetWear(i);
            if (pItem)
            {
                if (DSManager::instance().IsTimeLeftDragonSoul(pItem))
                    pItem->ModifyPoints(true);
            }
        }
    }

    if (GetHP() > GetMaxHP())
        PointChange(POINT_HP, GetMaxHP() - GetHP());

    if (GetSP() > GetMaxSP())
        PointChange(POINT_SP, GetMaxSP() - GetSP());

    ComputeSkillPoints();

    RefreshAffect();
    // @fixme118 part2 (before petsystem stuff)
    if (IsPC())
    {
        if (this->GetHP() != iCurHP)
            this->PointChange(POINT_HP, iCurHP - this->GetHP());
        if (this->GetSP() != iCurSP)
            this->PointChange(POINT_SP, iCurSP - this->GetSP());
    }

    CPetSystem * pPetSystem = GetPetSystem();
    if (nullptr != pPetSystem)
    {
        pPetSystem->RefreshBuff();
    }
    for (TMapBuffOnAttrs::iterator it = m_map_buff_on_attrs.begin(); it != m_map_buff_on_attrs.end(); it++)
    {
        it->second->GiveAllAttributes();
    }
}
#endif

Peki bu kod nerelerde kullanılmalı ?

char_skill.cpp

Kod:
// Aratın
void CHARACTER::SkillLevelUp

// Fonkisyonun sonundaki     ComputePoints(); bulun

// Değiştirin

#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
    ComputePointsWithoutUpdatePacket();
#else
    ComputePoints();
#endif

Her compute gördüğünüz yere kullanmayın ve bilmeyen arkadaşların kullanmasını tavsiye etmiyorum.

SP | Eksikleri buradan giderin ;

cmd_general.cpp açılır ve aratılır

ACMD(do_stat_minus)

şu şekilde değiştirilir

C++:
ACMD(do_stat_minus)
{
    char arg1[256];
    one_argument(argument, arg1, sizeof(arg1));

    if (!*arg1)
        return;

    if (ch->IsPolymorphed())
    {
        ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("둔갑 중에는 능력을 올릴 수 없습니다."));
        return;
    }

    if (ch->GetPoint(POINT_STAT_RESET_COUNT) <= 0)
        return;

    if (!strcmp(arg1, "st"))
    {
        if (ch->GetRealPoint(POINT_ST) <= JobInitialPoints[ch->GetJob()].st)
            return;

        ch->SetRealPoint(POINT_ST, ch->GetRealPoint(POINT_ST) - 1);
        ch->SetPoint(POINT_ST, ch->GetPoint(POINT_ST) - 1);
#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
        ch->ComputePointsWithoutUpdatePacket();
#else
        ch->ComputePoints();
#endif
        ch->PointChange(POINT_ST, 0);
    }
    else if (!strcmp(arg1, "dx"))
    {
        if (ch->GetRealPoint(POINT_DX) <= JobInitialPoints[ch->GetJob()].dx)
            return;

        ch->SetRealPoint(POINT_DX, ch->GetRealPoint(POINT_DX) - 1);
        ch->SetPoint(POINT_DX, ch->GetPoint(POINT_DX) - 1);
#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
        ch->ComputePointsWithoutUpdatePacket();
#else
        ch->ComputePoints();
#endif
        ch->PointChange(POINT_DX, 0);
    }
    else if (!strcmp(arg1, "ht"))
    {
        if (ch->GetRealPoint(POINT_HT) <= JobInitialPoints[ch->GetJob()].ht)
            return;

        ch->SetRealPoint(POINT_HT, ch->GetRealPoint(POINT_HT) - 1);
        ch->SetPoint(POINT_HT, ch->GetPoint(POINT_HT) - 1);
#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
        ch->ComputePointsWithoutUpdatePacket();
#else
        ch->ComputePoints();
#endif
        ch->PointChange(POINT_HT, 0);
        ch->PointChange(POINT_MAX_HP, 0);
    }
    else if (!strcmp(arg1, "iq"))
    {
        if (ch->GetRealPoint(POINT_IQ) <= JobInitialPoints[ch->GetJob()].iq)
            return;

        ch->SetRealPoint(POINT_IQ, ch->GetRealPoint(POINT_IQ) - 1);
        ch->SetPoint(POINT_IQ, ch->GetPoint(POINT_IQ) - 1);
#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
        ch->ComputePointsWithoutUpdatePacket();
#else
        ch->ComputePoints();
#endif
        ch->PointChange(POINT_IQ, 0);
        ch->PointChange(POINT_MAX_SP, 0);
    }
    else
        return;

    ch->PointChange(POINT_STAT, +1);
    ch->PointChange(POINT_STAT_RESET_COUNT, -1);
#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
    ch->ComputePointsWithoutUpdatePacket();
#else
    ch->ComputePoints();
#endif
}

ACMD(do_stat) aratılır ve içerisinde

ch->ComputePoints(); bulunur ve şu şekilde değiştirilir

C++:
#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
    ch->ComputePointsWithoutUpdatePacket();
#else
    ch->ComputePoints();
#endif

ch->ComputePoints(); bir kez daha aratılır ve şu şekilde değiştirilir ;

C++:
#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
    ch->ComputePointsWithoutUpdatePacket();
#else
    ch->ComputePoints();
#endif

Eğer eksik olduğunu düşündüğünüz birşey varsa konuya yazın halledilir.
 
Moderatör tarafında düzenlendi:

En Çok Reaksiyon Alan Mesajlar

ComputePoints in UpdatePacket olmayan halini eklemişsin. Yeni bir fonksiyon yazmak yerine varolan fonksiyona değişken ekleyebilirdin.
ComputePoints(bool UpdatePacket = True)
If(UpdatePacket)
UpdatePacket();



Kullanırken de
ComputePoints(false);
ComputePoints in UpdatePacket olmayan halini eklemişsin. Yeni bir fonksiyon yazmak yerine varolan fonksiyona değişken ekleyebilirdin.
ComputePoints(bool UpdatePacket = True)
If(UpdatePacket)
UpdatePacket();



Kullanırken de
ComputePoints(false);
 
Paylaşım için teşekkürler :)
 
ComputePoints değerinden farkı nedir ?

- ComputePoints değerinin sonunda Update() fonksiyonu çalıştırılır. Update fonksiyonu yeniden hesaplanılan değerleri eskisiyle karşılaştırıp yenilerini güncelleme paketidir. Bu yapılanda ise update fonksiyonu yoktur.

service.h

Kod:
#define ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
char.h
Kod:
//Ara

ComputePoints

// Altına ekle

#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
    void            ComputePointsWithoutUpdatePacket();
#endif

char.cpp
Kod:
#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
void CHARACTER::ComputePointsWithoutUpdatePacket()
{
    long lStat = GetPoint(POINT_STAT);
    long lStatResetCount = GetPoint(POINT_STAT_RESET_COUNT);
    long lSkillActive = GetPoint(POINT_SKILL);
    long lSkillSub = GetPoint(POINT_SUB_SKILL);
    long lSkillHorse = GetPoint(POINT_HORSE_SKILL);
    long lLevelStep = GetPoint(POINT_LEVEL_STEP);

    long lAttackerBonus = GetPoint(POINT_PARTY_ATTACKER_BONUS);
    long lTankerBonus = GetPoint(POINT_PARTY_TANKER_BONUS);
    long lBufferBonus = GetPoint(POINT_PARTY_BUFFER_BONUS);
    long lSkillMasterBonus = GetPoint(POINT_PARTY_SKILL_MASTER_BONUS);
    long lHasteBonus = GetPoint(POINT_PARTY_HASTE_BONUS);
    long lDefenderBonus = GetPoint(POINT_PARTY_DEFENDER_BONUS);

    long lHPRecovery = GetPoint(POINT_HP_RECOVERY);
    long lSPRecovery = GetPoint(POINT_SP_RECOVERY);

    memset(m_pointsInstant.points, 0, sizeof(m_pointsInstant.points));
    BuffOnAttr_ClearAll();
    m_SkillDamageBonus.clear();

    SetPoint(POINT_STAT, lStat);
    SetPoint(POINT_SKILL, lSkillActive);
    SetPoint(POINT_SUB_SKILL, lSkillSub);
    SetPoint(POINT_HORSE_SKILL, lSkillHorse);
    SetPoint(POINT_LEVEL_STEP, lLevelStep);
    SetPoint(POINT_STAT_RESET_COUNT, lStatResetCount);

    SetPoint(POINT_ST, GetRealPoint(POINT_ST));
    SetPoint(POINT_HT, GetRealPoint(POINT_HT));
    SetPoint(POINT_DX, GetRealPoint(POINT_DX));
    SetPoint(POINT_IQ, GetRealPoint(POINT_IQ));

    SetPart(PART_MAIN, GetOriginalPart(PART_MAIN));
    SetPart(PART_WEAPON, GetOriginalPart(PART_WEAPON));
    SetPart(PART_HEAD, GetOriginalPart(PART_HEAD));
    SetPart(PART_HAIR, GetOriginalPart(PART_HAIR));
#ifdef ENABLE_ACCE_SYSTEM
    SetPart(PART_SASH, GetOriginalPart(PART_SASH));
#endif
#ifdef ENABLE_AURA_SYSTEM
    SetPart(PART_AURA, GetOriginalPart(PART_AURA));
#endif

    SetPoint(POINT_PARTY_ATTACKER_BONUS, lAttackerBonus);
    SetPoint(POINT_PARTY_TANKER_BONUS, lTankerBonus);
    SetPoint(POINT_PARTY_BUFFER_BONUS, lBufferBonus);
    SetPoint(POINT_PARTY_SKILL_MASTER_BONUS, lSkillMasterBonus);
    SetPoint(POINT_PARTY_HASTE_BONUS, lHasteBonus);
    SetPoint(POINT_PARTY_DEFENDER_BONUS, lDefenderBonus);

    SetPoint(POINT_HP_RECOVERY, lHPRecovery);
    SetPoint(POINT_SP_RECOVERY, lSPRecovery);

    int iMaxHP, iMaxSP;
    int iMaxStamina;

    if (IsPC())
    {
        // 최대 생명력/정신력
        iMaxHP = JobInitialPoints[GetJob()].max_hp + m_points.iRandomHP + GetPoint(POINT_HT) * JobInitialPoints[GetJob()].hp_per_ht;
        iMaxSP = JobInitialPoints[GetJob()].max_sp + m_points.iRandomSP + GetPoint(POINT_IQ) * JobInitialPoints[GetJob()].sp_per_iq;
        iMaxStamina = JobInitialPoints[GetJob()].max_stamina + GetPoint(POINT_HT) * JobInitialPoints[GetJob()].stamina_per_con;

        {
            CSkillProto* pkSk = CSkillManager::instance().Get(SKILL_ADD_HP);

            if (nullptr != pkSk)
            {
                pkSk->SetPointVar("k", 1.0f * GetSkillPower(SKILL_ADD_HP) / 100.0f);

                iMaxHP += static_cast<int>(pkSk->kPointPoly.Eval());
            }
        }

        SetPoint(POINT_MOV_SPEED, 111);
        SetPoint(POINT_ATT_SPEED, 112);
        PointChange(POINT_ATT_SPEED, GetPoint(POINT_PARTY_HASTE_BONUS));
        SetPoint(POINT_CASTING_SPEED, 100);
    }
    else
    {
        iMaxHP = m_pkMobData->m_table.dwMaxHP;
        iMaxSP = 0;
        iMaxStamina = 0;

        SetPoint(POINT_ATT_SPEED, m_pkMobData->m_table.sAttackSpeed);
        SetPoint(POINT_MOV_SPEED, m_pkMobData->m_table.sMovingSpeed);
        SetPoint(POINT_CASTING_SPEED, m_pkMobData->m_table.sAttackSpeed);
    }

    if (IsPC())
    {
        // 말 타고 있을 때는 기본 스탯이 말의 기준 스탯보다 낮으면 높게 만든다.
        // 따라서 말의 기준 스탯이 무사 기준이므로, 수라/무당은 전체 스탯 합이
        // 대채적으로 더 올라가게 될 것이다.
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
        if (GetMountVnum() && !GetWear(WEAR_COSTUME_MOUNT))
#else
        if (GetMountVnum())
#endif
        {
            if (GetHorseST() > GetPoint(POINT_ST))
                PointChange(POINT_ST, GetHorseST() - GetPoint(POINT_ST));

            if (GetHorseDX() > GetPoint(POINT_DX))
                PointChange(POINT_DX, GetHorseDX() - GetPoint(POINT_DX));

            if (GetHorseHT() > GetPoint(POINT_HT))
                PointChange(POINT_HT, GetHorseHT() - GetPoint(POINT_HT));

            if (GetHorseIQ() > GetPoint(POINT_IQ))
                PointChange(POINT_IQ, GetHorseIQ() - GetPoint(POINT_IQ));
        }
    }

    ComputeBattlePoints();

    if (iMaxHP != GetMaxHP())
    {
        SetRealPoint(POINT_MAX_HP, iMaxHP); // 기본HP를 RealPoint에 저장해 놓는다.
    }

    PointChange(POINT_MAX_HP, 0);

    if (iMaxSP != GetMaxSP())
    {
        SetRealPoint(POINT_MAX_SP, iMaxSP); // 기본SP를 RealPoint에 저장해 놓는다.
    }

    PointChange(POINT_MAX_SP, 0);

    SetMaxStamina(iMaxStamina);
    // @fixme118 part1
    int iCurHP = this->GetHP();
    int iCurSP = this->GetSP();

    m_pointsInstant.dwImmuneFlag = 0;

    for (int i = 0; i < WEAR_MAX_NUM; i++)
    {
        LPITEM pItem = GetWear(i);
        if (pItem)
        {
            pItem->ModifyPoints(true);
            SET_BIT(m_pointsInstant.dwImmuneFlag, GetWear(i)->GetImmuneFlag());
        }
    }

    // 용혼석 시스템
    // ComputePoints에서는 케릭터의 모든 속성값을 초기화하고,
    // 아이템, 버프 등에 관련된 모든 속성값을 재계산하기 때문에,
    // 용혼석 시스템도 ActiveDeck에 있는 모든 용혼석의 속성값을 다시 적용시켜야 한다.
    if (DragonSoul_IsDeckActivated())
    {
        for (int i = WEAR_MAX_NUM + DS_SLOT_MAX * DragonSoul_GetActiveDeck();
            i < WEAR_MAX_NUM + DS_SLOT_MAX * (DragonSoul_GetActiveDeck() + 1); i++)
        {
            LPITEM pItem = GetWear(i);
            if (pItem)
            {
                if (DSManager::instance().IsTimeLeftDragonSoul(pItem))
                    pItem->ModifyPoints(true);
            }
        }
    }

    if (GetHP() > GetMaxHP())
        PointChange(POINT_HP, GetMaxHP() - GetHP());

    if (GetSP() > GetMaxSP())
        PointChange(POINT_SP, GetMaxSP() - GetSP());

    ComputeSkillPoints();

    RefreshAffect();
    // @fixme118 part2 (before petsystem stuff)
    if (IsPC())
    {
        if (this->GetHP() != iCurHP)
            this->PointChange(POINT_HP, iCurHP - this->GetHP());
        if (this->GetSP() != iCurSP)
            this->PointChange(POINT_SP, iCurSP - this->GetSP());
    }

    CPetSystem * pPetSystem = GetPetSystem();
    if (nullptr != pPetSystem)
    {
        pPetSystem->RefreshBuff();
    }
    for (TMapBuffOnAttrs::iterator it = m_map_buff_on_attrs.begin(); it != m_map_buff_on_attrs.end(); it++)
    {
        it->second->GiveAllAttributes();
    }
}
#endif

Peki bu kod nerelerde kullanılmalı ?

char_skill.cpp

Kod:
// Aratın
void CHARACTER::SkillLevelUp

// Fonkisyonun sonundaki     ComputePoints(); bulun

// Değiştirin

#ifdef ENABLE_COMPUTE_POINTS_WITHOUT_UPDATE_PACKET
    ComputePointsWithoutUpdatePacket();
#else
    ComputePoints();
#endif

Her compute gördüğünüz yere kullanmayın ve bilmeyen arkadaşların kullanmasını tavsiye etmiyorum.

ComputePoints in UpdatePacket olmayan halini eklemişsin. Yeni bir fonksiyon yazmak yerine varolan fonksiyona değişken ekleyebilirdin.
ComputePoints(bool UpdatePacket = True)
If(UpdatePacket)
UpdatePacket();



Kullanırken de
ComputePoints(false);
@MaviAy44 e peki anladığımız kadarıyla hamle atınca veya hp bonuslu bir item kostüm giyince hpnin aniden düşüp çıkması ile ilgili sorunu çözüyor bunlar değil mi?

@Tungа sizin bu verdiğiniz kodlara bakarak bizim gibi bilmeyenler hiçbirşey yapamıyor yani sizin yorumunuza bakarak anladığımız kadarı ile daha basit kodlarla bu sorun çözülebilecek gibi peki bize hazır kodları verirmisiniz bu sorunu çözecek
 
ComputePoints in UpdatePacket olmayan halini eklemişsin. Yeni bir fonksiyon yazmak yerine varolan fonksiyona değişken ekleyebilirdin.
ComputePoints(bool UpdatePacket = True)
If(UpdatePacket)
UpdatePacket();



Kullanırken de
ComputePoints(false);
O fonksiyon argument kabul etmiyordu sanirim dener misin :)
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst