vSRO vSRO İtem Balanslarını Ayarlama

vSRO_LoveR

Administrator
DEVELOPER
Kayıtlı Üye
Katılım
15 Ara 2025
Konular
78
Mesajlar
79
Tepkime puanı
3
Puanları
8
1765801932377.jpeg

📊 Item Balanslarını Ayarlama — Promaker Yöntemi




Selam arkadaşlar,

Uzun süredir item balans ayarlarını manuel olarak yaparken bayağı vakit kaybettiğimi fark ettim.
Bu işleri sürekli tekrar etmek yerine bir **SQL scripti** hazırladım ve artık bunu kolayca kullanabiliyorum.

Bu paylaşımı tüm denge ayarlarını hızla yapmak isteyenler için hazırladım.
Kod yapısı her bir item için ayrı ayrı düzenleme imkânı veriyor ve açıklamalarıyla birlikte bölümler hâlinde paylaşıyorum. :contentReference[oaicite:0]{index=0}

---

🧠 Multiplier ve Değer Mantığı

📌 Burada kullandığım “multiplier” değerleri, bir itemin artı (+x) seviyesinin o iteme eklediği bonus değerler baz alınarak uygulanmıştır.
Örneğin:

- Bir silahın fiziksel ve büyüsel saldırı değerlerini +5’e göre farklılaştırmak istedim.
- Kendi ihtiyacınıza göre bu değerleri yine düzenleyebilirsiniz.
- Hit rate, DEF, vs. gibi ayarları da istediğiniz şekilde özelleştirebilirsiniz. :contentReference[oaicite:1]{index=1}

---

📥 SQL Kodları — Item Balans Ayarları

-- =====================================================
-- SILKROAD ONLINE ITEM BALANCE SCRIPT
-- =====================================================
-- =====================================================
-- BÖLÜM 1: WEAPON (SİLAH) GÜNCELLEMELERİ
-- =====================================================

DECLARE @Weapon_PAttackMultiplier FLOAT = 5 -- Physical Attack çarpanı
DECLARE @Weapon_PAStrMultiplier FLOAT = 2 -- Physical Attack Reinforce çarpanı
DECLARE @Weapon_MAIntMultiplier FLOAT = 2.5 -- Magic Attack Reinforce çarpanı
DECLARE @Weapon_HRBonus INT = 2 -- Hit Rate bonusu
DECLARE @Weapon_CHRBonus INT = 2 -- Critical Hit Rate bonusu

DECLARE @WeaponMapping TABLE (
SourceItem NVARCHAR(128),
TargetItem NVARCHAR(128)
)

-- Mevcut item -> Güncellenecek item codename
INSERT INTO @WeaponMapping (SourceItem, TargetItem) VALUES
-- Chinese Weapons
('ITEM_CH_SWORD_14_C_RARE', 'ITEM_CH_SWORD_14_C_RARE_LEGENDARY'),
('ITEM_CH_BLADE_14_C_RARE', 'ITEM_CH_BLADE_14_C_RARE_LEGENDARY'),
('ITEM_CH_SPEAR_14_C_RARE', 'ITEM_CH_SPEAR_14_C_RARE_LEGENDARY'),
('ITEM_CH_TBLADE_14_C_RARE', 'ITEM_CH_TBLADE_14_C_RARE_LEGENDARY'),
('ITEM_CH_BOW_14_C_RARE', 'ITEM_CH_BOW_14_C_RARE_LEGENDARY'),
-- European Weapons
('ITEM_EU_DAGGER_14_C_RARE', 'ITEM_EU_DAGGER_14_C_RARE_LEGENDARY'),
('ITEM_EU_SWORD_14_C_RARE', 'ITEM_EU_SWORD_14_C_RARE_LEGENDARY'),
('ITEM_EU_TSWORD_14_C_RARE', 'ITEM_EU_TSWORD_14_C_RARE_LEGENDARY'),
('ITEM_EU_AXE_14_C_RARE', 'ITEM_EU_AXE_14_C_RARE_LEGENDARY'),
('ITEM_EU_CROSSBOW_14_C_RARE', 'ITEM_EU_CROSSBOW_14_C_RARE_LEGENDARY'),
('ITEM_EU_DARKSTAFF_14_C_RARE', 'ITEM_EU_DARKSTAFF_14_C_RARE_LEGENDARY'),
('ITEM_EU_TSTAFF_14_C_RARE', 'ITEM_EU_TSTAFF_14_C_RARE_LEGENDARY'),
('ITEM_EU_HARP_14_C_RARE', 'ITEM_EU_HARP_14_C_RARE_LEGENDARY'),
('ITEM_EU_STAFF_14_C_RARE', 'ITEM_EU_STAFF_14_C_RARE_LEGENDARY')

