Best Studio 1
Best Studio
D 1
delimuratt
Aliyldrim 1
Aliyldrim
Mt2Hizmet 1
Mt2Hizmet
noisiv 1
noisiv
Manwe Work 1
Manwe Work
melankolıa18 1
melankolıa18
Agora Metin2 1
Agora Metin2
Cannn6161 1
Cannn6161
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

[AsiPly] Bilinen Tüm Bug Ve Açıklar Hepsi Tek Konuda Birleşti.

5.00 yıldız(lar) 1 Değerlendirme Değerlendirenler

AsiPly

Level 6
TC Kimlik Numarası Doğrulanmış Üye
TM Üye
Katılım
7 Ocak 2015
Konular
127
Mesajlar
1,273
Çözüm
2
Online süresi
20d 3h
Reaksiyon Skoru
177
Altın Konu
0
TM Yaşı
11 Yıl 5 Ay
Başarım Puanı
174
MmoLira
4,407
DevLira
0
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!

latest
Merhaba arkadaşlar bu konuyu bug ve açıkları tek tek gezerek değilde tek bir konu üzerinden daha kolay ve rahat olsun diye yapıyorum. Konular Turkmmo ve yabancı forumlar üzerinden yapılmıştır.




Konu Başlıkları

Linkler

Sersemlik bugu Fix


4 Taş Depo Bugu


Loncadayken Krallık değiştirme Fix

Tıkla

Parti Bug Fix


At level Bug Fix

Tıkla

Silah evrim sistemi efekt+ Bağırmada Evrim gözükmeme sorunu fix

Tıkla

İtemSwap bug Fix


Lonca Bug Fix


Sql İnjeckt Fixleyenler Yapsın Mutlaka Fix


Sql İnjeckt Fix


Party Hp Bug Fix

Envanterden depoya item atma FİX.
Tıkla

Quest Bug Fix


Kuşak Sistem Kemer Bug Fix


4 Taş sistemi Artırma bug fix


Cinsiyet Değiştirirken Kostum Bugu Fix


Omuz Kuşagı Kombinasyon bugu Fix


Lua esc Bug Fix


Shop Grid Bug Fix


Kuşak Sistemi Envanter Bug Fix


Kilitli İtem Yansıtma Bug Fix


Lonca Güvenliği Açıgı Fix


Internal IP Fix


Hamle Atınca Hp düşme Fix


Check Client Version Bug Fix


Ch Düşmesiyle Alakalı Game.core


Lonca exploit Fix


Cube Core Fix


Lycan Turmali Sorunu Fix


Envanter Doluyken İtem Değişmeme Fix


Oyundan atma Speed Hack detect Fix


Karakter Silmeme Fix


Karakter İsim Hilesi Fix


Hareket Ederken İtem değişmeme Fix


Bineğe Binince Oyundan Atma Fix


Kuşak görüntü bugu Fix

Tıkla

Skillde Saldırı değeri Gözükmeme Fix


Ofline Shop Sql Injecktion Fix


Bazı Beceri kitab bugları fix

Tıkla

C++ Sql İnjection-Arkadaş-Fısıltı-Lonca


P2P GIRIŞ BAĞLANTISINI ENGELLEME


Quest Instant Speed Fix


Maden Bot Fix


Absürt Bonus Engelli


Envanter Süresi Olmadan Şebnem Bugunu Fixleme


Harita Yüklenirken Dc Yeme Fix


Kostum Bugu Fix


Zırh Tak Çıkar Bugu Fix

Tıkla

Sysr Hatalarını Çözümleri


SQUENCE LOG FİX

Tıkla

Kazma Veya Olta Varken Kostum Engeli Fix


Reload q Crash Bug Fix


Offline shop açıkken krallık değiştirme && isim izni kullanma fixi


Yeni Karakter ekleyince "Karakter Yaratamazsın Hatasının fix

Tıkla

Pazardan 2 kişi aynı anda aynı itemi alınca dc fix

Tıkla

Pet yaş fixi piyasadakinden farklı

Tıkla

[C++] Ticaret Ekranı Açık iken Quest Engell

Tıkla

Offline Shop item kaybolma fix

Tıkla

Binek geri atma sorunu fix

Tıkla

Kullanılan itemi direk depoya koyma fix

Tıkla

SEQUENCE_LOG Fix (Sysser Kapatmaz Sorun fix)

Tıkla

