Fethi Polat 1
Fethi Polat
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Best Studio 1
Best Studio
Agora Metin2 1
Agora Metin2
raderde 1
raderde
Cannn6161 1
Cannn6161
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Mt2Hizmet 1
Mt2Hizmet
melankolıa18 1
melankolıa18
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Cevaplanmadı Seçenekli Sandık Questi

Murphy0

Level 2
Üye
Katılım
18 Ağu 2025
Konular
25
Mesajlar
88
Çözüm
8
Online süresi
16d 17h
Reaksiyon Skoru
16
Altın Konu
0
TM Yaşı
9 Ay 20 Gün
Başarım Puanı
43
MmoLira
3,001
DevLira
0
Ticaret - 0%
0   0   0

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!

Merhaba arkadaşlar ben oyuna yeni sandık ekledim. Amacım sandığa sağ tıklayınca direk item vermek yerine kullanıcının seçim yapmasını sağlamak seçtiği itemin envantere gelmesini sağlamaktı. Quest dosyamı başarıyla ./qc yöntemi ile okuttup derledim. Fakat sorun şu, sandıklara sağ tıklayınca herhangi birşey olmuyor. seçim ekranı gelmiyor.

special_item_group.txt dosyama eklediğim sandıkların ilk ikisi

Group item_box_1
{
Vnum 58620
Type Quest
1 43068 1 1
2 43069 1 1
}


Group item_box_2
{
Vnum 58621
Type Quest
1 54034 1 1
2 54035 1 1
3 54072 1 1
4 54087 1 1
5 58032 1 1
6 56020 1 1
}

böyle yukardakine benzer devam ediyor diğer sandıklarda


Sandıkların item_proto.txt deki kısımları (İLK BAŞTA ITEM_GIFTBOX yapmıştım normal sandık gibi itemi direk rastgele verince ITEM_QUEST çevirdim.)

(İtem_names.txt dosyamdaki isimleri okumuyor bu arada test amaçlı Kutucuk ve Kutum diye item_protot.txt ' de adlandırdığım isimleri oyun okuyor. )

58620 Kutucuk ITEM_QUEST 0 1 ANTI_SELL | ANTI_STACK NONE NONE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0

58621 Kutum ITEM_QUEST 0 1 ANTI_SELL | ANTI_STACK NONE NONE NONE 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 0 0 0 0 0 0 0 0

aşağıda quest dosyamı paylaşıyorum birden fazla sandık için kullancağım için hepsi için ayrı ayrı quest yazmak yerine tek quest dosyası belirlenen vnum aralıklardaki sandıkları quest olarak çalıştırsın istedim. quest vnumları special_item_group.txt dosyasından kontrol ediyor. (NOT: SANDIKLAR EKLENMEDEN ÖNCE ÇAKIŞMA OLMAMASI İÇİN VNUMLARI PROTO DOSYASINDAN VE SPECİAL İTEM GROUP DOSYASINDAN KONTROL EDİLDİ

dosya adı : dynamic_select_box.lua

quest dynamic_select_box begin
state start begin
when item.use begin
local vnum = item.get_vnum()

if vnum >= 58620 and vnum <= 58630 then
local group = get_special_item_group(vnum)
if not group then
say(string.format("Sandik #%d icin grup bulunamadi.", vnum))
return
end

local n = table.getn(group)
local options = {}
for i = 1, n do
local item_name = item_index_table.name[group[1]]
options = item_name
end
table.insert(options, "Vazgec")

local choice = select(unpack(options))

if choice == table.getn(options) then
return -- Vazgeç seçilmiş
end

local selected_item = group[choice]
if selected_item then
pc.give_item2(selected_item[1], 1)
item.remove()
end
end
end
end
end
 
Düzeltilmiş quest kodu:
[CODE title="lua"]quest dynamic_select_box begin
state start begin
when item.use begin
local vnum = item.get_vnum()

if vnum >= 58620 and vnum <= 58630 then
local group = get_special_item_group(vnum)
if not group then
say(string.format("Sandik #%d icin grup bulunamadi.", vnum))
return
end

local n = table.getn(group)
local options = {}
for i = 1, n do
local item_vnum = group[1]
table.insert(options, item_name(item_vnum))
end
table.insert(options, "Vazgeç")

local choice = select_table(options)

if choice == table.getn(options) then
return -- Vazgeç
end

local selected_item = group[choice]
if selected_item then
pc.give_item2(selected_item[1], selected_item[2]) -- adet bilgisi için [2]
item.remove()
end
end
end
end
end[/CODE]



Döngüde group[1] yerine group kullanman gerekiyordu
options = item_name yerine table.insert(options, item_name) yapman lazımdı
item_name() fonksiyonunu kullanarak isim çekmelisin, item_index_table ile uğraşmana gerek yok.
 
Yok hocam item_proto.txt te hala use_ıtem olarak duruyor item proto.txt den ıtem ıseyi ıtem_quest olarak değiştirin öyle deneyin
localeye de öyle attım db ye de baktım ıtem quest yazıyor ben de anlamış değilim.
 
Düzeltilmiş quest kodu:
[CODE title="lua"]quest dynamic_select_box begin
state start begin
when item.use begin
local vnum = item.get_vnum()

if vnum >= 58620 and vnum <= 58630 then
local group = get_special_item_group(vnum)
if not group then
say(string.format("Sandik #%d icin grup bulunamadi.", vnum))
return
end

local n = table.getn(group)
local options = {}
for i = 1, n do
local item_vnum = group[1]
table.insert(options, item_name(item_vnum))
end
table.insert(options, "Vazgeç")

local choice = select_table(options)

if choice == table.getn(options) then
return -- Vazgeç
end

local selected_item = group[choice]
if selected_item then
pc.give_item2(selected_item[1], selected_item[2]) -- adet bilgisi için [2]
item.remove()
end
end
end
end
end[/CODE]



Döngüde group[1] yerine group kullanman gerekiyordu
options = item_name yerine table.insert(options, item_name) yapman lazımdı
item_name() fonksiyonunu kullanarak isim çekmelisin, item_index_table ile uğraşmana gerek yok.


hocam derledim sonuç başarılı şimdi oyunda test edicem

QUEST : dynamic_select_chest
STATE : start
WHEN : item.use
 
Sep 24 02:01:52 :: Murphy: USE_ITEM Kutucuk (inven 1, cell: 0)

hala bunu veriyor loglarda ama ıtem_quest nasıl use_ıtem olarak görüyor ki
 
Sen item_proto.txt düzenlemişsin ama tabloya işlenmemiş olabilir.

db tarafındaki item_proto tablosunda type sütunu gerçekten ITEM_QUEST (18) mi?Server bazen txt değil sql okur. Emin misin sql ve txt eşleşiyor?
Kod:
SELECT vnum, name, type FROM item_proto WHERE vnum = 58620;
Eğer type değeri 18 değilse (ITEM_QUEST = 18), quest hiç tetiklenmez.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst