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!
// teleport_command.cpp
#include "char.h"
#include "command.h"
#include "desc.h"
ACMD(do_teleport_to_player)
{
if (!ch)
return;
if (!argument || strlen(argument) < 2) {
ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /git <oyuncu_ismi>");
return;
}
LPCHARACTER target_char = CHARACTER_MANAGER::instance().FindPC(argument);
if (!target_char) {
ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
return;
}
// İzin kontrolleri (örn. PvP bölgesi kontrolü)
if (ch->IsDead() || target_char->IsDead()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Ölü iken ışınlanamazsınız.");
return;
}
if (ch->GetMapIndex() != target_char->GetMapIndex()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Şu an farklı haritalardasınız, ışınlanma yapılamıyor.");
return;
}
// Teleport işlemi
int x = target_char->GetX();
int y = target_char->GetY();
ch->WarpSet(x, y, ch->GetMapIndex());
ch->ChatPacket(CHAT_TYPE_INFO, "%s oyuncusunun yanına ışınlandınız.", target_char->GetName());
}
void RegisterCommands()
{
command_info.insert(std::make_pair("git", do_teleport_to_player));
}
#include <set>
static const std::set<int> allowedTeleportMaps = {
0, // Örnek: a BAYRAK
1, // Örnek: a BAYRAK
2, // Örnek: a BAYRAK
10, // Başka bir harita
// İzin verilen diğer harita indeksleri...
};
inline bool IsTeleportAllowedInMap(int mapIndex) {
return allowedTeleportMaps.find(mapIndex) != allowedTeleportMaps.end();
}
bool CHARACTER::CanTeleport() const {
if (IsDead())
return false;
if (!IsTeleportAllowedInMap(GetMapIndex()))
return false;
if (IsInArena() || IsInBattleZone())
return false;
return true;
}
ACMD(do_teleport_to_player)
{
if (!ch)
return;
if (!argument || strlen(argument) < 2) {
ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /git <oyuncu_ismi>");
return;
}
if (!ch->CanTeleport()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Bu bölgede ışınlanamazsınız.");
return;
}
if (!ch->CanUseTeleport()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Işınlanma komutunu çok sık kullandınız. Lütfen bekleyin.");
return;
}
LPCHARACTER target_char = CHARACTER_MANAGER::instance().FindPC(argument);
if (!target_char) {
ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
return;
}
if (!target_char->CanTeleport()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Hedef oyuncu şu an ışınlanmaya uygun değil.");
return;
}
// Harita izin kontrolü (hedef harita)
if (!IsTeleportAllowedInMap(target_char->GetMapIndex())) {
ch->ChatPacket(CHAT_TYPE_INFO, "Hedef haritada ışınlanma izni yok.");
return;
}
// Işınlanma işlemi
ch->SetTeleporting(true);
int x = target_char->GetX();
int y = target_char->GetY();
int targetMap = target_char->GetMapIndex();
ch->WarpSet(x, y, targetMap);
ch->SetTeleporting(false);
ch->SetLastTeleportTime(get_dword_time());
ch->ChatPacket(CHAT_TYPE_INFO, "%s oyuncusunun yanına ışınlandınız.", target_char->GetName());
}
// character.h
class CHARACTER {
private:
LPCHARACTER m_lpPendingTeleportRequester; // Teleport isteği gönderen oyuncu
bool m_bTeleportRequestPending;
public:
void SetPendingTeleportRequester(LPCHARACTER requester) {
m_lpPendingTeleportRequester = requester;
m_bTeleportRequestPending = true;
}
void ClearPendingTeleportRequester() {
m_lpPendingTeleportRequester = nullptr;
m_bTeleportRequestPending = false;
}
LPCHARACTER GetPendingTeleportRequester() const {
return m_lpPendingTeleportRequester;
}
bool HasTeleportRequestPending() const {
return m_bTeleportRequestPending;
}
};
ACMD(do_teleport_request)
{
if (!ch)
return;
if (!argument || strlen(argument) < 2) {
ch->ChatPacket(CHAT_TYPE_INFO, "Kullanım: /git <oyuncu_ismi>");
return;
}
LPCHARACTER target_char = CHARACTER_MANAGER::instance().FindPC(argument);
if (!target_char) {
ch->ChatPacket(CHAT_TYPE_INFO, "Oyuncu bulunamadı.");
return;
}
if (target_char == ch) {
ch->ChatPacket(CHAT_TYPE_INFO, "Kendinize ışınlanamazsınız.");
return;
}
if (!ch->CanTeleport() || !target_char->CanTeleport()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Şu an ışınlanma işlemi yapılamıyor.");
return;
}
if (target_char->HasTeleportRequestPending()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Hedef oyuncunun bekleyen başka bir isteği var.");
return;
}
// İstek gönder
target_char->SetPendingTeleportRequester(ch);
target_char->ChatPacket(CHAT_TYPE_NOTICE, "%s oyuncusu yanına ışınlanmak istiyor. Kabul etmek için /kabul, reddetmek için /reddet yazınız.", ch->GetName());
ch->ChatPacket(CHAT_TYPE_INFO, "%s oyuncusuna ışınlanma isteği gönderildi.", target_char->GetName());
}
ACMD(do_teleport_accept)
{
if (!ch)
return;
if (!ch->HasTeleportRequestPending()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Hiçbir ışınlanma isteğiniz yok.");
return;
}
LPCHARACTER requester = ch->GetPendingTeleportRequester();
if (!requester || !requester->IsPC()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Geçersiz istek.");
ch->ClearPendingTeleportRequester();
return;
}
if (!requester->CanTeleport() || !ch->CanTeleport()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Şu an ışınlanma işlemi gerçekleştirilemiyor.");
ch->ClearPendingTeleportRequester();
return;
}
// Işınlanma işlemi
int x = ch->GetX();
int y = ch->GetY();
int map = ch->GetMapIndex();
requester->WarpSet(x, y, map);
requester->SetLastTeleportTime(get_dword_time());
requester->ChatPacket(CHAT_TYPE_INFO, "%s oyuncusunun yanına ışınlandınız.", ch->GetName());
ch->ChatPacket(CHAT_TYPE_INFO, "%s oyuncusunu yanına kabul ettiniz.", requester->GetName());
ch->ClearPendingTeleportRequester();
}
ACMD(do_teleport_reject)
{
if (!ch)
return;
if (!ch->HasTeleportRequestPending()) {
ch->ChatPacket(CHAT_TYPE_INFO, "Hiçbir ışınlanma isteğiniz yok.");
return;
}
LPCHARACTER requester = ch->GetPendingTeleportRequester();
if (requester) {
requester->ChatPacket(CHAT_TYPE_INFO, "%s oyuncusu ışınlanma isteğinizi reddetti.", ch->GetName());
}
ch->ChatPacket(CHAT_TYPE_INFO, "Işınlanma isteği reddedildi.");
ch->ClearPendingTeleportRequester();
}
void RegisterCommands()
{
command_info.insert(std::make_pair("git", do_teleport_request));
command_info.insert(std::make_pair("kabul", do_teleport_accept));
command_info.insert(std::make_pair("reddet", do_teleport_reject));
}