TC OFFLİNE SHOP KULLANANLAR İÇİN 4-6 TAŞ FİXİ

Tıkla

Gelinlik & Smokin takılı ise , kostüm giyme engelleme

Tıkla

Büyü çözme sklinde oluşan lag fix

Tıkla
#Yeni güncelleme.




#Sunucu Tabanlı performans ve iyileştirmeler.


#Sunucu tabanlı iyileştirme ve performanslar

Linkler

#Oto kanal başlatma kanal düşenler için ideal.

Tıkla

Oto Kanal Başlatma Kanal düşenlere için ideal Güncel

Tıkla

#Kanal başında 4 adet core dosyası #PERFORMANS

Tıkla
#Tarafımca uygun görülen sistemler



#Sistemin İsmi

#Sistemin Linki

Boss güvenlik sistemi

Tıkla

Boss sekmeme sistemi

Tıkla

Lonca lider tagı sistemi

Tıkla

Depo banka sistemi

Tıkla

Offical character select

Tıkla

Offical kanal değiştirme

Tıkla

Kostum Efekt Verme Sistemi

Tıkla

Serverinfo clientten çeksin

Tıkla

Oto pot Aç Kapat yaparak oluşan lag önlem

Tıkla
#New Klavye Kontrollü Pet Attack SistemiTıkla
#New Simya GüncellemesiTıkla


#

Source

Linkler

1

Toplu Source fixleri

SourceFix

2

Warning fixleri

Warningfix

3

Lycan ekleme[C++/Lua/Py]

LycanAdd
#New Güncelleme #26.04.2018 17:03 #New


#New Yazı tipi güncellemesi /Times New Roman /

13c5fd983b.gif

b1c09dd1bd.gif



giphy.gif

Kod:
    if (pkOldGrid)
        m_pkGrid = M2_NEW CGrid(pkOldGrid, 5, m_iSize);
    else
        m_pkGrid = M2_NEW CGrid(5, m_iSize);
Kod:
    if (pkOldGrid) {
        m_pkGrid = M2_NEW CGrid(pkOldGrid, 5, m_iSize);
        delete pkOldGrid;
    }
    else
        m_pkGrid = M2_NEW CGrid(5, m_iSize);

Find in ClientManager.cpp(x2):
Kod:
pkPeer->EncodeHeader(HEADER_DG_SAFEBOX_WRONG_PASSWORD, dwHandle, 0);
[CODE title="Add(x2):" highlight="delete pSafebox;"]delete pSafebox;[/CODE]
cc183db7fd.png




Kod:
extern void SendNoticeMap(const char* c_pszBuf, int nMapIndex, bool bBigFont);
Kod:
extern const char * userDC(const char * userName);
Kod:
void SendLog(const char * c_pszBuf)
{
    const DESC_MANAGER::DESC_SET & c_ref_set = DESC_MANAGER::instance().GetClientSet();
    std::for_each(c_ref_set.begin(), c_ref_set.end(), log_packet_func(c_pszBuf));
}
Kod:
const char * userDC(const char * userName)
{

    LPDESC d = DESC_MANAGER::instance().FindByCharacterName(userName);
    LPCHARACTER    tch = d ? d->GetCharacter() : NULL;

    if (!tch)
    {
        return "Player not in game";
    }else{
        DESC_MANAGER::instance().DestroyDesc(d);
        return "Player kicked out";
    }


}
Kod:
else if (!stBuf.compare(0, 3, "DC "))
Kod:
else if (!stBuf.compare(0, 3, "DC "))
                {
                
                
                    std::string msg = stBuf.substr(3, LOGIN_MAX_LEN);

                 ///  dev_log(LOG_DEB0, "DC : '%s'", msg.c_str());


                    stResult = userDC(msg.c_str());
                
                    /*TPacketGGDisconnect pgg;

                    pgg.bHeader = HEADER_GG_DISCONNECT;
                    strlcpy(pgg.szLogin, msg.c_str(), sizeof(pgg.szLogin));

                    P2P_MANAGER::instance().Send(&pgg, sizeof(TPacketGGDisconnect));

                    // delete login key
                    {
                        TPacketDC p;
                        strlcpy(p.login, msg.c_str(), sizeof(p.login));
                        db_clientdesc->DBPacket(HEADER_GD_DC, 0, &p, sizeof(p));
                    }*/
                
                }


