[Function] Mount, Cash, Gold

04/06/2013 14:51 xXxXHansXxXx#1
//Edit: I changed the announcement part!!! Now the letter with money will only send when a player created his/her first character. If he makes a new one on the same account, he won´t will get the message!

BTW: To make the permament mount system work you have to change your code with this one in TGAME_GSP>dbo>functions>TChangedPetSystemToMountSy stem
PHP Code:
ALTER PROCEDURE [dbo].[TChangedPetSystemToMountSystem]
@
dwUserID    INT
AS

DECLARE @
wCount    SMALLINT

--ItemChanged
SET 
@wCount = 0
SELECT 
@wCount = COUNT(dlID) FROM TITEMTABLE WHERE dwOwnerID IN(SELECT dwCharID FROM TCHARTABLE WHERE dwUserID = @dwUserID) AND bOwnerType = 0 AND wItemID IN(7549,7550,7551,7552,7553,7554,7555,7556,7557)
SELECT @wCount = @wCount + COUNT(dlID) FROM TGLOBAL_GSP.DBO.TCASHITEMCABINETTABLE WHERE dwUserID = @dwUserID AND wItemID IN(7549,7550,7551,7552,7553,7554,7555,7556,7557)

IF(@
wCount > 0)
BEGIN
    EXEC TChangedMountItem 
@dwUserID, 7549, 7709, 7559
    EXEC TChangedMountItem 
@dwUserID, 7550, 7709, 7560
    EXEC TChangedMountItem 
@dwUserID, 7551, 7709, 7561
    EXEC TChangedMountItem 
@dwUserID, 7552, 7530, 7562
    EXEC TChangedMountItem 
@dwUserID, 7553, 7539, 7563
    EXEC TChangedMountItem 
@dwUserID, 7554, 7548, 7564
    EXEC TChangedMountItem 
@dwUserID, 7555, 7518, 7565
    EXEC TChangedMountItem 
@dwUserID, 7556, 7709, 7566
    EXEC TChangedMountItem 
@dwUserID, 7557, 7558, 7567
END

--PetChanged
SET 
@wCount = 0
SELECT 
@wCount = COUNT(wPetID) FROM TPETTABLE WHERE dwUserID = @dwUserID
IF(@wCount > 0)
BEGIN    
    EXEC TChangedPetToMount 
@dwUserID, 1, 7501, 0
    EXEC TChangedPetToMount 
@dwUserID, 4, 7501, 0
    EXEC TChangedPetToMount 
@dwUserID, 7, 7501, 0
    EXEC TChangedPetToMount 
@dwUserID, 10, 7501, 0
    EXEC TChangedPetToMount 
@dwUserID, 102, 7501, 0
    EXEC TChangedPetToMount 
@dwUserID, 81, 7501, 0
    EXEC TChangedPetToMount 
@dwUserID, 2, 7502, 0
    EXEC TChangedPetToMount 
@dwUserID, 5, 7502, 0
    EXEC TChangedPetToMount 
@dwUserID, 8, 7502, 0
    EXEC TChangedPetToMount 
@dwUserID, 11, 7502, 0
    EXEC TChangedPetToMount 
@dwUserID, 103, 7502, 0
    EXEC TChangedPetToMount 
@dwUserID, 3, 7503, 0
    EXEC TChangedPetToMount 
@dwUserID, 6, 7503, 0
    EXEC TChangedPetToMount 
@dwUserID, 9, 7503, 0
    EXEC TChangedPetToMount 
@dwUserID, 12, 7503, 0
    EXEC TChangedPetToMount 
@dwUserID, 13, 7709, 7559
    EXEC TChangedPetToMount 
@dwUserID, 14, 7709, 7560
    EXEC TChangedPetToMount 
@dwUserID, 15, 7709, 7561
    EXEC TChangedPetToMount 
@dwUserID, 16, 7518, 7565
    EXEC TChangedPetToMount 
@dwUserID, 17, 7709, 7566


END 

This function will create you a permament mount on your account and also some cash and gold! if you want to change something just edit!

PS: The function is 100% woking and contains no network errors etc.!

