vSRO Yardım PROCEDURE FB item when teleport

Arshivel1337

.
Aktiflik: 1%
Çırak 1 Mesaj
Katılım
9 Ara 2024
Mesajlar
109
Tepkime puanı
6
Puan
18
Yaş
32
Konum
Egypt
Thread owner
I am working on a system that automatically applies Full Blue (FB) + +5 enhancement to items when a character travels (teleport / zone change).
The system should:
  • Apply to all items in inventory slots 0 → 12
  • Work for:
    • Weapons
    • Armor
    • Accessories
  • Detect item degree:
    • DG01 → DG08
  • Automatically set:
    • +5 upgrade
    • Full Blue stats (FB max options)
  • Prevent duplicate execution (Anti-spam / once per trigger)

    anyone can share PROCEDURE
ALTER PROCEDURE [dbo].[_OnLoadingScreen_EDIT]
@CharID INT,
@Charname VARCHAR(25),
@TargetedRegionID SMALLINT
AS
BEGIN
SET NOCOUNT ON;

DECLARE
@Slot INT = 0,
@ID64 BIGINT,
@RefItemID INT,
@CharLevel INT,

@T1 INT,
@T2 INT,
@T3 INT,
@T4 INT,

@CodeName VARCHAR(128);

/* =========================
CHARACTER LEVEL
========================== */
SELECT @CharLevel = CurLevel
FROM Vengard_SHARD.dbo._Char
WHERE CharID = @CharID;

/* =========================
LOOP EQUIPMENT
========================== */
WHILE @Slot <= 12
BEGIN

SET @ID64 = NULL;
SET @RefItemID = NULL;

/* GET EQUIPPED ITEM */
SELECT
@ID64 = I.ID64,
@RefItemID = I.RefItemID
FROM Vengard_SHARD.dbo._Inventory INV WITH(NOLOCK)
INNER JOIN Vengard_SHARD.dbo._Items I WITH(NOLOCK)
ON INV.ItemID = I.ID64
WHERE INV.CharID = @CharID
AND INV.Slot = @Slot;

/* ITEM EXISTS */
IF @ID64 IS NOT NULL
BEGIN

/* GET ITEM TYPES */
SELECT
@CodeName = CodeName128,
@T1 = TypeID1,
@T2 = TypeID2,
@T3 = TypeID3,
@T4 = TypeID4
FROM Vengard_SHARD.dbo._RefObjCommon WITH(NOLOCK)
WHERE ID = @RefItemID;

/* =========================
EQUIPMENT FILTER
========================== */
IF
(
@CodeName LIKE 'ITEM_CH_%'
OR @CodeName LIKE 'ITEM_EU_%'
OR @CodeName LIKE '%SHIELD%'
OR @CodeName LIKE '%RING%'
OR @CodeName LIKE '%EARRING%'
OR @CodeName LIKE '%NECKLACE%'
)
BEGIN

/* =========================
APPLY FB FROM POOL
========================== */
UPDATE Vengard_SHARD.dbo._Items
SET

/* +0 => +5 */
OptLevel =
CASE
WHEN OptLevel = 0 THEN 5
ELSE OptLevel
END,

/* SAFE FLAG */
Data =
CASE
WHEN ISNULL(Data,0) < 100
THEN ISNULL(Data,0) + 100
ELSE Data
END,

/* FB STATS */
Variance = Q.Variance,
MagParamNum = Q.MagParamNum,

MagParam1 = Q.MagParam1,
MagParam2 = Q.MagParam2,
MagParam3 = Q.MagParam3,
MagParam4 = Q.MagParam4,
MagParam5 = Q.MagParam5,
MagParam6 = Q.MagParam6,
MagParam7 = Q.MagParam7,
MagParam8 = Q.MagParam8,
MagParam9 = Q.MagParam9,
MagParam10 = Q.MagParam10,
MagParam11 = Q.MagParam11,
MagParam12 = Q.MagParam12

FROM
(
SELECT TOP 1 *
FROM ANTHEIA.dbo._AutoEquipmentItemPool P WITH(NOLOCK)

WHERE
P.TypeID1 = @T1
AND P.TypeID2 = @T2
AND P.TypeID3 = @T3
AND P.TypeID4 = @T4

AND P.ReqLevel1 <= @CharLevel

ORDER BY ReqLevel1 DESC

) AS Q

WHERE ID64 = @ID64

/* ANTI DUPLICATE */
AND ISNULL(Data,0) < 100;

END

END

SET @Slot = @Slot + 1;

END

END
GO
 
If you are using maxiguard use _onloadingscreen store procedure. I do autoequipment and perma buffs inside , no issues so far in the last 2 years.
 
Oyla 0
Thread owner
If you are using maxiguard use _onloadingscreen store procedure. I do autoequipment and perma buffs inside , no issues so far in the last 2 years.
when use this code get dc
ALTER PROCEDURE [dbo].[_OnLoadingScreen_EDIT]
@CharID int,
@Charname varchar(25),
@TargetedRegionID smallint
AS
BEGIN

SET NOCOUNT ON;

DECLARE @Slot INT = 0;
DECLARE @ID64 BIGINT;
DECLARE @RefItemID INT;
DECLARE @CodeName VARCHAR(128);

/* =========================
AUTO FB ON LOGIN
========================== */
WHILE @Slot <= 12
BEGIN

SET @ID64 = NULL;
SET @RefItemID = NULL;
SET @CodeName = NULL;

/* GET ITEM FROM INVENTORY */
SELECT
@ID64 = I.ID64,
@RefItemID = I.RefItemID
FROM Vengard_SHARD.dbo._Inventory INV
INNER JOIN Vengard_SHARD.dbo._Items I ON INV.ItemID = I.ID64
WHERE INV.CharID = @CharID
AND INV.Slot = @Slot;

IF @ID64 IS NOT NULL
BEGIN

/* GET CODE NAME */
SELECT @CodeName = CodeName128
FROM Vengard_SHARD.dbo._RefObjCommon
WHERE ID = @RefItemID;

/* =========================
EQUIPMENT FILTER
========================== */
IF @CodeName IS NOT NULL
AND (
@CodeName LIKE 'ITEM_CH_SWORD%' OR
@CodeName LIKE 'ITEM_CH_BLADE%' OR
@CodeName LIKE 'ITEM_CH_TBLADE%' OR
@CodeName LIKE 'ITEM_CH_SPEAR%' OR
@CodeName LIKE 'ITEM_CH_BOW%' OR
@CodeName LIKE 'ITEM_CH_DAGGER%' OR

@CodeName LIKE 'ITEM_CH_M_CLOTHES%' OR
@CodeName LIKE 'ITEM_CH_F_CLOTHES%' OR

@CodeName LIKE '%SHIELD%' OR
@CodeName LIKE '%RING%' OR
@CodeName LIKE '%NECKLACE%' OR
@CodeName LIKE '%EARRING%'
)
BEGIN

/* =========================
APPLY FB ONLY ONCE
========================== */
UPDATE Vengard_SHARD.dbo._Items
SET
OptLevel = CASE
WHEN OptLevel = 0 THEN 5
ELSE OptLevel
END,

Data = 0, -- anti duplicate flag

Variance = CASE
WHEN @CodeName LIKE '%CLOTHES%' THEN 27709466425
WHEN @CodeName LIKE '%SHIELD%' THEN 658099808
ELSE 20421640800
END,

MagParamNum = CASE
WHEN @CodeName LIKE '%CLOTHES%' THEN 6
ELSE 5
END,

MagParam1 = 30064771144,
MagParam2 = 257698037862,
MagParam3 = 858993459290,
MagParam4 = 30064771150,
MagParam5 = 429496729714

WHERE ID64 = @ID64
AND ISNULL(Data, 0) <> 0;

END;

END;

SET @Slot = @Slot + 1;

END;

END
 
Oyla 0
Data alanını flag olarak kullanmak yerine ayrı bir log tablosu oluşturman daha sağlıklı olur.
Data item tipine göre oyun tarafından farklı amaçlarla kullanılabilir, bu yüzden müdahale etmek riskli.
Blue verme işlemini Data değerine göre değil, itemin tipine göre yapmalısın.
Weapon, shield, armor ve accessory gibi item türlerini ayırıp ona göre MagParam, Variance ve MagParamNum basman daha doğru olur.
Ayrıca mevcut prosedürün performans açısından zayıf görünüyor.
Her slot için ayrı sorgu çalıştırmak yerine, mümkün olduğunca tablo tabanlı bir yapı kurup tek seferde itemleri filtrelemek daha sağlıklı olur.
 
Oyla 0
Thread owner
@iMonarch
@InFlames


