C 1
chengdu
xranzei 1
xranzei
zendor2 1
zendor2
Bvural41 1
Bvural41
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Almira2 1
Almira2
romegames 1
romegames
D 1
delimuratt
melankolıa18 1
melankolıa18
shrpnl 1
shrpnl
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Cevaplanmadı Saldırı değerinin serverda işlememesi

aurovex

Level 1
Telefon Numarası Onaylanmış Üye
TM Üye
Katılım
17 Nis 2019
Konular
9
Mesajlar
39
Çözüm
2
Online süresi
10d 2h
Reaksiyon Skoru
5
Altın Konu
0
Başarım Puanı
73
MmoLira
1,917
DevLira
9
Ticaret - 0%
0   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!

Herkese hayırlı forumlar. İyi günler.

Karakter penceresinde C tuşu saldırı değeri sadece görünüm sorunu var.Hava kılıcı, büyülü keskinlik gibi skilleri kullandığım zaman, simyalar aktifken, mavi şebnem kullanıdığında karakter penceresindeki saldırı değerinde bir artış olmuyor. Verdiği saldırı değeri karaktere etki ediyor sadece C tuşundaki STR değerinde problem var. HP SP DEX sorunsuz çalışıyor.
 
Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

Marty sama v5. 8 kullanıyorum kaynak kodlarına erişimim var game source kaynak kodlarında dediğim gibi char_point.cpp diye bir dosya yok fakat sizin attığınız çözümlerin bir kaçı char.cpp nin içerisinde mevcut. Muhmetemelen diğer bulamadıklarımda farklı bir kod bloğu ile çalışıyor. Çünkü bulduğum fonksiyonlarda farklı şekilde yazılmış durumda.


Selam tekrar. Verdiğin "Marty Sama v5.8" bilgisi, sorunun çözümü için kilit noktaydı. Şimdi her şey çok netleşti.

Marty Sama gibi özel yapılandırılmış sunucu kaynaklarında, standartta bulunan char_point.cpp dosyası yer almaz. Geliştirici, o dosyadaki statü hesaplama fonksiyonlarını, ana karakter yönetim dosyası olan char.cpp dosyasının içine entegre etmiştir. Zaten senin de aradığımız kodların bir kısmını char.cpp içinde bulman bunu kanıtlıyor. Yani en başından beri doğru yerdesin, sadece eksik olan parçaları tamamlamamız gerekiyor.

Sorunun kaynağı şu: Karakterinin temel statüleri (STR, DEX vs.) hesaplanıyor ama üzerine skill, simya gibi geçici etkilerden (affect) gelen bonusları ekleyen döngü ya hiç yok ya da eksik.

Şimdi yapman gereken şu:

* game kaynak kodları içerisindeki char.cpp dosyasını aç.
* Dosya içerisinde void CHARACTER::ComputePoints() fonksiyonunu bul.
* Bu fonksiyonun içinde, karakterin temel statülerinin (points.st, points.dex vb.) hesaplandığı yerleri geçtikten sonra, fonksiyonun sonlarına doğru, aşağıdaki kod bloğunu ekle. Bu kod, karakterin üzerindeki tüm aktif etkileri (Hava Kılıcı, simya, kutsama vb.) tarayarak, verdikleri bonusları saldırı değerine ekleyecektir.

Kod:
// --- EKSİK OLAN AFFECT (ETKİ) DÖNGÜSÜ KODU ---
// Bu bloğu ComputePoints fonksiyonunun sonlarına ekle.

