قسم الشروحات و البرامج المستخدمة في عمل السيرفرات الخاصة[ قسم متخصص فى شروحات و البرامج في عمل السيرفرات الخاصة ] [ يرجى عدم وضع الأسئلة والاستفسارات في هذا القسم ]
السلام عليكم يا شباب انا كنت بتفحص داتابيز عندى ف لقيت فيها السيستم ده كويس جدا
ف حبيت اشاركه مع حضراتكم
شرح السيستم
هو عبارة عن هدية بتوصل للاعب تلقائيا لما بيوصل اخر لفل فى الجيم
طيب فيه سؤال مهم ! هل السيستم موجود على طول ؟
بمعنى ان كل واحد لما يوصل اخر لفل يجيله الهدية ؟ مش هيقف خالص ؟
لأ السيستم بيقف لما بيوصل عدد اللاعبين اللى وصله اخر لفل مثلا 300 لاعب
أو على حسب منتا هتحدد زى مهشرح فى اللى جاى
Create Procedure
كود PHP:
USE [SRO_VT_SYSTEMS] GO
/****** Object: StoredProcedure [dbo].[_Top300Sys] Script Date: 7/22/2016 10:41:05 PM ******/ SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER ON GO
CREATE procedure [dbo].[_Top300Sys] @CharID INT AS DECLARE @Count int = (SELECT COUNT(*) FROM SRO_VT_SYSTEMS.dbo._Top300) ,@CharName varchar(64) = (SELECT CharName16 FROM SRO_VT_SHARD.dbo._Char WITH (NOLOCK) WHERE CharID = @CharID) ,@UserID VARCHAR(50) = (SELECT UserJID FROM SRO_VT_SHARD.dbo._User WITH(NOLOCK) WHERE CharID = @CharID) DECLARE @UserID2 VARCHAR(50) = (SELECT AccountID FROM SRO_VT_SHARD.dbo._AccountJID WITH(NOLOCK) WHERE JID = @UserID)
DECLARE @StartC int SELECT @StartC = CASE WHEN @Count <= '99' THEN '100' WHEN @Count <= '199' THEN '200' WHEN @Count <= '299' THEN '300' ELSE 0 END
DECLARE @RewardNo1 Varchar(65) , @RewardNo2 Varchar(65) , @Notice Varchar(512) , @SilkReward int SELECT @RewardNo1 = [Reward-No1], @RewardNo2 = [Reward-No2],@SilkReward=SilkCountReward , @Notice = Notice FROM SRO_VT_SYSTEMS.dbo._Top300Reward WITH (NOLOCK) WHERE PlayersCount = @StartC
ركز بقى معايا واحدة واحدة انا عامل الهدايا تبقى
1- Grap Pet
2- Pet Extension
3- 10x Reverse Scroll
4- 10x Global Chatting
5- Premium Silver Time
لو عايز تغيرها تعمل ايه ؟
هتغير الأكواد بتاعتهم و
@data = 1
دى يعنى عدد الأيتم واحدة بس تغيرها على حسب منتا عايز برضو
العدد من 1 حتى 300
يعنى السيستم هيقف لما اللاعب رقم 300 يوصل اخر لفل
بعد كده مفيش حاجة هتتبعت تانى
طيب لو عايز اخليها مثلا 500 بدل 300 اعمل ايه ؟
هتبقى كده
اظن اتفهمت كده انتهينا من الأساسيات
Create Table [ 1 ]
كود PHP:
USE [SRO_VT_SYSTEMS] GO
/****** Object: Table [dbo].[_Top300] Script Date: 7/22/2016 10:41:45 PM ******/ SET ANSI_NULLS ON GO
-- Top #300 --By Mr.Rover IF @EventID = '22' AND @Data2 = '100' AND NOT EXISTS (SELECT * FROM SRO_VT_SYSTEMS.dbo._Top300 WITH (NOLOCK) WHERE CharID = @CharID) BEGIN EXEC SRO_VT_SYSTEMS.dbo.[_Top300Sys] @CharID END
ركز بقى ف دى كمان هنا معمول اخر لفل 100
انت عدلها على حسب السيرفر بتاعك اذا كان اكتر أو اقل
Table [ 2 ] Lines :
كود:
ITEM_COS_P_EXTENSION ITEM_COS_P_RABBIT_SCROLL 250 100 Hyrray! youre on the top 100 players to reach 100, therefore a reward will be automatically sent to your storage!
ITEM_COS_P_EXTENSION ITEM_COS_P_RABBIT_SCROLL 200 200 Hyrray! youre on the top 200 players to reach 100, therefore a reward will be automatically sent to your storage!
ITEM_COS_P_EXTENSION ITEM_COS_P_RABBIT_SCROLL 180 300 Hyrray! youre on the top 300 players to reach 100, therefore a reward will be automatically sent to your storage!
دى معناها ان اول 100 لاعب ياخده 500 سيلك
و ال100 اللى بعديهم 400 سيلك
و ال 100 اللى بعديهم 300 سيلك
عدلها على حسب منتا عايز بقى
المشاركة الأصلية كتبت بواسطة Hamza FiGo
عفوا ,,, لايمكنك مشاهده الروابط لانك غير مسجل لدينا [ للتسجيل اضغط هنا ]
وعملتها ^^
اقتباس:
المشاركة الأصلية كتبت بواسطة M.Fladivo
عفوا ,,, لايمكنك مشاهده الروابط لانك غير مسجل لدينا [ للتسجيل اضغط هنا ]
تسلم يكبير و جاري التجربه
شكرا كان فيه بس حاجة عايز اقولها البروسيدور الأول انا معدل فيه
لأنه كان بيبعت الأيتم ف الستورج
و ده ساعات مش بيشتغل بذات اذا كنت شغال على version 1.88
أو 1.93
ف اضطررت انى اغيره و اخليه يبعت على الـ Inventory
و اشتغل تمام و زى الفل
و لو فيه حد بيفهم اكتر منى نفسى نعمل Notice
بحيث مثلا لما اللاعب يوصل اخر لفل و هو اول واحد يوصل
يتقال مثلا
" CharName " Has Reached Max Level Congratz You're 1/300
و العدد فى النوتيك يتغير على حسب عدد البلاير
انا الصراحة لا استطيع لأنى مش محترف فى الـSql و السى شارب قد كده
ف لو حد بيفهم ياريت يضيفلنا الحاجة دى هتفيدنا كتير
بعد التجربه فى حاجات خفيفة اوى ناقصه بالنسبة للمبتدا ممكن يلاقيها صعبه شوية بالنسباله
فا انا هقول عليها علشان لو حد واجه مشكله ولا حاجه بس السيستم انا جربتو و شغال تمام
اول حاجة انت ناسى declare @cName
وتانى حاجة و الاخيرة ناسى بروسيدور بتاع الاهيدى سيلك
هيا حاجات عبيطه بس صعبة بالنسبة للجديد الا مش عارف فى ال sql
نيجى بقى للفكره الا انت عاوز تضيفها
انا عاملها انها تشتغل على برنامج Vsro Multi tools
ضيف السطر دا فى اخر البروسيدور
كود PHP:
INSERT INTO SRO_VT_SHARDLOG..iLegend_Tool ([Service],[Type],[Message],[Date]) Values ('1','Notice','[' +@CharName + '] Has Reached Max Level Congratz You Are ['+ CAST(@Count AS NVARCHAR) +'/300]',GETDATE())
او هتغير بس البروسيدور الا معاك بدا
كود PHP:
USE [SRO_VT_SHARDLOG]
GO
/****** Object: StoredProcedure [dbo].[_Top300Sys] Script Date: 8/30/2016 2:35:30 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create procedure [dbo].[_Top300Sys]
@CharID INT
AS
DECLARE @Count int = (SELECT COUNT(*) FROM SRO_VT_SHARDLOG.dbo._Top300)
,@CharName varchar(64) = (SELECT CharName16 FROM SRO_VT_SHARD.dbo._Char WITH (NOLOCK) WHERE CharID = @CharID)
,@UserID VARCHAR(50) = (SELECT UserJID FROM SRO_VT_SHARD.dbo._User WITH(NOLOCK) WHERE CharID = @CharID)
DECLARE @UserID2 VARCHAR(50) = (SELECT AccountID FROM SRO_VT_SHARD.dbo._AccountJID WITH(NOLOCK) WHERE JID = @UserID)
DECLARE @StartC int
SELECT @StartC = CASE WHEN @Count <= '99' THEN '100'
WHEN @Count <= '199' THEN '200'
WHEN @Count <= '299' THEN '300'
ELSE 0 END
DECLARE @RewardNo1 Varchar(65)
, @RewardNo2 Varchar(65)
, @Notice Varchar(512)
, @SilkReward int
SELECT @RewardNo1 = [Reward-No1], @RewardNo2 = [Reward-No2],@SilkReward=SilkCountReward , @Notice = Notice FROM SRO_VT_SHARDLOG.dbo._Top300Reward WITH (NOLOCK) WHERE PlayersCount = @StartC
--- Main Items To Help ---
DECLARE @cNAME Varchar(max)
INSERT INTO SRO_VT_SHARDLOG.dbo._Top300 (CharName,CharID,IsNumb) VALUES (@CharName,@CharID,@Count)
INSERT INTO SRO_VT_SHARDLOG..iLegend_Tool ([Service],[Type],[Message],[Date]) Values ('1','Notice','[' +@CharName + '] Has Reached Max Level Congratz You Are ['+ CAST(@Count AS NVARCHAR) +'/300]',GETDATE())
EXEC [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @codename = 'ITEM_COS_P_EXTENSION' ,@data = 1,@charname = @cNAME ,@opt_level = 0
EXEC [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @codename = 'ITEM_COS_P_RABBIT_SCROLL' ,@data = 1,@charname = @cNAME ,@opt_level = 0
EXEC [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @codename = 'ITEM_MALL_REVERSE_RETURN_SCROLL' ,@data = 10,@charname = @cNAME ,@opt_level = 0
EXEC [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @codename = 'ITEM_MALL_GLOBAL_CHATTING' ,@data = 10,@charname = @cNAME ,@opt_level = 0
EXEC [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @codename = 'ITEM_MALL_PREMIUM_GLOBAL_SILVERTIME' ,@data = 1,@charname = @cNAME ,@opt_level = 0
---- SILK For All Types ----
EXEC ACCOUNT_NOOB_TO.[CGI].[CGI_WebPurchaseSilk_Own] @UserID,@SilkReward
فى البروسيدور انزل عند سطر دا
كود PHP:
INSERT INTO SRO_VT_SHARDLOG..iLegend_Tool ([Service],[Type],[Message],[Date])
وغير مكان داتا بيز بتاعت البرنامج
و الشغال بالبروسيدور الا انا معدل عليه يعمل بروسيدور دا علشان السيلك
كود PHP:
USE [ACCOUNT_NOOB_TO]
GO
/****** Object: StoredProcedure [CGI].[CGI_WebPurchaseSilk_Own] Script Date: 8/30/2016 2:43:31 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
-- =============================================
-- Author: Abdelrhman Elbattawy
-- =============================================
Create PROCEDURE [CGI].[CGI_WebPurchaseSilk_Own]
@UserID INT,
@NumSilk INT
as
DECLARE @SilkRemain INT
DECLARE @OrderID INT
set @SilkRemain = 0
--DECLARE @PointRemain INT
-- BEGIN TRANSACTION
IF( not exists( SELECT * from SK_Silk where JID = @UserID))
BEGIN
INSERT SK_Silk(JID,silk_own,silk_gift,silk_point)VALUES(@UserID,@NumSilk,0,0)
--UPDATE Silk Own
END
ELSE
BEGIN
SET @SilkRemain = CGI.getSilkOwn(@UserID)
UPDATE SK_Silk SET silk_own = silk_own + @NumSilk WHERE JID = @UserID
--INSERT Silk Own
END
SELECT @OrderID = cast(MAX(OrderNumber)+1 as INT) FROM SK_SilkBuyList WHERE UserJID = @UserID
IF(@OrderID is NULL)
BEGIN
set @OrderID = 0
END
INSERT SK_SilkBuyList(UserJID,Silk_Type,Silk_Reason,Silk_Offset,Silk_Remain,ID,BuyQuantity,SlipPaper,RegDate,OrderNumber) VALUES( @UserID,0,0,@NumSilk,@SilkRemain + @NumSilk,0,1,"User Purchase Silk from VDC-Net2E Billing System",GETDATE(),@OrderID)
INSERT SK_SilkChange_BY_Web(JID,silk_remain,silk_offset,silk_type,reason) VALUES(@UserID,@SilkRemain + @NumSilk,@NumSilk,0,4)
IF (@@error <> 0 or @@rowcount = 0)
BEGIN
SELECT Result = "FAIL"
-- ROLLBACK TRANSACTION
RETURN
END
SELECT Result = "SUCCESS"
-- COMMIT TRANSACTION
RETURN
SET QUOTED_IDENTIFIER OFF
المشاركة الأصلية كتبت بواسطة elbattawy1st
عفوا ,,, لايمكنك مشاهده الروابط لانك غير مسجل لدينا [ للتسجيل اضغط هنا ]
تسلم ايديك يامعلم على المشاركه ^_^
بعد التجربه فى حاجات خفيفة اوى ناقصه بالنسبة للمبتدا ممكن يلاقيها صعبه شوية بالنسباله
فا انا هقول عليها علشان لو حد واجه مشكله ولا حاجه بس السيستم انا جربتو و شغال تمام
اول حاجة انت ناسى declare @cName
وتانى حاجة و الاخيرة ناسى بروسيدور بتاع الاهيدى سيلك
هيا حاجات عبيطه بس صعبة بالنسبة للجديد الا مش عارف فى ال sql
نيجى بقى للفكره الا انت عاوز تضيفها
انا عاملها انها تشتغل على برنامج Vsro Multi tools
ضيف السطر دا فى اخر البروسيدور
كود PHP:
INSERT INTO SRO_VT_SHARDLOG..iLegend_Tool ([Service],[Type],[Message],[Date]) Values ('1','Notice','[' +@CharName + '] Has Reached Max Level Congratz You Are ['+ CAST(@Count AS NVARCHAR) +'/300]',GETDATE())
او هتغير بس البروسيدور الا معاك بدا
كود PHP:
USE [SRO_VT_SHARDLOG] GO /****** Object: StoredProcedure [dbo].[_Top300Sys] Script Date: 8/30/2016 2:35:30 AM ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
Create procedure [dbo].[_Top300Sys] @CharID INT AS DECLARE @Count int = (SELECT COUNT(*) FROM SRO_VT_SHARDLOG.dbo._Top300) ,@CharName varchar(64) = (SELECT CharName16 FROM SRO_VT_SHARD.dbo._Char WITH (NOLOCK) WHERE CharID = @CharID) ,@UserID VARCHAR(50) = (SELECT UserJID FROM SRO_VT_SHARD.dbo._User WITH(NOLOCK) WHERE CharID = @CharID) DECLARE @UserID2 VARCHAR(50) = (SELECT AccountID FROM SRO_VT_SHARD.dbo._AccountJID WITH(NOLOCK) WHERE JID = @UserID)
DECLARE @StartC int SELECT @StartC = CASE WHEN @Count <= '99' THEN '100' WHEN @Count <= '199' THEN '200' WHEN @Count <= '299' THEN '300' ELSE 0 END
DECLARE @RewardNo1 Varchar(65) , @RewardNo2 Varchar(65) , @Notice Varchar(512) , @SilkReward int SELECT @RewardNo1 = [Reward-No1], @RewardNo2 = [Reward-No2],@SilkReward=SilkCountReward , @Notice = Notice FROM SRO_VT_SHARDLOG.dbo._Top300Reward WITH (NOLOCK) WHERE PlayersCount = @StartC
--- Main Items To Help --- DECLARE @cNAME Varchar(max) INSERT INTO SRO_VT_SHARDLOG.dbo._Top300 (CharName,CharID,IsNumb) VALUES (@CharName,@CharID,@Count) INSERT INTO SRO_VT_SHARDLOG..iLegend_Tool ([Service],[Type],[Message],[Date]) Values ('1','Notice','[' +@CharName + '] Has Reached Max Level Congratz You Are ['+ CAST(@Count AS NVARCHAR) +'/300]',GETDATE()) EXEC [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @codename = 'ITEM_COS_P_EXTENSION' ,@data = 1,@charname = @cNAME ,@opt_level = 0 EXEC [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @codename = 'ITEM_COS_P_RABBIT_SCROLL' ,@data = 1,@charname = @cNAME ,@opt_level = 0 EXEC [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @codename = 'ITEM_MALL_REVERSE_RETURN_SCROLL' ,@data = 10,@charname = @cNAME ,@opt_level = 0 EXEC [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @codename = 'ITEM_MALL_GLOBAL_CHATTING' ,@data = 10,@charname = @cNAME ,@opt_level = 0 EXEC [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @codename = 'ITEM_MALL_PREMIUM_GLOBAL_SILVERTIME' ,@data = 1,@charname = @cNAME ,@opt_level = 0 ---- SILK For All Types ---- EXEC ACCOUNT_NOOB_TO.[CGI].[CGI_WebPurchaseSilk_Own] @UserID,@SilkReward
فى البروسيدور انزل عند سطر دا
كود PHP:
INSERT INTO SRO_VT_SHARDLOG..iLegend_Tool ([Service],[Type],[Message],[Date])
وغير مكان داتا بيز بتاعت البرنامج
و الشغال بالبروسيدور الا انا معدل عليه يعمل بروسيدور دا علشان السيلك
كود PHP:
USE [ACCOUNT_NOOB_TO] GO
/****** Object: StoredProcedure [CGI].[CGI_WebPurchaseSilk_Own] Script Date: 8/30/2016 2:43:31 AM ******/ SET ANSI_NULLS ON GO
SET QUOTED_IDENTIFIER OFF GO
-- ============================================= -- Author: Abdelrhman Elbattawy -- ============================================= Create PROCEDURE [CGI].[CGI_WebPurchaseSilk_Own] @UserID INT, @NumSilk INT as DECLARE @SilkRemain INT DECLARE @OrderID INT set @SilkRemain = 0 --DECLARE @PointRemain INT -- BEGIN TRANSACTION IF( not exists( SELECT * from SK_Silk where JID = @UserID)) BEGIN INSERT SK_Silk(JID,silk_own,silk_gift,silk_point)VALUES(@UserID,@NumSilk,0,0) --UPDATE Silk Own END ELSE BEGIN SET @SilkRemain = CGI.getSilkOwn(@UserID) UPDATE SK_Silk SET silk_own = silk_own + @NumSilk WHERE JID = @UserID --INSERT Silk Own END SELECT @OrderID = cast(MAX(OrderNumber)+1 as INT) FROM SK_SilkBuyList WHERE UserJID = @UserID IF(@OrderID is NULL) BEGIN set @OrderID = 0 END INSERT SK_SilkBuyList(UserJID,Silk_Type,Silk_Reason,Silk_Offset,Silk_Remain,ID,BuyQuantity,SlipPaper,RegDate,OrderNumber) VALUES( @UserID,0,0,@NumSilk,@SilkRemain + @NumSilk,0,1,"User Purchase Silk from VDC-Net2E Billing System",GETDATE(),@OrderID) INSERT SK_SilkChange_BY_Web(JID,silk_remain,silk_offset,silk_type,reason) VALUES(@UserID,@SilkRemain + @NumSilk,@NumSilk,0,4) IF (@@error <> 0 or @@rowcount = 0) BEGIN SELECT Result = "FAIL" -- ROLLBACK TRANSACTION RETURN END SELECT Result = "SUCCESS" -- COMMIT TRANSACTION RETURN SET QUOTED_IDENTIFIER OFF
السيستم دا انا شغلته على C-sro واشتغل وسجل الاكونتات اللى طلعت 120 باتسلسل الارقام تمام بس المشكله عندى انه مبعتش هدايا وكمان المشكله فى السيلك وبرنامج iLegend_Tool لانه Vsro بس