Reklam
// =====================================================
// SUMMON MERCHANT SYSTEM - NPC Çağırma Sistemi
// =====================================================
#define LAST_SUMMON_SUNDRIES_TIME 30000 // 30 saniye cooldown
#define PRIVATE_SUNDIRES_NPC 13007 // Sundries NPC ID
#define LAST_SUMMON_BANKA_TIME 30000 // 30 saniye cooldown
#define PRIVATE_BANKA_NPC 16096 // Banka NPC ID
ULONGLONG m_iLastExchangeTime, m_surallinfotime;
ULONGLONG m_iLastSummonSundriesTime; // +sund cooldown
ULONGLONG m_iLastSummonBankaTime; // +banka cooldown
uint8 m_byWeather;
// Summon Merchant System
bool FarmSundriesStatus;
uint32 FarmSundriesCoins;
bool FarmBankaStatus;
uint32 FarmBankaCoins;
// Summon Merchant System Settings
FarmSundriesCoins = ini.GetInt("USER_SUNDRIES_SUMMON", "SUMMON_COINS", 100000);
FarmSundriesStatus = ini.GetBool("USER_SUNDRIES_SUMMON", "STATUS", true);
FarmBankaCoins = ini.GetInt("USER_BANKA_SUMMON", "SUMMON_COINS", 100000);
FarmBankaStatus = ini.GetBool("USER_BANKA_SUMMON", "STATUS", true);
m_byWeather = ini.GetInt("TIMER", "WEATHER", 1);
// =====================================================
// +sund KOMUTU - Sundries NPC Spawn
// =====================================================
if (chatstr.compare("+sund") == 0)
{
// Sistem aktif mi kontrol et
if (!g_pMain->FarmSundriesStatus)
{
g_pMain->SendYesilNotice(this, "Sundries Summon : Sunucuda Aktif Degildir");
return;
}
// Event room kontrolü
if (GetEventRoom() > 0)
{
g_pMain->SendYesilNotice(this, "Sundries Summon : Burada Summon Merchant Kullanilamaz");
return;
}
// Cooldown kontrolü (GM'ler muaf)
if (UNIXTIME2 - m_iLastSummonSundriesTime < LAST_SUMMON_SUNDRIES_TIME && !isGM())
{
g_pMain->SendYesilNotice(this, "Sundries Summon : Tekrar Sundries Cikarabilmek Icin Bir Sure Beklemelisiniz");
return;
}
// Para kontrolü ve kesme
if (g_pMain->FarmSundriesCoins > 0)
{
if (GetCoins() < uint32(g_pMain->FarmSundriesCoins))
{
g_pMain->SendYesilNotice(this, "Sundries Summon : Sundries Cikarmak Icin Yeterli Paraniz Yok");
return;
}
GoldLose(uint32(g_pMain->FarmSundriesCoins), true);
}
// NPC spawn et
g_pMain->SpawnEventNpc(PRIVATE_SUNDIRES_NPC, false, GetZoneID(),
GetX() + 2.0f, GetY(), GetZ() + 2.0f,
1, 1, 30);
g_pMain->SendYesilNotice(this, "Sundries Summon : Sundries 30 Saniye Sonra Silinecektir");
m_iLastSummonSundriesTime = UNIXTIME2;
return; //*********
}
// =====================================================
// +banka KOMUTU - Banka NPC Spawn
// =====================================================
if (chatstr.compare("+banka") == 0)
{
// Sistem aktif mi kontrol et
if (!g_pMain->FarmBankaStatus)
{
g_pMain->SendYesilNotice(this, "Banka Summon : Sunucuda Aktif Degildir");
return;
}
// Event room kontrolü
if (GetEventRoom() > 0)
{
g_pMain->SendYesilNotice(this, "Banka Summon : Burada Summon Merchant Kullanilamaz");
return;
}
// Cooldown kontrolü (GM'ler muaf)
if (UNIXTIME2 - m_iLastSummonBankaTime < LAST_SUMMON_BANKA_TIME && !isGM())
{
g_pMain->SendYesilNotice(this, "Banka Summon : Tekrar Banka Cikarabilmek Icin Bir Sure Beklemelisiniz");
return;
}
// Para kontrolü ve kesme
if (g_pMain->FarmBankaCoins > 0)
{
if (GetCoins() < uint32(g_pMain->FarmBankaCoins))
{
g_pMain->SendYesilNotice(this, "Banka Summon : Banka Cikarmak Icin Yeterli Paraniz Yok");
return;
}
GoldLose(uint32(g_pMain->FarmBankaCoins), true);//*********
}
// NPC spawn et
g_pMain->SpawnEventNpc(PRIVATE_BANKA_NPC, false, GetZoneID(),
GetX() + 2.0f, GetY(), GetZ() + 2.0f,
1, 1, 30);
g_pMain->SendYesilNotice(this, "Banka Summon : Banka 30 Saniye Sonra Silinecektir");
m_iLastSummonBankaTime = UNIXTIME2;
return;
}
# =====================================================
# SUMMON MERCHANT SYSTEM - NPC Çağırma Sistemi
# =====================================================
[USER_SUNDRIES_SUMMON]//*********
STATUS = 1 ; 1=Aktif, 0=Kapalı
SUMMON_COINS = 100000 ; Spawn maliyeti (coins)
[USER_BANKA_SUMMON]
STATUS = 1 ; 1=Aktif, 0=Kapalı
SUMMON_COINS = 100000 ; Spawn maliyeti (coins)
-- Sundries NPC kontrolü
SELECT * FROM K_NPC WHERE sSid = 13007;
-- Banka NPC kontrolü
SELECT * FROM K_NPC WHERE sSid = 16096;
#define PRIVATE_SUNDIRES_NPC [SIZIN_NPC_ID]
#define PRIVATE_BANKA_NPC [SIZIN_NPC_ID]
| Test | Beklenen Sonuç | ✓ |
| +sund komutu | NPC spawn olur | ☐ |
| 30 saniye bekleme | NPC otomatik silinir | ☐ |
| Cooldown | 30 saniye içinde tekrar kullanılamaz | ☐ |
| Para kesme | Belirlenen miktar kesilir | ☐ |
| Event room | Event room'da kullanılamaz | ☐ |
| GM testi | GM cooldown'dan muaf | ☐ |
#define LAST_SUMMON_SUNDRIES_TIME 60000 // 60 saniye
#define LAST_SUMMON_BANKA_TIME 60000 // 60 saniye
g_pMain->SpawnEventNpc(PRIVATE_SUNDIRES_NPC, false, GetZoneID(),
GetX() + 2.0f, GetY(), GetZ() + 2.0f,
1, 1, 60); // 30 yerine 60 saniye
SUMMON_COINS = 0 ; Ücretsiz
// Define.h
#define PRIVATE_REPAIR_NPC 12345
// ChatHandler.cpp
if (chatstr.compare("+repair") == 0)
{
// Aynı kontroller...
g_pMain->SpawnEventNpc(PRIVATE_REPAIR_NPC, false, GetZoneID(),
GetX() + 2.0f, GetY(), GetZ() + 2.0f,
1, 1, 30);
}
1. Oyuncu +sund yazar
↓
2. ChatHandler.cpp kontrolleri yapar
↓
3. Para kesilir (GoldLose)
↓
4. SpawnEventNpc çağrılır
↓
5. NpcThread::_AddNPC NPC oluşturur
↓
6. NPC m_bIsEventNpc = true olarak işaretlenir
↓
7. m_sDuration = 30 saniye set edilir
↓
8. 30 saniye sonra NPC otomatik silinir