[CODE title="Common/Service.h Musait bir yere ekleyin."]#define FIXDESCFINDPC [/CODE]

[CODE title="game/src/desc_manager.cpp"]///Add
#include <boost/algorithm/string.hpp>

//Find
if (d->GetCharacter() && !strcmp(d->GetCharacter()->GetName(), m_name))
return true;
return false;

///Change
#if defined(FIXDESCFINDPC)
return d->GetCharacter() && boost::algorithm::to_lower_copy(std::string(d->GetCharacter()->GetName())) == boost::algorithm::to_lower_copy(std::string(m_name));
#else
if (d->GetCharacter() && !strcmp(d->GetCharacter()->GetName(), m_name))
return true;
return false;
#endif

or

///Change
#if defined(FIXDESCFINDPC)
auto tolowerlocal = [](std::string sz) {
std::transform(sz.begin(), sz.end(), sz.begin(), ::tolower);
return sz;
};
return d->GetCharacter() && tolowerlocal(std::string(m_name)) == tolowerlocal(std::string(d->GetCharacter()->GetName()));
#else
if (d->GetCharacter() && !strcmp(d->GetCharacter()->GetName(), m_name))
return true;
return false;
#endif[/CODE]

[CODE title="'byte' was not declared in this scope hata fixi "]Open cipher.h and add;
using CryptoPP::byte;[/CODE]
[CODE title="char_skill.cpp açın Aratın"]GetMountVnum
[/CODE]
[CODE title="Kod Bloğunu değiştirin."] if(GetMountVnum())
{
if( !((GetMountVnum() >= 20101 && GetMountVnum() <= 20205)))
return true;
}


if(GetMountVnum()) //Server filesinizde skill kodları farklı ise onları kendinize göre ayarlayın.
{
if( !((GetMountVnum() >= 20209 && GetMountVnum() <= 20212) ||
GetMountVnum() == 20215 || GetMountVnum() == 20218 || GetMountVnum() == 20225 ) )
return false;

}[/CODE]
17bbb4ef5a92b944f14706192332d12f.gif

[CODE title="src/Server/game/common/service.h"]#define ENABLE_YMIR_AFFECT_FIX[/CODE]
[CODE title="src/Server/game/src/input_login.cpp aç arat"]ch->StartCheckSpeedHackEvent();[/CODE]
[CODE title="ekle"]#ifdef ENABLE_YMIR_AFFECT_FIX
ch->SetQuestFlag("item.last_time", get_global_time());
#endif
[/CODE]
[CODE title="src/Server/game/src/char.h aç arat"]const char * GetName() const;
[/CODE]
[CODE title="ekle"]#ifdef ENABLE_YMIR_AFFECT_FIX
bool CheckTimeUsed(LPITEM item);
#endif[/CODE]
[CODE title="src/Server/game/src/char_item.cpp aç arat"]int CalculateConsumeSP(LPCHARACTER lpChar)
[/CODE]
[CODE title="ekle değiştir"]https://paste2.org/Hbaf68Pc[/CODE]
[CODE title="arat"]case USE_ABILITY_UP:
[/CODE]
[CODE title="ekle"]http://paste2.org/gFVsEmcO[/CODE]
[CODE title="arat"]case USE_AFFECT :
{[/CODE]
[CODE title="ekle"]
http://paste2.org/NjCafvv9[/CODE]
[CODE title="arat"]sys_log(0,"ITEM_BLEND!!");
[/CODE]
[CODE title="ekle"]http://paste2.org/PNOd6sdh[/CODE]
[CODE title="input_main.cpp aciyoruz arat"]CSafebox * pkSafebox = ch->GetSafebox();
LPITEM pkItem = ch->GetItem(p->ItemPos);

if (!pkSafebox || !pkItem)
return;[/CODE]
[CODE title="ekle"]if (pkItem->GetType() == ITEM_BELT && pkItem->IsEquipped())

ch->ChatPacket(CHAT_TYPE_INFO, "Önce kemer Envanterini boşalt!");
return;
}[/CODE]
Kod:
/Warr Bug'unu Fixlemek için Diff paylaşıyorum arkadaşlar.

Game Rev. 40250

Kod:
game40250
0008DF69: 8E 86
40k Server Fileslerde

1. ve 2. Envanter'de çalışan Auto Pot

3. 4. ve 5. envanter'de çalışmama sorunu Fixleyeceğiz.