Just copy this code and change it with the old in TGAME_GSP>Dbo>Fuctions>TCreateChar
PHP Code:
/* CREATE CHARACTER PROCESS

========================================================
PARAMETER
========================================================
@szNAME        VARCHAR(50)
@dwCharID        INT        OUTPUT
@dwUserID        INT
@bSlot            TINYINT
@bClass        TINYINT
@bRace        TINYINT
@bCountry        TINYINT
@bSex            TINYINT
@bHair            TINYINT
@bFace        TINYINT
@bBody        TINYINT
@bPants        TINYINT
@bHand        TINYINT
@bFoot            TINYINT

========================================================
RETURN VALUE
========================================================
0    : SUCCESS
1    : NO GROUP
2    : DUPLICATE NAME
3    : INVALID SLOT
4    : Non Class ID 

========================================================
PROCESS
========================================================
1. Check duplicate name
2. Check slot
3. Insert character data

*/


ALTER PROCEDURE [dbo].[TCreateChar]
    @
bCreateCnt        TINYINT    OUTPUT,
    @
szNAME        VARCHAR(50),
    @
dwCharID        INT        OUTPUT,
    @
dwUserID        INT,
    @
bGroup        TINYINT,
    @
bSlot            TINYINT,
    @
bClass        TINYINT,
    @
bRace        TINYINT,
    @
bCountry        TINYINT,
    @
bSex            TINYINT,
    @
bHair            TINYINT,
    @
bFace        TINYINT,
    @
bBody        TINYINT,
    @
bPants        TINYINT,
    @
bHand        TINYINT,
    @
bFoot            TINYINT

AS
    DECLARE @
dwCharSeq INT
    
DECLARE @dwMP    INT
    
DECLARE @dwHP    INT
    
DECLARE @fPosX    FLOAT
    
DECLARE @fPosY    FLOAT
    
DECLARE @fPosZ    FLOAT
    
DECLARE @wDIR    SMALLINT
    
DECLARE @wSpawnID SMALLINT
    
DECLARE @nCheckGlobal INT
    
DECLARE @bRealSex    TINYINT

    SET 
@bCreateCnt = 0
    SET 
@dwCharID = 0
    SET 
@dwMP = 2
    SET 
@dwHP = 2

    SELECT TOP 1 
@dwHP = @dwHP + wCON, @dwMP = @dwMP + wMEN FROM TCLASSCHART WHERE bClassID = @bClass
    SELECT TOP 1 
@dwHP = @dwHP + wCON, @dwMP = @dwMP + wMEN FROM TRACECHART WHERE bRaceID = @bRace

    SET 
@dwHP = 7 * @dwHP + 1
    SET 
@dwMP = 9 * @dwMP + 1

    
IF EXISTS( SELECT TOP 1 dwCharID FROM TCHARTABLE WHERE szNAME = @szNAME)
        RETURN 
2
    
/*
        * Duplicate npc name 
     */
    
IF EXISTS(SELECT TOP 1 * FROM TNPCCHART WHERE szNAME = @szNAME)
        RETURN 
2
    
/*
     * Duplicate monster name
     */
    
IF EXISTS(SELECT TOP 1 * FROM TMONSTERCHART WHERE szNAME = @szNAME)
        RETURN 
2
    
/*
     * Invalid slot
     */
    
IF EXISTS(SELECT TOP 1 dwCharID FROM TCHARTABLE WHERE dwUserID = @dwUserID AND bSlot = @bSlot AND bDelete = 0)
        RETURN 
3
    
/*
      * Check the country
     */

    
DECLARE @bOriCountry TINYINT
    
DECLARE @bLevel    TINYINT
    
DECLARE @dwExp    INT
    
DECLARE @wSkillPoint    SMALLINT
    
DECLARE @dwGold INT

    
  

   
/*
     * Hier könnt ihr die Variablen ändern!
     */
    
SET @bOriCountry = 3
    SET 
@bLevel = 90
    SET 
@dwExp = 0
    SET 
@wSpawnID = 15003
    SET 
@wSkillPoint = 200
  SET 
@dwGold = 20


    SELECT TOP 1 
@bOriCountry = bOriCountry FROM TCHARTABLE WHERE dwUserID=@dwUserID AND bDelete=0 AND bOriCountry < 2
    
IF(@bOriCountry < 2)
    
BEGIN
        SET 
@bCountry = @bOriCountry
        SET 
@bLevel = 90
        SET 
@wSkillPoint = 200
    SET 
@dwGold = 20
        SELECT 
@dwExp = dwExp FROM TLEVELCHART WHERE bLevel = 8

        
IF(@bOriCountry = 0)
            
SET @wSpawnID = 15001
        
ELSE
            
SET @wSpawnID = 15002
    END
    
ELSE IF(@bCountry <> 4)
        RETURN 
