- Katılım
- 30 Ocak 2020
- Konular
- 50
- Mesajlar
- 812
- Online süresi
- 26g 54000s
- Reaksiyon Skoru
- 735
- Altın Konu
- 1
- Başarım Puanı
- 184
- TM Yaşı
- 6 Yıl 2 Ay 21 Gün
- MmoLira
- 8,731
- DevLira
- 123
Metin2 EP, Valorant VP dahil tüm oyun ürünlerini en uygun fiyatlarla bulabilir, Item ve Karakterlerinizi hızlıca satabilirsiniz. HEMEN TIKLA!
GİRİŞ & PROBLEM
Merhaba, biliyorsunuz ki oyundaki at sisteminde oyuncu atını sınırsız şekilde arka arkaya besleyebiliyor, bu durum kodlardaki kontroller sebebiyle bir overflow sorunu yaratmayacaktır fakat canı zaten fullenmiş bir atı beslemenin de oyuncuya hiçbir faydası yok diye düşünüyorum.
NEDEN & NELERİ DEĞİŞTİRDİK ?
Atın canı maksimum seviyeye ulaştığında beslenmeye reddetmesini ve oyuncunun bir bilgilendirme mesajı almasını sağladık ayrıca ekstra kontroller de ekledik.
NASIL YAPILIR ?
Öncelikle "horse_rider.cpp" dosyası açılır.
Sonrasında "char_item.cpp" dosyası açılır.
Sonrasında "cmd_general.cpp" dosyası açılır.
Sonrasında "questlua_horse.cpp" dosyası açılır.
Son olarak "locale_string.txt" açılarak sonuna eklenir;
Son bir ekleme yapmak gerekiyor, at menüsünü kullanarak yapılan besleme işlemi için bir kontrol daha eklendi, bunun için eklenti olarak konu altında bulabileceğiniz horse_menu.rar dosyasını indirin ve içerisindeki .quest dosyasını questlerinizin içine atıp okutun, işlem tamam.
Merhaba, biliyorsunuz ki oyundaki at sisteminde oyuncu atını sınırsız şekilde arka arkaya besleyebiliyor, bu durum kodlardaki kontroller sebebiyle bir overflow sorunu yaratmayacaktır fakat canı zaten fullenmiş bir atı beslemenin de oyuncuya hiçbir faydası yok diye düşünüyorum.
NEDEN & NELERİ DEĞİŞTİRDİK ?
Atın canı maksimum seviyeye ulaştığında beslenmeye reddetmesini ve oyuncunun bir bilgilendirme mesajı almasını sağladık ayrıca ekstra kontroller de ekledik.
NASIL YAPILIR ?
Öncelikle "horse_rider.cpp" dosyası açılır.
horse_rider.cpp:
// ARA;
void CHorseRider::FeedHorse()
// DEĞİŞTİR;
void CHorseRider::FeedHorse() // DevFix 100
{
unsigned char horselevel = GetHorseLevel(); // DevFix 122
if (horselevel > 0 && GetHorseHealth() >= c_aHorseStat[horselevel].iMaxHealth)
{
return;
}
// Only when the horse is alive. - [Ymir Dev Note]
if (horselevel > 0 && GetHorseHealth() > 0)
{
UpdateHorseHealth (+1);
// Increased the delay for health reduction even when feeding the horse. - [Ymir Dev Note/ipkn] - 24/03/2005
ResetHorseHealthDropTime();
}
}
Sonrasında "char_item.cpp" dosyası açılır.
char_item.cpp:
// ARA;
else if (item->GetVnum() == ITEM_HORSE_FOOD_1)
{
if (IsDead())
{
from->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("죽은 말에게 사료를 먹일 수 없습니다."));
return false;
}
return true;
}
// DEĞİŞTİR;
else if (item->GetVnum() == ITEM_HORSE_FOOD_1)
{
if (IsDead())
{
from->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("죽은 말에게 사료를 먹일 수 없습니다."));
return false;
}
// DevFix 100
unsigned char horselevel = from->GetHorseLevel(); // DevFix 122
if (from->GetHorseHealth() >= c_aHorseStat[horselevel].iMaxHealth)
{
from->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("HORSE_HEALTH_ALREADY_FULL"));
return false;
}
return true;
}
// ARA;
else if (item->GetVnum() == ITEM_HORSE_FOOD_2)
{
if (IsDead())
{
from->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("죽은 말에게 사료를 먹일 수 없습니다."));
return false;
}
return true;
}
// DEĞİŞTİR;
else if (item->GetVnum() == ITEM_HORSE_FOOD_2)
{
if (IsDead())
{
from->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("죽은 말에게 사료를 먹일 수 없습니다."));
return false;
}
// DevFix 100
unsigned char horselevel = from->GetHorseLevel(); // DevFix 122
if (from->GetHorseHealth() >= c_aHorseStat[horselevel].iMaxHealth)
{
from->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("HORSE_HEALTH_ALREADY_FULL"));
return false;
}
return true;
}
// ARA;
else if (item->GetVnum() == ITEM_HORSE_FOOD_3)
{
if (IsDead())
{
from->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("죽은 말에게 사료를 먹일 수 없습니다."));
return false;
}
return true;
}
// DEĞİŞTİR;
else if (item->GetVnum() == ITEM_HORSE_FOOD_3)
{
if (IsDead())
{
from->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("죽은 말에게 사료를 먹일 수 없습니다."));
return false;
}
// DevFix 100
unsigned char horselevel = from->GetHorseLevel(); // DevFix 122
if (from->GetHorseHealth() >= c_aHorseStat[horselevel].iMaxHealth)
{
from->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("HORSE_HEALTH_ALREADY_FULL"));
return false;
}
return true;
}
Sonrasında "cmd_general.cpp" dosyası açılır.
cmd_general.cpp:
// ARA;
ACMD (do_user_horse_feed)
// DEĞİŞTİR;
ACMD (do_user_horse_feed) // DevFix 100
{
// You cannot feed the horse while your private shop is open. - [Ymir Dev Note]
// Also you cannot do this while ch is dead or stun or in observer mode too. - [MT2Dev Note]
if (ch->GetMyShop() || ch->IsStun() || ch->IsDead() || ch->IsObserverMode()) // DevFix 27
{
return;
}
if (ch->GetHorse() == nullptr)
{
if (ch->IsHorseRiding() == false)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("말을 먼저 소환해주세요."));
}
else
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("말을 탄 상태에서는 먹이를 줄 수 없습니다."));
}
return;
}
unsigned char horselevel = ch->GetHorseLevel(); // DevFix 122
if (ch->GetHorseHealth() >= c_aHorseStat[horselevel].iMaxHealth)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("HORSE_HEALTH_ALREADY_FULL"));
return;
}
DWORD dwFood = ch->GetHorseGrade() + 50054 - 1;
if (ch->CountSpecifyItem (dwFood) > 0)
{
ch->FeedHorse();
ch->RemoveSpecifyItem (dwFood, 1);
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("말에게 %s를 주었습니다."), ITEM_MANAGER::instance().GetTable (dwFood)->szLocaleName);
}
else
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("%s 아이템이 필요합니다"), ITEM_MANAGER::instance().GetTable (dwFood)->szLocaleName);
}
}
Sonrasında "questlua_horse.cpp" dosyası açılır.
questlua_horse.cpp:
// ARA;
int horse_feed (lua_State* L)
// DEĞİŞTİR;
int horse_feed (lua_State* L) // DevFix 100
{
LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
if (!ch) // DevFix 111
{
sys_err ("<horse_feed> CH is a NULL pointer!");
return 0;
}
unsigned char horselevel = ch->GetHorseLevel(); // DevFix 122
if (ch->GetHorseHealth() >= c_aHorseStat[horselevel].iMaxHealth)
{
ch->ChatPacket (CHAT_TYPE_INFO, LC_TEXT ("HORSE_HEALTH_ALREADY_FULL"));
return 0;
}
if (ch->GetHorseLevel() > 0 && ch->GetHorseHealth() > 0)
{
ch->FeedHorse();
}
return 0;
}
Son olarak "locale_string.txt" açılarak sonuna eklenir;
Kod:
"HORSE_HEALTH_ALREADY_FULL";
"Atının canı maksimum seviyeye ulaştı, daha fazla besleyemezsin.. ";
Son bir ekleme yapmak gerekiyor, at menüsünü kullanarak yapılan besleme işlemi için bir kontrol daha eklendi, bunun için eklenti olarak konu altında bulabileceğiniz horse_menu.rar dosyasını indirin ve içerisindeki .quest dosyasını questlerinizin içine atıp okutun, işlem tamam.
MT2Dev
Ekli dosyalar
Son düzenleme:
En Çok Reaksiyon Alan Mesajlar
teşekkürler
- Katılım
- 2 Şub 2015
- Konular
- 230
- Mesajlar
- 2,000
- Online süresi
- 3ay 24g
- Reaksiyon Skoru
- 1,027
- Altın Konu
- 0
- Başarım Puanı
- 276
- TM Yaşı
- 11 Yıl 2 Ay 19 Gün
- MmoLira
- 5,466
- DevLira
- 31
teşekkürler
- Katılım
- 26 Ara 2012
- Konular
- 936
- Mesajlar
- 15,645
- Online süresi
- 3ay 29g
- Reaksiyon Skoru
- 2,666
- Altın Konu
- 295
- Başarım Puanı
- 327
- TM Yaşı
- 13 Yıl 3 Ay 27 Gün
- MmoLira
- 499
- DevLira
- 0
paylaşım için teşekkürler
- Katılım
- 30 Ocak 2020
- Konular
- 50
- Mesajlar
- 812
- Online süresi
- 26g 54000s
- Reaksiyon Skoru
- 735
- Altın Konu
- 1
- Başarım Puanı
- 184
- TM Yaşı
- 6 Yıl 2 Ay 21 Gün
- MmoLira
- 8,731
- DevLira
- 123
Ufak bir eksik giderildi, güncel halini kullanabilirsiniz.
Şu an konuyu görüntüleyenler (Toplam : 1, Üye: 0, Misafir: 1)
Benzer konular
- Cevaplar
- 1
- Görüntüleme
- 289
- Cevaplar
- 9
- Görüntüleme
- 784
- Cevaplar
- 18
- Görüntüleme
- 1K
- Cevaplar
- 19
- Görüntüleme
- 3K




