Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Script] Transfer Stat from one character to another + extras

Joined
Jul 24, 2011
Messages
806
Reaction score
615
Functions:
- Stat Transfer
- Rune Transfer (and convert to sword and magic)
- Quest Rings transfer
- Additional item transfer

Code:
SQL:
/*Preparing variables */
DECLARE @usernum INT = 1

DECLARE @source_char INT = 8
DECLARE @destination_char INT = 9

DECLARE @source_class INT = 1
DECLARE @destination_class INT = 2

DECLARE @additional_stats INT = 0

DECLARE @skiprings INT = 1
DECLARE @skiprunes INT = 1
DECLARE @skipblended INT = 1

DECLARE @merga INT = 1
DECLARE @killian INT = 1
DECLARE @tempus INT = 0
DECLARE @tyrant INT = 1
DECLARE @awatyrant INT = 0
DECLARE @mazel INT = 0

DECLARE @rabbit INT = 0
DECLARE @rarerabbit INT = 0
DECLARE @epicrabbit INT = 0
DECLARE @uniquerabbit INT = 0
DECLARE @fred INT = 0

DECLARE @troll INT = 0
DECLARE @dragon INT = 0

/* ClassList */
/*
1 = Warrior
2 = Blader
3 = Wizard
4 = Force Archer
5 = Force Shielder
6 = Force Blader
*/

DECLARE @des_str INT
DECLARE @des_dex INT
DECLARE @des_int INT

/*Setting Destination character base stats*/
IF(@source_class = 1)
BEGIN
 SET @des_str = 1100
 SET @des_int = 100
 SET @des_dex = 300
END
ELSE IF(@source_class = 2)
BEGIN
 SET @des_str = 700
 SET @des_int = 100
 SET @des_dex = 700
END
ELSE IF(@source_class = 3)
BEGIN
 SET @des_str = 200
 SET @des_int = 1000
 SET @des_dex = 300
END
ELSE IF(@source_class = 4)
BEGIN
 SET @des_str = 200
 SET @des_int = 1000
 SET @des_dex = 300
END
ELSE IF(@source_class = 5)
BEGIN
 SET @des_str = 900
 SET @des_int = 300
 SET @des_dex = 300
END
ELSE IF(@source_class = 6)
BEGIN
 SET @des_str = 300
 SET @des_int = 300
 SET @des_dex = 900
END

/*Base Sets*/
DECLARE @level INT = 200
DECLARE @map INT = 1052671
DECLARE @warp INT = 1052671

DECLARE @res_pnt INT
DECLARE @des_pnt INT
DECLARE @add_pnt INT


/*Selecting Source Data*/
SELECT @res_pnt=STR+DEX+INT+PNT FROM Server01.dbo.cabal_character_table WHERE CharacterIdx=@source_char
SELECT @des_pnt=STR+DEX+INT+PNT FROM Server01.dbo.cabal_character_table WHERE CharacterIdx=@destination_char
SET @add_pnt = @res_pnt - @des_pnt + @additional_stats

/*UPDATE Destination Character*/
UPDATE Server01.dbo.cabal_character_table
    SET
        PNT = @add_pnt
    WHERE
        CharacterIdx=@destination_char

/*UPDATE Source Character*/       
UPDATE Server01.dbo.cabal_character_table
    SET
        STR = @des_str
        ,DEX = @des_dex
        ,INT = @des_int
        ,PNT = 0
    WHERE
        CharacterIdx=@source_char

/*Transfer RUNES*/
/*Setting up the Transfer type Sword/Magic */
DECLARE @sword INT = 0
DECLARE @magic INT = 0

IF (@destination_class = 1 OR @destination_class = 2 OR @destination_class = 5 OR @destination_class = 6)
BEGIN
    SET @sword = 1
END

IF (@destination_class = 3 OR @destination_class = 4)
BEGIN
    SET @magic = 1
END

/*Transfer ABILITY RUNES*/
IF(@skiprunes = 0)
BEGIN

DECLARE @runes VARBINARY(512) = 0x

SELECT @runes = PassiveAbilityData
      FROM Server01.dbo.cabal_soul_ability_table
      WHERE CharacterIdx=@source_char

IF(@sword = 1)
BEGIN
    set @runes = CAST(REPLACE(@runes,0xA2060000,0xA1060000) AS varbinary(512))
    set @runes = CAST(REPLACE(@runes,0xA9060000,0xA8060000) AS varbinary(512))
    set @runes = CAST(REPLACE(@runes,0x96030000,0x95030000) AS varbinary(512))
    set @runes = CAST(REPLACE(@runes,0x99030000,0x98030000) AS varbinary(512))
END

IF(@magic = 1)
BEGIN
    set @runes = CAST(REPLACE(@runes,0xA1060000,0xA2060000) AS varbinary(512))
    set @runes = CAST(REPLACE(@runes,0xA8060000,0xA9060000) AS varbinary(512))
    set @runes = CAST(REPLACE(@runes,0x95030000,0x96030000) AS varbinary(512))
    set @runes = CAST(REPLACE(@runes,0x98030000,0x99030000) AS varbinary(512))
END
      
UPDATE Server01.dbo.cabal_soul_ability_table
    SET
        PassiveAbilityData = @runes
    WHERE CharacterIdx=@destination_char
