- #1
Konu Sahibi
: serkankacan
[REHBER & SİSTEM] vSRO Özel Bölgeye Zindan Taşı (Dungeon Pillar) İle Giriş Sistemi
Garden Dungeon / Özel Haritalar İçin FGW Tarzı Taş ile Instance Zindan Oluşturma, Giriş Kısıtlamaları ve Media.pk2 Entegrasyonu
Garden Dungeon / Özel Haritalar İçin FGW Tarzı Taş ile Instance Zindan Oluşturma, Giriş Kısıtlamaları ve Media.pk2 Entegrasyonu
Merhaba değerli forum sakinleri,
Silkroad Online sunucularında Forgotten World (FGW), Jupiter veya HWT zindan mantığını kullanarak dilediğiniz herhangi bir bölgeyi (bu örnekte **Garden Dungeon**) parti üyelerinin bir **Dungeon Taşı / Parşömeni** kullanarak açabileceği özel bir **Instance Zindana** dönüştürebilirsiniz.
Bu sistem sayesinde:
- Oyuncu taşı kullandığında kendi partisine özel izole bir harita (Instance World) oluşur.
- Zindana giriş seviyesi (Örn: 101 - 110 Lvl), Job kıyafeti çıkarma ve binek kısıtlamaları otomatik uygulanır.
- İçeride parti üyelerini çeken bir çağırma kovanı (
Tab_RefHive / PartyMemberRecall) doğar. - Zindan kapanış süresi ve tekrar giriş bekleme süresi (Cool-time) otomatik yönetilir.
Teknik Kurulum Uyarısı' Alıntı:DİKKAT (ID Çakışmaları & Dosya Senkronizasyonu):
- Aşağıdaki veritabanı ID'leri örnek olarak standartlaştırılmıştır:
- Dünya ID (WorldID): 95
- Dünya Grup ID (GroupID): 2
- Eşya Common ID: 43946 (Link: 21586)
Eğer veritabanınızda bu ID'ler doluysa çakışmaması için boş bir ID belirleyiniz.- Veritabanı kayıtları ile Media.pk2 içerisindeki dosyalar birebir aynı ID ve parametreleri taşımalıdır.
- İşlem öncesinde mutlaka SRO_VT_SHARD yedeğinizi alınız.
1. BÖLÜM: DATABASE (SRO_VT_SHARD) KURULUM SORGULARI
SRO_VT_SHARD veritabanını seçip aşağıdaki sorguyu çalıştırın:
SQL:
USE [SRO_VT_SHARD]
GO
-- ===================================================================
-- 1. ADIM: ZİNDAN DÜNYASI TANIMLAMA (_RefGame_World)
-- ID: 95 | Süre: 7200000 ms (2 Saat) | Kapanış Uyarı: 600000 ms (10 Dk)
-- ===================================================================
IF NOT EXISTS (SELECT 1 FROM dbo._RefGame_World WHERE ID = 95)
BEGIN
INSERT INTO dbo._RefGame_World (ID, WorldCodeName128, Type, MaxCount, MaxPartyCount, City, ChannelAttribute, GuildWarType, Duration, OpenNoticeTime, ConfigGroupCodeName128)
VALUES (95, 'INS_GARDEN_DUNGEON', 1, 50, 8, 0, 0, 0, 7200000, 600000, 'GROUP_GARDEN_DUNGEON')
END
-- ===================================================================
-- 2. ADIM: ZİNDAN GİRİŞ KISITLAMALARI VE KURALLARI (_RefGame_World_Config)
-- ===================================================================
DELETE FROM dbo._RefGame_World_Config WHERE ConfigGroupCodeName128 = 'GROUP_GARDEN_DUNGEON'
INSERT INTO dbo._RefGame_World_Config (Service, WorldID, ConfigGroupCodeName128, ConfigCodeName128, Value, DescCodeName128) VALUES
(1, 825, 'GROUP_GARDEN_DUNGEON', 'GAME_WORLD_NORMALIZE_TYPE', 'GAME_WORLD_NORMALIZE_TYPE_A', 'STRING'),
(1, 826, 'GROUP_GARDEN_DUNGEON', 'ENTER_LIMIT_CONDITION_LEVEL_MINIMUM_NUM', '101', 'INT32'),
(1, 827, 'GROUP_GARDEN_DUNGEON', 'ENTER_LIMIT_CONDITION_LEVEL_MAXIMUM_NUM', '110', 'INT32'),
(1, 828, 'GROUP_GARDEN_DUNGEON', 'ENTER_LIMIT_CONDITION_JOB_CLOTHES_TAKE_OFF', 'ON', 'STRING'),
(1, 829, 'GROUP_GARDEN_DUNGEON', 'ENTER_LIMIT_CONDITION_RIDE_COS_NOT_RIDING', 'ON', 'STRING'),
(1, 830, 'GROUP_GARDEN_DUNGEON', 'ENTER_LIMIT_CONDITION_TRADE_COS_NOT_RIDING', 'ON', 'STRING'),
(1, 831, 'GROUP_GARDEN_DUNGEON', 'PARTYMONSTER_SPAWN', 'OFF', 'STRING'),
(1, 832, 'GROUP_GARDEN_DUNGEON', 'ENTER_LIMIT_CONDITION_FRPVP_VOUCHER_TAKE_OFF', 'ON', 'STRING'),
(1, 833, 'GROUP_GARDEN_DUNGEON', 'CONTROL_NOTIFY_SPAWN_UNIQUE_MONSTER_MSG', 'ON', 'STRING'),
(1, 834, 'GROUP_GARDEN_DUNGEON', 'GAMEWORLD_DISAPPEARANCE_TIME', '3600000', 'INT32'),
(1, 835, 'GROUP_GARDEN_DUNGEON', 'GAMEWORLD_DISAPPEARANCE_TIME', '600000', 'INT32'),
(1, 836, 'GROUP_GARDEN_DUNGEON', 'GAMEWORLD_DISAPPEARANCE_TIME', '300000', 'INT32')
-- ===================================================================
-- 3. ADIM: ZİNDANA AİT BÖLGELER (REGIONS) (_RefInstance_World_Region)
-- ===================================================================
DELETE FROM dbo._RefInstance_World_Region WHERE WorldID = 95
INSERT INTO dbo._RefInstance_World_Region (WorldID, RegionID) VALUES
(95, 31734), (95, 31735), (95, 31736),
(95, 31990), (95, 31991), (95, 31992),
(95, 32246), (95, 32247), (95, 32248)
-- ===================================================================
-- 4. ADIM: ZİNDAN GRUBU VE SOĞUMA SÜRESİ (COOL-TIME) AYARLARI
-- ===================================================================
IF NOT EXISTS (SELECT 1 FROM dbo._RefGameWorldGroup WHERE ID = 2)
BEGIN
INSERT INTO dbo._RefGameWorldGroup (ID, CodeName128, ObjName128, ConfigGroupCodeName128)
VALUES (2, 'GROUP_INS_GARDEN', 'GARDENDUNGEON', 'GROUP_CONFIG_INS_GARDEN')
END
DELETE FROM dbo._RefGameWorldGroup_Config WHERE ConfigGroupCodeName128 = 'GROUP_CONFIG_INS_GARDEN'
INSERT INTO dbo._RefGameWorldGroup_Config (Service, WorldGroupID, ConfigGroupCodeName128, ConfigCodeName128, Value, DescCodeName128) VALUES
(1, 6, 'GROUP_CONFIG_INS_GARDEN', 'ENTER_WORLD_GROUP_COOL_TIME', '300', 'INT32'),
(1, 7, 'GROUP_CONFIG_INS_GARDEN', 'TIMEDJOB_COOL_TIME_FORCLIENT', '300', 'CLIENT_DATA'),
(1, 8, 'GROUP_CONFIG_INS_GARDEN', 'TIMEDJOB_ICONURL_FORCLIENT', 'icon\item\etc\teleprot_hole.ddj', 'CLIENT_DATA'),
(1, 9, 'GROUP_CONFIG_INS_GARDEN', 'TIMEDJOB_EXPANATION_FORCLIENT', 'UIIT_STT_PARTY_LOST_WOLRD_EXPANATION_GARDEN', 'CLIENT_DATA'),
(1, 10, 'GROUP_CONFIG_INS_GARDEN', 'TIMEDJOB_SUBJECT_FORCLIENT', 'UIIT_STT_PARTY_LOST_WOLRD_SUBJECT_GARDEN', 'CLIENT_DATA')
-- Grup - Dünya Eşleştirmesi
IF NOT EXISTS (SELECT 1 FROM dbo._RefGameWorldBindGameWorldGroup WHERE WorldID = 95)
BEGIN
INSERT INTO dbo._RefGameWorldBindGameWorldGroup (Service, ID, WorldID, WorldGroupID)
VALUES (1, 23, 95, 2)
END
-- Zindana Giriş Başlangıç Koordinatı (_RefInstance_World_Start_Pos)
DELETE FROM dbo._RefInstance_World_Start_Pos WHERE WorldID = 95
INSERT INTO dbo._RefInstance_World_Start_Pos (WorldID, RegionID, PosX, PosY, PosZ, Direction)
VALUES (95, 32248, 1371, 439, 1358, 0)
-- ===================================================================
-- 5. ADIM: ZİNDAN TAŞI EŞYASINI OLUŞTURMA (_RefObjItem & _RefObjCommon)
-- ===================================================================
IF NOT EXISTS (SELECT 1 FROM dbo._RefObjItem WHERE ID = 21586)
BEGIN
INSERT INTO dbo._RefObjItem (ID, MaxStack, ReqGender, ItemClass, SetID, Durability, Speed1, Speed2, Scale, IncMaxHP, IncMaxMP, IncMaxHGP, IncMaxSGP, IncMaxPetHGP, IncMaxPetSGP, IncMaxRaidHP, IncMaxRaidMP, ReqObjLvl, ReqPower, ReqAgility, ReqIntellect, ReqCharisma, ReqLuck, ReqLvl1, ReqLvl2, ReqLvl3, ReqLvl4, ReqLvlJob, ReqLvlGuild, ItemType, Quatity, ReqClassType, Country, Rarity, CashItem, Bionic, Type, TypeDetail, TypeClass, SubClass, TypeSubDetail, Param1, Param1_Desc128, Param2, Param2_Desc128, Param3, Param3_Desc128, Param4, Param4_Desc128, Param5, Param5_Desc128, Param6, Param6_Desc128, Param7, Param7_Desc128, Param8, Param8_Desc128, Param9, Param9_Desc128, Param10, Param10_Desc128, Param11, Param11_Desc128, Param12, Param12_Desc128, Param13, Param13_Desc128, Param14, Param14_Desc128, Param15, Param15_Desc128, Param16, Param16_Desc128, Param17, Param17_Desc128, Param18, Param18_Desc128, Param19, Param19_Desc128, Param20, Param20_Desc128, Param21, Param21_Desc128, Param22, Param22_Desc128, Param23, Param23_Desc128, Param24, Param24_Desc128, Param25, Param25_Desc128, Param26, Param26_Desc128, Param27, Param27_Desc128, Param28, Param28_Desc128, Param29, Param29_Desc128, Param30, Param30_Desc128, Param31, Param31_Desc128, Param32, Param32_Desc128, Price, SellPrice, DefLevel)
VALUES (21586, 1, 2, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, '???', 0, 'INS_GARDEN_DUNGEON', 101, '?? ????', 110, '?? ????', 8, '??????', 6, '???? ??', 1, '???? ?? ??', -1, 'INS_QUEST_TELEPORT', -1, 'UIIT_STT_GARDEN_DUNGEON', 18000000, 'COOLTIME:0x00000071', -1, 'xxx', -1, 'xxx', -1, 'xxx', -1, 'xxx', -1, 'xxx', -1, 'xxx', -1, 'xxx', -1, 'xxx', -1, 'xxx', -1, 'xxx', 0, 0, 0)
END
IF NOT EXISTS (SELECT 1 FROM dbo._RefObjCommon WHERE ID = 43946)
BEGIN
INSERT INTO dbo._RefObjCommon (Service, ID, CodeName128, ObjName128, OrgObjCodeName128, NameStrID128, DescStrID128, CashItem, Bionic, TypeID1, TypeID2, TypeID3, TypeID4, DecayTime, Country, Rarity, CanTrade, CanSell, CanBuyInMall, CanStore_Stand, CanStore_Deposit, CanStore_Guild, CanTrade_UserToUser, CanDrop, CanPick, CanUse, CanUse_Attr, Stack, MaxMagicOptCount, Speed1, Speed2, Scale, BCHeight, BCRadius, EventFlag, MagParamNum, AssocFileObj128, AssocFileDrop128, AssocFileIcon128, AssocFile1_128, AssocFile2_128, Link)
VALUES (1, 43946, 'ITEM_TELEPORT_GARDEN_DUNGEON', 'GardenDungeon', 'xxx', 'SN_ITEM_TELEPORT_GARDEN_DUNGEON', 'SN_ITEM_TELEPORT_GARDEN_DUNGEON_TT_DESC', 0, 0, 3, 3, 12, 7, 180000, 3, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 100, 0, 0, 0, 1, 1, 0, 'xxx', 'item\etc\drop_ch_eventbox.bsr', 'item\etc\teleprot_hole.ddj', 'xxx', 'xxx', 21586)
END
-- ===================================================================
-- 6. ADIM: PARTİ ÜYELERİNİ ÇEKME KOVANI (Tab_RefHive & Tab_RefNest)
-- ===================================================================
IF NOT EXISTS (SELECT 1 FROM dbo.Tab_RefHive WHERE dwHiveID = 1577)
BEGIN
INSERT INTO dbo.Tab_RefHive (dwHiveID, btKeepTime, dwRegenType, btTriggerType, btRegenLimit, btMaxSpawn, btAutoSpawn, dwGameWorldID, btHatchType, szDesc)
VALUES (1577, 0, 0, 0, 0, 0, 0, 95, 2, 'PartyMemberRecall')
END
DELETE FROM dbo.Tab_RefNest WHERE dwNestID = 36834
INSERT INTO dbo.Tab_RefNest (dwNestID, dwHiveID, dwTacticsID, nRegionDBID, fLocalPosX, fLocalPosY, fLocalPosZ, wInitialDir, nRadius, nGenerateRadius, nChampionGenPercentage, dwDelayTimeMin, dwDelayTimeMax, dwMaxTotalCount, btFlag, btRespawn, btType)
VALUES (36834, 1577, 1800, 32248, 1253, 445.8, 1422, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0)
PRINT '====================================================='
PRINT 'BAŞARILI: Garden Dungeon veritabanı kurulumu tamamlandı!'
PRINT 'Değişikliklerin aktif olması için GameServer ve ShardManager yeniden başlatılmalıdır.'
PRINT '====================================================='
2. BÖLÜM: CLIENT (Media.pk2) KURULUM METİNLERİ
PK2 editörü ile istemci dosyalarınızı açarak ilgili TXT dosyalarının en altına ekleme yapınız:
1.
server_dep\silkroad\textdata\gameworlddata.txt
Kod:
95 INS_GARDEN_DUNGEON 1 50 8 GROUP_GARDEN_DUNGEON
2.
server_dep\silkroad\textdata\gameworldconfigdata.txt
Kod:
GROUP_GARDEN_DUNGEON GAME_WORLD_NORMALIZE_TYPE STRING GAME_WORLD_NORMALIZE_TYPE_A
GROUP_GARDEN_DUNGEON ENTER_LIMIT_CONDITION_LEVEL_MINIMUM_NUM INT32 101
GROUP_GARDEN_DUNGEON ENTER_LIMIT_CONDITION_LEVEL_MAXIMUM_NUM INT32 110
GROUP_GARDEN_DUNGEON ENTER_LIMIT_CONDITION_JOB_CLOTHES_TAKE_OFF STRING ON
GROUP_GARDEN_DUNGEON ENTER_LIMIT_CONDITION_RIDE_COS_NOT_RIDING STRING ON
GROUP_GARDEN_DUNGEON ENTER_LIMIT_CONDITION_TRADE_COS_NOT_RIDING STRING ON
GROUP_GARDEN_DUNGEON PARTYMONSTER_SPAWN STRING OFF
GROUP_GARDEN_DUNGEON ENTER_LIMIT_CONDITION_FRPVP_VOUCHER_TAKE_OFF STRING ON
GROUP_GARDEN_DUNGEON CONTROL_NOTIFY_SPAWN_UNIQUE_MONSTER_MSG STRING ON
GROUP_GARDEN_DUNGEON GAMEWORLD_DISAPPEARANCE_TIME INT32 3600000
GROUP_GARDEN_DUNGEON GAMEWORLD_DISAPPEARANCE_TIME INT32 600000
GROUP_GARDEN_DUNGEON GAMEWORLD_DISAPPEARANCE_TIME INT32 300000
3.
server_dep\silkroad\textdata\groupworld_config_forclient.txt
Kod:
2 TIMEDJOB_COOL_TIME_FORCLIENT 300
2 TIMEDJOB_ICONURL_FORCLIENT icon\item\etc\teleprot_hole.ddj
2 TIMEDJOB_EXPANATION_FORCLIENT UIIT_STT_PARTY_LOST_WOLRD_EXPANATION_GARDEN
2 TIMEDJOB_SUBJECT_FORCLIENT UIIT_STT_PARTY_LOST_WOLRD_SUBJECT_GARDEN
4.
server_dep\silkroad\textdata\itemdata_xxx.txt
Kod:
1 43946 ITEM_TELEPORT_GARDEN_DUNGEON GardenDungeon xxx SN_ITEM_TELEPORT_GARDEN_DUNGEON SN_ITEM_TELEPORT_GARDEN_DUNGEON_TT_DESC 0 0 3 3 12 7 180000 3 0 1 1 1 0 0 1 0 0 1 0 0 1 0 100 0 0 0 1 1 0 xxx item\etc\drop_ch_eventbox.bsr item\etc\teleprot_hole.ddj xxx xxx 1 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 ??? 0 INS_GARDEN_DUNGEON 101 ?? ???? 110 ?? ???? 8 ?????? 6 ???? ?? 1 ???? ?? ?? -1 INS_QUEST_TELEPORT -1 UIIT_STT_GARDEN_DUNGEON 18000000 COOLTIME:0x00000071 -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx -1 xxx 0 0 0
5.
server_dep\silkroad\textdata\textdata_object.txt
Kod:
1 SN_ITEM_TELEPORT_GARDEN_DUNGEON Garden Dungeon Parşömeni
1 SN_ITEM_TELEPORT_GARDEN_DUNGEON_TT_DESC Parti başkanı kullandığında partiyi Garden Dungeon zindanına ışınlayan geçit kapısı açar.
6.
server_dep\silkroad\textdata\textuisystem.txt
Kod:
1 UIIT_STT_PARTY_LOST_WOLRD_SUBJECT_GARDEN Garden Dungeon - Tekrar Giriş Limiti
1 UIIT_STT_PARTY_LOST_WOLRD_EXPANATION_GARDEN Zindanın tekrar giriş süresi dolduğunda parti üyeleri yeni bir zindana giriş yapabilir.
1 UIIT_STT_GARDEN_DUNGEON Garden Dungeon
Nasıl Test Edilir?
- SQL kodlarını SRO_VT_SHARD üzerinde okutun.
- Media.pk2 içerisine yukarıdaki metinleri import edip istemcinizi güncelleyin.
- Sunucudaki ShardManager ve GameServer modüllerini baştan başlatın.
- 101-110 seviye aralığında bir karakterle parti kurup parti başkanı olun (üzerinizde Job kıyafeti olmamalıdır).
ITEM_TELEPORT_GARDEN_DUNGEONtaşını çantanıza alıp sağ tıklayın.- Yerde boyut kapısının açıldığını ve tıkladığınızda tüm partinin Garden Dungeon zindanına ışınlandığını doğrulayın.
Sorularınızı ve takıldığınız yerleri bu konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!