[CODE title="uiinventory.py Açılır. Aratılır"]if slotNumber >= player.INVENTORY_PAGE_SIZE:
slotNumber -= player.INVENTORY_PAGE_SIZE[/CODE]
[CODE title="değiştirilir"]if slotNumber >= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex:
slotNumber -= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex[/CODE]
6kXW1l.jpg

b2GZpV.jpg
Açılır: char_battle.cpp
Aratılır:
Kod:

Kod:
bool CHARACTER::Attack(LPCHARACTER pkVictim, BYTE bType)
Kod bloğunun içine eklenir:
Kod:

Kod:
if (pkVictim->GetShopOwner()) 
     return false;
[CODE title="cmd_general.cpp açın ve aratın;"]if (strArg1 == "r_info") {
if (0 == arg2[0])
{[/CODE]
[CODE title="bunu bulduğunuzda hemen altında" highlight="if (strArg1 == "r_info") { if (0 == arg2[0]) {"]Cube_request_result_list(ch);
[/CODE]
[CODE title="değiştirin" highlight="Cube_request_result_list(ch);"]//Cube_request_result_list(ch);
return;[/CODE]
# EDİT : Kesin çözümü WoM 2 ekibi tarafından yayınlandı. Paylaşmama gerek kalmadı sanırım. (Ben farklı çözdüm fakat yorumları baktığımda buda kesin sonucu elde ediyor.)


Src'nize girip (game/src/cube.cpp) açın ve aratın;

HTML:

if (false == bCatchInfo)

Değiştirin;
HTML:

if (!bCatchInfo || materialInfoText.size() == 0)
ve tekrar arayın;

HTML:

resultCount = resultList.size();
Ekleyin;

HTML:

if (resultCount == 0) { return;}
Fixlenmiştir. :)
Arkadaşlar silah veya zırh elimizdeyken o silah üzerindeki taşlarla yapılan bir bug'tur tam olarak yapılışını anlatmıyorum sebebi başka serverlerde kimsenin denememesidir.

Hemen anlatıma geçiyorum.
char_item.cpp açılır ve aşşağıdaki kod aratılır.

Kod:

Kod:
if (item2->GetSocketCount() == 0)
return false;
Alttaki kod bulduğumuz kodun altına eklenir.

Kod:

Kod:
if (item2->IsEquipped())
            return false;
Yine char_item.cpp içerisinde aşşağıdaki kod aratılır.

Kod:

if (item2->GetVnum() >= 28330 && item2->GetVnum() <= 28343)
Ve üstüne bu kod eklenir.

Kod:

if (item2->IsEquipped())
return false;
[CODE title="Char_battle.cpp Açılır"] if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && number(0, 4) > 0) // 80% íë¥
{
int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;


if (i)
{
CreateFly(FLY_HP_SMALL, pAttacker);
pAttacker->PointChange(POINT_HP, i);
}
}[/CODE]
[CODE title="Arat Değiştir."] if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && number(0, 4) > 0) // 80% Ä®·ü
{
int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;


if (i && i > 0)
{
CreateFly(FLY_HP_SMALL, pAttacker);
pAttacker->PointChange(POINT_HP, i);
}
}[/CODE]
[CODE title="game/src input_main.cpp Açılır VE Aratılır"] if (!ch->IsEmptyItemGrid(p->ItemPos, pkItem->GetSize()))
return;[/CODE]
[CODE title="Altına Eklenir."] for (WORD belt_index = BELT_INVENTORY_SLOT_START; belt_index < BELT_INVENTORY_SLOT_END; ++belt_index)
{
if (pkItem->GetType() != 3 && p->ItemPos.cell == belt_index)
{
if(pkItem->GetSubType() != 0 || pkItem->GetSubType() != 11 || pkItem->GetSubType() != 7)
{
ch->ChatPacket(CHAT_TYPE_INFO, "|cFFff0000|H|h<Check> Depodan Kemer Envanterine item yerlestiremezsin !");
return;
}
}
}[/CODE]
[CODE title="char_item.cpp 4495. satıra eklenir."]if (item2->IsEquipped())
return false;[/CODE]
PYzq0v.png
[CODE title="Shop_Manager.cpp" highlight="arat"]dwPrice = item->GetShopBuyPrice();[/CODE]

