السلام عليكم و رحمة الله و بركاته
احنا شوفنا مواضيع كتير فى اكتر من منتدى عن الموضوع ده و الفكرة ان الراجل اللى كتب الموضوع ده مشرحش ازاى ممكن تنفذوا بالتفصيل
ركزوا معايا شويه
فكرة الموضوع ده انو بيعتمد على جدول اسمو dbo._timedjop
الجدول دة بيتسجل فيه اى حاجة الكاركتر بيعملها فى اللعبه بيكون ليها وقت محدد
مثلا
speed drug , premium , و مجموعه تانيه من الاسكرولات
و الموضوع كان عبارة عن اضافه ايتم جديد و فيه سطور لازم تتحط فى Refskill
و اعتقد ان فى ناس كتير جدا شبهى مش بتعرف تتعامل مع الجدول دة بالاخص لان ملفاتو اللى فى الميديا متشفرة و ناس كتير و انا منها مش بنعرف نتعامل مع الملفات المتشفرة دى
ركزوا شويه
البروسيديو اللى موجود فى الموضوع بدايته مكتوب فيها
if(@
JobID= '
33801')
اللى يهمنا هنا و باين جدا الرقم اللى مكتوب بالازق و الكلمة اللى مكتوبه بالبنى
ايه هما
الكلمة البنى هى خانه موجودة فى جدول Timedjop
بيتكتب فيها رقم زى الرقم اللى مكتوب بالازرق دة
طب ايه هو الرقم الازرق ده
حقولك هو رقم الاسكيلايه اللى موجودة فى جدول _refobjitem اللى بتكون خاصه بالايتم او الاسكرول اللى انت ضربتها
طيب دلوقتى فهمنا دوول ايه
طب حنعمل ايه بعد كدة ؟
الجمله بيقولك ان لما يكون فى الخانه jopid مكتوب فيها الرقم 33801
نفذ الامر اللى تحتها و اللى هو
|
|
|
begin declare @TotalSP int declare @TotalSPMastery int SELECT @TotalSP = SUM(_RefSkill.ReqLearn_SP) FROM _RefSkill, _CharSkill WHERE _RefSkill.ID=_CharSkill.SkillID AND _CharSkill.CharID=@CharID AND _RefSkill.ReqCommon_MasteryLevel1 <= '120' SELECT @TotalSPMastery = SUM(_RefLevel.Exp_M) FROM _CharSkillMastery, _RefLevel WHERE _RefLevel.Lvl=_CharSkillMastery.Level AND _CharSkillMastery.CharID=@CharID AND _CharSkillMastery.Level <= '120' UPDATE _Char SET RemainSkillPoint=RemainSkillPoint+@TotalSP+@TotalSPMastery+200000 WHERE CharID=@CharID DELETE _CharSkill FROM _RefSkill, _CharSkill WHERE _RefSkill.ID=_CharSkill.SkillID AND _CharSkill.CharID=@CharID AND _RefSkill.ReqCommon_MasteryLevel1 <= '120' AND _RefSkill.ID NOT IN (1,70,40,2,8421,9354,9355,11162,9944,8419,8420,11526,10625) UPDATE _CharSkillMastery SET Level='0' WHERE CharID=@CharID AND Level <= '120' return -3 end
|
الامر دة عبارة عن ايه ؟
انو حينفذ استعلام ( query ) فى قواعد البيانات حينفذ فيه تنزيل كل الاسكيلات
اللى عند الشخص اللى ضرب الاسكرول دى
ازاى ؟
متنساش ان جدول ال timedjop بيكون فيه خانه مكتوب فيها رقم الاى دى الخاص بالكاركتر اللى ضارب الاسكرول
طب انت بتتكلم كتير و فى الاخر مقولتش حنعمل ايه
بصوا من الاخر
انت حتشوف اى ايتم سكرول عندك مش متستخدمها فى الجيم عندك مثلا عفوا ,,, لايمكنك مشاهده الروابط لانك غير مسجل لدينا
[ للتسجيل اضغط هنا ]
و دة الكود بتاعها فى refobjcommon
ITEM_ETC_E041225_CANDY_RED
حتجيب الاى دى بتاعها اللى موجود فى Refobjitem و تمشى فى السطر بتاعو لغايه ما تلاقى اسم الاسكلايه اللى بتشتغل لما بتضرب الاسكرول دى
و تجرى على جدول refskill و تدور على رقم الاى دى الخاص بالاسكلايه دى
و تحطو مكان الرقم اللى مكتوب باللون الازرق
بس كدة انتهى الموضوع ؟
لا حاسب لسه منتهاش
حتروح على البروسيديور بتاع _Addtimedjop
حتيجى فى اخرو حتلاقى الجمله دى
|
|
|
set @NewJobID = @@identity if (@@error <> 0 or @@rowcount = 0) return -3 return @NewJobID
|
و حتروح واخد البروسيديور اللى فى الموضوع و تحطو فوق الجمله دى على طول
مش تحتها زى ما ناس كتير كانت بتعمل
علشان لو حتيطوا تحتها : الامر مش حيتنفذ
و فى الاخر حيكون شكل البروسيديور بتاع Addtimedjop شبه دة و هو دة اللى عندى فى السيرفر بتاعى
|
|
|
USE [SRO_VT_SHARD] GO /****** Object: StoredProcedure [dbo].[_AddTimedJob] Script Date: 06/03/2013 08:15:40 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
ALTER procedure [dbo].[_AddTimedJob] @CharID int, @Category tinyint, @JobID int, @TimeToKeep int, @Data1 int, @Data2 int, --##begin due to develop composite item @Data3 int, @Data4 int, @Data5 int, @Data6 int, @Data7 int, @Data8 int, @Serial64 bigint, @JID int --##end due to develop composite item as if (not exists (select CharID from _Char with (nolock) where CharID = @CharID)) return -1 if (@TimeToKeep <= 0) return -2 declare @NewJobID int set @NewJobID = 0 --##begin due to develop composite item insert into _TimedJob(CharID,Category,JobID,TimeToKeep,Data1,Data2,Data3,Data4,Data5,Data6,Data7,Data8,Serial64,JID) values(@CharID, @Category, @JobID, @TimeToKeep, @Data1, @Data2, @Data3, @Data4, @Data5, @Data6, @Data7, @Data8, @Serial64, @JID) --##end due to develop composite item if(@JobID= '3526') begin declare @TotalSP int declare @TotalSPMastery int SELECT @TotalSP = SUM(_RefSkill.ReqLearn_SP) FROM _RefSkill, _CharSkill WHERE _RefSkill.ID=_CharSkill.SkillID AND _CharSkill.CharID=@CharID AND _RefSkill.ReqCommon_MasteryLevel1 <= '130' SELECT @TotalSPMastery = SUM(_RefLevel.Exp_M) FROM _CharSkillMastery, _RefLevel WHERE _RefLevel.Lvl=_CharSkillMastery.Level AND _CharSkillMastery.CharID=@CharID AND _CharSkillMastery.Level <= '130' UPDATE _Char SET RemainSkillPoint=RemainSkillPoint+@TotalSP+@TotalSPMastery+200000 WHERE CharID=@CharID DELETE _CharSkill FROM _RefSkill, _CharSkill WHERE _RefSkill.ID=_CharSkill.SkillID AND _CharSkill.CharID=@CharID AND _RefSkill.ReqCommon_MasteryLevel1 <= '130' AND _RefSkill.ID NOT IN (1,70,40,2,8421,9354,9355,11162,9944,8419,8420,11526,10625) UPDATE _CharSkillMastery SET Level='0' WHERE CharID=@CharID AND Level <= '130' return -3 END if(@JobID = '3527') begin declare @Strength int declare @Intellect int declare @MaxLevel int declare @RemainStatPoint int select @MaxLevel = MaxLevel from _Char where CharID=@CharID set @RemainStatPoint = (@MaxLevel*3)-3 set @MaxLevel = @MaxLevel+19 UPDATE _Char SET Strength=@MaxLevel, Intellect=@MaxLevel, RemainStatPoint=@RemainStatPoint WHERE CharID=@CharID return -3 end set @NewJobID = @@identity if (@@error <> 0 or @@rowcount = 0) return -3 return @NewJobID
|
انا هنا ضايف الاكسرول بتاع RESET STATE & RESET SKILLS
اعتقد انا كدة فهمتكوا الموضوع بكل بساطة
متنسوناش بس
و دة الجزء الخاص لتنزيل الاسكيل
|
|
|
if(@JobID= '3526') begin declare @TotalSP int declare @TotalSPMastery int SELECT @TotalSP = SUM(_RefSkill.ReqLearn_SP) FROM _RefSkill, _CharSkill WHERE _RefSkill.ID=_CharSkill.SkillID AND _CharSkill.CharID=@CharID AND _RefSkill.ReqCommon_MasteryLevel1 <= '130' SELECT @TotalSPMastery = SUM(_RefLevel.Exp_M) FROM _CharSkillMastery, _RefLevel WHERE _RefLevel.Lvl=_CharSkillMastery.Level AND _CharSkillMastery.CharID=@CharID AND _CharSkillMastery.Level <= '130' UPDATE _Char SET RemainSkillPoint=RemainSkillPoint+@TotalSP+@TotalSPMastery+200000 WHERE CharID=@CharID DELETE _CharSkill FROM _RefSkill, _CharSkill WHERE _RefSkill.ID=_CharSkill.SkillID AND _CharSkill.CharID=@CharID AND _RefSkill.ReqCommon_MasteryLevel1 <= '130' AND _RefSkill.ID NOT IN (1,70,40,2,8421,9354,9355,11162,9944,8419,8420,11526,10625) UPDATE _CharSkillMastery SET Level='0' WHERE CharID=@CharID AND Level <= '130' return -3 END
|
و دة الجزء الخاص لتنزيل الاستيت بوينت
|
|
|
if(@JobID = '3527') begin declare @Strength int declare @Intellect int declare @MaxLevel int declare @RemainStatPoint int select @MaxLevel = MaxLevel from _Char where CharID=@CharID set @RemainStatPoint = (@MaxLevel*3)-3 set @MaxLevel = @MaxLevel+19 UPDATE _Char SET Strength=@MaxLevel, Intellect=@MaxLevel, RemainStatPoint=@RemainStatPoint WHERE CharID=@CharID return -3 end
|
نتمنى نشوفكم على خير ان شاء الله