for (auto it = m_list_pkAffect.begin(); it != m_list_pkAffect.end(); ++it)
{
    CAffect* pkAffect = *it;
    if (pkAffect->lDuration > 0)
    {
        // NOT: APPLY_ATT_GRADE_BONUS sizin sisteminizde APPLY_ATT_VALUE veya başka bir isimde olabilir.
        // item_attr ve affect.h dosyalarından kontrol edebilirsiniz.
        if (pkAffect->bType == APPLY_ATT_GRADE_BONUS || pkAffect->bType == APPLY_ATT_VALUE)
        {
            points.atk += pkAffect->lApplyValue;
        }

        // Hava Kılıcı (Enchanted Blade) için kontrol
        if (pkAffect->bType == AFFECT_GWIGEOM)
        {
            const CSkill* pkSk = GetSkill(GWIGEOM);
            if (pkSk && pkSk->lLevel > 0)
            {
                // Aşağıdaki formül sunucuya göre değişebilir, kendi formülünüzü uygulayabilirsiniz.
                // Bu örnek, skill seviyesi ve INT'e bağlı bir saldırı değeri ekler.
                points.atk += (pkSk->lLevel * 2 + GetPoint(POINT_INT)) * 2 / 5;
            }
        }

        // Büyülü Keskinlik (Enchanted Armour) için kontrol
        if (pkAffect->bType == AFFECT_GEOMGYEONG)
        {
            const CSkill* pkSk = GetSkill(GEOMGYEONG);
            if (pkSk && pkSk->lLevel > 0)
            {
                // Büyülü Keskinlik genelde savunma verir ama bazı sunucular saldırı da ekler.
                // Bu örnek, skill seviyesi ve INT'e bağlı bir saldırı değeri ekler.
                points.atk += (pkSk->lLevel + GetPoint(POINT_INT)) / 3;
            }
        }

        // Buraya benzer şekilde başka skill veya affect bonusları da eklenebilir.
    }
}

u döngü, senin sorun olarak belirttiğin "Hava Kılıcı", "Büyülü Keskinlik" ve "Simya" gibi kaynaklardan gelen tüm geçici saldırı bonuslarını tek seferde sisteme dahil edecektir.

Kodu ekleyip, game dosyasını yeniden derlediğinde (build aldığında) sorununun kesin olarak çözüldüğünü göreceksin.

Kolay gelsin.
 
Selam tekrar. Verdiğin "Marty Sama v5.8" bilgisi, sorunun çözümü için kilit noktaydı. Şimdi her şey çok netleşti.

Marty Sama gibi özel yapılandırılmış sunucu kaynaklarında, standartta bulunan char_point.cpp dosyası yer almaz. Geliştirici, o dosyadaki statü hesaplama fonksiyonlarını, ana karakter yönetim dosyası olan char.cpp dosyasının içine entegre etmiştir. Zaten senin de aradığımız kodların bir kısmını char.cpp içinde bulman bunu kanıtlıyor. Yani en başından beri doğru yerdesin, sadece eksik olan parçaları tamamlamamız gerekiyor.

Sorunun kaynağı şu: Karakterinin temel statüleri (STR, DEX vs.) hesaplanıyor ama üzerine skill, simya gibi geçici etkilerden (affect) gelen bonusları ekleyen döngü ya hiç yok ya da eksik.

Şimdi yapman gereken şu:

* game kaynak kodları içerisindeki char.cpp dosyasını aç.
* Dosya içerisinde void CHARACTER::ComputePoints() fonksiyonunu bul.
* Bu fonksiyonun içinde, karakterin temel statülerinin (points.st, points.dex vb.) hesaplandığı yerleri geçtikten sonra, fonksiyonun sonlarına doğru, aşağıdaki kod bloğunu ekle. Bu kod, karakterin üzerindeki tüm aktif etkileri (Hava Kılıcı, simya, kutsama vb.) tarayarak, verdikleri bonusları saldırı değerine ekleyecektir.

Kod:
// --- EKSİK OLAN AFFECT (ETKİ) DÖNGÜSÜ KODU ---
// Bu bloğu ComputePoints fonksiyonunun sonlarına ekle.

