السلام عليكم و رحمة الله و بركاته
احنا شوفنا مواضيع كتير فى اكتر من منتدى عن الموضوع ده و الفكرة ان الراجل اللى كتب الموضوع ده مشرحش ازاى ممكن تنفذوا بالتفصيل
ركزوا معايا شويه
فكرة الموضوع ده انو بيعتمد على جدول اسمو dbo._timedjop
الجدول دة بيتسجل فيه اى حاجة الكاركتر بيعملها فى اللعبه بيكون ليها وقت محدد
مثلا
speed drug , premium , و مجموعه تانيه من الاسكرولات
و الموضوع كان عبارة عن اضافه ايتم جديد و فيه سطور لازم تتحط فى Refskill
و اعتقد ان فى ناس كتير جدا شبهى مش بتعرف تتعامل مع الجدول دة بالاخص لان ملفاتو اللى فى الميديا متشفرة و ناس كتير و انا منها مش بنعرف نتعامل مع الملفات المتشفرة دى
ركزوا شويه
البروسيديو اللى موجود فى الموضوع بدايته مكتوب فيها
if(@
JobID= '
33801')
اللى يهمنا هنا و باين جدا الرقم اللى مكتوب بالازق و الكلمة اللى مكتوبه بالبنى
ايه هما
الكلمة البنى هى خانه موجودة فى جدول Timedjop
بيتكتب فيها رقم زى الرقم اللى مكتوب بالازرق دة
طب ايه هو الرقم الازرق ده
حقولك هو رقم الاسكيلايه اللى موجودة فى جدول _refobjitem اللى بتكون خاصه بالايتم او الاسكرول اللى انت ضربتها
طيب دلوقتى فهمنا دوول ايه
طب حنعمل ايه بعد كدة ؟
الجمله بيقولك ان لما يكون فى الخانه jopid مكتوب فيها الرقم 33801
نفذ الامر اللى تحتها و اللى هو
كود PHP:
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
حتيجى فى اخرو حتلاقى الجمله دى
كود PHP:
set @NewJobID = @@identity
if (@@error <> 0 or @@rowcount = 0)
return -3
return @NewJobID
و حتروح واخد البروسيديور اللى فى الموضوع و تحطو فوق الجمله دى على طول
مش تحتها زى ما ناس كتير كانت بتعمل
علشان لو حتيطوا تحتها : الامر مش حيتنفذ
و فى الاخر حيكون شكل البروسيديور بتاع Addtimedjop شبه دة و هو دة اللى عندى فى السيرفر بتاعى
كود PHP:
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
اعتقد انا كدة فهمتكوا الموضوع بكل بساطة
متنسوناش بس
و دة الجزء الخاص لتنزيل الاسكيل
كود PHP:
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
و دة الجزء الخاص لتنزيل الاستيت بوينت
كود PHP:
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
نتمنى نشوفكم على خير ان شاء الله