- Mesaj
- 179
- Çözümler
- 8
- Beğeni
- 199
- Puan
- 759
- Ticaret Puanı
- 0
Bir Önceki Konumuzda, Eğer Oyuncu Bineğin Kullanımına Yasaklı Olduğu Haritaya Girerse Binek İtemini Slottan Çıkarıyorduk. Fakat Tekrar Giyebilirdik Çünkü Bunun İçin Bir Kontrol Eklememiştik. Neden? Çünkü Sadece O Şekilde Çalışması Prensibiyle Paylaşmıştım.
Bu Versiyon'da, Önceki Versiyon Mantığı ve Extradan Haritaya Giriş Yapıldığında Binek veya Ata Binmeyi Engelledik.
ServerSource/Game/Char_Horse.cpp Aç ve Arat:
Altına Ekle:
Tekrar Arat:
Altına Ekle:
ServerSource/Game/Char_Item.cpp Aç ve Arat:
Altına Ekle:
Tekar Arat:
Altına Ekle:
ServerSource/Game/Char.cpp Aç ve En Alta Ekle:
ServerSource/Game/Char.h Aç ve Arat:
Üstüne Ekle:
ServerSource/Common/Lenght.h Ekle:
Dosyayı İndirmek İstemeyenler İçin:
UnMount_Map.cpp
UnMount_Map.h
Bilgi:
Kod Bloğu Etiket Başlıklarında Hangi Dosya'da Arama veya Ekleme Yapılacağı Eklenmiştir.
Dikkat Edilmesi Gerekenler:
1: Kullanmıyorsanız Silin:
Bu Versiyon'da, Önceki Versiyon Mantığı ve Extradan Haritaya Giriş Yapıldığında Binek veya Ata Binmeyi Engelledik.
ServerSource/Game/Char_Horse.cpp Aç ve Arat:
bool CHARACTER::StartRiding() İçinde:
if (IsDead() == true)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¾²·¯Áø »óÅ¿¡¼´Â ¸»¿¡ Å» ¼ö ¾ø½À´Ï´Ù."));
return false;
}
if (IsPolymorphed())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("º¯½Å »óÅ¿¡¼´Â ¸»¿¡ Å» ¼ö ¾ø½À´Ï´Ù."));
return false;
}
Altına Ekle:
Kod:
#if defined(__ENABLE_CHECK_MOUNT__)
if (!CUnMount::IsUnMountMap(GetMapIndex()))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use your mount or horse here."));
return false;
}
#endif
Tekrar Arat:
void CHARACTER::HorseSummon(bool bSummon, bool bFromFar İçinde:
if( m_chHorse != NULL )
return;
if (GetHorseLevel() <= 0)
return;
if (IsRiding())
return;
Altına Ekle:
C++:
#if defined(__ENABLE_CHECK_MOUNT__)
if (!CUnMount::IsUnMountMap(GetMapIndex()))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use your mount or horse here."));
return;
}
#endif
ServerSource/Game/Char_Item.cpp Aç ve Arat:
bool CHARACTER::EquipItem(LPITEM item, int iCandidateCell) İçinde:
if (iWearCell == WEAR_BODY && IsRiding() && (item->GetVnum() >= 11901 && item->GetVnum() <= 11904))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¸»À» ź »óÅ¿¡¼ ¿¹º¹À» ÀÔÀ» ¼ö ¾ø½À´Ï´Ù."));
return false;
}
if (iWearCell != WEAR_ARROW && IsPolymorphed())
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("µĞ°© Áß¿¡´Â Âø¿ëÁßÀÎ Àåºñ¸¦ º¯°æÇÒ ¼ö ¾ø½À´Ï´Ù."));
return false;
}
if (FN_check_item_sex(this, item) == false)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼ºº°ÀÌ ¸ÂÁö¾Ê¾Æ ÀÌ ¾ÆÀÌÅÛÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù."));
return false;
}
Altına Ekle:
C++:
#if defined(__ENABLE_CHECK_MOUNT__)
if (!CUnMount::IsUnMountMap(GetMapIndex()))
{
if (item->GetType() == ITEM_COSTUME && item->GetSubType() == ECostumeSubTypes::COSTUME_MOUNT)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use your mount or horse here."));
return false;
}
}
#endif
Tekar Arat:
bool CHARACTER::UseItem(TItemPos Cell, TItemPos DestCell) İçinde:
if (!item->CanUsedBy(this))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("±ºÁ÷ÀÌ ¸ÂÁö¾Ê¾Æ ÀÌ ¾ÆÀÌÅÛÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù."));
return false;
}
if (IsStun())
return false;
if (false == FN_check_item_sex(this, item))
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("¼ºº°ÀÌ ¸ÂÁö¾Ê¾Æ ÀÌ ¾ÆÀÌÅÛÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù."));
return false;
}
Altına Ekle:
C++:
#if defined(ENABLE_MOUNT_COSTUME_SYSTEM) && defined(__ENABLE_CHECK_MOUNT__)
if (!CUnMount::IsUnMountMap(GetMapIndex()))
{
if (item->GetType() == ITEM_COSTUME && item->GetSubType() == ECostumeSubTypes::COSTUME_MOUNT)
{
ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You cannot use your mount or horse here."));
return false;
}
}
#endif
ServerSource/Game/Char.cpp Aç ve En Alta Ekle:
C++:
#if defined(__ENABLE_CHECK_MOUNT__)
void CHARACTER::UnMount(LPCHARACTER ch)
{
if (!ch)
return;
const uint32_t mapIndex = ch->GetMapIndex();
if (!CUnMount::IsUnMountMap(mapIndex))
{
if (ch->IsHorseRiding())
{
ch->StopRiding();
ch->HorseSummon(false);
}
ch->RemoveAffect(AFFECT_MOUNT);
ch->RemoveAffect(AFFECT_MOUNT_BONUS);
#ifdef ENABLE_MOUNT_COSTUME_SYSTEM
auto* cMount = ch->GetWear(WEAR_COSTUME_MOUNT);
if (cMount && cMount->IsEquipped())
{
ch->UnequipItem(cMount);
}
#endif
}
}
#endif
ServerSource/Game/Char.h Aç ve Arat:
C++:
};
ESex GET_SEX(LPCHARACTER ch);
#endif
Üstüne Ekle:
C++:
#if defined(__ENABLE_CHECK_MOUNT__)
public:
void UnMount(LPCHARACTER ch);
#endif
ServerSource/Common/Lenght.h Ekle:
C++:
enum MapTypes
{
MAP_OX_EVENT = 113, // map_ox_event
MAP_PVP_ARENA = 90, // metin2_map_pvp_arena
};
Dosyayı İndirmek İstemeyenler İçin:
UnMount_Map.cpp
C++:
#include "stdafx.h"
#if defined(__ENABLE_CHECK_MOUNT__)
# include "unmount_map.h"
# include "../../common/length.h"
bool CUnMount::IsUnMountMap(uint32_t mapIndex)
{
if (mapIndex >= 10000)
{
mapIndex /= 10000;
}
switch (mapIndex)
{
/* Dungeon Map */
/*
case 355:
case 356:
*/
/* Normal Map */
case MapTypes::MAP_OX_EVENT:
case MapTypes::MAP_PVP_ARENA:
return false;
default:
return true;
}
}
#endif
UnMount_Map.h
C++:
#pragma once
#include "../../common/CommonDefines.h"
#if defined(__ENABLE_CHECK_MOUNT__)
class CUnMount
{
public:
static bool IsUnMountMap(uint32_t mapIndex);
};
#endif
Bilgi:
Kod Bloğu Etiket Başlıklarında Hangi Dosya'da Arama veya Ekleme Yapılacağı Eklenmiştir.
Dikkat Edilmesi Gerekenler:
1: Kullanmıyorsanız Silin:
void CHARACTER::UnMount(LPCHARACTER ch) İçerisinde:
ch->RemoveAffect(AFFECT_MOUNT);
ch->RemoveAffect(AFFECT_MOUNT_BONUS);
Dosyayı Aşağıdaki Ekten İndirebilirsiniz.
Kanıt:
Kanıt:
Dosya Eklentileri
Son düzenleme: