المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : Quest Upgrade System


Aeron
18-02-2015, 09:18 PM
السلام عليكم, النهاردة جايبلكم سيستم هينفع ناس كتير منكم و ناس كتير نفسها تعملو بس محدش جايلو فكرة ازاى, انا قولت اوفر عليكم و اخلى اول release ليا يبقى حاجة تنفعكم.

السيستم ده عبارة عن انك بتروح تعمل كويست و تجمع 5 انواع سلاح انت تحددو بعد كدة تروح لبتاع الكويس و هيشيلهم منك ال 5 اسلحة دول و يديك سلاح جديد.
طيب يلا نبدأ بقا.
ال procedure ده هيكون فى SRO_VT_SHARD

كود PHP:
CREATE PROC [_AeronQuestUpgrade]

@CharID int,
@QuestID int
as
DECLARE @CharName Varchar(MAX) = (select CharName16 from SHARD.dbo._Char Where CharID = @CharID)
if(@QuestID='Your quest id')
begin
Declare @OldItemCode varchar(128)
Declare @NewItemCode varchar(128)
Declare @ItemID INT
Select @ItemID = (Select ID From SHARD.dbo._RefObjCommon Where CodeName128=@OldItemCode)
select @OldItemCode = (select codename128 from SHARD.._refobjcommon where id = @itemID)
If @OldItemCode = 'ITEM_EU_TSTAFF_10_B_RARE'
begin
set @NewItemCode = 'ITEM_EU_TSTAFF_10_C_RARE'
end
else if @OldItemCode = 'ITEM_EU_TSWORD_10_B_RARE'
begin
set @NewItemCode = 'ITEM_EU_TSWORD_10_C_RARE'
end

Declare @OldItemCount int
Select @OldItemCount = (select COUNT(Item.refitemid) from SHARD.dbo._Items as Item inner Join SHARD.dbo._Inventory as inv on item.ID64 = inv.ItemID where inv.CharID = @CharID and item.RefItemID = @ItemID and item.Serial64 >0)
if(@OldItemCount >= 5)
begin
update SHARD.dbo._Inventory set ItemID = 0
where ItemID in (SELECT TOP 5 Item.ID64 from SHARD.dbo._Items as Item
inner Join SHARD.dbo._Inventory as inv on item.ID64 = inv.ItemID
where inv.CharID = @CharID and item.RefItemID = @ItemID and item.Serial64 >0)
update SHARD.dbo._Items set Serial64 = 0 where ID64 in (SELECT TOP 5 Item.ID64 from SHARD.dbo._Items as Item
inner Join SHARD.dbo._Inventory as inv
on item.ID64 = inv.ItemID
where inv.CharID = @CharID and item.RefItemID = @ItemID and item.Serial64 >0)
exec SHARD.dbo._ADD_ITEM_EXTERN @Charname,@NewItemCode,1,0
end
end


بعد كدة هنحط ده فى _quest_manage procedure فى SRO_VT_SHARD
كود PHP:
If @QuestID = 'Your quest id'
begin
exec _AeronQuestUpgrade @CharID , @QuestID
end

Hamza FiGo
18-02-2015, 11:06 PM
تسلم ايدك بس فين هو الكويست ^^

Dev. iLegend
19-02-2015, 12:01 AM
ظبط يا باشا ملف الكويست و Lines الكويست فى الداتا بيز وكذلك Line الان بي سي اللى هيبقا فيه الكويست
كمل موضوعك ..

Dangers SrO
19-02-2015, 01:04 AM
رجا اكتمال الموضوع:crash:

Aeron
19-02-2015, 01:26 AM
ظبط يا باشا ملف الكويست و Lines الكويست فى الداتا بيز وكذلك Line الان بي سي اللى هيبقا فيه الكويست
كمل موضوعك ..



فى مليون موضوع بيعلمك ازاى تعمل كويست, كفاية انى كتبت الكود و اللى عايز يستعملو يتعب و يعمل كويست بنفسو.

Dev. iLegend
19-02-2015, 12:38 PM
ماشي مش قصة ان اللى عاوز السيستم يعمل كويست سهلة .

الفكرة يا باشا فى حاجتين ..

انت مش شارح السيستم بالتفصيل .. يعني مثلاً هيجيبوا الخمس اسلحة منين كويست ولا من اليونيكات ولا الموبس ،،

هيغيروا ايه فى الـ Procedure عشان محدش يتلغبط

وكان من باب اولى انك تكمل موضوعك بملف كويست + Npc Lines
ع العموم مش مشكلة بس انت هارس حاجات كتير فى الـ Procedure ومش مترتب

دا نفس الـ Procedure بس مترتب ومتعدل فى بعض الاومر للأبسط اللى الناس تقدر تفهمه .

