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

vSro Paylaşım vSRO Teleport Taşı / NPC Yerini Değiştirme (Taşıma)

Cevaplar0
Görüntüleme4
Ticaret Puanı
0
Katılım
8 Eyl 2026
Mesajlar
88
Tepkime puanı
1
Puanları
0
Mevcut Bakiye
2960 ₺
[REHBER & SİSTEM] vSRO Teleport Taşı / NPC Yerini Değiştirme (Taşıma)
Karakter Koordinatlarını Referans Alarak _RefObjCommon Üzerinden Teleport Kapısı veya NPC Konumu Güncelleme



Merhaba değerli forum sakinleri,

Silkroad Online sunucunuzda bir kasaba teleport taşını (Gate), zindan kapısını veya sabit bir NPC'yi farklı bir konuma (örneğin Jangan önüne, yeni bir arenaya veya kaleye) taşımak istediğinizde tek tek koordinat aramak yerine; bir GM karakterini hedef noktaya götürüp karakterin durduğu yeri doğrudan SQL üzerinden ilgili teleporta aktarabilirsiniz.

Aşağıda hem koordinat yuvarlama hatalarından arındırılmış optimize SQL kodunu hem de istemci (Media.pk2) tarafındaki eşitleme adımlarını bulabilirsiniz.

Kritik Koordinat & Senkronizasyon Uyarısı' Alıntı:
DİKKAT:
  • Koordinatlarını alacağınız karakter (Örn: [GM]PvP) hedef noktaya gittikten sonra kesinlikle oyundan çıkış yapmalı (Exit / Relog) ki güncel konum veritabanına yazılabilsin.
  • Koordinat sütunları kesirli (`real`) değerler taşır. Değişkenler `FLOAT` olarak tanımlanmıştır; böylece kapı veya NPC zeminin altına gömülmez ya da havada asılı kalmaz.
  • İş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: DEĞİŞKENLER
-- ===================================================================
DECLARE @TargetBuildingCode VARCHAR(128) = 'STORE_TQ_SNAKEGATE' -- Yeri değiştirilecek Teleport/NPC Kodu
DECLARE @ReferenceCharName  VARCHAR(16)  = '[GM]PvP'           -- Koordinatları alınacak karakter adı

-- Kontroller: Eşya/Bina ve Karakter Veritabanında Mevcut mu?
DECLARE @BuildingID INT = (SELECT ID FROM dbo._RefObjCommon WITH (NOLOCK) WHERE CodeName128 = @TargetBuildingCode)
DECLARE @CharID INT     = (SELECT CharID FROM dbo._Char WITH (NOLOCK) WHERE CharName16 = @ReferenceCharName)

IF (@BuildingID IS NULL)
BEGIN
    RAISERROR('HATA: Belirtilen teleport/bina kodu (_RefObjCommon) bulunamadı!', 16, 1)
    RETURN
END

IF (@CharID IS NULL)
BEGIN
    RAISERROR('HATA: Belirtilen referans karakter (_Char) bulunamadı!', 16, 1)
    RETURN
END

-- ===================================================================
-- 2. ADIM: KARAKTERİN KONUM BİLGİLERİNİ ÇEKME (FLOAT HASSASİYETİ)
-- ===================================================================
DECLARE @RegionID SMALLINT
DECLARE @PosX REAL
DECLARE @PosY REAL
DECLARE @PosZ REAL

SELECT 
    @RegionID = LatestRegion,
    @PosX     = PosX,
    @PosY     = PosY,
    @PosZ     = PosZ
FROM dbo._Char WITH (NOLOCK)
WHERE CharID = @CharID

-- ===================================================================
-- 3. ADIM: TELEPORT BİNASINI YENİ KONUMA TAŞIMA
-- ===================================================================
UPDATE dbo._RefObjCommon
SET 
    RegionID = @RegionID,
    OffsetX  = @PosX,
    OffsetY  = @PosY,
    OffsetZ  = @PosZ
WHERE ID = @BuildingID

PRINT '================================================================='
PRINT 'BAŞARILI: ' + @TargetBuildingCode + ' yeni koordinatlarına taşındı!'
PRINT 'RegionID: ' + CAST(@RegionID AS VARCHAR(10))
PRINT 'X: ' + CAST(@PosX AS VARCHAR(20)) + ' | Y: ' + CAST(@PosY AS VARCHAR(20)) + ' | Z: ' + CAST(@PosZ AS VARCHAR(20))
PRINT '================================================================='



Client (Media.pk2) Eşitleme Adımları

Teleport taşının yeni yerinde fiziki olarak oyuncuların ekranında görünmesi ve tıklanabilmesi için istemci dosyasını güncellemelisiniz:

  1. PK2 editörü ile Media.pk2 dosyanızı açın.
  2. server_dep\silkroad\textdata\teleportbuilding.txt dosyasını dışarı aktarın (Export).
  3. Dosyada STORE_TQ_SNAKEGATE (veya değiştirdiğiniz kod) satırını bulun.
  4. Sorgu sonucunda Messages panelinde yazan yeni RegionID, PosX, PosY, PosZ değerlerini ilgili sütunlara yapıştırın.
  5. Dosyayı kaydedip tekrar Media.pk2 içine import edin ve oyuncularınıza patch olarak iletin.
  6. Sunucudaki GameServer ve ShardManager modüllerini yeniden başlatın.



Nasıl Uygulanır?

  1. Oyuna GM karakterinizle girip teleportu nereye koymak istiyorsanız tam o noktada durun.
  2. Karakterinizle oyundan tamamen çıkış yapın (Exit).
  3. SQL Server Management Studio (SSMS) üzerinde yukarıdaki sorguyu açın.
  4. En üstteki @TargetBuildingCode ve @ReferenceCharName alanlarını doldurup F5 tuşuna basın.
  5. GameServer'ı yeniden başlattığınızda teleport taşının belirlediğiniz noktada başarıyla doğduğunu göreceksiniz.

Sorularınızı ve takıldığınız yerleri bu konu altından iletebilirsiniz. Herkese keyifli geliştirmeler!
 

Konuyu görüntüleyenler

Yükleniyor...
Yükleniyor...
Etiketler
Etiketler Etiketler
npc patch sql teleport vsro
Şu anda sitemizde 40,332 Aktif Kullanıcı
Çevrimiçi üyeler
Konular 1,311
Mesajlar 4,191
Kullanıcılar 1,624
Son üye mrt
Geri
Üst