[CODE title="değiştir"]if (dwPrice > item->GetGold()) dwPrice = item->GetGold();[/CODE]
Bugumuz takılan binek nesnelerinin sağ tıklayıp, ctrl+g uyguladıyıp indiğimiz veya öldüğümüz zaman, envanterimize çıkmamasını binek üzerinde olmadığımız halde takılı kalmasını fixliyecek kodlar;
[CODE title="Game / Src cmd_general.cpp açılır"]ACMD(do_unmount)
[/CODE][CODE title="Aratılır.. ve alttaki kodla değiştirilir."]https://paste2.org/HpE9BngM[/CODE]
[CODE title="char_battle.cpp açılır aratılır"]RemoveAffect(AFFECT_MOUNT_BONUS);[/CODE]
[CODE title="Aratılır ve alttaki kod altına eklenir."]https://paste2.org/8CBUzLd0

LPITEM item = GetWear(WEAR_UNIQUE1);
LPITEM item2 = GetWear(WEAR_UNIQUE2);

if (item && item->IsRideItem())
{
UnequipItem(item);
}

if (item2 && item2->IsRideItem())
{
UnequipItem(item2);
}[/CODE]
[CODE title="*char_battle.cpp Aratın ve silin:"]enum DamageFlag
{
DAMAGE_NORMAL = (1 << 0),
DAMAGE_POISON = (1 << 1),
DAMAGE_DODGE = (1 << 2),
DAMAGE_BLOCK = (1 << 3),
DAMAGE_PENETRATE= (1 << 4),
DAMAGE_CRITICAL = (1 << 5),
};[/CODE]
[CODE title="arat"]Aratın:
bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type)[/CODE]
[CODE title="Üstüne ekle"]enum DamageFlag
{
DAMAGE_NORMAL = (1 << 0),
DAMAGE_POISON = (1 << 1),
DAMAGE_DODGE = (1 << 2),
DAMAGE_BLOCK = (1 << 3),
DAMAGE_PENETRATE= (1 << 4),
DAMAGE_CRITICAL = (1 << 5),
};[/CODE]
f187df973eb84c97988ffc16cac8886d.png

[CODE title="Aratın"]if (type != DAMAGE_TYPE_NORMAL && type != DAMAGE_TYPE_NORMAL_RANGE)
{
if (IsAffectFlag(AFF_TERROR))
{
int pct = GetSkillPower(SKILL_TERROR) / 400;


if (number(1, 100) <= pct)
return false;
}
}[/CODE]
[CODE title="değiştirin" highlight="https://paste.ubuntu.com/23140537/"] if (IsAffectFlag(AFF_TERROR))
{
if (type != DAMAGE_TYPE_NORMAL && type != DAMAGE_TYPE_NORMAL_RANGE)
{
int iTerrorPCT = GetSkillPower(SKILL_TERROR) / 3.3;
if (number(1, 100) <= iTerrorPCT)
{
SendDamagePacket(pAttacker, 0, DAMAGE_BLOCK);
return false;
}
}
}[/CODE]
ac9894aa59954f58a5f4e4128e47e8e4.png

Hata 1: pct değikeni aynı fonksiyonda 3 ayrı hesaplama için kullanılıyor, yanlış hesaplama yapması mümkün
Hata 2: GetSkillPower(SKILL_TERROR)' ün verdiği değerler;
M1: 50
G1: 82
P: 125
şeklinde. orjinal kısımda bu değerleri 400'e bölüyor!? ve en yüksek seviye dehşet için 125 / 400 den 0.3125 gibi komik bir rakam çıkıyor ve sistem yuvarladığında 1 bile etmiyor direk bu kısmı pas geçiyor. düzenlemesi için 3.3 olarak değiştirildi bu şekilde tam olarak skilldesc de yansıttığı oranda uyguluyor
Hata 3: Block paketi eklenmemiş eğer oran tutturulursa pas geçer, şuan block paketi eklendiğinden oran tutturulursa miss olarak gözükür
pasha37 nin konusudur isteyen daha rahat ulaşsın diye açıyorum

Hp çalma;


Önceki çalışma mantığı >

Efsun varsa her hasarda 1/10 oranla aktif olur
iCurHP tanımlı olmadığı için sadece varolan orana "1" ekler, %5 HP Çalma efsunu varsa 6 hp çalar


Düzenlenmiş şekilde çalışma mantığı >
Efsun varsa her hasar efsun oranı % kaç ise o oranda aktif olur
iCurHP değeri CurrentHP yani o anki varolan hp miktarına tanımlandı dolayısıyla mantık şu şekil değiştirildi Minimum(hasar, Maksimum(0, MevcutHP))


