12-02-2014, 04:34 AM
|
#1
|
|
• الانـتـسـاب » May 2012
|
• رقـم العـضـويـة » 100773
|
• المشـــاركـات » 2,355
|
• الـدولـة »
|
• الـهـوايـة »
|
• اسـم الـسـيـرفـر » No Server
|
• الـجـنـس » Male
|
• نقـاط التقييم » 62
|
|
|
حصريا : تسجيل الـ IPs لجميع الشخصيات على سيرفرك
بسم الله الرحمن الرحيم
في الموضوع دا هوريكم ازاي تعملوا تسجيل لجميع الايبيهات لأي حد يخش السيرفر عندك (غير الايبي بتاع عمل الأكونت اللي هوا في TB_USER )..بمعنى ان كل ما واحد يفتح شخصية يتسجل الايبي اللي هوا داخل منه.
النتيجة النهائية :

كام ملاحظة بس للناس :
1-لازم تكون الـ Logs عندك شغالة.. بمعنى ان في ناس ممكن بتكون شغالة ببرنامج Evangelion أو srZor و بيقفلوا الـ option بتاع الـ Logs..لازم تفتحوها..
لو انتا مش بتستعمل بالبرنامج دا خلاص يبقى شغالة عندك.
2-الموضوع دا هيتقل الـ Log database بتاعتك و هيبقى فيها داتا كتير..من وقت للتاني امسح الـ table اللي بيتخزنوا عليه(اللي هوا IP_LOGS_ ) لأن كل ما شخصية تخش الجيم بيتضافلها سطر في الداتا.
3-اللي عاوز ينقل الموضوع برة على منتدى تاني ينقوله بس يدي الحقوق لأصحابها عشان الناس تعرف مين اللي عمله :) .
4-لو انتا شغال بـ Proxy زي مثلا HyperFilter .. الموضوع دا مش هينفع معاك لأن كل الشخصيات هتبقى متسجلة بـ IP واحد اللي هوا بتاع الحماية (البروكسي).
نبدأ الشغل :
أول حاجة هتعمل الـ Table دا :
كود PHP:
USE [SRO_VT_LOG]
GO
/****** Object: Table [dbo].[_IP_LOGS] Script Date: 02/12/2014 02:33:00 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[_IP_LOGS](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[CharName] [varchar](50) NOT NULL,
[IP] [varchar](50) NOT NULL,
[LogTime] [smalldatetime] NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
--لاحظ انك هتغير اسم الداتابيز SRO_VT_LOG باللي عندك
تاني حاجة و أهم حاجة .. تعديل على Procedure اسمها AddLogChar_
هنعمل زي اللي في الصورة :

بعد ما تفتح الـ Procedure تنزل لتحت خالص في اخرها و تعمل سطر جديد و تضيف الكود دا فيها :
كود PHP:
IF @EventID = 4 /*This eventID is triggered whenever a character logs in*/
BEGIN
DECLARE @Cname varchar(50) = (SELECT Charname16 from SRO_VT_SHARD.dbo._Char WHERE CharID=@CharID)
DECLARE @IP bigint = @Data2
DECLARE @ip1 int;
DECLARE @ip2 int; /* Made by Midget1337 - www.silkroad4arab.com */
DECLARE @ip3 int; /*All rights reserved */
DECLARE @ip4 int;
DECLARE @LeftOver bigint;
DECLARE @finalip varchar(50);
SET @ip1 = @IP / 16777216 /*First IP segment*/
SET @LeftOver = @IP - (@ip1 * 16777216)
SET @ip2 = @LeftOver / 65536 /*Second IP segment*/
SET @LeftOver = @LeftOver - (@ip2 * 65536)
SET @ip3 = @LeftOver / 256 /*Third IP segment*/
SET @ip4 = @LeftOver - (@ip3 * 256) /*Fourth IP segment*/
SET @finalip = /*Putting the segments together and reversing them*/
CONVERT(varchar, @ip4)+
'.'+CONVERT(varchar, @ip3)+
'.'+CONVERT(varchar, @ip2)+
'.'+CONVERT(varchar, @ip1)
INSERT INTO _IP_LOGS (CharName,IP,LogTime) values (@Cname,@finalip,GETDATE())
END
--لاحظ انك هتغير اسم الداتابيز SRO_VT_SHARD باللي عندك
بس لحد هنا خلصنا الشغل..اللي عاوز يعرف الايبي بتاع واحد فاتح مثلا يعمل الكويري دا :
كود PHP:
SELECT TOP 1 * FROM _IP_LOGS
WHERE CharName = 'Character name'
ORDER BY LogTime DESC
مش مطلوب منكم غير حاجة واحدة.. تدعولي بالنجاح و خصوصا السنة دي :D
|
|
|