PRINT 'Weapon itemleri güncelleniyor...'

UPDATE target
SET
-- Physical Attack (truncate, sadece target alan > 0 ise)
target.PAttackMin_L = CASE WHEN target.PAttackMin_L > 0
THEN ROUND(CAST(source.PAttackMin_L + (source.PAttackInc * @Weapon_PAttackMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PAttackMin_L END,
target.PAttackMin_U = CASE WHEN target.PAttackMin_U > 0
THEN ROUND(CAST(source.PAttackMin_U + (source.PAttackInc * @Weapon_PAttackMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PAttackMin_U END,
target.PAttackMax_L = CASE WHEN target.PAttackMax_L > 0
THEN ROUND(CAST(source.PAttackMax_L + (source.PAttackInc * @Weapon_PAttackMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PAttackMax_L END,
target.PAttackMax_U = CASE WHEN target.PAttackMax_U > 0
THEN ROUND(CAST(source.PAttackMax_U + (source.PAttackInc * @Weapon_PAttackMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PAttackMax_U END,

-- Magic Attack (truncate, sadece target alan > 0 ise)
target.MAttackMin_L = CASE WHEN target.MAttackMin_L > 0
THEN ROUND(CAST(source.MAttackMin_L + (source.MAttackInc * @Weapon_PAttackMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MAttackMin_L END,
target.MAttackMin_U = CASE WHEN target.MAttackMin_U > 0
THEN ROUND(CAST(source.MAttackMin_U + (source.MAttackInc * @Weapon_PAttackMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MAttackMin_U END,
target.MAttackMax_L = CASE WHEN target.MAttackMax_L > 0
THEN ROUND(CAST(source.MAttackMax_L + (source.MAttackInc * @Weapon_PAttackMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MAttackMax_L END,
target.MAttackMax_U = CASE WHEN target.MAttackMax_U > 0
THEN ROUND(CAST(source.MAttackMax_U + (source.MAttackInc * @Weapon_PAttackMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MAttackMax_U END,

-- Physical Attack Reinforce (truncate, sadece target alan > 0 ise)
target.PAStrMin_L = CASE WHEN target.PAStrMin_L > 0
THEN ROUND(CAST(source.PAStrMin_L + (source.MAttackInc * @Weapon_PAStrMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PAStrMin_L END,
target.PAStrMin_U = CASE WHEN target.PAStrMin_U > 0
THEN ROUND(CAST(source.PAStrMin_U + (source.MAttackInc * @Weapon_PAStrMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PAStrMin_U END,
target.PAStrMax_L = CASE WHEN target.PAStrMax_L > 0
THEN ROUND(CAST(source.PAStrMax_L + (source.MAttackInc * @Weapon_PAStrMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PAStrMax_L END,
target.PAStrMax_U = CASE WHEN target.PAStrMax_U > 0
THEN ROUND(CAST(source.PAStrMax_U + (source.MAttackInc * @Weapon_PAStrMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PAStrMax_U END,

-- Magic Attack Reinforce (truncate, sadece target alan > 0 ise)
target.MAInt_Min_L = CASE WHEN target.MAInt_Min_L > 0
THEN ROUND(CAST(source.MAInt_Min_L + (source.MAttackInc * @Weapon_MAIntMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MAInt_Min_L END,
target.MAInt_Min_U = CASE WHEN target.MAInt_Min_U > 0
THEN ROUND(CAST(source.MAInt_Min_U + (source.MAttackInc * @Weapon_MAIntMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MAInt_Min_U END,
target.MAInt_Max_L = CASE WHEN target.MAInt_Max_L > 0
THEN ROUND(CAST(source.MAInt_Max_L + (source.MAttackInc * @Weapon_MAIntMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MAInt_Max_L END,
target.MAInt_Max_U = CASE WHEN target.MAInt_Max_U > 0
THEN ROUND(CAST(source.MAInt_Max_U + (source.MAttackInc * @Weapon_MAIntMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MAInt_Max_U END,

-- Hit Rate & Critical (INT varsayıldı; sadece target > 0 ise güncelle)
target.HR_L = CASE WHEN target.HR_L > 0 THEN (source.HR_L + @Weapon_HRBonus) ELSE target.HR_L END,
target.HR_U = CASE WHEN target.HR_U > 0 THEN (source.HR_U + @Weapon_HRBonus) ELSE target.HR_U END,
target.CHR_L = CASE WHEN target.CHR_L > 0 THEN (source.CHR_L + @Weapon_CHRBonus) ELSE target.CHR_L END,
target.CHR_U = CASE WHEN target.CHR_U > 0 THEN (source.CHR_U + @Weapon_CHRBonus) ELSE target.CHR_U END

FROM _RefObjItem target
INNER JOIN _RefObjCommon targetCommon ON target.ID = targetCommon.Link
INNER JOIN @WeaponMapping wm ON targetCommon.CodeName128 = wm.TargetItem
INNER JOIN _RefObjCommon sourceCommon ON sourceCommon.CodeName128 = wm.SourceItem
INNER JOIN _RefObjItem source ON source.ID = sourceCommon.Link

PRINT 'Weapon itemleri güncellendi. Etkilenen kayıt sayısı: ' + CAST(@@ROWCOUNT AS NVARCHAR(10))


-- =====================================================
-- BÖLÜM 2: SHIELD (KALKAN) GÜNCELLEMELERİ
-- =====================================================

DECLARE @Shield_PDMultiplier FLOAT = 5
DECLARE @Shield_MDMultiplier FLOAT = 5
DECLARE @Shield_PDStrMultiplier FLOAT = 2.5
DECLARE @Shield_MDIntMultiplier FLOAT = 2.5

DECLARE @ShieldMapping TABLE (
SourceItem NVARCHAR(128),
TargetItem NVARCHAR(128)
)

INSERT INTO @ShieldMapping (SourceItem, TargetItem) VALUES
('ITEM_CH_SHIELD_14_C_RARE', 'ITEM_CH_SHIELD_14_C_RARE_LEGENDARY'),
('ITEM_EU_SHIELD_14_C_RARE', 'ITEM_EU_SHIELD_14_C_RARE_LEGENDARY')

PRINT 'Shield itemleri güncelleniyor...'

UPDATE target
SET
-- PD (truncate, target > 0)
target.PD_L = CASE WHEN target.PD_L > 0
THEN ROUND(CAST(source.PD_L + (source.PDInc * @Shield_PDMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PD_L END,
target.PD_U = CASE WHEN target.PD_U > 0
THEN ROUND(CAST(source.PD_U + (source.PDInc * @Shield_PDMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PD_U END,

-- MD (truncate, target > 0)
target.MD_L = CASE WHEN target.MD_L > 0
THEN ROUND(CAST(source.MD_L + (source.MDInc * @Shield_MDMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MD_L END,
target.MD_U = CASE WHEN target.MD_U > 0
THEN ROUND(CAST(source.MD_U + (source.MDInc * @Shield_MDMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MD_U END,

-- Reinforces (truncate, target > 0)
target.PDStr_L = CASE WHEN target.PDStr_L > 0
THEN ROUND(CAST(source.PDStr_L + (source.PDInc * @Shield_PDStrMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PDStr_L END,
target.PDStr_U = CASE WHEN target.PDStr_U > 0
THEN ROUND(CAST(source.PDStr_U + (source.PDInc * @Shield_PDStrMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PDStr_U END,
target.MDInt_L = CASE WHEN target.MDInt_L > 0
THEN ROUND(CAST(source.MDInt_L + (source.MDInc * @Shield_MDIntMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MDInt_L END,
target.MDInt_U = CASE WHEN target.MDInt_U > 0
THEN ROUND(CAST(source.MDInt_U + (source.MDInc * @Shield_MDIntMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MDInt_U END

FROM _RefObjItem target
INNER JOIN _RefObjCommon targetCommon ON target.ID = targetCommon.Link
INNER JOIN @ShieldMapping sm ON targetCommon.CodeName128 = sm.TargetItem
INNER JOIN _RefObjCommon sourceCommon ON sourceCommon.CodeName128 = sm.SourceItem
INNER JOIN _RefObjItem source ON source.ID = sourceCommon.Link

PRINT 'Shield itemleri güncellendi. Etkilenen kayıt sayısı: ' + CAST(@@ROWCOUNT AS NVARCHAR(10))


-- =====================================================
-- BÖLÜM 3: ARMOR (ZIRH) GÜNCELLEMELERİ
-- =====================================================

DECLARE @Armor_PDMultiplier FLOAT = 5
DECLARE @Armor_MDMultiplier FLOAT = 5
DECLARE @Armor_PDStrMultiplier FLOAT = 2.5
DECLARE @Armor_MDIntMultiplier FLOAT = 2.5

DECLARE @ArmorMapping TABLE (
SourceItem NVARCHAR(128),
TargetItem NVARCHAR(128)
)

INSERT INTO @ArmorMapping (SourceItem, TargetItem) VALUES
-- Chinese Male Heavy
('ITEM_CH_M_HEAVY_14_HA_C_RARE', 'ITEM_CH_M_HEAVY_14_HA_C_RARE_LEGENDARY'),
('ITEM_CH_M_HEAVY_14_SA_C_RARE', 'ITEM_CH_M_HEAVY_14_SA_C_RARE_LEGENDARY'),
('ITEM_CH_M_HEAVY_14_BA_C_RARE', 'ITEM_CH_M_HEAVY_14_BA_C_RARE_LEGENDARY'),
('ITEM_CH_M_HEAVY_14_LA_C_RARE', 'ITEM_CH_M_HEAVY_14_LA_C_RARE_LEGENDARY'),
('ITEM_CH_M_HEAVY_14_AA_C_RARE', 'ITEM_CH_M_HEAVY_14_AA_C_RARE_LEGENDARY'),
('ITEM_CH_M_HEAVY_14_FA_C_RARE', 'ITEM_CH_M_HEAVY_14_FA_C_RARE_LEGENDARY'),
-- Chinese Male Light
('ITEM_CH_M_LIGHT_14_HA_C_RARE', 'ITEM_CH_M_LIGHT_14_HA_C_RARE_LEGENDARY'),
('ITEM_CH_M_LIGHT_14_SA_C_RARE', 'ITEM_CH_M_LIGHT_14_SA_C_RARE_LEGENDARY'),
('ITEM_CH_M_LIGHT_14_BA_C_RARE', 'ITEM_CH_M_LIGHT_14_BA_C_RARE_LEGENDARY'),
('ITEM_CH_M_LIGHT_14_LA_C_RARE', 'ITEM_CH_M_LIGHT_14_LA_C_RARE_LEGENDARY'),
('ITEM_CH_M_LIGHT_14_AA_C_RARE', 'ITEM_CH_M_LIGHT_14_AA_C_RARE_LEGENDARY'),
('ITEM_CH_M_LIGHT_14_FA_C_RARE', 'ITEM_CH_M_LIGHT_14_FA_C_RARE_LEGENDARY'),
-- Chinese Male Clothes
('ITEM_CH_M_CLOTHES_14_HA_C_RARE', 'ITEM_CH_M_CLOTHES_14_HA_C_RARE_LEGENDARY'),
('ITEM_CH_M_CLOTHES_14_SA_C_RARE', 'ITEM_CH_M_CLOTHES_14_SA_C_RARE_LEGENDARY'),
('ITEM_CH_M_CLOTHES_14_BA_C_RARE', 'ITEM_CH_M_CLOTHES_14_BA_C_RARE_LEGENDARY'),
('ITEM_CH_M_CLOTHES_14_LA_C_RARE', 'ITEM_CH_M_CLOTHES_14_LA_C_RARE_LEGENDARY'),
('ITEM_CH_M_CLOTHES_14_AA_C_RARE', 'ITEM_CH_M_CLOTHES_14_AA_C_RARE_LEGENDARY'),
('ITEM_CH_M_CLOTHES_14_FA_C_RARE', 'ITEM_CH_M_CLOTHES_14_FA_C_RARE_LEGENDARY'),
-- Chinese Female Heavy
('ITEM_CH_W_HEAVY_14_HA_C_RARE', 'ITEM_CH_W_HEAVY_14_HA_C_RARE_LEGENDARY'),
('ITEM_CH_W_HEAVY_14_SA_C_RARE', 'ITEM_CH_W_HEAVY_14_SA_C_RARE_LEGENDARY'),
('ITEM_CH_W_HEAVY_14_BA_C_RARE', 'ITEM_CH_W_HEAVY_14_BA_C_RARE_LEGENDARY'),
('ITEM_CH_W_HEAVY_14_LA_C_RARE', 'ITEM_CH_W_HEAVY_14_LA_C_RARE_LEGENDARY'),
('ITEM_CH_W_HEAVY_14_AA_C_RARE', 'ITEM_CH_W_HEAVY_14_AA_C_RARE_LEGENDARY'),
('ITEM_CH_W_HEAVY_14_FA_C_RARE', 'ITEM_CH_W_HEAVY_14_FA_C_RARE_LEGENDARY'),
-- Chinese Female Light
('ITEM_CH_W_LIGHT_14_HA_C_RARE', 'ITEM_CH_W_LIGHT_14_HA_C_RARE_LEGENDARY'),
('ITEM_CH_W_LIGHT_14_SA_C_RARE', 'ITEM_CH_W_LIGHT_14_SA_C_RARE_LEGENDARY'),
('ITEM_CH_W_LIGHT_14_BA_C_RARE', 'ITEM_CH_W_LIGHT_14_BA_C_RARE_LEGENDARY'),
('ITEM_CH_W_LIGHT_14_LA_C_RARE', 'ITEM_CH_W_LIGHT_14_LA_C_RARE_LEGENDARY'),
('ITEM_CH_W_LIGHT_14_AA_C_RARE', 'ITEM_CH_W_LIGHT_14_AA_C_RARE_LEGENDARY'),
('ITEM_CH_W_LIGHT_14_FA_C_RARE', 'ITEM_CH_W_LIGHT_14_FA_C_RARE_LEGENDARY'),
-- Chinese Female Clothes
('ITEM_CH_W_CLOTHES_14_HA_C_RARE', 'ITEM_CH_W_CLOTHES_14_HA_C_RARE_LEGENDARY'),
('ITEM_CH_W_CLOTHES_14_SA_C_RARE', 'ITEM_CH_W_CLOTHES_14_SA_C_RARE_LEGENDARY'),
('ITEM_CH_W_CLOTHES_14_BA_C_RARE', 'ITEM_CH_W_CLOTHES_14_BA_C_RARE_LEGENDARY'),
('ITEM_CH_W_CLOTHES_14_LA_C_RARE', 'ITEM_CH_W_CLOTHES_14_LA_C_RARE_LEGENDARY'),
('ITEM_CH_W_CLOTHES_14_AA_C_RARE', 'ITEM_CH_W_CLOTHES_14_AA_C_RARE_LEGENDARY'),
('ITEM_CH_W_CLOTHES_14_FA_C_RARE', 'ITEM_CH_W_CLOTHES_14_FA_C_RARE_LEGENDARY'),
-- European Male Heavy
('ITEM_EU_M_HEAVY_14_HA_C_RARE', 'ITEM_EU_M_HEAVY_14_HA_C_RARE_LEGENDARY'),
('ITEM_EU_M_HEAVY_14_SA_C_RARE', 'ITEM_EU_M_HEAVY_14_SA_C_RARE_LEGENDARY'),
('ITEM_EU_M_HEAVY_14_BA_C_RARE', 'ITEM_EU_M_HEAVY_14_BA_C_RARE_LEGENDARY'),
('ITEM_EU_M_HEAVY_14_LA_C_RARE', 'ITEM_EU_M_HEAVY_14_LA_C_RARE_LEGENDARY'),
('ITEM_EU_M_HEAVY_14_AA_C_RARE', 'ITEM_EU_M_HEAVY_14_AA_C_RARE_LEGENDARY'),
('ITEM_EU_M_HEAVY_14_FA_C_RARE', 'ITEM_EU_M_HEAVY_14_FA_C_RARE_LEGENDARY'),
-- European Male Light
('ITEM_EU_M_LIGHT_14_HA_C_RARE', 'ITEM_EU_M_LIGHT_14_HA_C_RARE_LEGENDARY'),
('ITEM_EU_M_LIGHT_14_SA_C_RARE', 'ITEM_EU_M_LIGHT_14_SA_C_RARE_LEGENDARY'),
('ITEM_EU_M_LIGHT_14_BA_C_RARE', 'ITEM_EU_M_LIGHT_14_BA_C_RARE_LEGENDARY'),
('ITEM_EU_M_LIGHT_14_LA_C_RARE', 'ITEM_EU_M_LIGHT_14_LA_C_RARE_LEGENDARY'),
('ITEM_EU_M_LIGHT_14_AA_C_RARE', 'ITEM_EU_M_LIGHT_14_AA_C_RARE_LEGENDARY'),
('ITEM_EU_M_LIGHT_14_FA_C_RARE', 'ITEM_EU_M_LIGHT_14_FA_C_RARE_LEGENDARY'),
-- European Male Clothes
('ITEM_EU_M_CLOTHES_14_HA_C_RARE', 'ITEM_EU_M_CLOTHES_14_HA_C_RARE_LEGENDARY'),
('ITEM_EU_M_CLOTHES_14_SA_C_RARE', 'ITEM_EU_M_CLOTHES_14_SA_C_RARE_LEGENDARY'),
('ITEM_EU_M_CLOTHES_14_BA_C_RARE', 'ITEM_EU_M_CLOTHES_14_BA_C_RARE_LEGENDARY'),
('ITEM_EU_M_CLOTHES_14_LA_C_RARE', 'ITEM_EU_M_CLOTHES_14_LA_C_RARE_LEGENDARY'),
('ITEM_EU_M_CLOTHES_14_AA_C_RARE', 'ITEM_EU_M_CLOTHES_14_AA_C_RARE_LEGENDARY'),
('ITEM_EU_M_CLOTHES_14_FA_C_RARE', 'ITEM_EU_M_CLOTHES_14_FA_C_RARE_LEGENDARY'),
-- European Female Heavy
('ITEM_EU_W_HEAVY_14_HA_C_RARE', 'ITEM_EU_W_HEAVY_14_HA_C_RARE_LEGENDARY'),
('ITEM_EU_W_HEAVY_14_SA_C_RARE', 'ITEM_EU_W_HEAVY_14_SA_C_RARE_LEGENDARY'),
('ITEM_EU_W_HEAVY_14_BA_C_RARE', 'ITEM_EU_W_HEAVY_14_BA_C_RARE_LEGENDARY'),
('ITEM_EU_W_HEAVY_14_LA_C_RARE', 'ITEM_EU_W_HEAVY_14_LA_C_RARE_LEGENDARY'),
('ITEM_EU_W_HEAVY_14_AA_C_RARE', 'ITEM_EU_W_HEAVY_14_AA_C_RARE_LEGENDARY'),
('ITEM_EU_W_HEAVY_14_FA_C_RARE', 'ITEM_EU_W_HEAVY_14_FA_C_RARE_LEGENDARY'),
-- European Female Light
('ITEM_EU_W_LIGHT_14_HA_C_RARE', 'ITEM_EU_W_LIGHT_14_HA_C_RARE_LEGENDARY'),
('ITEM_EU_W_LIGHT_14_SA_C_RARE', 'ITEM_EU_W_LIGHT_14_SA_C_RARE_LEGENDARY'),
('ITEM_EU_W_LIGHT_14_BA_C_RARE', 'ITEM_EU_W_LIGHT_14_BA_C_RARE_LEGENDARY'),
('ITEM_EU_W_LIGHT_14_LA_C_RARE', 'ITEM_EU_W_LIGHT_14_LA_C_RARE_LEGENDARY'),
('ITEM_EU_W_LIGHT_14_AA_C_RARE', 'ITEM_EU_W_LIGHT_14_AA_C_RARE_LEGENDARY'),
('ITEM_EU_W_LIGHT_14_FA_C_RARE', 'ITEM_EU_W_LIGHT_14_FA_C_RARE_LEGENDARY'),
-- European Female Clothes
('ITEM_EU_W_CLOTHES_14_HA_C_RARE', 'ITEM_EU_W_CLOTHES_14_HA_C_RARE_LEGENDARY'),
('ITEM_EU_W_CLOTHES_14_SA_C_RARE', 'ITEM_EU_W_CLOTHES_14_SA_C_RARE_LEGENDARY'),
('ITEM_EU_W_CLOTHES_14_BA_C_RARE', 'ITEM_EU_W_CLOTHES_14_BA_C_RARE_LEGENDARY'),
('ITEM_EU_W_CLOTHES_14_LA_C_RARE', 'ITEM_EU_W_CLOTHES_14_LA_C_RARE_LEGENDARY'),
('ITEM_EU_W_CLOTHES_14_AA_C_RARE', 'ITEM_EU_W_CLOTHES_14_AA_C_RARE_LEGENDARY'),
('ITEM_EU_W_CLOTHES_14_FA_C_RARE', 'ITEM_EU_W_CLOTHES_14_FA_C_RARE_LEGENDARY')

PRINT 'Armor itemleri güncelleniyor...'

UPDATE target
SET
-- PD (truncate, target > 0)
target.PD_L = CASE WHEN target.PD_L > 0
THEN ROUND(CAST(source.PD_L + (source.PDInc * @Armor_PDMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PD_L END,
target.PD_U = CASE WHEN target.PD_U > 0
THEN ROUND(CAST(source.PD_U + (source.PDInc * @Armor_PDMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PD_U END,

-- MD (truncate, target > 0)
target.MD_L = CASE WHEN target.MD_L > 0
THEN ROUND(CAST(source.MD_L + (source.MDInc * @Armor_MDMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MD_L END,
target.MD_U = CASE WHEN target.MD_U > 0
THEN ROUND(CAST(source.MD_U + (source.MDInc * @Armor_MDMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MD_U END,

-- Reinforces (truncate, target > 0)
target.PDStr_L = CASE WHEN target.PDStr_L > 0
THEN ROUND(CAST(source.PDStr_L + (source.PDInc * @Armor_PDStrMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PDStr_L END,
target.PDStr_U = CASE WHEN target.PDStr_U > 0
THEN ROUND(CAST(source.PDStr_U + (source.PDInc * @Armor_PDStrMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PDStr_U END,
target.MDInt_L = CASE WHEN target.MDInt_L > 0
THEN ROUND(CAST(source.MDInt_L + (source.MDInc * @Armor_MDIntMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MDInt_L END,
target.MDInt_U = CASE WHEN target.MDInt_U > 0
THEN ROUND(CAST(source.MDInt_U + (source.MDInc * @Armor_MDIntMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MDInt_U END

FROM _RefObjItem target
INNER JOIN _RefObjCommon targetCommon ON target.ID = targetCommon.Link
INNER JOIN @ArmorMapping am ON targetCommon.CodeName128 = am.TargetItem
INNER JOIN _RefObjCommon sourceCommon ON sourceCommon.CodeName128 = am.SourceItem
INNER JOIN _RefObjItem source ON source.ID = sourceCommon.Link

PRINT 'Armor itemleri güncellendi. Etkilenen kayıt sayısı: ' + CAST(@@ROWCOUNT AS NVARCHAR(10))


-- =====================================================
-- BÖLÜM 4: ACCESSORY (AKSESUAR) GÜNCELLEMELERİ
-- =====================================================

DECLARE @Acc_PARMultiplier FLOAT = 5
DECLARE @Acc_MARMultiplier FLOAT = 5

DECLARE @AccessoryMapping TABLE (
SourceItem NVARCHAR(128),
TargetItem NVARCHAR(128)
)

-- 14 -> 15 accessory
INSERT INTO @AccessoryMapping (SourceItem, TargetItem) VALUES
-- European Accessories
('ITEM_EU_RING_14_C_RARE', 'ITEM_EU_RING_14_C_RARE_LEGENDARY'),
('ITEM_EU_EARRING_14_C_RARE', 'ITEM_EU_EARRING_14_C_RARE_LEGENDARY'),
('ITEM_EU_NECKLACE_14_C_RARE', 'ITEM_EU_NECKLACE_14_C_RARE_LEGENDARY'),
-- Chinese Accessories
('ITEM_CH_RING_14_C_RARE', 'ITEM_CH_RING_14_C_RARE_LEGENDARY'),
('ITEM_CH_EARRING_14_C_RARE', 'ITEM_CH_EARRING_14_C_RARE_LEGENDARY'),
('ITEM_CH_NECKLACE_14_C_RARE', 'ITEM_CH_NECKLACE_14_C_RARE_LEGENDARY')

PRINT 'Accessory itemleri güncelleniyor...'

UPDATE target
SET
-- PAR (truncate; target > 0)
target.PAR_L = CASE WHEN target.PAR_L > 0
THEN ROUND(CAST(source.PAR_L + (source.PARInc * @Acc_PARMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PAR_L END,
target.PAR_U = CASE WHEN target.PAR_U > 0
THEN ROUND(CAST(source.PAR_U + (source.PARInc * @Acc_PARMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.PAR_U END,

-- MAR (truncate; target > 0)
target.MAR_L = CASE WHEN target.MAR_L > 0
THEN ROUND(CAST(source.MAR_L + (source.MARInc * @Acc_MARMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MAR_L END,
target.MAR_U = CASE WHEN target.MAR_U > 0
THEN ROUND(CAST(source.MAR_U + (source.MARInc * @Acc_MARMultiplier) AS DECIMAL(18,6)), 2, 1)
ELSE target.MAR_U END

FROM _RefObjItem target
INNER JOIN _RefObjCommon targetCommon ON target.ID = targetCommon.Link
INNER JOIN @AccessoryMapping acc ON targetCommon.CodeName128 = acc.TargetItem
INNER JOIN _RefObjCommon sourceCommon ON sourceCommon.CodeName128 = acc.SourceItem
INNER JOIN _RefObjItem source ON source.ID = sourceCommon.Link

PRINT 'Accessory itemleri güncellendi. Etkilenen kayıt sayısı: ' + CAST(@@ROWCOUNT AS NVARCHAR(10))

PRINT ''
PRINT '====================================================='
PRINT 'TÜM GÜNCELLEMELER TAMAMLANDI!'
PRINT '====================================================='

ℹ️ Açıklamalar


• ItemID → item_proto’daki ID
• PlusX → + basma çarpanı

⚠️ Tavsiyeler


✔ Test serverında deneyin
✔ Aşırı çarpanlardan kaçının
✔ PvP / PvE dengesini ayrı ayrı test edin
 
Geri
Üst Alt
TR
EN
VI
AR
RU