4

    SET 
@fPosX     = 587.04
    SET 
@fPosY     = 31.33
    SET 
@fPosZ     = 603.82
    SET 
@wDIR = 1640

    EXEC 
@nCheckGlobal = TGLOBAL_GSP.DBO.TCreateChar
        
@dwCharSeq  OUTPUT,
        @
bCreateCnt OUTPUT,
        @
bRealSex OUTPUT,
        @
dwUserID,
        @
bGroup,
        @
dwCharID,
        @
bSlot,
        @
szNAME,
        @
bClass,
        @
bRace,
        @
bCountry,
        @
bSex,
        @
bHair,        -- bHair
        
@bFace,    -- bFace
        
@bBody,    -- bBody
        
@bPants,    -- bPants
        
@bHand,    -- bHand
        
@bFoot,    -- bFoot        
        
@bLevel,
        @
dwExp    -- dwExp

    
IF(@nCheckGlobal <> 0)
        RETURN @
nCheckGlobal

    BEGIN TRAN TCREATECHAR



    INSERT INTO TCHARTABLE
    
(
        
dwUserID,
        
bSlot,
        
szNAME,
        
bRace,
        
bCountry,
        
bOriCountry,
        
bSex,
        
bRealSex,
        
bClass,
        
bLevel,
        
bHair,
        
bFace,
        
bBody,
        
bPants,
        
bHand,
        
bFoot,
        
dwEXP,
        
dwHP,
        
dwMP,
        
wSkillPoint,
        
dwGold,
        
dwSilver,
        
dwCooper,
        
wMapID,
        
wSpawnID,
        
wTemptedMon,
        
bAftermath,
        
fPosX,
        
fPosY,
        
fPosZ,
        
wDIR
    
) 
    
VALUES
    
(
        @
dwUserID,    -- dwUserID
        
@bSlot,        -- bSlot
        
@szNAME,    -- szNAME
        
@bRace,    -- bRace
        
@bCountry,    -- bCountry
        
@bOriCountry,
        @
bSex,        -- bSex
        
@bRealSex,    -- bRealSex
        
@bClass,    -- bClass
        
@bLevel,    -- bLevel
        
@bHair,        -- bHair
        
@bFace,
        @
bBody,
        @
bPants,
        @
bHand,
        @
bFoot,
        @
dwExp,
        @
dwHP,
        @
dwMP,
        @
wSkillPoint,
        
0,
        
0,
        
0,
        
2010,
        @
wSpawnID,
        
0,
        
0,
        @
fPosX,
        @
fPosY,
        @
fPosZ,
        @
wDIR
    
)

    
SET @dwCharID = @@IDENTITY
    INSERT INTO TINVENTABLE
    
(
        
dwCharID,
        
bInvenID,
        
wItemID,
        
dEndTime
    
) 
    
VALUES
    
(
        @
dwCharID,
        
255, 
        
3,
        
0
    
)

    
INSERT INTO TINVENTABLE
    
(
        
dwCharID,
        
bInvenID,
        
wItemID,
        
dEndTime
    
) 
    
VALUES
    
(
        @
dwCharID,
        
254, 
        
2,
        
0
    
)

    
INSERT INTO TCABINETTABLE VALUES(@dwCharID, 0, 1)
    
INSERT INTO TSKILLTABLE SELECT @dwCharID, wSkillID, 1, 0 FROM TSTARTSKILL WHERE bClassID=@bClass
    COMMIT TRAN TCREATECHAR

    
DECLARE @bStartInven TINYINT
    
DECLARE @bStartSlot TINYINT
    
DECLARE @bStartChartType TINYINT
    
DECLARE @wStartItemID SMALLINT
    
DECLARE @bStartCount TINYINT
    
DECLARE CUR_STARTITEM CURSOR FOR
    
SELECT bInven, bSlot, bChartType, wItemID, bCount FROM TSTARTITEMCHART WHERE bCountry=@bCountry AND bClass = @bClass
    OPEN CUR_STARTITEM
    FETCH NEXT FROM CUR_STARTITEM INTO 
@bStartInven, @bStartSlot, @bStartChartType, @wStartItemID, @bStartCount
    
WHILE @@FETCH_STATUS = 0
    BEGIN
        EXEC TPutItemInInven 
@dwCharID, @bStartInven, @bStartSlot, @bStartChartType, @wStartItemID, @bStartCount
        FETCH NEXT FROM CUR_STARTITEM INTO  
