🧩 [VSRO FIX]
Satılan İtemin Geri Gelmesi Fix
🧠 Problem Açıklaması
NPC’ye sattığınız item, return sonrası tekrar geri geliyorsa bu problem Shard tarafındaki stored procedure kaynaklıdır.
SRO_VT_SHARD → Programmability → _STRG_DEL_ITEM_NoTX prosedürünü açın, Ctrl + A ile tamamını silip aşağıdaki kodu yapıştırın.
Execute işleminden sonra Shard ve GameServer resetlenmelidir.
🛠️ ÇÖZÜM – SQL FIX
Aşağıdaki SQL sorgusu doğrudan problemi hedef alır ve ek bir işleme gerek kalmadan sorunu çözer.
SQL
USE [SRO_VT_SHARD]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[_STRG_DEL_ITEM_NoTX]
@DelFromPC_Inv AS TINYINT,
@CharID AS BIGINT,
@Slot AS TINYINT
AS
DECLARE @Rvalue INT
DECLARE @ItemToDel BIGINT
IF (@DelFromPC_Inv = 1)
SELECT @ItemToDel = ItemID FROM _Inventory WHERE CharID = @CharID AND Slot = @Slot
ELSE IF (@DelFromPC_Inv = 2)
SELECT @ItemToDel = ItemID FROM _InventoryForLinkedStorage WHERE LinkedItemID = @CharID AND Slot = @Slot
ELSE
SELECT @ItemToDel = ItemID FROM _InvCOS WHERE COSID = @CharID AND Slot = @Slot
IF (@ItemToDel IS NULL OR @ItemToDel = 0)
RETURN -1
DECLARE @BoundCOS INT
DECLARE @RefItemID INT
SELECT @RefItemID = RefItemID, @BoundCOS = Data FROM _Items WHERE ID64 = @ItemToDel
IF (@@ROWCOUNT = 0)
RETURN -2
DECLARE @TypeID1 TINYINT
DECLARE @TypeID2 TINYINT
DECLARE @TypeID3 TINYINT
SELECT
@TypeID1 = TypeID1,
@TypeID2 = TypeID2,
@TypeID3 = TypeID3
FROM _RefObjCommon WHERE ID = @RefItemID
-- PET Kontrolü - vSro.Blog
IF (@TypeID1 = 3 AND @TypeID2 = 2 AND @TypeID3 = 1)
BEGIN
IF (@BoundCOS <> 0)
BEGIN
EXEC @Rvalue = _DeleteCharCOS_NoTX @BoundCOS
IF (@Rvalue < 0)
RETURN @Rvalue
END
END
ELSE IF (@TypeID1 = 3 AND @TypeID2 = 2 AND @TypeID3 = 3)
BEGIN
IF (@BoundCOS <> 0)
BEGIN
IF (NOT EXISTS (SELECT 1 FROM _InventoryForLinkedStorage WHERE LinkedItemID = @ItemToDel))
RETURN -1000
IF (EXISTS (
SELECT 1 FROM _InventoryForLinkedStorage
WHERE LinkedItemID = @ItemToDel AND ItemID <> 0
))
BEGIN
UPDATE _ItemPool SET InUse = 0
FROM _ItemPool IP
JOIN _InventoryForLinkedStorage ILS ON IP.ItemID = ILS.ItemID
WHERE ILS.LinkedItemID = @ItemToDel
END
DELETE FROM _InventoryForLinkedStorage WHERE LinkedItemID = @ItemToDel
IF (@@ERROR <> 0)
RETURN -2
END
END
IF (@DelFromPC_Inv = 1)
UPDATE _Inventory SET ItemID = 0 WHERE CharID = @CharID AND Slot = @Slot
ELSE IF (@DelFromPC_Inv = 2)
UPDATE _InventoryForLinkedStorage SET ItemID = 0 WHERE LinkedItemID = @CharID AND Slot = @Slot
ELSE
UPDATE _InvCOS SET ItemID = 0 WHERE COSID = @CharID AND Slot = @Slot
IF (@@ERROR <> 0 OR @@ROWCOUNT = 0)
RETURN -3
IF EXISTS (SELECT 1 FROM _RentItemInfo WHERE nItemDBID = @ItemToDel)
BEGIN
DELETE FROM _RentItemInfo WHERE nItemDBID = @ItemToDel
IF (@@ERROR <> 0)
RETURN -6
END
EXEC @Rvalue = _STRG_FREE_ITEM_NoTX @ItemToDel
IF (@Rvalue < 0)
RETURN -4
RETURN 1
⚠️ Not: Sorguyu çalıştırmadan önce ilgili tablonun yedeğini almanız önerilir.
✅ Fix Sonucu
- ✔️ Satılan itemin geri gelme hatası giderilir
- ✔️ Client DC / Crash problemleri çözülür
- ✔️ Sistem stabil şekilde çalışır
⚠️ Uyarılar
- Sadece VSRO 188+ altyapısı için uygundur
- Farklı sürümlerde kullanılması önerilmez
- Canlı sunucuda uygulamadan önce test edilmelidir
🧷 Ek Bilgi
Bu fix tek seferliktir. Tekrar çalıştırılmasına gerek yoktur.
🔒 Telif & Paylaşım
Bu konu vSro.Blog için özel olarak hazırlanmıştır. İzinsiz kopyalanması veya başka forumlarda paylaşılması yasaktır.



