İçeriğe geç
Türkiye'nin SRO tanıtım & topluluk platformu

vSro Paylaşım vSRO Karakter Pozisyonu ile Çoklu Mob & Unique Spawn Ekleme

Cevaplar0
Görüntüleme9
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[GELİŞMİŞ QUERY] vSRO Karakter Pozisyonu ile Çoklu Mob & Unique Spawn Ekleme
Tab_RefTactics, Tab_RefHive ve Tab_RefNest Tablolarına Koordinat Aramadan 20 Noktaya Kadar Otomatik Spawn Kurulumu



Merhaba değerli forum sakinleri,

Harita üzerinde dolaşarak tek tek bölge (Region) ve X, Y, Z koordinatlarını aramak yerine; karakterlerinizi oyunda mobun veya Unique'in doğmasını istediğiniz noktalara götürüp bıraktığınızda, sistemin bu koordinatları otomatik çekerek spawn oluşturmasını sağlayan optimize edilmiş SQL sorgusunu paylaşıyoruz.

Nasıl Çalışır?' Alıntı:
  1. Kaç noktada spawn istiyorsanız (1 ile 20 nokta arası), o kadar karakter açıp oyunda yaratığın doğmasını istediğiniz konumlara götürün ve karakterlerden çıkış yapın (Exit/Logout).
  2. Aşağıdaki sorguda bulunan @monsterCodeName alanına mob kodunu, karakter listesine de bu karakterlerin isimlerini yazın.
  3. Kullanmadığınız karakter satırlarını olduğu gibi bırakabilirsiniz; sorgu sadece oyunda var olan karakterlerin koordinatlarını algılar ve dinamik olarak nest oluşturur.

Önemli Uyarı' Alıntı:
DİKKAT:
  • Karakterlerin koordinatlarının _Char tablosuna doğru yazılması için oyundan tamamen çıkış yapmış (Disconnect / Offline) olmaları gerekir.
  • İşlem tamamlandıktan sonra yeni spawnların haritada belirmesi için GameServer modüllerinin yeniden başlatılması (Restart) gerekmektedir.
  • İşlem öncesinde SRO_VT_SHARD yedeğinizi almayı unutmayınız.



Hatasız & Optimize Edilmiş SQL Query Kodu

SQL:
USE [SRO_VT_SHARD]
GO

-- ===================================================================
-- 1. ADIM: AYARLAMALAR (Burayı Kendi Konseptinize Göre Düzenleyin)
-- ===================================================================
DECLARE @monsterCodeName VARCHAR(128) = 'MOB_RM_ROC' -- Yaratığın _RefObjCommon CodeName128 kodu
DECLARE @minDelay        INT          = 60           -- Minimum spawn süresi (Saniye)
DECLARE @maxDelay        INT          = 120          -- Maksimum spawn süresi (Saniye)
DECLARE @initRadius      INT          = 100          -- Doğma yarıçapı
DECLARE @radius          INT          = 500          -- Dolaşma yarıçapı

-- Noktaları belirlemek için konumlandırdığınız karakter adları:
DECLARE @CharNames TABLE (CharName VARCHAR(16))
INSERT INTO @CharNames (CharName) VALUES 
('CharNokta1'),  ('CharNokta2'),  ('CharNokta3'),  ('CharNokta4'),
('CharNokta5'),  ('CharNokta6'),  ('CharNokta7'),  ('CharNokta8'),
('CharNokta9'),  ('CharNokta10'), ('CharNokta11'), ('CharNokta12'),
('CharNokta13'), ('CharNokta14'), ('CharNokta15'), ('CharNokta16'),
('CharNokta17'), ('CharNokta18'), ('CharNokta19'), ('CharNokta20')

-- ===================================================================
-- 2. ADIM: SİSTEM KONTROLLERİ VE HIVE/TACTICS OLUŞTURMA
-- ===================================================================
DECLARE @monsterID INT = (SELECT ID FROM dbo._RefObjCommon WHERE CodeName128 = @monsterCodeName)

IF (@monsterID IS NULL)
BEGIN
    RAISERROR('HATA: Belirtilen canavar kodu (_RefObjCommon) veritabanında bulunamadı!', 16, 1)
    RETURN
END

-- Geçerli karakterlerin koordinatlarını geçici tabloya topla
DECLARE @Spots TABLE (
    RegionID INT,
    PosX FLOAT,
    PosY FLOAT,
    PosZ FLOAT
)

INSERT INTO @Spots (RegionID, PosX, PosY, PosZ)
SELECT LatestRegion, POSX, POSY, POSZ 
FROM dbo._Char 
WHERE CharName16 IN (SELECT CharName FROM @CharNames)

IF NOT EXISTS (SELECT 1 FROM @Spots)
BEGIN
    RAISERROR('HATA: Listelenen karakterlerden hiçbiri veritabanında bulunamadı! Karakter adlarını kontrol ediniz.', 16, 1)
    RETURN
END

-- ID Atamaları (Tablolarda kayıt yoksa NULL düşmesini engellemek için ISNULL eklendi)
DECLARE @TacticsID INT = (SELECT ISNULL(MAX(dwTacticsID), 0) FROM dbo.Tab_RefTactics) + 1
DECLARE @HiveID    INT = (SELECT ISNULL(MAX(dwHiveID), 0) FROM dbo.Tab_RefHive) + 1