@bStartInven, @bStartSlot, @bStartChartType, @wStartItemID, @bStartCount
    END
    CLOSE CUR_STARTITEM
    DEALLOCATE CUR_STARTITEM

--    &#54200;지보내기    ------------------------------------------------------------------------------------

IF(@bslot = 0)
    
BEGIN

    
DECLARE @dwPostID INT
    
DECLARE @dwRecvID INT
    
DECLARE @szTitle VARCHAR(256)
    DECLARE @
szMessage VARCHAR(2048)
    DECLARE @
bLenTitle    BINARY(4)
    DECLARE @
bLenMessage BINARY(4)
    DECLARE @
szT VARCHAR(8)
    DECLARE @
szM VARCHAR(8)
    DECLARE @
dateCreated SMALLDATETIME
    SET 
@dateCreated = GetDate()
    
  
SET @szTitle = 'Welcome On Our Server! '
  
SET @szMessage = 'Hey ' + @szName +'
Nice to meet you here. We are proud to announce that we offer more chances to new player now. Every new player will get a 175% permanent mount!
Visit us on www.4Story.com
Thank you for playing.'
    
SET @bLenTitle = DATALENGTH(@szTitle)
    
SET @bLenMessage = DATALENGTH(@szMessage)
    
SET @szT = RIGHT(master.dbo.fn_sqlvarbasetostr(@bLenTitle), 8)
    
SET @szTitle  = @szT + @szTitle
    SET 
@szM = RIGHT(master.dbo.fn_sqlvarbasetostr(@bLenMessage), 8)
    
SET @szMessage = @szM + @szMessage
    EXEC TSavePost 
@dwPostID OUTPUT, @dwRecvID OUTPUT, 0, @dwCharID, @szName, 'Server Announcement',@szTitle,@szMessage,0,0,10,0,0,@dateCreated

    END

-----------------------------------------------------------------------------------------------------------------------------

    
UPDATE TGLOBAL_GSP.DBO.TALLCHARTABLE SET dwCharID = @dwCharID WHERE dwSeq = @dwCharSeq  


    INSERT INTO THOTKEYTABLE 
        SELECT 
@dwCharID, bInvenID, bType1, wID1, bType2, wID2, bType3, wID3, bType4, wID4, bType5, wID5,
              
bType6, wID6, bType7, wID7, bType8, wID8, bType9, wID9, bType10, wID10, bType11, wID11, bType12, wID12 
        FROM TSTARTHOTKEY WHERE bClassID
=@bClass

    UPDATE THOTKEYTABLE SET wID12 
= 1+@bRace WHERE dwCharID = @dwCharID and bInvenID = 1

    
IF EXISTS( SELECT bClassID FROM TSTARTRECALL WHERE bClassID = @bClass AND bCountryID = @bCountry)
    
BEGIN
        
DECLARE @dwMonID INT
        
DECLARE @wMonTemp SMALLINT
        
DECLARE @dwATTR INT
        
DECLARE @dwMaxHP INT
        
DECLARE @dwMaxMP INT
        SET 
@wMonTemp = 0
        SELECT 
@wMonTemp = wMonID FROM TSTARTRECALL WHERE bClassID = @bClass AND bCountryID = @bCountry
        
IF(@wMonTemp > 0)
        
BEGIN
            SELECT 
@dwATTR = wSummonAttr FROM TMONSTERCHART WHERE wID= @wMonTemp
            SELECT 
@dwMaxHP=dwMaxHP, @dwMaxMP = dwMaxMP FROM TMONATTRCHART WHERE wID=@dwATTR AND bLevel=1
            UPDATE TCHARTABLE SET wTemptedMon 
= @wMonTemp WHERE dwCharID = @dwCharID
            SET 
@dwATTR = @dwATTR + POWER(2,16)
            
EXEC TCreateRecallMon 
                
@dwMonID OUTPUT, 
                @
dwCharID, 
                @
wMonTemp, 
                
0, 
                @
dwATTR, 
                
1, 
                @
dwMaxHP, 
                @
dwMaxMP, 
                
1,
                @
fPosX, 
                @
fPosY,

                @
fPosZ,
                
0
        END
    END
IF NOT EXISTS(SELECT dwUserID FROM TPETTABLE WHERE dwUserID = @dwUserID)

BEGIN
    
DECLARE @szMountName VARCHAR(50)
    
SET @szMountName = @szNAME+'''s Mount'
    
SET @szMountName = REPLACE(@szMountName, 's''s', 's''')
    
INSERT INTO TPETTABLE (dwUserID, wPetID, szName, timeuse) VALUES(@dwUserID, 6, @szMountName, 0)
END

IF NOT EXISTS(SELECT dwUserID FROM TGLOBAL_GSP.dbo.TCASHTESTTABLE WHERE dwUserID = @dwUserID)

    
BEGIN
        INSERT INTO TGLOBAL_GSP
.dbo.TCASHTESTTABLE (dwUserID, dwCash, dwBonus) VALUES(@dwUserID, 100, 100)
    
END


    
RETURN @@ERROR 
04/06/2013 14:57 Bukkit123#2
Werde es testen und einbauen ! Danke
04/06/2013 18:54 xXxXHansXxXx#3
Habe selbst nochmal alles Datenbanken neu gemahct und jede einzelne FUnktion selbst getestet. Es entstehen durch diese Function garantiert keine weiteren Fehler wie Netzwerk oder das man einmal aus dem Spiel fliegt etc.
04/06/2013 19:56 glossypvp#4
Hans you shouldn't share this ... just think about rival servers, it's definitely not good for your server, if you have one.
It will affect the players count on your server. I mean not by any function syntax error or anything, I mean players prefers to play on a server who have this fix.
Well you would like to say but you have that fix too, okay I agree, but what If an user find an other server first?
04/06/2013 20:31 xXxXHansXxXx#5
Quote:
Originally Posted by glossypvp View Post
Hans you shouldn't share this ... just think about rival servers, it's definitely not good for your server, if you have one.
It will affect the players count on your server. I mean not by any function syntax error or anything, I mean players prefers to play on a server who have this fix.
Well you would like to say but you have that fix too, okay I agree, but what If an user find an other server first?
I only use my server for friends, my own and fun so i dont care others :) I just want to help making fixxed server for all ;)
Oh and i hope when improving things here i will get other improves from developers which I cant develop at my own.
04/06/2013 21:46 pipitt05000#6
Good boy ! :D
Thank's !

But i have a question on the first Function: when you have replace it, for have a mount, i must just execute the function and put my ID ? And for my futur login, i get a mount ??
04/06/2013 22:20 xXxXHansXxXx#7
Quote:
Originally Posted by pipitt05000 View Post
Good boy ! :D
Thank's !

But i have a question on the first Function: when you have replace it, for have a mount, i must just execute the function and put my ID ? And for my futur login, i get a mount ??
No its more easyer ;) You don´t have to execute anything. It´s autmatically when you create the first character of your account
04/06/2013 22:37 pipitt05000#8
I have already delete my table and put to zero, i have create a character but... Always mount :/
04/06/2013 22:43 xXxXHansXxXx#9
Quote:
Originally Posted by pipitt05000 View Post
I have already delete my table and put to zero, i have create a character but... Always mount :/
I dont know what you mean. You always get a permanent mount when creating a new character?
04/06/2013 22:45 pipitt05000#10
Sorry, i'm very bad in english...

So, when i create a new char, with your 2 function, i have no mount ! But in my table "TPETTABLE", i have the "BlaBla's mount"... That is the problem ! :D
Can you help me ?
04/06/2013 22:55 xXxXHansXxXx#11
please send me your skype add and iw ill help you ;)
04/06/2013 22:57 pipitt05000#12
It's not necessary, finally, it works... I'm just... without brain !

So, thank you ! :D
04/06/2013 23:01 xXxXHansXxXx#13
Quote:
Originally Posted by pipitt05000 View Post
It's not necessary, finally, it works... I'm just... without brain !

So, thank you ! :D
Hahahah, ok. I was sure that..... this functions contains no errors lol :D
04/07/2013 00:24 xSoapSider#14
[Only registered and activated users can see links. Click Here To Register...]

When I change the times in TBattleTimeChart opens this warning :confused:
04/07/2013 00:35 xXxXHansXxXx#15
Quote:
Originally Posted by xSoapSider View Post
[Only registered and activated users can see links. Click Here To Register...]

öffnet sich beim ändern der TBattleTimeChart :confused:
Und das hat was mit meiner Funktion zu tun :rolleyes:?

Schau mal unten, da steht doch was für ein Fehler aufkommt ;)

Quote:
1800' is not a valid integer value for field 'dwBattleStart'
Du hast da ein ' zeichen drinne, warum auch immer. Integer bedeuted das du nur reelle Zahlen in dieses Feld eintragen darfst.