want edit for it i am working on this query but stable problem
ALTER PROCEDURE [dbo].[_OnLoadingScreen_EDIT]
@CharID INT,
@Charname VARCHAR(25),
@TargetedRegionID SMALLINT
AS
BEGIN
SET NOCOUNT ON;

DECLARE
@Slot INT = 0,
@ID64 BIGINT,
@RefItemID INT,
@CharLevel INT,

@T1 INT,
@T2 INT,
@T3 INT,
@T4 INT,

@CodeName VARCHAR(128);

/* =========================
CHARACTER LEVEL
========================== */
SELECT @CharLevel = CurLevel
FROM Vengard_SHARD.dbo._Char
WHERE CharID = @CharID;

/* =========================
LOOP EQUIPMENT
========================== */
WHILE @Slot <= 12
BEGIN

SET @ID64 = NULL;
SET @RefItemID = NULL;

/* GET EQUIPPED ITEM */
SELECT
@ID64 = I.ID64,
@RefItemID = I.RefItemID
FROM Vengard_SHARD.dbo._Inventory INV WITH(NOLOCK)
INNER JOIN Vengard_SHARD.dbo._Items I WITH(NOLOCK)
ON INV.ItemID = I.ID64
WHERE INV.CharID = @CharID
AND INV.Slot = @Slot;

/* ITEM EXISTS */
IF @ID64 IS NOT NULL
BEGIN

/* GET ITEM TYPES */
SELECT
@CodeName = CodeName128,
@T1 = TypeID1,
@T2 = TypeID2,
@T3 = TypeID3,
@T4 = TypeID4
FROM Vengard_SHARD.dbo._RefObjCommon WITH(NOLOCK)
WHERE ID = @RefItemID;

/* =========================
EQUIPMENT FILTER
========================== */
IF
(
@CodeName LIKE 'ITEM_CH_%'
OR @CodeName LIKE 'ITEM_EU_%'
OR @CodeName LIKE '%SHIELD%'
OR @CodeName LIKE '%RING%'
OR @CodeName LIKE '%EARRING%'
OR @CodeName LIKE '%NECKLACE%'
)
BEGIN

/* =========================
APPLY FB FROM POOL
========================== */
UPDATE Vengard_SHARD.dbo._Items
SET

/* +0 => +5 */
OptLevel =
CASE
WHEN OptLevel = 0 THEN 5
ELSE OptLevel
END,

/* SAFE FLAG */
Data =
CASE
WHEN ISNULL(Data,0) < 100
THEN ISNULL(Data,0) + 100
ELSE Data
END,

/* FB STATS */
Variance = Q.Variance,
MagParamNum = Q.MagParamNum,

MagParam1 = Q.MagParam1,
MagParam2 = Q.MagParam2,
MagParam3 = Q.MagParam3,
MagParam4 = Q.MagParam4,
MagParam5 = Q.MagParam5,
MagParam6 = Q.MagParam6,
MagParam7 = Q.MagParam7,
MagParam8 = Q.MagParam8,
MagParam9 = Q.MagParam9,
MagParam10 = Q.MagParam10,
MagParam11 = Q.MagParam11,
MagParam12 = Q.MagParam12

FROM
(
SELECT TOP 1 *
FROM ANTHEIA.dbo._AutoEquipmentItemPool P WITH(NOLOCK)

WHERE
P.TypeID1 = @T1
AND P.TypeID2 = @T2
AND P.TypeID3 = @T3
AND P.TypeID4 = @T4

AND P.ReqLevel1 <= @CharLevel

ORDER BY ReqLevel1 DESC

) AS Q

WHERE ID64 = @ID64

/* ANTI DUPLICATE */
AND ISNULL(Data,0) < 100;

END

END

SET @Slot = @Slot + 1;

END

END
GO
want take FB each lvl item from _AutoEquipmentItemPool
want mindaggre 1 max dg8
Üst üste post gönderildiği için tek mesajda birleştirildi:

want help in my code
 
Oyla 0
@iMonarch
@InFlames


Bunu düzenlemek istiyorum, bu sorgu üzerinde çalışıyorum ama istikrarlı bir sorun var.

_AutoEquipmentItemPool'dan her seviyedeki FB eşyasını almak istiyorum.
mindaggre 1 max dg8 istiyorum
Üst üste post gönderildiği için tek mesajda birleştirildi:

Kodumda yardıma ihtiyacım var.
 
Oyla 0

Bu konuyu görüntüleyen kullanıcılar

Geri
Üst Alt