quest ross_new_crystal_dungeon begin
state start begin
function setting()
return
{
["base"]={["x"] = 3072 , ["y"]= 12032 ,},
["floor1_s"] = { ["x"] = 20, ["y"] = 20, },
["floor1_e"] = { ["x"] = 500, ["y"] = 470,},
["floor2_s"] = { ["x"] = 510, ["y"] = 18, },
["floor2_e"] = { ["x"] = 978, ["y"] = 470,},
["floor1_entry"] = {["x"] = 73, ["y"] = 63,},
["floor2_entry"] = {["x"] = 550, ["y"] = 45,},
["floor3_entry"] = {["x"] = 1378, ["y"] = 249,},
["floor4_entry"] = {["x"] = 70, ["y"] = 592,},
["floor5_entry"] = {["x"] = 846, ["y"] = 898},
["floor6_entry"] = {["x"] = 1362, ["y"] = 666}...
Dediğim şekilde yapabilirsen evet gider. Ama bunu özelleştirmek gerekir. Her level oyuncuya bu mesajın gönderilmesi saçma olur mesela. Ya da belki oyuncu bu mesajı görmek istemeyebilir. gibi gibi faktörleri de ele alarak düzenleme yapmak gerekebilir.Valla bu kadarını yapabilseydim konu açmayabilirdim İllaki quest'e yazıcam diye birşey yok c++ üzerinden de halledilir fakat istediğim şekilde her oyuncuya özel olarak süresi dolunca gidermi mesaj?
Oyun ayarlarına bildirim almak istiyormusun felan diye seçenek konması en iyisi olurDediğim şekilde yapabilirsen evet gider. Ama bunu özelleştirmek gerekir. Her level oyuncuya bu mesajın gönderilmesi saçma olur mesela. Ya da belki oyuncu bu mesajı görmek istemeyebilir. gibi gibi faktörleri de ele alarak düzenleme yapmak gerekebilir.
Attığım questi eski bir filesde denemiştim.Mesaj göndermek için kullanılan tanımlar eklenmiş queste her fileste çalışacağını sanmıyorum. Bu quest senin serverinde sorunsuz bir şekilde çalışıyorsa bu questi düzenleyerek her bossa uyarlayabilirsin.
wslik bir yapı olduğu için levelin pek anlamı kalmıyor.. Toplamda 5 boss var zaten dungeon info olmamasından kaynaklı insanlar ws yada görünüş için başka bir yerde farm yaparken sürekli boss bekçisinin yanına gidip sürem doldumu diye bakması onları zorlaştırır. Kimse ben bu mesajı görmek istemiyorum demez zaten boss dönücek kişiler görünüşe düşkün her boss geldiğinde gireyim kafasına girdikleri için pek sıkıntı yaratacağını düşünmüyorum.. Kısa yoldan nasıl yapılır hakkında yardımcı olabilicek varmı.. Pek bilgim yok gibi duruyorumDediğim şekilde yapabilirsen evet gider. Ama bunu özelleştirmek gerekir. Her level oyuncuya bu mesajın gönderilmesi saçma olur mesela. Ya da belki oyuncu bu mesajı görmek istemeyebilir. gibi gibi faktörleri de ele alarak düzenleme yapmak gerekebilir.
Yok diye biliyorum 55 games sunucularında vardı fakat paylaşılmadığı için oda yok sayılır..Bu questi kullanan bir files bulup bazı kodları ordan alman gerek.
Geri sayım mevcut bossa girdiktikten örneğin 5saat bir süre var ise 1 saat sonra denediğimde kalan süre 3 saat 59dk 15 saniye gibi gösteriyor.. Sizin attığınızı benim questlerim uyarlayabilirmiyiz acaba?Bildiğim şekliyle anlatmaya çalıştım umarım yardımcı olur,
Linkleri görebilmek için giriş yap veya kayıt ol.
yanlışım varsa düzeltirseniz sevinirim.
quest ross_new_crystal_dungeon begin
state start begin
function setting()
return
{
["base"]={["x"] = 3072 , ["y"]= 12032 ,},
["floor1_s"] = { ["x"] = 20, ["y"] = 20, },
["floor1_e"] = { ["x"] = 500, ["y"] = 470,},
["floor2_s"] = { ["x"] = 510, ["y"] = 18, },
["floor2_e"] = { ["x"] = 978, ["y"] = 470,},
["floor1_entry"] = {["x"] = 73, ["y"] = 63,},
["floor2_entry"] = {["x"] = 550, ["y"] = 45,},
["floor3_entry"] = {["x"] = 1378, ["y"] = 249,},
["floor4_entry"] = {["x"] = 70, ["y"] = 592,},
["floor5_entry"] = {["x"] = 846, ["y"] = 898},
["floor6_entry"] = {["x"] = 1362, ["y"] = 666},
["water_entry"] = {["x"] = 73, ["y"] = 1156},
["map_idx"] = 501,
["rag"] = 30311,
["devil_king"] = 2591,
["reapers_credit1"] = 31324,
["reapers_credit2"] = 30320,
["reapers_credit3"] = 76002,
["reapers_credit4"] = 79001,
["floor3_stone"] = 8038,
["floor3_stone_pos"] = {
{1366, 150},
{1366, 351},
{1234, 365},
{1234, 140},
{1150, 135},
{1130, 365},
{1135, 253}
},
["mob_regen_file_path"] = "data/dungeon/devilwater/",
["floor4_regen_file"] = {"devilwater_floor4_regen1.txt",
"devilwater_floor4_regen2.txt",
"devilwater_floor4_regen3.txt",
"devilwater_floor4_regen4.txt",
"devilwater_floor4_regen5.txt"} ,
["credit_stone"] = 30101,
["credit_stone_pos"] = {307,323},
["floor2_stone"] = 30103,
["floor2_stone_pos"] = {741,217},
["floor2_merchant_npc"] = 20368,
["floor2_merchant_npc_pos"] = {734,214},
["floor4_npc"] = 30104,
["floor4_npc_pos"] = {75, 592},
["devil_king_pos"] = {{673,829},{691,638},{848,568},{1026,642},{1008,862}},
["unlock_stone"] = 30312,
["floor5_stone"] = 30102,
["floor5_stone_pos"] = {848, 735},
["devil_great_king"] = 2597 ,
["devil_great_king_pos"] = {1303,704},
["devil_emperor"] = 3964,
["devil_emperor_pos"] = {74,1103},
["dc2_door_set_size"] = {4,2,3,2},
["dc2_door_set1"] = {
{{30111, 566, 117, 5},{30112, 562, 311, 5,},{30118, 663, 434, 7},{30119, 881, 434, 7}},
{{30116, 743, 390, 3},{30119, 612, 251, 1,}},
{{30113, 654, 211, 5},{30111, 707, 338, 7,},{30112, 775, 336, 7}},
{{30117, 733, 294, 3},{30113, 694, 271, 1,}}
},
["dc2_door_set2"] = {
{{30115, 942, 141, 5},{30116, 942, 245, 5},{30117, 942, 321, 5},{30115, 763, 64, 7}},
{{30118, 643, 116, 3},{30114, 900, 167, 1}},
{{30114, 850, 293, 5},{30113, 715, 164, 7},{30114, 817, 162, 7}},
{{30111, 802, 277, 1},{30112, 800, 241, 1}}
},
}
end
when logout begin
local idx = 356
local map = pc.get_map_index()
if map >= (idx * 10000) and map < (idx * 10000 + 9000) then
pc.setf("crystal","crystal_last_login",get_global_time() + 60*60*2)
end
end
when 20061.chat."< Ross > Crystal Boss" begin
local setting = ross_new_crystal_dungeon.setting()
if pc.level < 249 or pc.level > 300 then
addimage(35,35,'deneme31.tga')
say_title(mob_name(20061))
say("")
say("")
say("")
say("")
say("")
say("Seviyen giriş gereksinimlerini karşılamıyor. ")
say("Gereksinimler:")
say(string.format("Minimum Seviye: %d.",249))
say(string.format("Maksimum Seviye: %d.",300))
say("")
return
end
if pc.count_item(70254) < 1 then
addimage(35,35,'deneme31.tga')
say_title(mob_name(20061))
say("")
say("")
say("")
say("")
say("")
say_item_vnum(70254)
say("Gerekli esya olmadan giris yapamazsin.")
return
end
if party.is_party() then
addimage(35,35,'deneme31.tga')
say_title(mob_name(20061))
say("")
say("")
say("")
say("")
say("")
say("Grubun varken giris yapamazsin.")
return
end
if pc.getf("crystal","crystal_last_login") > get_time() then
say_npc()
say("")
say("Henüz odaya giremezsin.")
say("Bekleme süren dolunca tekrar gel.")
say("")
say_reward("Kalan Süre : "..LIB_duration(pc.getf("crystal","crystal_last_login")-get_time()))
return
end
say_title(" Bekci:")
say("")
say("")
say("")
say("Giriş Yapmaya Hazırmısın Dosd? ")
say("")
say_title("< Ross Bilgilendirme > Sana önerim skill kullan ! ")
say("")
say("")
local s = select("Evet !!", "Hayır")
if s == 1 then
pc.remove_item(70254,1)
timer("ross_crystal_sologiris",2)
else
return
end
end
when ross_crystal_sologiris.timer begin
d.new_jump(356, 21765 * 100, 30187 * 100)
d.spawn_mob_dir(2601,774,693,1)
--d.set_regen_file("data/dungeon/water_dungeon_regens/boss.txt")
--d.jump_all (setting.water_entry.x + setting.base.x, setting.water_entry.y + setting.base.y )
--water.Temizle()
server_timer("ross_crystal_timeup",60*60*1,d.get_map_index())
end
-- 6Ãş°ú ¸¶Âù°¡Áö·Î »ç¸¶ÈÖ(3964)ÀÌ Á×À¸¸é
-- 7ÃşÀÇ Å¸À̸Ӱ¡ ÀÛµ¿ÇÑ´Ù.
when kill with npc.get_race() == 2601 begin
d.notice("< Ross Bilgilendirme > Özel Crystal Bossunu Öldürdün TEBRIKLER ! Haritada Kalan Süre > 1 Dakika ! ")
d.clear_regen()
d.kill_all()
server_timer ("ross_crystal_eli_check_timer_1", 5, d.get_map_index())
end
-- 7ÃşÀÇ Å¸À̸Ӵ 6Ãş ŸÀÌ¸Ó¿Í ºñ½ÁÇϸç,
-- ¸ó½ºÅÍ ¼ıÀÚ°¡ 0À̸é exit ŸÀ̸Ӹ¦ ¹ß»ı½ÃŲ´Ù.
-- ¹Ù·Î exitÇÏÁö ¾Ê´Â ÀÌÀ¯´Â, À¯Àúµé¿¡°Ô ÁغñÇÒ ½Ã°£À» ÁÖ±â À§ÇؼÀÌ´Ù.
when ross_crystal_eli_check_timer_1.server_timer begin
if d.select(get_server_timer_arg()) then
d.set_warp_location (306, 1687, 6113)
--say_in_map(get_server_timer_arg(),"Azrail yenildi. ?ytan Katakombu'na nihayet[ENTER]huzur hakim. ?mdi yer y??e ış?lanacaks?. ")
server_timer ("ross_crystal_eli_check_timer_2", 5, get_server_timer_arg())
end
end
when ross_crystal_eli_check_timer_2.server_timer begin
if d.select(get_server_timer_arg()) then
d.set_warp_location (306, 1687, 6113)
--say_in_map(get_server_timer_arg(),"Azrail yenildi. ?ytan Katakombu'na nihayet[ENTER]huzur hakim. ?mdi yer y??e ış?lanacaks?. ")
server_timer("ross_crystal_exit_timer", 30, get_server_timer_arg())
else
server_timer ("ross_crystal_eli_check_timer_1", 5, get_server_timer_arg())
end
end
when ross_crystal_timeup.server_timer begin
if d.select(get_server_timer_arg()) then
d.notice("Zaman doldu.")
d.setf("sure_doldu",1)
d.exit_all()
end
end
when ross_crystal_exit_timer.server_timer begin
if d.select(get_server_timer_arg()) then
clear_server_timer("ross_crystal_eli_check_timer_1", get_server_timer_arg())
clear_server_timer("ross_crystal_eli_check_timer_2", get_server_timer_arg())
clear_server_timer("ross_crystal_sologiris", get_server_timer_arg())
d.clear_regen()
d.exit_all()
end
end
end --state
end --quest
Arkadaşımın verdiği fikir ile kaba taslak bir denedim ama bu şekilde kullanılmaz ve sadece tek zindan için.
Stabil hale getirdiğimde paylaşabilirim.
Linkleri görebilmek için giriş yap veya kayıt ol.
npc kodu yazılcak dediğim kısma hangi npcden giriyosan zindana o zindana girmek için kullandığın npc kodunu yaz ardından okutup questi bi dene
denedim fakat olmadı sanırsam :/Linkleri görebilmek için giriş yap veya kayıt ol.
npc kodu yazılcak dediğim kısma hangi npcden giriyosan zindana o zindana girmek için kullandığın npc kodunu yaz ardından okutup questi bi dene
quest ross_new_crystal_dungeon begin
state start begin
function setting()
return
{
["base"]={["x"] = 3072 , ["y"]= 12032 ,},
["floor1_s"] = { ["x"] = 20, ["y"] = 20, },
["floor1_e"] = { ["x"] = 500, ["y"] = 470,},
["floor2_s"] = { ["x"] = 510, ["y"] = 18, },
["floor2_e"] = { ["x"] = 978, ["y"] = 470,},
["floor1_entry"] = {["x"] = 73, ["y"] = 63,},
["floor2_entry"] = {["x"] = 550, ["y"] = 45,},
["floor3_entry"] = {["x"] = 1378, ["y"] = 249,},
["floor4_entry"] = {["x"] = 70, ["y"] = 592,},
["floor5_entry"] = {["x"] = 846, ["y"] = 898},
["floor6_entry"] = {["x"] = 1362, ["y"] = 666},
["water_entry"] = {["x"] = 73, ["y"] = 1156},
["map_idx"] = 501,
["rag"] = 30311,
["remain_time"] = 60*60*2,
["devil_king"] = 2591,
["reapers_credit1"] = 31324,
["reapers_credit2"] = 30320,
["reapers_credit3"] = 76002,
["reapers_credit4"] = 79001,
["floor3_stone"] = 8038,
["floor3_stone_pos"] = {
{1366, 150},
{1366, 351},
{1234, 365},
{1234, 140},
{1150, 135},
{1130, 365},
{1135, 253}
},
["mob_regen_file_path"] = "data/dungeon/devilwater/",
["floor4_regen_file"] = {"devilwater_floor4_regen1.txt",
"devilwater_floor4_regen2.txt",
"devilwater_floor4_regen3.txt",
"devilwater_floor4_regen4.txt",
"devilwater_floor4_regen5.txt"} ,
["credit_stone"] = 30101,
["credit_stone_pos"] = {307,323},
["floor2_stone"] = 30103,
["floor2_stone_pos"] = {741,217},
["floor2_merchant_npc"] = 20368,
["floor2_merchant_npc_pos"] = {734,214},
["floor4_npc"] = 30104,
["floor4_npc_pos"] = {75, 592},
["devil_king_pos"] = {{673,829},{691,638},{848,568},{1026,642},{1008,862}},
["unlock_stone"] = 30312,
["floor5_stone"] = 30102,
["floor5_stone_pos"] = {848, 735},
["devil_great_king"] = 2597 ,
["devil_great_king_pos"] = {1303,704},
["devil_emperor"] = 3964,
["devil_emperor_pos"] = {74,1103},
["dc2_door_set_size"] = {4,2,3,2},
["dc2_door_set1"] = {
{{30111, 566, 117, 5},{30112, 562, 311, 5,},{30118, 663, 434, 7},{30119, 881, 434, 7}},
{{30116, 743, 390, 3},{30119, 612, 251, 1,}},
{{30113, 654, 211, 5},{30111, 707, 338, 7,},{30112, 775, 336, 7}},
{{30117, 733, 294, 3},{30113, 694, 271, 1,}}
},
["dc2_door_set2"] = {
{{30115, 942, 141, 5},{30116, 942, 245, 5},{30117, 942, 321, 5},{30115, 763, 64, 7}},
{{30118, 643, 116, 3},{30114, 900, 167, 1}},
{{30114, 850, 293, 5},{30113, 715, 164, 7},{30114, 817, 162, 7}},
{{30111, 802, 277, 1},{30112, 800, 241, 1}}
},
}
end
function sendRemainWhisper()-- Whisper fonksiyonu tanimlandi.
local set = ross_new_crystal_dungeon.setting()
local rem = (set.remain_time+pc.getqf("crystal_soguma_suresi"))-get_global_time()
if rem > 0 then timer("Whisper_Crystal", rem) end -- V4
end
---when logout begin
---local idx = 356
---local map = pc.get_map_index()
---if map >= (idx * 10000) and map < (idx * 10000 + 9000) then
---pc.setf("crystal","crystal_last_login",get_global_time() + 60*60*2)
---end
---end
when Whisper_Crystal.timer begin -- V4
send_whisper(pc.get_player_id(), "[Zindan Bilgilendirme]", "Crystal Zindan'daki bekleme süreniz dolmuştur, tekrar giriş yapabilirsiniz.")
end
when 20061.chat."< Ross > Crystal Boss" begin
local setting = ross_new_crystal_dungeon.setting()
if pc.level < 249 or pc.level > 300 then
addimage(35,35,'deneme31.tga')
say_title(mob_name(20061))
say("")
say("")
say("")
say("")
say("")
say("Seviyen giriş gereksinimlerini karşılamıyor. ")
say("Gereksinimler:")
say(string.format("Minimum Seviye: %d.",249))
say(string.format("Maksimum Seviye: %d.",300))
say("")
return
end
if pc.count_item(70254) < 1 then
addimage(35,35,'deneme31.tga')
say_title(mob_name(20061))
say("")
say("")
say("")
say("")
say("")
say_item_vnum(70254)
say("Gerekli esya olmadan giris yapamazsin.")
return
end
if party.is_party() then
addimage(35,35,'deneme31.tga')
say_title(mob_name(20061))
say("")
say("")
say("")
say("")
say("")
say("Grubun varken giris yapamazsin.")
return
end
local remainTime = pc.getqf("crystal_soguma_suresi")+set.remain_time-get_global_time()
if remainTime>0 then
say_npc()
say("")
say("Henüz odaya giremezsin.")
say("Bekleme süren dolunca tekrar gel.")
say("")
say_reward("Tekrar oda açman için kalan bekleme süren: "..LIB_duration(remainTime))
return
end
say_title(" Bekci:")
say("")
say("")
say("")
say("Giriş Yapmaya Hazırmısın Dosd? ")
say("")
say_title("< Ross Bilgilendirme > Sana önerim skill kullan ! ")
say("")
say("")
local s = select("Evet !!", "Hayır")
if s == 1 then
pc.remove_item(70254,1)
timer("ross_crystal_sologiris",2)
else
return
end
end
when ross_crystal_sologiris.timer begin
d.new_jump(356, 21765 * 100, 30187 * 100)
d.spawn_mob_dir(2601,774,693,1)
--d.set_regen_file("data/dungeon/water_dungeon_regens/boss.txt")
--d.jump_all (setting.water_entry.x + setting.base.x, setting.water_entry.y + setting.base.y )
--water.Temizle()
pc.setqf("crystal_soguma_suresi", get_global_time())--Soguma suresi tanimlandi.
server_timer("ross_crystal_timeup",60*60*1,d.get_map_index())
end
-- 6Ãş°ú ¸¶Âù°¡Áö·Î »ç¸¶ÈÖ(3964)ÀÌ Á×À¸¸é
-- 7ÃşÀÇ Å¸À̸Ӱ¡ ÀÛµ¿ÇÑ´Ù.
when kill with npc.get_race() == 2601 begin
d.notice("< Ross Bilgilendirme > Özel Crystal Bossunu Öldürdün TEBRIKLER ! Haritada Kalan Süre > 1 Dakika ! ")
d.clear_regen()
d.kill_all()
server_timer ("ross_crystal_eli_check_timer_1", 5, d.get_map_index())
end
-- 7ÃşÀÇ Å¸À̸Ӵ 6Ãş ŸÀÌ¸Ó¿Í ºñ½ÁÇϸç,
-- ¸ó½ºÅÍ ¼ıÀÚ°¡ 0À̸é exit ŸÀ̸Ӹ¦ ¹ß»ı½ÃŲ´Ù.
-- ¹Ù·Î exitÇÏÁö ¾Ê´Â ÀÌÀ¯´Â, À¯Àúµé¿¡°Ô ÁغñÇÒ ½Ã°£À» ÁÖ±â À§ÇؼÀÌ´Ù.
when ross_crystal_eli_check_timer_1.server_timer begin
if d.select(get_server_timer_arg()) then
d.set_warp_location (306, 1687, 6113)
--say_in_map(get_server_timer_arg(),"Azrail yenildi. ?ytan Katakombu'na nihayet[ENTER]huzur hakim. ?mdi yer y??e ış?lanacaks?. ")
server_timer ("ross_crystal_eli_check_timer_2", 5, get_server_timer_arg())
end
end
when ross_crystal_eli_check_timer_2.server_timer begin
if d.select(get_server_timer_arg()) then
d.set_warp_location (306, 1687, 6113)
--say_in_map(get_server_timer_arg(),"Azrail yenildi. ?ytan Katakombu'na nihayet[ENTER]huzur hakim. ?mdi yer y??e ış?lanacaks?. ")
server_timer("ross_crystal_exit_timer", 30, get_server_timer_arg())
else
server_timer ("ross_crystal_eli_check_timer_1", 5, get_server_timer_arg())
end
end
when ross_crystal_timeup.server_timer begin
if d.select(get_server_timer_arg()) then
d.notice("Zaman doldu.")
d.setf("sure_doldu",1)
d.exit_all()
end
end
when ross_crystal_exit_timer.server_timer begin
if d.select(get_server_timer_arg()) then
clear_server_timer("ross_crystal_eli_check_timer_1", get_server_timer_arg())
clear_server_timer("ross_crystal_eli_check_timer_2", get_server_timer_arg())
clear_server_timer("ross_crystal_sologiris", get_server_timer_arg())
d.clear_regen()
d.exit_all()
end
end
end --state
end --quest
["remain_time"]
void RegisterGlobalFunctionTable(lua_State* L)
int _send_whisper(lua_State* L)
{
// pid - title - text
if (!lua_isnumber(L, 1) || !lua_isstring(L, 2) || !lua_isstring(L, 3))
{
sys_err("wrong argument _send_whisper");
lua_pushboolean(L, 0);
return 1;
}
LPCHARACTER findPC = CHARACTER_MANAGER::instance().FindByPID(lua_tonumber(L, 1));
if (!findPC)
{
lua_pushboolean(L, 0);
return 1;
}
else
{
std::string title = lua_tostring(L, 2);
std::string text = lua_tostring(L, 3);
char msg[CHAT_MAX_LEN + 1];
snprintf(msg, sizeof(msg), text.c_str());
LPDESC pkVictimDesc = findPC->GetDesc();
if (!pkVictimDesc)
{
lua_pushboolean(L, 0);
return 1;
}
else
{
TPacketGCWhisper pack;
int len = MIN(CHAT_MAX_LEN, strlen(msg) + 1);
pack.bHeader = HEADER_GC_WHISPER;
pack.wSize = sizeof(TPacketGCWhisper)+len;
pack.bType = WHISPER_TYPE_SYSTEM;
strlcpy(pack.szNameFrom, title.c_str(), sizeof(pack.szNameFrom));
TEMP_BUFFER buf;
buf.write(&pack, sizeof(TPacketGCWhisper));
buf.write(msg, len);
pkVictimDesc->Packet(buf.read_peek(), buf.size());
lua_pushboolean(L, 1);
}
}
return 1;
}
{ NULL, NULL }
{ "send_whisper", _send_whisper },
questlua_global.cpp dosyanı gönderir misin?
Tekrardan teşekkürler deneme yapıcağım şimdi.questlua_global.cpp içindeki include'lar arasına alttakini ekle build işlemi gerçekleşir.
C++:#include "desc.h"