for (auto it = m_list_pkAffect.begin(); it != m_list_pkAffect.end(); ++it)
{
    CAffect* pkAffect = *it;
    if (pkAffect->lDuration > 0)
    {
        // NOT: APPLY_ATT_GRADE_BONUS sizin sisteminizde APPLY_ATT_VALUE veya başka bir isimde olabilir.
        // item_attr ve affect.h dosyalarından kontrol edebilirsiniz.
        if (pkAffect->bType == APPLY_ATT_GRADE_BONUS || pkAffect->bType == APPLY_ATT_VALUE)
        {
            points.atk += pkAffect->lApplyValue;
        }

        // Hava Kılıcı (Enchanted Blade) için kontrol
        if (pkAffect->bType == AFFECT_GWIGEOM)
        {
            const CSkill* pkSk = GetSkill(GWIGEOM);
            if (pkSk && pkSk->lLevel > 0)
            {
                // Aşağıdaki formül sunucuya göre değişebilir, kendi formülünüzü uygulayabilirsiniz.
                // Bu örnek, skill seviyesi ve INT'e bağlı bir saldırı değeri ekler.
                points.atk += (pkSk->lLevel * 2 + GetPoint(POINT_INT)) * 2 / 5;
            }
        }

        // Büyülü Keskinlik (Enchanted Armour) için kontrol
        if (pkAffect->bType == AFFECT_GEOMGYEONG)
        {
            const CSkill* pkSk = GetSkill(GEOMGYEONG);
            if (pkSk && pkSk->lLevel > 0)
            {
                // Büyülü Keskinlik genelde savunma verir ama bazı sunucular saldırı da ekler.
                // Bu örnek, skill seviyesi ve INT'e bağlı bir saldırı değeri ekler.
                points.atk += (pkSk->lLevel + GetPoint(POINT_INT)) / 3;
            }
        }

        // Buraya benzer şekilde başka skill veya affect bonusları da eklenebilir.
    }
}

u döngü, senin sorun olarak belirttiğin "Hava Kılıcı", "Büyülü Keskinlik" ve "Simya" gibi kaynaklardan gelen tüm geçici saldırı bonuslarını tek seferde sisteme dahil edecektir.

Kodu ekleyip, game dosyasını yeniden derlediğinde (build aldığında) sorununun kesin olarak çözüldüğünü göreceksin.

Kolay gelsin.
Martysama kaynak kodlarında maalesef verdiğiniz kodlar çalışmıyor uyarlama yapıldığında iste kodlar etki etmiyor.
 
Bir şekilde karaktere etkisini çözdüm fakat şimdide oyun içerisinde STR değerlerini güncellemiyor oyun

Çalışan fonksiyon ise bu şekilde.

Kod:
    if (GetDesc())
    {
        struct packet_point_change pack;

        pack.header = HEADER_GC_CHARACTER_POINT_CHANGE;
        pack.dwVID = m_vid;
        pack.type = type;
        pack.value = val;

        if (bAmount)
            pack.amount = amount;
        else
            pack.amount = 0;

        if (!bBroadcast)
            GetDesc()->Packet(pack);
        else
            PacketAround(pack);
    }
}
 
Bir şekilde karaktere etkisini çözdüm fakat şimdide oyun içerisinde STR değerlerini güncellemiyor oyun

Çalışan fonksiyon ise bu şekilde.

Kod:
    if (GetDesc())
    {
        struct packet_point_change pack;

        pack.header = HEADER_GC_CHARACTER_POINT_CHANGE;
        pack.dwVID = m_vid;
        pack.type = type;
        pack.value = val;

        if (bAmount)
            pack.amount = amount;
        else
            pack.amount = 0;

        if (!bBroadcast)
            GetDesc()->Packet(pack);
        else
            PacketAround(pack);
    }
}
En zor kısmı, bonusların karaktere etki etmesini çözmüşün. Süper! bu, işin %90'ı bitti demek.