USE [SRO_VT_SHARD]
GO
/****** Object: StoredProcedure [dbo].[_AeronQuestUpgrade] Script Date: 02/19/2015 10:58:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[_AeronQuestUpgrade]
@CharID Int,
@QuestID Int
As

-- Declare expression.
Declare @OldItemCode Varchar(128) , @NewItemCode Varchar(128) , @ItemID Int , @OldItemCount Int
Declare @CharName Varchar(max) = (Select CharName16 From [SRO_VT_SHARD].[dbo].[_Char] Where CharID = @CharID)
-----------------------------------------------------------------------


IF @QuestID = 'Quest ID' -- Write here your quest ID
Begin

IF @OldItemCode = 'ITEM_EU_TSTAFF_10_B_RARE' -- First Old item code name
Begin
Set @NewItemCode = 'ITEM_EU_TSTAFF_10_C_RARE' -- First new item code name to be exchanged with 5x First Old one.
End
ELSE IF @OldItemCode = 'ITEM_EU_TSWORD_10_B_RARE' -- Second Old item code name
Begin
Set @NewItemCode = 'ITEM_EU_TSWORD_10_C_RARE' -- Second new item code name to be exchanged with 5x Second Old one.
-- Repeate this steps if u want more using ELSE IF.
End

--- Select Values ID and CodeName of Old item.
Select @ItemID = (Select ID From [SRO_VT_SHARD].[dbo].[_RefObjCommon] Where CodeName128 = @OldItemCode)
Select @OldItemCount = (Select Count(ItemID) From [SRO_VT_SHARD].[dbo].[_Inventory] Where ItemID in (Select ID64 From _Items Where RefItemID = @ItemID and Serial64 > 0) and CharID = @CharID)


IF @OldItemCount >= 5
Begin
-- Delete Top 5 old items from Char inventory to add later the new item.
Update SRO_VT_SHARD.dbo.[SRO_VT_SHARD].[dbo].[_Inventory] Set ItemID = 0
Where ItemID in (Select Top 5 ItemID From [SRO_VT_SHARD].[dbo].[_Inventory] Where ItemID in (Select ID64 From [SRO_VT_SHARD].[dbo].[_Items] Where RefItemID = @ItemID and Serial64 > 0) and CharID = @CharID Order by ItemID)
-- Set the rest of Items Serial = 0 if the old item count more than 5 items, for not use it later in same quest.
Update [SRO_VT_SHARD].[dbo].[_Items] Set Serial64 = 0
Where ID64 in (Select Top 5 ItemID From [SRO_VT_SHARD].[dbo].[_Inventory] Where ItemID in (Select ID64 From [SRO_VT_SHARD].[dbo].[_Items] Where RefItemID = @ItemID and Serial64 > 0) and CharID = @CharID Order by ItemID)
-- Add the new item to char name.
Execute [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @Charname,@NewItemCode,1,0
End
End

تقبل مروري

Aeron
19-02-2015, 09:33 PM
ماشي مش قصة ان اللى عاوز السيستم يعمل كويست سهلة .

الفكرة يا باشا فى حاجتين ..

انت مش شارح السيستم بالتفصيل .. يعني مثلاً هيجيبوا الخمس اسلحة منين كويست ولا من اليونيكات ولا الموبس ،،

هيغيروا ايه فى الـ Procedure عشان محدش يتلغبط

وكان من باب اولى انك تكمل موضوعك بملف كويست + Npc Lines
ع العموم مش مشكلة بس انت هارس حاجات كتير فى الـ Procedure ومش مترتب

دا نفس الـ Procedure بس مترتب ومتعدل فى بعض الاومر للأبسط اللى الناس تقدر تفهمه .

USE [SRO_VT_SHARD]
GO
/****** Object: StoredProcedure [dbo].[_AeronQuestUpgrade] Script Date: 02/19/2015 10:58:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[_AeronQuestUpgrade]
@CharID Int,
@QuestID Int
As

-- Declare expression.
Declare @OldItemCode Varchar(128) , @NewItemCode Varchar(128) , @ItemID Int , @OldItemCount Int
Declare @CharName Varchar(max) = (Select CharName16 From [SRO_VT_SHARD].[dbo].[_Char] Where CharID = @CharID)
-----------------------------------------------------------------------


IF @QuestID = 'Quest ID' -- Write here your quest ID
Begin

IF @OldItemCode = 'ITEM_EU_TSTAFF_10_B_RARE' -- First Old item code name
Begin
Set @NewItemCode = 'ITEM_EU_TSTAFF_10_C_RARE' -- First new item code name to be exchanged with 5x First Old one.
End
ELSE IF @OldItemCode = 'ITEM_EU_TSWORD_10_B_RARE' -- Second Old item code name
Begin
Set @NewItemCode = 'ITEM_EU_TSWORD_10_C_RARE' -- Second new item code name to be exchanged with 5x Second Old one.
-- Repeate this steps if u want more using ELSE IF.
End

--- Select Values ID and CodeName of Old item.
Select @ItemID = (Select ID From [SRO_VT_SHARD].[dbo].[_RefObjCommon] Where CodeName128 = @OldItemCode)
Select @OldItemCount = (Select Count(ItemID) From [SRO_VT_SHARD].[dbo].[_Inventory] Where ItemID in (Select ID64 From _Items Where RefItemID = @ItemID and Serial64 > 0) and CharID = @CharID)


IF @OldItemCount >= 5
Begin
-- Delete Top 5 old items from Char inventory to add later the new item.
Update SRO_VT_SHARD.dbo.[SRO_VT_SHARD].[dbo].[_Inventory] Set ItemID = 0
Where ItemID in (Select Top 5 ItemID From [SRO_VT_SHARD].[dbo].[_Inventory] Where ItemID in (Select ID64 From [SRO_VT_SHARD].[dbo].[_Items] Where RefItemID = @ItemID and Serial64 > 0) and CharID = @CharID Order by ItemID)
-- Set the rest of Items Serial = 0 if the old item count more than 5 items, for not use it later in same quest.
Update [SRO_VT_SHARD].[dbo].[_Items] Set Serial64 = 0
Where ID64 in (Select Top 5 ItemID From [SRO_VT_SHARD].[dbo].[_Inventory] Where ItemID in (Select ID64 From [SRO_VT_SHARD].[dbo].[_Items] Where RefItemID = @ItemID and Serial64 > 0) and CharID = @CharID Order by ItemID)
-- Add the new item to char name.
Execute [SRO_VT_SHARD].[dbo].[_ADD_ITEM_EXTERN] @Charname,@NewItemCode,1,0
End
End

تقبل مروري

جميل اوى بس لازم تستعمل join و inner join فى الاكواد اللى زى ديه عشان تضمن انها تشتغل, و بدل عمل procedure جديد انا ممكن الخصها فى 3 lines فى _Quest_manage procedure.

Dev. iLegend
20-02-2015, 04:51 AM
inner join & join بتطول البروسيدور ع الفاضي لما ممكن تستبدلها بسطر واحد وبيفى بنفس الغرض دا غير ان الخطوة اللي قبل الاخيرة مش عجباني .. ازاي تخلى باقي الاسلحة اللى معاه من نفس النوع اكنهم مش موجودين بالنسبة للسيستم .. هوضحلك اكتر .. انا معايا 7x CH Bow وظبت الاكواد فى الـ Procedure وعملت الكويست وسلمته واتحوللى 5 منهم لسلاح جديد .. واتبقى 2 .. افرض انا عاوز اكمل ع الاتنين دوول واعمل الكويست بكراكتر تانية ..!
انت فى الخطوة دي



update SHARD.dbo._Items set Serial64 = 0 where ID64 in (SELECT TOP 5 Item.ID64 from SHARD.dbo._Items as Item
inner Join SHARD.dbo._Inventory as inv
on item.ID64 = inv.ItemID
where inv.CharID = @CharID and item.RefItemID = @ItemID and item.Serial64 >0)

عملت كل الايتم اللي باقية فى الانفينتوري من نفس النوع Serial64 = 0
والسيستم اما يجي يحسب عدد الايتم اللى معاك بيحسبها لازم يكون السيريال اكبر من 0 .


Declare @OldItemCount int
Select @OldItemCount = (select COUNT(Item.refitemid) from SHARD.dbo._Items as Item inner Join SHARD.dbo._Inventory as inv on item.ID64 = inv.ItemID where inv.CharID = @CharID and item.RefItemID = @ItemID and item.Serial64 >0)
if(@OldItemCount >= 5)


يبقا انت كدا بتخلى الايتم اللى باقية ملهاش لازمة حتي لو اتنقلت فى اي كراكتر تانية .. طول ما السيريال 0 مش هيحسبها فى السيستم
ارجوا ان اكون وضحت النقطة دي
طب متعمل كويست صعب شوية وتخلى الريوارد Sun بدل متخلى الكويست يعمل ابجريد لخمس اسلحة .. بـ Sun

Jaffa
03-03-2015, 04:56 AM
انا مش فاهم ده غرضه ايه يريت حد يفهمنى

BabiliOn
14-03-2015, 03:04 AM
عايزين ملفات الكويست والاكواد الى هنربطو على البروسيدور دة !

27md
23-11-2015, 01:13 AM
حد جرب الطريقة ديه مع اى كويست يعنى اشتغل بيها فى اى كويست ليا ولا هى مش شغالة فى الاساس ؟
مش بكلم على البروديسور بكلم على الطريقة الى هى تسلم كويست يحصل كويرى ديه شغالة ؟