Koşullar düzenlendi, hp kontrolü eklendi
FLY çok küçük olduğundan medium olarak düzenlendi( Medium HP FLY ve SMALL SP FLY oranı )


Sp çalma;


Önceki çalışma mantığı >

Efsun varsa her hasarda 1/10 oranla aktif olur
Hedef mob ise sp yerine hp çalar
iCurHP ve iCurSP tanımlı olmadığı için var olan orana 1 ekler.


Düzenlenmiş şekilde çalışma mantığı >
Efsun varsa her hasar efsun oranı % kaç ise o oranda aktif olur
Hedef mob ise bu efsunu pas geçer
iCurSP değeri CurrentSP olarak düzenlendi, dolayısıyla mantık şu şekil değiştirildi Minimum(hasar, Maksimum(0, MevcutSP))


Koşullar düzenlendi, sp kontrolü eklendi
FLY çok küçük olduğundan medium olarak düzenlendi




%5 oranla ortalama çalma miktarları 6-20 arası ikisi içinde maksimum oran %50 ayarlanmış. Maksimumda ortalama 60-200 arası çalma mevcut
[CODE title="*char_battle.cpp aç arat"] if (pAttacker->GetPoint(POINT_STEAL_HP))
{
int pct = 1;


if (number(1, 10) <= pct)
{
int iHP = MIN(dam, MAX(0, iCurHP)) * pAttacker->GetPoint(POINT_STEAL_HP) / 100;


if (iHP > 0 && GetHP() >= iHP)
{
CreateFly(FLY_HP_SMALL, pAttacker);
pAttacker->PointChange(POINT_HP, iHP);
PointChange(POINT_HP, -iHP);
}
}
}


// SP ½ºÆ¿
if (pAttacker->GetPoint(POINT_STEAL_SP))
{
int pct = 1;


if (number(1, 10) <= pct)
{
int iCur;


if (IsPC())
iCur = iCurSP;
else
iCur = iCurHP;


int iSP = MIN(dam, MAX(0, iCur)) * pAttacker->GetPoint(POINT_STEAL_SP) / 100;


if (iSP > 0 && iCur >= iSP)
{
CreateFly(FLY_SP_SMALL, pAttacker);
pAttacker->PointChange(POINT_SP, iSP);


if (IsPC())
PointChange(POINT_SP, -iSP);
}
}
}[/CODE]
[CODE title="değiştir"] int iStealHP_ptr = pAttacker->GetPoint(POINT_STEAL_HP);
if (iStealHP_ptr)
{
if (number(1, 100) <= iStealHP_ptr)
{
int iHP = MIN(dam, MAX(0, GetHP())) * pAttacker->GetPoint(POINT_STEAL_HP) / 100;


if ((pAttacker->GetHP() > 0) && (pAttacker->GetHP() + iHP < pAttacker->GetMaxHP()) && (GetHP() > 0) && (iHP > 0))
{
CreateFly(FLY_HP_MEDIUM, pAttacker);


pAttacker->PointChange(POINT_HP, iHP);
PointChange(POINT_HP, -iHP);
}
}
}


// SP ½ºÆ¿
int iStealSP_ptr = pAttacker->GetPoint(POINT_STEAL_SP);
if (iStealSP_ptr)
{
if (IsPC() && pAttacker->IsPC()) {
if (number(1, 100) <= iStealSP_ptr)
{
int iSP = MIN(dam, MAX(0, GetSP())) * pAttacker->GetPoint(POINT_STEAL_SP) / 100;


if ((pAttacker->GetSP() > 0) && (pAttacker->GetSP() + iSP < pAttacker->GetMaxSP()) && (GetSP() > 0) && (iSP > 0))
{
CreateFly(FLY_SP_MEDIUM, pAttacker);
pAttacker->PointChange(POINT_SP, iSP);


PointChange(POINT_SP, -iSP);
}
}
}
}[/CODE]
pasha37 nin konusudur isteyen daha rahat ulaşsın diye açıyorum

Önceki çalışma mantığı >
Efsun varsa her hasarda %80 oranla aktif olur


Düzenlenmiş şekilde çalışma mantığı >
Efsun varsa her hasar efsun oranı % kaç ise o oranda aktif olur