Sunucu artık karakterin STR (Güç) değerini doğru hesaplıyor. Ama sunucunun bunu oyun ekranına, yani oyuncunun gördüğü arayüze bildirmesi gerekiyor. Yani sunucu kendi içinde "Tamam, aurovex gücü artık 100 oldu" diyor ama bunu sana söylemeyi, o paketi göndermeyi unutuyor. Bu yüzden sen statü penceresinde hala eski değeri görüyorsun.

Senin gönderdiğin o kod bloğu, işte tam da bu "bildirme" işini yapan paket gönderme fonksiyonu. Adı muhtemelen PointChange veya benzeri bir şeydir. Fonksiyon doğru, ama çağrıldığı yer yanlış ya da eksik.

Bu sefer kesin ve net çözüm olur inş.


Bu bildirme işleminin, tüm statülerin baştan sona hesaplandığı tek bir yerden, yani bizim o meşhur ComputePoints fonksiyonunun içinden yapılması gerekiyor. Böylece ne zaman bir skill açsan, ne zaman bir item taksan, ne zaman bir pot içsen, ComputePoints çalışır ve sonunda tüm güncel değerleri ekrana tek seferde gönderir.

1- game kaynak kodları içindeki char.cpp dosyasını tekrar aç
2- void CHARACTER::ComputePoints() fonksiyonunu bul
3- Bu fonksiyonun EN SONUNA, yani en sondaki kapatma süslü parantezinin } hemen üstüne aşağıdaki kod bloğunu olduğu gibi ekle

[CODE title="C++"]// --- TÜM STATÜLERİ OYUNCU EKRANINA GÖNDEREN GÜNCELLEME KODU ---
// Bu kod, hesaplanan tüm yeni değerleri client'e bildirir.

PointChange(POINT_ST, GetPoint(POINT_ST));
PointChange(POINT_DX, GetPoint(POINT_DX));
PointChange(POINT_HT, GetPoint(POINT_HT));
PointChange(POINT_IQ, GetPoint(POINT_IQ));
PointChange(POINT_MAX_HP, GetMaxHP());
PointChange(POINT_MAX_SP, GetMaxSP());
PointChange(POINT_HP, GetHP());
PointChange(POINT_SP, GetSP());
PointChange(POINT_ATT_VALUE, points.atk);
PointChange(POINT_DEF_GRADE, points.def);
PointChange(POINT_MOV_SPEED, GetPoint(POINT_MOV_SPEED));
PointChange(POINT_ATT_SPEED, GetPoint(POINT_ATT_SPEED));
PointChange(POINT_MAGIC_ATT_VALUE, points.mag_atk);
PointChange(POINT_MAGIC_DEF_GRADE, points.mag_def);[/CODE]


Umarım bu sefer sorunun kesin olarak çözülür.
 
En zor kısmı, bonusların karaktere etki etmesini çözmüşün. Süper! bu, işin %90'ı bitti demek.

Sunucu artık karakterin STR (Güç) değerini doğru hesaplıyor. Ama sunucunun bunu oyun ekranına, yani oyuncunun gördüğü arayüze bildirmesi gerekiyor. Yani sunucu kendi içinde "Tamam, aurovex gücü artık 100 oldu" diyor ama bunu sana söylemeyi, o paketi göndermeyi unutuyor. Bu yüzden sen statü penceresinde hala eski değeri görüyorsun.

Senin gönderdiğin o kod bloğu, işte tam da bu "bildirme" işini yapan paket gönderme fonksiyonu. Adı muhtemelen PointChange veya benzeri bir şeydir. Fonksiyon doğru, ama çağrıldığı yer yanlış ya da eksik.

Bu sefer kesin ve net çözüm olur inş.


Bu bildirme işleminin, tüm statülerin baştan sona hesaplandığı tek bir yerden, yani bizim o meşhur ComputePoints fonksiyonunun içinden yapılması gerekiyor. Böylece ne zaman bir skill açsan, ne zaman bir item taksan, ne zaman bir pot içsen, ComputePoints çalışır ve sonunda tüm güncel değerleri ekrana tek seferde gönderir.

