محمد منتصر |
15-10-2023 12:33 AM |
How To Create Temporary ITems with time Easy Way -- عمل أيتم مؤقت في السيرفر
بسم الله والصلاة والسلام علي رسول الله
بقالي كتير اوي منزلتش حاجة هنا فكنت حابب أشارككم السيستم الصغير ده أكيد فيه ناس محتاجه حاجة زي كده
فيديو توضيحي للسيستم
الفيديو : https://www.youtube.com/watch?v=nrxKXP04CqA
الأول هشرحلكم هو عبارة عن أيه
1- ده سيستم وظيفته أنه بيسجل الأيتم اللي انت بتحددها في ال npc لما حد يشتريها ويضيفها في تابل بوقت الشراء بتاعتها طيب ايه الفايدة ؟
فايدته انك لما بتيجي بعد كده تحدد في السيستم نفسه الوقت بقي علي التابل ده بيبدأ يجمع كل الأيتم اللي عدي عليها هنقول مثلا 5 ايام زي ما انا عامل وهيمسح كل الايتم دي من البلاير مش هسيبيها معاه وبكده الأيتم بقي مؤقت بوقت مش دايم معاه ممكن انت تضيف ايتم جديده مثلا بدامج قليل عن الطبيعية وتحطها للبلاير الجديدة تلعب بيها وتخليها يوم مثلا وتختفي وممكن تحدد من الفلتر بعد كده مثلا انه يضيف الشخص اللي اشتري ايتم في تابل ولو بعد كده جه يشتري يعمل check علي التابل ده لو لقيه موجود مش هيبيع معاه وبكده انت هتخليه hwid/limited
2- ممكن تشغل السيستم ده في إنك بعد كده تنزل أيتم جديد او دجري جديد للبلاير يجربوه وبعدين تحدده في التابل الموجود ومجرد ما تسجل ال id بتاع الايتم طبيعي هيتمسح اول ما يعدي عليه الوقت بتاعه
3- ممكن مثلا تعملها ايفنت علي جوائز ويكون الريورد ايتم مؤقت من ده مثلا ( ملحوظة السيستم عامله يشتغل علي البيع والشراء بس يعني لما تشتري من الnpc هيسجل غير كده لو نزلته من الكونسول مش هيتلغي تاني )
فأنت ممكن تعدل بقي يسجل امتي زي ما تحب او تضيف الايتم ف التابل يدوي وتديه للناس في ايفنتات
4- السيستم بيمسح الأيتم من كل مكان بيعمل تتبع للأيتم مش للأكونت يعني حتي لو اتنقل من أكونت للتاني فبرده هيتمسح عادي مفيش مشكلة ( pet/storage/storge guild / inventory) هيتمسح من كل دول مش هيبقي موجود فمتقلقش
نيجي بقي للشغل ركزوا معايا
أول حاجة هتعملها هتروح تعمل Create للتابل ده
كود:
USE YourDatabaseName
GO
/****** Object: Table [dbo].[Temp_itemID] #Mohamed_Montaser #T0P Script Date: 10/14/2023 11:32:34 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Temp_itemID](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ItemID] [int] NOT NULL,
[CodeName] [varchar](max) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
بعد ما عملنا التابل هنروح علي الداتا بيز نجيب الايتم اللي احنا عايزين نشغل السيستم ده عليها ممكن تستخدم الكويري ده هينجز معاه
كود:
SELECT ID,CodeName128 FROM SRO_VT_SHARD.._RefObjCommon WHERE CodeName128 LIKE '%CODENAME%'
بعد كده خد الايتم اللي طلعتها وحطها ف التابل الأولاني اللي فوق ده لحد هنا الدنيا تمام زي الفل
نيجي علي الجزء التاني بقي التسجيل
هتروح علي ال sql وهتعمل Create للتابل ده
كود:
USE YourDatabaseName
GO
/****** Object: Table [dbo].[_Temporary_items] #Mohamed_Montaser #T0P Script Date: 10/14/2023 11:31:18 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[_Temporary_items](
[ID] [int] IDENTITY(1,1) NOT NULL,
[CharName] [varchar](30) NOT NULL,
[CharID] [int] NOT NULL,
[UserJid] [int] NOT NULL,
[ID64] [int] NOT NULL,
[ItemID] [int] NOT NULL,
[ItemSerial] [bigint] NOT NULL,
[ItemCodeName] [varchar](max) NOT NULL,
[ShopCodeName] [varchar](max) NULL,
[Timer] [datetime] NOT NULL,
[Stats] [varchar](50) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
تمام لحد هنا عملنا الجدول اللي هنسجل فيه بيانات الايتم طبعا انا عامل الجدول ده هيسجل بيانات الايتم بكل تفاصيله حتي ال npc اللي هتشتري منه والtab رقم كام وبيانات الاكونت والuserjid وكل التفاصيل اللي هتحتاجها
:Emoji20:
بعد ما عملت Create للتابل ده ناقص اخر حاجة وهي السيستم نفسه بقي هتروح علي SRO_VT_SHARDLOG/AddLogItem
وهتضيف السيستم في اخر البرسيدور زي ما هو كده
كود:
---- RECORD TEMPORARY ITEMS #mohamed_montaser
IF (@Operation in (32,35))
DECLARE @TimerWeapon INT = -5 -- Time Down to remove items per days #T0P
BEGIN
IF (@ItemRefID IN (SELECT ItemID from TOOL_SYSTEM..Temp_itemID))
BEGIN
---//////
DECLARE @CharNameTemp varchar (35), @ID64Temp INT , @itemCodeNameTemp varchar (Max) ,@NPCTEMP VARCHAR (MAX), @UserTemp INT,@CharNameTempMsg Varchar (35)
SET @CharNameTemp = (SELECT CharName16 FROM SRO_VT_SHARD.._Char WHERE CharID = @CharID )
SET @ID64Temp = (SELECT ID64 FROM SRO_VT_SHARD.._Items WHERE Serial64 = @ItemSerial )
SET @itemCodeNameTemp = ( SELECT CodeName128 From SRO_VT_SHARD.._RefObjCommon where ID = @ItemRefID)
SET @NPCTEMP = (SELECT RefTabCodeName FROM SRO_VT_SHARD.._RefShopGoods WHERE RefPackageItemCodeName = 'PACKAGE_' +@itemCodeNameTemp)
SET @UserTemp = ( SELECT UserJID FROM SRO_VT_SHARD.._User WHERE CharID = @CharID )
SET @CharNameTempMsg = (SELECT CharName16 FROM SRO_VT_SHARD.._Char WHERE CharID = @CharID )
--DECLARE @MgsDetalis VARCHAR (MAX) = 'Hello Dear ['+@CharNameTemp+'] YOUR CharID Is ['+CONVERT (VARCHAR,@CharID)+'] ITEM ID64 IS ['+CONVERT (VARCHAR,@ID64Temp)+'] And Item Serial is ['+CONVERT (VARCHAR,@ItemSerial)+'] AND ItemID is ['+CONVERT (VARCHAR,@ItemRefID)+'] And Item CodeName Is ['+@itemCodeNameTemp+'] The Time is '+ CONVERT(VARCHAR, GETDATE(), 120)
--INSERT INTO ZOLA_VT_FILTER.._AutoNotice VALUES (@MgsDetalis,@CharNameTemp,0,GETDATE())
INSERT INTO TOOL_SYSTEM.._Temporary_items VALUES (@CharNameTemp,@CharID,@UserTemp,@ID64Temp,@ItemRefID,@ItemSerial,@itemCodeNameTemp,@NPCTEMP,GETDATE(),'ADDED')
END
-- Check if items need to be removed based on the timer
IF (SELECT COUNT(*) FROM TOOL_SYSTEM.._Temporary_items WHERE Timer < DATEADD(DAY, @TimerWeapon, GETDATE())) > 0
BEGIN
UPDATE inv -- remove from inventory
SET inv.ItemID = 0
FROM SRO_VT_SHARD.._Inventory AS inv
INNER JOIN SRO_VT_SHARD.._Items AS itm ON inv.ItemID = itm.ID64
INNER JOIN TOOL_SYSTEM.._Temporary_items AS temp ON itm.Serial64 = temp.ItemSerial
WHERE temp.Timer < DATEADD(DAY, @TimerWeapon, GETDATE());
UPDATE Chest ---- remove from Storage
SET Chest.ItemID = 0
FROM SRO_VT_SHARD.._Chest AS Chest
INNER JOIN SRO_VT_SHARD.._Items AS I ON Chest.ItemID = I.ID64
INNER JOIN TOOL_SYSTEM.._Temporary_items AS temp ON i.Serial64 = temp.ItemSerial
WHERE temp.Timer < DATEADD(DAY, @TimerWeapon, GETDATE());
UPDATE PET -- remove from pet
SET PET.ItemID = 0
FROM SRO_VT_SHARD.._InvCOS AS PET
INNER JOIN SRO_VT_SHARD.._Items AS I ON PET.ItemID = I.ID64
INNER JOIN TOOL_SYSTEM.._Temporary_items AS temp ON i.Serial64 = temp.ItemSerial
WHERE temp.Timer < DATEADD(DAY, @TimerWeapon, GETDATE());
UPDATE G
SET G.ItemID = 0 -- remove from storage guild
FROM SRO_VT_SHARD.._GuildChest AS G
INNER JOIN SRO_VT_SHARD.._Items AS I ON G.ItemID = I.ID64
INNER JOIN TOOL_SYSTEM.._Temporary_items AS temp ON i.Serial64 = temp.ItemSerial
WHERE temp.Timer < DATEADD(DAY, @TimerWeapon, GETDATE());
UPDATE temp
SET temp.Stats = 'DELETED'
FROM TOOL_SYSTEM.._Temporary_items AS temp
INNER JOIN SRO_VT_SHARD.._Items AS itm ON temp.ItemSerial = itm.Serial64
WHERE temp.Timer < DATEADD(DAY, @TimerWeapon, GETDATE());
END
END
وبكده نكون خلصنا شرح السيتسم وكل الحاجات اللي محتاجها فيه
ملحوظة تاني : الرقم اللي بالاحمر ده عدد الأيام دايما بالسالب انت غيرها بقي زي ما تحب الايتم يقعد كام يوم انا عامله يقعد 5 ايام شوف انت اللي يعجبك بقي
كلمة شكر تكفي :Emoji15::Emoji12:
|