-- [1] TACTICS EKLEME
SET IDENTITY_INSERT dbo.Tab_RefTactics ON
INSERT INTO dbo.Tab_RefTactics (
    dwTacticsID, dwObjID, btAIQoS, nMaxStamina, btMaxStaminaVariance, nSightRange, 
    btAggressType, AggressData, btChangeTarget, btHelpRequestTo, btHelpResponSeto, 
    btBattleStyle, BattleStyleData, btDiversionBasis, DiversionBasisData1, DiversionBasisData2, 
    DiversionBasisData3, DiversionBasisData4, DiversionBasisData5, DiversionBasisData6, 
    DiversionBasisData7, DiversionBasisData8, btDiversionKeepBasis, DiversionKeepBasisData1, 
    DiversionKeepBasisData2, DiversionKeepBasisData3, DiversionKeepBasisData4, DiversionKeepBasisData5, 
    DiversionKeepBasisData6, DiversionKeepBasisData7, DiversionKeepBasisData8, btKeepDistance, 
    KeepDistanceData, btTraceType, btTraceBoundary, TraceData, btHomingType, HomingData, 
    btAggressTypeOnHoming, btFleeType, dwChampionTacticsID, AdditionOptionFlag, szDescString128
)
VALUES (
    @TacticsID, @monsterID, 0, 500, 50, 200, 
    0, 0, 2, 2, 2, 
    0, 0, 5, 0, 0, 
    0, 0, 0, 30, 
    0, 0, 4, 0, 
    0, 0, 0, 0, 
    0, 0, 0, 0, 
    0, 0, 1, 500, 0, 0, 
    2, 0, 0, 112, @monsterCodeName
)
SET IDENTITY_INSERT dbo.Tab_RefTactics OFF

-- [2] HIVE EKLEME
SET IDENTITY_INSERT dbo.Tab_RefHive ON
INSERT INTO dbo.Tab_RefHive (
    dwHiveID, btKeepMonsterCountType, dwOverwriteMaxTotalCount, fMonsterCountPerPC, 
    dwSpawnSpeedIncreaseRate, dwMaxIncreaseRate, btFlag, GameWorldID, HatchObjType, szDescString128
)
VALUES (
    @HiveID, 0, 1, 0, 
    0, 0, 0, 1, 1, @monsterCodeName
)
SET IDENTITY_INSERT dbo.Tab_RefHive OFF

-- ===================================================================
-- 3. ADIM: NESTLERİ DİNAMİK OLARAK OLUŞTURMA (DÖNGÜ)
-- ===================================================================
DECLARE @CurRegion INT, @CurX FLOAT, @CurY FLOAT, @CurZ FLOAT
DECLARE @NestID INT = (SELECT ISNULL(MAX(dwNestID), 0) FROM dbo.Tab_RefNest)
DECLARE @EklenenNokta INT = 0

SET IDENTITY_INSERT dbo.Tab_RefNest ON

DECLARE SpotCursor CURSOR FOR 
SELECT RegionID, PosX, PosY, PosZ FROM @Spots

OPEN SpotCursor
FETCH NEXT FROM SpotCursor INTO @CurRegion, @CurX, @CurY, @CurZ

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @NestID = @NestID + 1
    SET @EklenenNokta = @EklenenNokta + 1

    INSERT INTO dbo.Tab_RefNest (
        dwNestID, dwHiveID, dwTacticsID, nRegionDBID, 
        fLocalPosX, fLocalPosY, fLocalPosZ, wInitialDir, 
        nRadius, nGenerateRadius, nChampionGenPercentage, 
        dwDelayTimeMin, dwDelayTimeMax, dwMaxTotalCount, 
        btFlag, btRespawn, btType
    )
    VALUES (
        @NestID, @HiveID, @TacticsID, @CurRegion, 
        @CurX, @CurY, @CurZ, 0, 
        @radius, @initRadius, 0, 
        @minDelay, @maxDelay, 1, 
        0, 1, 0
    )

    FETCH NEXT FROM SpotCursor INTO @CurRegion, @CurX, @CurY, @CurZ
END

CLOSE SpotCursor
DEALLOCATE SpotCursor

SET IDENTITY_INSERT dbo.Tab_RefNest OFF

PRINT '====================================================='
PRINT 'BAŞARILI: ' + CAST(@EklenenNokta AS VARCHAR(10)) + ' adet spawn noktası sorunsuzca veritabanına eklendi!'
PRINT 'Mob Kodu : ' + @monsterCodeName
PRINT 'TacticsID: ' + CAST(@TacticsID AS VARCHAR(10)) + ' | HiveID: ' + CAST(@HiveID AS VARCHAR(10))
PRINT '====================================================='



Nasıl Uygulanır?

  1. Karakterleri Konumlandırın: Kaç adet spawn istiyorsanız (örneğin 3 farklı tepeye Roc veya Tiger Girl ekleyecekseniz), 3 farklı karakterle o konumlara gidip Exit diyerek oyundan çıkın.
  2. Kodu Düzenleyin: SQL sorgusunun en üstündeki @monsterCodeName değerine ekleyeceğiniz mobun kodunu yazın, @CharNames tablosundaki ilk satırlara da oyundan çıktığınız karakterlerin isimlerini yazın.
  3. Çalıştırın: SQL Server Management Studio (SSMS) üzerinden F5 tuşuna basarak çalıştırın.
  4. Sunucuyu Yeniden Başlatın: Değişikliklerin haritaya yüklenmesi için GameServer pencerelerini yeniden başlatın.

Sorularınızı veya özel spawn ayarı taleplerinizi konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!
 

Konuyu görüntüleyenler

Yükleniyor...
Yükleniyor...
Etiketler
Etiketler Etiketler
database mob query spawn vsro
Şu anda sitemizde 40,454 Aktif Kullanıcı
Çevrimiçi üyeler
Konular 1,311
Mesajlar 4,191
Kullanıcılar 1,624
Son üye mrt
Geri
Üst