1- game kaynak kodları içindeki char.cpp dosyasını tekrar aç
2- void CHARACTER::ComputePoints() fonksiyonunu bul
3- Bu fonksiyonun EN SONUNA, yani en sondaki kapatma süslü parantezinin } hemen üstüne aşağıdaki kod bloğunu olduğu gibi ekle

[CODE title="C++"]// --- TÜM STATÜLERİ OYUNCU EKRANINA GÖNDEREN GÜNCELLEME KODU ---
// Bu kod, hesaplanan tüm yeni değerleri client'e bildirir.

PointChange(POINT_ST, GetPoint(POINT_ST));
PointChange(POINT_DX, GetPoint(POINT_DX));
PointChange(POINT_HT, GetPoint(POINT_HT));
PointChange(POINT_IQ, GetPoint(POINT_IQ));
PointChange(POINT_MAX_HP, GetMaxHP());
PointChange(POINT_MAX_SP, GetMaxSP());
PointChange(POINT_HP, GetHP());
PointChange(POINT_SP, GetSP());
PointChange(POINT_ATT_VALUE, points.atk);
PointChange(POINT_DEF_GRADE, points.def);
PointChange(POINT_MOV_SPEED, GetPoint(POINT_MOV_SPEED));
PointChange(POINT_ATT_SPEED, GetPoint(POINT_ATT_SPEED));
PointChange(POINT_MAGIC_ATT_VALUE, points.mag_atk);
PointChange(POINT_MAGIC_DEF_GRADE, points.mag_def);[/CODE]


Umarım bu sefer sorunun kesin olarak çözülür.
Bu sefer hasar 2 katına çıktı fakat değerler çok farketmedi fonksiyon aşağıda belirttiğim gibi.

[CODE title="Fonksiyon"]void CHARACTER::ComputePoints()
{
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 ENA#ifdefCE_COSTUME_SYSTEM
SetPart(PART_ACCE, GetOriginalPart(PART_ACCE));
#endif

#endifoint(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;

#ifdef ENA#ifdefW_PASSIVE_SKILL
CSkillProto* pkSk;
int ekle = 0;
#endif

#endifIsPC())
{
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 (NULL != pkSk)
{
pkSk->SetPointVar("k", 1.0f * GetSkillPower(SKILL_ADD_HP) / 100.0f);

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

#ifdef ENA#ifdefW_PASSIVE_SKILL
{
pkSk = CSkillManager::instance().Get(SKILL_MONSTER_BONUS);

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

ekle = static_cast<int>(pkSk->kPointPoly.Eval());
PointChange(POINT_ATTBONUS_MONSTER,ekle);
}
}

{
pkSk = CSkillManager::instance().Get(SKILL_STONE_BONUS);

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

ekle = static_cast<int>(pkSk->kPointPoly.Eval());
PointChange(POINT_ATTBONUS_STONE,ekle);
}
}

{
pkSk = CSkillManager::instance().Get(SKILL_BOSS_BONUS);

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

ekle = static_cast<int>(pkSk->kPointPoly.Eval());
PointChange(POINT_ATTBONUS_BOSS,ekle);
}
}
#endif

#endifSetPoint(POINT_MOV_SPEED, 100);
SetPoint(POINT_ATT_SPEED, 100);
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())
{
if (GetMountVnum())
{
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);
}

PointChange(POINT_MAX_HP, 0);

if (iMaxSP != GetMaxSP())
{
SetRealPoint(POINT_MAX_SP, iMaxSP);
}

PointChange(POINT_MAX_SP, 0);

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

m_pointsInstant.dwImmuneFlag = 0;

if (IsPC())
{
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());
}
}

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();

if (IsPC())
{
CPetSystem * pPetSystem = GetPetSystem();
if (pPetSystem)
pPetSystem->RefreshBuff();

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

UpdatePacket();
}[/CODE]
 

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

Geri
Üst