END

/*Transfer BLENDED RUNES */
IF(@skipblended = 0)
BEGIN

DECLARE @blended VARBINARY(256) = 0x

SELECT 
       @blended = BlendedAbilityData
      FROM Server01.dbo.cabal_soul_ability_table
      WHERE CharacterIdx=@source_char
/*
IF(@sword = 1)
BEGIN
    set @blended = CAST(REPLACE(@blended,0x020700000000000000000000,0xFC0600000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x030700000000000000000000,0xFD0600000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x040700000000000000000000,0xFE0600000000000000000000) AS varbinary(256))

    set @blended = CAST(REPLACE(@blended,0x050700000000000000000000,0xFF0600000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x060700000000000000000000,0x000700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x070700000000000000000000,0x010700000000000000000000) AS varbinary(256))

    set @blended = CAST(REPLACE(@blended,0x0E0700000000000000000000,0x080700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x0F0700000000000000000000,0x090700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x100700000000000000000000,0x0A0700000000000000000000) AS varbinary(256))

    set @blended = CAST(REPLACE(@blended,0x110700000000000000000000,0x0B0700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x120700000000000000000000,0x0C0700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x130700000000000000000000,0x0D0700000000000000000000) AS varbinary(256))
END

IF(@magic = 1)
BEGIN
    set @blended = CAST(REPLACE(@blended,0xFC0600000000000000000000,0x020700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0xFD0600000000000000000000,0x030700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0xFE0600000000000000000000,0x040700000000000000000000) AS varbinary(256))
    
    set @blended = CAST(REPLACE(@blended,0xFF0600000000000000000000,0x050700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x000700000000000000000000,0x060700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x010700000000000000000000,0x070700000000000000000000) AS varbinary(256))
    
    set @blended = CAST(REPLACE(@blended,0x080700000000000000000000,0x0E0700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x090700000000000000000000,0x0F0700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x0A0700000000000000000000,0x100700000000000000000000) AS varbinary(256))
    
    set @blended = CAST(REPLACE(@blended,0x0B0700000000000000000000,0x110700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x0C0700000000000000000000,0x120700000000000000000000) AS varbinary(256))
    set @blended = CAST(REPLACE(@blended,0x0D0700000000000000000000,0x130700000000000000000000) AS varbinary(256))
END
*/     
UPDATE Server01.dbo.cabal_soul_ability_table
    SET
        BlendedAbilityData = @blended
    WHERE CharacterIdx=@destination_char
END

IF(@skiprings = 0)
BEGIN
/*Sending Ring Materials*/
IF(@merga = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 526517 , @ItemOpt = 1367, @DurationIdx = 0
END

IF(@killian = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 3186 , @ItemOpt = 1435, @DurationIdx = 0
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 2842 , @ItemOpt = 100000000, @DurationIdx = 0
END

IF(@tempus = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 3605 , @ItemOpt = 2114, @DurationIdx = 0
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 3603 , @ItemOpt = 4097, @DurationIdx = 0
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 639 , @ItemOpt = 0, @DurationIdx = 0
END

IF(@tyrant = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 526857 , @ItemOpt = 1427, @DurationIdx = 0
END

IF(@awatyrant = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 3606 , @ItemOpt = 2129, @DurationIdx = 0
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 3604 , @ItemOpt = 4098, @DurationIdx = 0
END

IF(@mazel = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 3838 , @ItemOpt = 2323, @DurationIdx = 0
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 3904 , @ItemOpt = 2475, @DurationIdx = 0
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 1216 , @ItemOpt = 0, @DurationIdx = 0
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 1216 , @ItemOpt = 0, @DurationIdx = 0
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 1216 , @ItemOpt = 0, @DurationIdx = 0
END

END

IF(@rabbit = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 526924 , @ItemOpt = 0, @DurationIdx = 0
END

IF(@rarerabbit = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 526925 , @ItemOpt = 0, @DurationIdx = 0
END

IF(@epicrabbit = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 526926 , @ItemOpt = 0, @DurationIdx = 0
END

IF(@uniquerabbit = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 526927 , @ItemOpt = 0, @DurationIdx = 0
END

IF(@fred = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 526832 , @ItemOpt = 0, @DurationIdx = 0
END

IF(@troll = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 3734 , @ItemOpt = 0, @DurationIdx = 0
END

IF(@dragon = 1)
BEGIN
EXEC CabalCash.[dbo].[up_AddMyCashItemByItem] @UserNum = @usernum, @TranNo = 0, @ServerIdx = 1, @ItemIdx = 3839 , @ItemOpt = 0, @DurationIdx = 0
END
    
GO
 
Newbie Spellweaver
Joined
Dec 21, 2023
Messages
5
Reaction score
17
For this minor **** why you need to make it proper? It's just a simple script which working and doing nothing wrong.
Sometimes being professional making your work just harder.
wtf? It's just 2 lines of code bro..

SQL:
BEGIN TRAN



your updates..



COMMIT TRAN

It's not a question of being professional, it's a question of knowing what you're doing.. the basics..
I'm not going to explain the reasons, I just wanted to give some advice, follow it if you want
 
Junior Spellweaver
Joined
Jul 30, 2020
Messages
163
Reaction score
33
adding both lines will make it easier to not make a mess out of your database
 
Back
Top