%12 oran ile tek seferde 100-300 hp/sp emer
Koşullar düzenlendi, -(eksi) hp yada sp ile ölündüğünde kendi kendilerinden absorbe etme hatası vardı giderildi
FLY küçük olduğundan big olarak düzenlendi( )
[CODE title="*char_battle.cpp aç arat"] if (pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) && number(0, 4) > 0) // 80% È®·ü
{
int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;


if (i)
{
CreateFly(FLY_HP_SMALL, pAttacker);
pAttacker->PointChange(POINT_HP, i);
}
}


// Ä¥ ¶§¸¶´Ù SPȸº¹
if (pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) && number(0, 4) > 0) // 80% È®·ü
{
int i = MIN(dam, iCurHP) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;


if (i)
{
CreateFly(FLY_SP_SMALL, pAttacker);
pAttacker->PointChange(POINT_SP, i);
}
}[/CODE]
[CODE title="değiştir"] int iAbsoHP_ptr = pAttacker->GetPoint(POINT_HIT_HP_RECOVERY);
if (iAbsoHP_ptr)
{
if (number(1, 100) <= iAbsoHP_ptr) {
int iHPAbso = MIN(dam, GetHP()) * pAttacker->GetPoint(POINT_HIT_HP_RECOVERY) / 100;


if ((pAttacker->GetHP() > 0) && (pAttacker->GetHP() + iHPAbso < pAttacker->GetMaxHP()) && (GetHP() > 0) && (iHPAbso > 0))
{
CreateFly(FLY_HP_BIG, pAttacker);
pAttacker->PointChange(POINT_HP, iHPAbso);
}
}
}


// Ä¥ ¶§¸¶´Ù SPȸº¹
int iAbsoSP_ptr = pAttacker->GetPoint(POINT_HIT_SP_RECOVERY);
if (iAbsoSP_ptr)
{
if (number(1, 100) <= iAbsoSP_ptr) {
int iSPAbso = MIN(dam, GetSP()) * pAttacker->GetPoint(POINT_HIT_SP_RECOVERY) / 100;


if ((pAttacker->GetSP() > 0) && (pAttacker->GetSP() + iSPAbso < pAttacker->GetMaxSP()) && (GetSP() > 0) && (iSPAbso > 0))
{
CreateFly(FLY_SP_BIG, pAttacker);
pAttacker->PointChange(POINT_SP, iSPAbso);
}
}
}[/CODE]
*Not:
Kod:

POINT_ERROR:
şeklinde syserr alırsanız aşağıdaki işlemi yapın;

*char.cpp açın
Bul:
Kod:

sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), val, max_val);
Değiştir:
Kod:

sys_err("POINT_ERROR: %s type %d val %d (max: %d)", GetName(), type, val, max_val);
Kod:
Statünün 90 verilmesine rağmen karakter alanındaki statülerin tam dolmamasını görmüşsünüzdür mutlaka bu gün size bunun nasıl düzeltileceğini anlatacağım.


Root/introselect.py Açılır

Aratılır:


self.destGauge =[
float(valueHTH)/380,
float(valueINT)/380,
float(valueSTR)/380,
float(valueDEX)/380
]

Değiştirilir:


self.destGauge =[
float(valueHTH)/90, # max statünüze göre değiştirebilrisiniz.
float(valueINT)/90, # max statünüze göre değiştirebilrisiniz.
float(valueSTR)/90, # max statünüze göre değiştirebilrisiniz.
float(valueDEX)/90 # max statünüze göre değiştirebilrisiniz.
]

Root/introcreate.py Açılır

Aratılır:


float(self.stat[0])/float(statSummary),
float(self.stat[1])/float(statSummary),
float(self.stat[2])/float(statSummary),
float(self.stat[3])/float(statSummary),

Değiştirilir:


float(self.stat[0])/90,# max statünüze göre değiştirebilrisiniz.
float(self.stat[1])/90,# max statünüze göre değiştirebilrisiniz.
float(self.stat[2])/90,# max statünüze göre değiştirebilrisiniz.
float(self.stat[3])/90,# max statünüze göre değiştirebilrisiniz.





Emma-Stone-Bye-Bye-Gif.gif
 
Son düzenleme:

En Çok Reaksiyon Alan Mesajlar

teşekkürler bir çok kişi faydalanacaktır.
 
Son düzenleme:
Çoğu kişinin işine yarayacaktır, konu için teşekkürler.
 

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

Geri
Üst