Merhabalar direkt kendim yazdım fakat sorun var. girdiğimde oyuna ctl g yapıyorum binip iniyor direkt olarak sağ tıkladığımda da hiçbir şey olmuyor eksik birşey mi yapıyorum daha öncede konu açmıştım uzun zaman sonra geri döndüm hatırlamıyorum yardımcı olabilecek var mı? deneme için item proto tarafında 71128 yırtıcı aslanı düzenledim model olarak ta 20107 at modelini ekledim ki belki görünümde sıkıntı vardır diye
item proto tarafı: 71128 Èæ»çÀÚÀÌ¿ë±Ç ITEM_QUEST 0 1 ITEM_CAN_USE QUEST_USE_MULTIPLE | LOG 0 0 0 0 0 0 LEVEL 20 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 20107 28800 0 0 0 0 0 0 0 0
bu lua tarafı:
buda c++ game source tarafı için
item proto tarafı: 71128 Èæ»çÀÚÀÌ¿ë±Ç ITEM_QUEST 0 1 ITEM_CAN_USE QUEST_USE_MULTIPLE | LOG 0 0 0 0 0 0 LEVEL 20 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 20107 28800 0 0 0 0 0 0 0 0
bu lua tarafı:
lua:
quest universal_mount begin
state start begin
-- VNUM: 71128 ve diğerleri
when 71128.use or 52045.use or 71164.use begin
-- 1 Saniye Spam Engeli
if pc.getqf("mount_limit") > get_time() then
syschat("Lütfen 1 saniye bekleyin.")
return
end
pc.setqf("mount_limit", get_time() + 1)
-- Dönüşüm Kontrolü
if pc.is_polymorphed() then
syschat("Dönüşmüş haldeyken binemezsin.")
return
end
-- Eğer her şey tamamsa C++ komutunu tetikle
pc.ride()
end
end
end
buda c++ game source tarafı için
game source c++:
ACMD(do_ride)
{
if (ch->IsObserverMode() || ch->IsDead() || ch->IsStun())
return;
// 1. Durum: Zaten binekteyse veya ata binmişse indir
if (ch->GetMountVnum() > 0 || ch->IsHorseRiding())
{
if (ch->IsHorseRiding())
ch->StopRiding(); // Atı durdur
if (ch->GetMountVnum() > 0)
do_unmount(ch, NULL, 0, 0); // Bineği indir (Hata veren yer burasıydı, düzelttik)
ch->RemoveAffect(AFFECT_MOUNT); // Binek etkisini temizle
return;
}
// 2. Durum: Dönüşüm Kontrolü (Güvenlik)
if (ch->IsPolymorphed())
{
ch->ChatPacket(CHAT_TYPE_INFO, "Dönüşmüş haldeyken binemezsin.");
return;
}
// 3. Durum: Envanter Taraması
for (int i = 0; i < INVENTORY_MAX_NUM; ++i)
{
LPITEM item = ch->GetInventoryItem(i);
// ITEM_QUEST (18) ve Value0'da mob kodu olanı bul
if (item && item->GetType() == 18 && item->GetValue(0) > 100)
{
DWORD mountVnum = item->GetValue(0);
DWORD mountTime = item->GetValue(1) * 60;
// BİNİŞ FİX: Sadece MountVnum yetmez, Affect (Etki) ekliyoruz
ch->RemoveAffect(AFFECT_MOUNT);
ch->MountVnum(mountVnum);
// Bu satır karakterin binekte kalmasını sağlar (Bin-İn hatasını çözer)
ch->AddAffect(AFFECT_MOUNT, POINT_MOUNT, mountVnum, AFF_NONE, mountTime, 0, true);
ch->ChatPacket(CHAT_TYPE_INFO, "[Sistem] Bineğe binildi.");
return;
}
}
// 4. Durum: At Kontrolü
if (ch->GetHorseLevel() > 0)
{
if (!ch->IsHorseRiding())
ch->StartRiding();
}
}