[Gunny] Tổng hợp nghiên cứu Gunny (không dành cho newbie)
Follow us on
Follow us on Facebook Follow us on Twitter Linked In Flickr Watch us on YouTube My Space Blogger
 
Trang 1 của 2 1 2 CuốiCuối
Kết quả 1 đến 10 của 18
  1. #1
    Thành Viên
    Ngày tham gia
    Oct 2012
    Bài viết
    356
    Thanks
    107
    Thanked 523 Times in 144 Posts

    Tổng hợp nghiên cứu Gunny (không dành cho newbie)

    Chào các bạn !....
    Trong topic này mình sẽ chia sẻ những kiến thức mà mình đã nghiên cứu được về Source Game Gunny trong thời gian vừa qua . Mình mong rằng qua topic này các bạn sẽ có thêm kinh nghiệm, kiến thức cũng như là hứng thú hơn khi nghiên cứu game Gunny.

    Topic này gồm có các phần sau:

    1.Các yêu cầu cần có khi muốn develope gunny.
    2.Các vấn đề liên quan đến code C# đơn giản.
    3.Cơ bản về nguyên lí hoạt động của mô hình Client-Server.
    4.Các phần chính của source gunny.
    5.Một vài ví dụ cơ bản về develope một chức năng trong game.

    6.Kinh nghiệm của các pro về develope gunny

    Một vài điều mình muốn nói với các bạn:
    -Các phần trên sẽ được viết lần lượt vào cuối mỗi tuần (thứ 7 hoặc chủ nhật)
    -Box Gunny của chúng ta phát triển được như bây giờ hoàn toàn là do nỗ lực của các bạn thành viên box Gunny chứ không phải riêng gì cá nhân nào !
    -Chúng ta đã làm được cho nó phát triển như bây giờ thì tại sao chúng ta lại không cố gắng phát triển nó hơn nữa ?
    -Mình tin chắc là các bạn có thể làm được, làm cho box Gunny phát triển vượt trội


    ~Chào thân ái và quyết thắng~
    Khách viếng thăm hãy cùng meocon5000 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  2. The Following 25 Users Say Thank You to meocon5000 For This Useful Post:

    acma865 (15-06-14), bachugacon122 (15-06-14), bbitvietnam (29-06-14), be.cun.186 (19-12-14), BossFighter (05-05-14), CunConLonTon (14-08-14), datdn74 (01-05-14), duykbvn102 (31-10-18), fastclient1998 (09-03-14), Hermione (10-03-14), hoanghongkhang (18-06-14), hung3020 (09-03-14), kool410 (09-03-14), lipe2014 (21-01-15), longnhi1210 (23-07-18), luadola001 (09-03-14), mrthang1112 (13-07-18), Nhocquytu (03-09-21), ookurooo (09-03-14), razent (09-03-14), satthupro95 (17-12-14), silop1d (29-04-14), vinateam (14-07-14), vinh8c058 (31-12-14), vuongngocs (03-05-14)

  3. #2
    Thành Viên
    Ngày tham gia
    Oct 2012
    Bài viết
    356
    Thanks
    107
    Thanked 523 Times in 144 Posts

    Ðề: Tổng hợp nghiên cứu Gunny (không dành cho newbie)

    1.Các yêu cầu cần có khi muốn develope gunny.
    -Phần mềm cần thiết :
    + Microsoft Visual Studio 10 hoặc cao hơn. Link : [Only registered and activated users can see links. ]
    + Một bộ source gunny. Link : [Only registered and activated users can see links. ] ---> Dùng bản base của trminhpc là tốt nhất
    + Đã cài sẵn gunny để test.
    + Tool Decrypt của trminhpc. Link : [Only registered and activated users can see links. ]
    + Sothink SWF Decomplier 7.1. Link : [Only registered and activated users can see links. ]
    -Kiến thức cần thiết :
    + Kiến thức căn bản về C# và C# OOP (Lập trình hướng đối tượng)
    + Biết chút ít về cơ chế Client - Server (Ở phần sau mình sẽ nói kí hơn)
    + Đọc hiểu code c# tốt.
    + Biết chút ít về MSSQL,viết Query,Store Procedure,...
    Khách viếng thăm hãy cùng meocon5000 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  4. The Following 12 Users Say Thank You to meocon5000 For This Useful Post:

    acma865 (15-06-14), be.cun.186 (19-12-14), CunConLonTon (14-08-14), gackiem2729 (08-06-22), Hermione (10-03-14), khoctinhmhs (18-03-14), lipe2014 (21-01-15), nhokvip99 (10-03-14), ookurooo (09-03-14), traijangunny (11-03-14), vinateam (14-07-14), vuongngocs (03-05-14)

  5. #3
    Thành Viên
    Ngày tham gia
    Oct 2012
    Bài viết
    356
    Thanks
    107
    Thanked 523 Times in 144 Posts

    Ðề: Tổng hợp nghiên cứu Gunny (không dành cho newbie)

    2.Các vấn đề liên quan đến code C# cơ bản
    -Vì Gunny được code bằng ngôn ngữ C# nên nếu muốn develope ta phải dùng ngôn ngữ C#, sau đây là 1 số vấn đề cơ bản về ngôn ngữ lập trình này.
    -Ở đây mình chỉ hướng dẫn các bạn một chút về OOP cần thiết để dev gunny, kiến thức cơ bản về C# bạn đã phải nắm vững
    Đầu tiên ta cần phải hiểu : Code là gì?
    -Làm sao những chức năng như kho báu,châu báu,cường hóa vật phẩm,... có thể hoạt động được?
    -Tại sao NPC có thể di chuyển,tấn công và bị mất máu được?
    ....
    Bạn có bao giờ tự hỏi những điều như trên không ? Câu trả lời là : Do người lập trình code chức năng dựa trên các
    hàm cơ bản được xây dựng sẵn
    a)Lớp và đối tượng trong C#
    Lớp là gì?
    -Lớp trong C# (hay còn gọi là class) là 1 khuôn mẫu cho đối tượng nào đó.Trong lớp bao gồm các phương thức (Method) và thuộc tính (Properties)
    Ví dụ:
    -Bạn muốn làm một chiếc bánh quy bơ thì các bạn phải có khuôn làm bánh quy bơ (class BánhQuyBơ)
    -Trong class BánhQuyBơ thì phải có các phương thức (method) như Trộn_Các_Thành_Phần,Nung_Bánh,... và các thuộc tính (Properties) như Màu_Bánh,Vị_Bánh,...

    Đối tượng là gì?
    -Đối tượng là tên gọi trong đó bao gồm các thuộc tính (Properties) và phương thức (Method) của class mà nó được khởi tạo
    Ví dụ: Từ class BánhQuyBơ ở trên, bạn có thể tạo nhiều đối tượng như Bánh_Của_Bà,Bánh_Tặng_Mẹ,các đối tượng này sẽ mang các thuộc tính như Bánh_Của_Bà có Màu_Bánh là trắng, Vị_Bánh là vani , còn Bánh_Tặng_Mẹ có Màu_Bánh là hồng, Vị_Bánh là dâu
    Cách khởi tạo đối tượng từ lớp
    -Để khởi tạo đối tượng từ lớp ta dùng cú pháp sau : [Tên_Lớp] [Tên_Đối_Tượng] = new [Tên_Lớp](Các_Tham_Số_Truyền_Vào);
    -Để gán các giá trị cho thuộc tính của đối tượng ta làm theo cú pháp sau : [Tên_Đối_Tượng].[Thuộc_Tính] = [Giá_Trị];
    Ví dụ : Để tạo các đối tượng Bánh_Của_Bà và gán các thuộc tính cho nó ta làm như sau :
    Code:
    BánhQuyBơ Bánh_Của_Bà = new BánhQuyBơ();//Khởi tạo đối tượng Bánh_Của_Bà
    Bánh_Của_Bà.Màu_Bánh = trắng;//Gán giá trị cho thuộc tính Màu Bánh
    Bánh_Của_Bà.Vị_Bánh = vani;//Gán giá trị cho thuộc tính Vị Bánh
    =>Vậy là bây giờ ta đã có Bánh_Của_Bà với màu trắng và vị vani.
    b)Tầm vực của đối tượng trong C#
    Tầm vực của class,biến,phương thức và thuộc tính là gì?
    -Tầm vực của đối tượng là những từ khóa quy định quyền truy cập của một đối tượng nào vào đối tượng đó
    Ví dụ :
    -Điện thoại công cộng cho phép ai cũng có thể sử dụng được.
    -Điện thoại cá nhân thì chỉ có cá nhân đó mới được quyền sử dụng
    -Tài sản kế thừa thì những con cháu trong dòng họ mới có thể dùng được

    =>Từ ví dụ trên,ta thấy điện thoại công cộng,điện thoại cá nhân và tài sản thừa kế đều cho phép những ai có quyền dùng không có quyền dùng, tầm vực trong đối tượng cũng tương tự như vậy.
    Vậy làm sao để quy định ai có thể truy cập vào đối tượng và ai không thể ?
    -Ta có thể quy định bằng cách dùng những từ khóa : private , public , protected đặt trước đối tượng khi khởi tạo.
    Vậy những từ này có ý nghĩa gì ?
    -Public : Khi sử dụng class có tầm vực là public thì class đó có thể sử dụng công khai,ở bất cứ đâu,bạn cũng có thể sử dụng các phương thức (method) và thuộc tính (properties) của class đó một cách tự do với điều kiện bạn cũng đặt public ở trước phương thức (method) và thuộc tính (properties) của class đó.
    Ví dụ :
    Code:
    public Class Meo // class Mèo được để là public
    {
         public string Ten; // Biến Tên được để là public
         public int Tuoi; // Biến Tuổi được để là public
         public string MauLong;// Biến MàuLông được để là public
    }
    //Bây giờ ta tạo đối tượng của lớp Mèo từ một lớp khác
    class Choi
    {
         Meo conmeo = new Meo();//vì class Mèo là public nên ta có thể tạo đối tượng của nó từ lớp khác
         conmeo.Ten = "kitty";//vì biến Tên là public nên ta có thể gọi nó từ đối tượng conmeo ở lớp khác
         conmeo.Tuoi = 9;//vì biến Tuổi là public nên ta có thể gọi nó từ đối tượng conmeo ở lớp khác
         conmeo.MauLong = "Tam_Thể";//vì biến Màu Lông là public nên ta có thể gọi nó từ đối tượng conmeo ở lớp khác
    }
    -Private : Từ khóa này không được sử dụng với class mà chỉ có thể sử dụng với biến,phương thức hay thuộc tính.Khi sử dụng từ khóa này thì bạn chỉ có thể sử dụng các phương thức, biến, thuộc tính đó trong class đó mà không thể sử dụng ở class ngoài được.
    Ví dụ :
    #Bây giờ ta sẽ tạo class mới là class ConMeo
    [Only registered and activated users can see links. ]
    #Sau đó thử tạo đối tượng trong cùng lớp đó
    [Only registered and activated users can see links. ]
    =>Ta không thấy bị lỗi gì từ khóa private cho phép truy xuất từ trong lớp ConMeo.
    #Bây giờ thì thử khởi tạo đối tượng của class ConMeo ở ngoài lớp ConMeo (như trong hình là khởi tạo ở lớp ViDu)
    [Only registered and activated users can see links. ]
    =>Ta thấy bị lỗi vì từ khóa private không cho phép truy xuất từ ngoài lớp
    -Protected: Từ khóa này cũng tương tự như private nhưng có thể sử dụng ở lớp ngoài được nếu như lớp ngoài đó thừa kế lớp bao bọc từ khóa
    Ví dụ:
    # Đầu tiên ta tạo 1 class ConNguoi như sau :
    [Only registered and activated users can see links. ]
    #Sau đó thử tạo đối tượng của class ConNguoi ở ngoài lớp khác (lớp ConCho - Lớp này không kế thừa lớp ConNguoi)
    [Only registered and activated users can see links. ]
    =>Ta sẽ thấy bị lỗi
    #Sau đó tạo 1 lớp khác (lớp HocSinh) , kế thừa lớp ConNguoi
    [Only registered and activated users can see links. ]
    =>Không bị lỗi vì từ khóa protected cho phép truy cập vào lớp kế thừa (ở đây lớp HocSinh kế thừa từ lớp ConNguoi nên có thể sử dụng các biến của lớp ConNguoi)

    c)Hàm (Method)


    -Hàm (Method): là một đoạn các lệnh nhỏ để giải quyết vấn đề của chương trình.Trong C#,ta chia hàm (method) ra làm 2 loại hàm có giá trị trả về hàm không có giá trị trả về

    -Hàm có giá trị trả về : là hàm mà sau khi thực hiện các câu lệnh thì nó sẽ trả về giá trị thuộc kiểu dữ liệu mà các bạn đã quy định cho hàm đó.

    -Cách tạo hàm có giá trị trả về : Để tạo hàm có giá trị trả về ta dùng cú pháp sau : [Tầm_vực_của_hàm] [Kiểu_dữ_liệu_trả_về] [Tên_hàm] (Các_Tham_Số) { return [giá_trị_trả_về] };
    -Trong đó :

    +[Tầm_vực_của_hàm] : tương tự như của class là các từ khóa private,protected và public
    +[Kiểu_dữ_liệu_trả_về] : là các kiểu dữ liệu cơ bản như int,float,string,... hoặc là tên Class.
    +[Tên_hàm]: là tên của hàm bạn muốn đặt sao tùy bạn
    +[Các_Tham_Số] : có thể có hoặc không, là các giá trị do người lập trình truyền vào khi gọi hàm mà hàm cần phải sử dụng để xử lí.
    +return [Giá_trị_trả_về] : bạn phải trả về một giá trị tương ứng với kiểu dữ liệu bạn đã đặt ở trên, ví dụ : int thì phải trả về int, string thì phải trà về string.....


    Ví dụ :
    #Tạo một hàm tính tổng của 2 số nguyên a và b.Hàm này sẽ trả về tổng a + b và chắc chắc tổng sẽ là kiếu nguyên nên ta tạo hàm như sau :
    [Only registered and activated users can see links. ]
    #Sau đó ta gọi hàm trong phương thức Main
    [Only registered and activated users can see links. ]
    #Ta được kết quả sau
    [Only registered and activated users can see links. ]

    =>Hàm TinhTong đã trả về giá trị của tổng 1+2 = 3

    -Hàm không có giá trị trả về : là hàm mà chỉ thực hiện câu lệnh ,không có giá trị trả về.

    -Cách tạo hàm không có giá trị trả về : Để tạo hàm không có giá trị trả về ta dùng cú pháp sau : [Tầm_vực_của_hàm] void [Tên_hàm] (Các_Tham_Số) { };

    -Trong đó :

    +[Tầm_vực_của_hàm] : tương tự như của class là các từ khóa private,protected và public
    +[Tên_hàm]: là tên của hàm bạn muốn đặt sao tùy bạn
    +[Các_Tham_Số] : có thể có hoặc không, là các giá trị do người lập trình truyền vào khi gọi hàm mà hàm cần phải sử dụng để xử lí.

    -Ví dụ : Ta sẽ tạo hàm in ra màn hình "Xin chao cac ban".

    #Vì hàm này chỉ in ra màn hình nên không có giá trị trả về, ta tạo hàm như sau :
    [Only registered and activated users can see links. ]
    #Sau đó ta gọi hàm In() trong phương thức Main
    [Only registered and activated users can see links. ]
    #Chạy chương trình ta được kết quả sau:
    [Only registered and activated users can see links. ]


    =>Vậy là hàm In() đã in ra màn hình câu "Xin Chao Cac Ban"
    d)Thuộc tính (Properties) trong C#

    Thuộc tính là gì ?
    -Thuộc tính là cách dùng để truy cập đến các biến một cách an toàn. Ví dụ: biến của bạn có phạm vi truy cập là private ,ra ngoài thì ko truy cập được ,nhưng với thuộc tính thì bạn hoàn toàn có thể truy cập biến thông qua thuộc tính
    Cách khai báo thuộc tính
    -Thuộc tính được khai báo theo cách sau :
    public [Kiểu_dữ_liệu_của_biến_cần_truy_cập] [Tên_của_thuộc_tính]
    {
    get { return [Biến_cần_truy_cập]; }
    set { [Biến_cần_truy_cập] = value; }
    }
    -Trong đó :
    + get : Khi sử dụng thuộc tính để truy cập biến thì phương thức get sẽ trả về giá trị của biến đó
    + set : Khi sử dụng thuộc tính để truy cập biến thì phương thức get sẽ gán giá trị của biến đó bằng giá trị mà bạn gán cho thuộc
    tính

    Ví dụ :
    #Khai báo biến a kiểu private, thuộc tính A dùng để truy cập biến a;
    [Only registered and activated users can see links. ]
    #Gán giá trị cho biến a và sử dụng giá trị của a qua thuộc tính A
    [Only registered and activated users can see links. ]
    #Chạy thử,ta được như sau :
    [Only registered and activated users can see links. ]
    =>Vậy là ta có thể truy cập biến a thông qua thuộc tính A của nó
    -Lưu ý:
    +Muốn tạo thuộc tính chỉ cho phép đọc giá trị của biến thì ta không cần có có lệnh : set { [biến_cần_truy_cập] = value; }
    +Muốn tạo thuộc tính chỉ cho phép đọc ghi giá trị của biến thì ta không cần có có lệnh : get { return [biến_cần_truy_cập] ; }
    e)Hàm tạo (Constructor) trong C#

    Hàm tạo là gì ?
    -Hàm tạo (Constructor) : là những hàm đặc biệt cho phép thực thi, điều khiển chương trình ngay khi khởi tạo đối tượng. Trong C#, Constructors có tên giống như tên của class và không có giá trị trả về.
    Cách khởi tạo Constructor của một class :
    -Hàm tạo được khởi tạo theo cú pháp sau :
    public [Tên_class_của_hàm_tạo]([Các_tham_số])
    {
    [Các_lệnh];
    }
    Ví dụ :
    -Bây giờ ta sẽ tạo một hàm tạo cho class LopHoc,hàm tạo này sẽ có chức năng in ra màn hình chữ "Test"
    [Only registered and activated users can see links. ]
    -Sau đó ta khởi tạo đối tượng của lớp LopHoc trong lớp Main
    [Only registered and activated users can see links. ]
    -Chạy thử chương trình ta được :
    [Only registered and activated users can see links. ]
    =>Vậy ta thấy hàm tạo của class LopHoc đã tự thực hiện khi ta tạo đối tượng của class LopHoc
    *Lưu ý : Nếu hàm tạo có tham số thì việc truyền tham số cho hàm tạo được thực khi khởi tạo đối tượng thông qua cách sau : [Tên_class] [Tên_đối_tượng] = new [Tên_Class]([Các_tham_số]);
    f)Kế thừa lớp đối tượng trong C#

    Kế thừa là gì?
    -Kế thừa là sự kế thừa, tái sử dụng phương thức, thuộc tính của lớp cơ sở. Và lớp kế thừa được gọi là lớp con, nó sẽ thừa hưởng những gì lớp cha có và cho phép. Kế thừa giúp tiết kiệm thời gian viết code, tái sử dụng và mở rộng hiệu quả, dễ bảo trì sửa chữa. Có 2 loại thừa kế, đó là đa thừa kế và đơn thừa kế. Trong ngôn ngữ C# thì không hỗ trợ đa thừa kế. Thừa kế có 2 lớp là lớp cha (lớp cơ sở) hoặc lớp con (lớp dẫn xuất)
    Ví dụ:
    -Hình vuông là thừa kế từ hình chữ nhật bởi nó là trường hợp đặc biệt của hình chữ nhật, nó mang đầy đủ các tính chất của hình chữ nhật. Vì vậy nếu ta có 2 lớp là lớp HinhChuNhat và lớp HinhVuong thì lớp HinhChuNhat sẽ là lớp cha và lớp HinhVuong sẽ là lớp con.
    -Để 1 lớp kế thừa từ lớp khác, khi tạo lớp ta làm như sau : [Tầm_vực_của_lớp] class [Tên_lớp_con] : [Tên_lớp_cha]
    -Để gọi lại constructor của lớp cha từ constructor của lớp con ta làm như sau : public [Tên_lớp_con](Tham_số_constructor_của_lớp_con) : base(Tham_số_constructor_của_lớp_cha)
    Ví dụ :
    -Ta sẽ tạo lớp hình chữ nhật với các phương thức tính chu vi và diện tích ;
    [Only registered and activated users can see links. ]
    -Ta tạo tiếp lớp HinhVuong là lớp con của lớp HinhChuNhat
    [Only registered and activated users can see links. ]
    -Giải thích : Vì hình vuông là trường hợp đặc biệt của hình chữ nhật nên hình vuông cũng có chiều dài và chiều rộng nhưng chúng bằng nhau nên ta vẫn coi hình vuông là hình chữ nhật và gọi lại constructor của HinhChuNhat qua từ khóa base
    -Tạo các đối tượng của lớp HinhVuong và HinhChuNhat trong phương thức Main, in ra màn hinh chu vi , diện tích của hình vuông và hình chữ nhật.
    [Only registered and activated users can see links. ]
    -Chạy thử ta được :
    [Only registered and activated users can see links. ]
    =>Vậy lớp HinhVuong là lớp con của lớp HinhChuNhat nên vẫn có thể sử dụng các phương thức TinhChuVi() và TinhDienTich() của lớp HinhChuNhat
    g)Tính Đa Hình trong C#
    -Vì phần này rất trừu tượng nên cần phải đọc kĩ và suy ngẫm, thực hành nếu cần thiết

    Tính đa hình là gì ?
    -Tính đa hình là cơ chế của một số ngôn ngữ lập trình hướng đối tượng , trong đó có C# . Khi các đối tượng khác kiểu nhưng có phương thức trùng tên, cơ chế này cho phép đối tượng gọi đúng phương thức đã cài đặt cho lớp chính của đối tượng đó.
    Ví dụ :
    -Hình chữ nhật, hình vuông, hình tròn đều thuộc lớp Hình, có cùng phương thức tính diện tích và chu vi nhưng cách tính lại khác nhau. Tính đa hình cho phép khi gọi đối tượng hình chữ nhật và gọi hàm tính diện tích thì hàm tính diện tích này sẽ tính diện tích hình chữ nhật, còn khi gọi đối tượng hình vuông và gọi hàm tính diện tích thì hàm này sẽ tính diện tích hình vuông
    -Cách tạo tính đa hình:
    -Tính đa hình được tạo bằng cách :
    +Ở lớp cha có một phương thức ảo được khai báo bằng từ khóa virtual hoặc abstract
    +Ở lớp con định nghĩa lại phương thức của lớp cha bằng từ khóa override

    Ví dụ :
    -Ta tạo một lớp cha là lớp ConNguoi có phương thức XuatRaThongTin() như sau :
    [Only registered and activated users can see links. ]
    -Tạo lớp ConTrai và ConGai kế thừa từ lớp ConNguoi cũng có phương thức XuatRaThongTin() như sau :
    [Only registered and activated users can see links. ]
    -Tạo các đối tượng của 3 lớp trong phương thức main và gọi phương thức XuatRaThongTin của mỗi lớp:
    [Only registered and activated users can see links. ]
    -Kết quả :
    [Only registered and activated users can see links. ]
    =>Kết quả bình thường,ta chưa thấy tính đa hình đâu cả, nếu ta thay đổi ở chỗ khởi tạo các đối tượng trong phương thức Main như sau:
    [Only registered and activated users can see links. ]
    -Rồi sau đó chạy thử :
    [Only registered and activated users can see links. ]
    =>Kết quả chỉ in ra câu "Day la con nguoi". Vậy làm sao để in ra các câu còn lại ? Ta tạo tính đa hình như sau :
    [Only registered and activated users can see links. ]
    -Chạy thử ta có :
    [Only registered and activated users can see links. ]
    =>Như vậy tính đa hình cho ta gọi đến đúng phương thức của từng lớp ConTrai,ConGai và ConNguoi.
    h)List<> trong C#

    List là gì ?
    -List trong C# là một chuỗi các phần tử có kiểu dữ liệu được quy định sẵn (giống như mảng)
    Cách tạo 1 list :
    -List được tạo theo cú pháp sau : List<[Tên_class]> = new List<[Tên_class]>();
    Các thao tác với List
    -Thêm phần tử vào list : [Tên_list].Add([Tên_Phần_tử]);
    -Xóa phần tử từ list : [Tên_list].Remove([Tên_Phần_Tử]);
    Ví dụ :
    -Ta có 1 list kiểu int
    [Only registered and activated users can see links. ]
    -Thêm các phần tử vào list

    [Only registered and activated users can see links. ]
    -In ra màn hình các phần tử list
    [Only registered and activated users can see links. ]
    -Xóa phần tử list
    [Only registered and activated users can see links. ]
    -Kết quả :
    [Only registered and activated users can see links. ]
    [Only registered and activated users can see links. ]
    Khách viếng thăm hãy cùng meocon5000 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  6. The Following 21 Users Say Thank You to meocon5000 For This Useful Post:

    acma865 (15-06-14), aloha2506 (14-10-14), be.cun.186 (19-12-14), BossFighter (22-04-14), boydtc (18-09-14), CunConLonTon (14-08-14), haidang115 (10-07-18), Hermione (10-03-14), kennydangiu (14-03-14), khoctinhmhs (18-03-14), long1992yb (21-04-23), nghiadht (16-03-14), nhokvip99 (10-03-14), romworld (11-03-14), satthupro95 (17-12-14), thangnd10 (20-03-19), traijangunny (11-03-14), trungthanh1 (10-03-14), votam2x (28-07-14), vuongngocs (03-05-14), yingmu8888 (14-03-14)

  7. #4
    Thành Viên
    Ngày tham gia
    Oct 2012
    Bài viết
    356
    Thanks
    107
    Thanked 523 Times in 144 Posts

    Ðề: Tổng hợp nghiên cứu Gunny (không dành cho newbie)

    3.Cơ bản về nguyên lí hoạt động của mô hình Client-Server.

    Đầu tiên ta cần hiểu các khái niệm sau :
    Client : nghĩa là máy khách
    Server : nghĩa là máy chủ
    Port : là cổng, ví dụ như 80,8080,....
    IP : địa chỉ ip , ví dụ : 127.0.0.1,165.13.212.114,...
    Vậy cơ chế hoạt động của mô hình client - server là gì ?
    Khi được chạy, server cần được xác định rõ địa chỉ IP và sẽ “lắng nghe” trên một port cụ thể. Server sẽ nằm trong trạng thái này cho đến khi client gửi đến một yêu cầu kết nối (request) . Sau khi được server chấp nhận (accept), một kết nối sẽ hình thành cho phép server và client giao tiếp với nhau. Khi đó server có thể gửi (send) và nhận dữ liệu (receive) từ phía client và ngược lại.
    Cơ chế này được thể hiện theo sơ đồ sau :
    [Only registered and activated users can see links. ]
    -Lưu ý : dữ liệu được truyền giữa client và server được truyền theo dạng byte[]
    Khách viếng thăm hãy cùng meocon5000 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  8. The Following 8 Users Say Thank You to meocon5000 For This Useful Post:

    be.cun.186 (19-12-14), BossFighter (22-04-14), CunConLonTon (14-08-14), Hermione (16-03-14), long1992yb (21-04-23), nghiadht (16-03-14), satthupro95 (17-12-14), vuongngocs (03-05-14)

  9. #5
    Thành Viên
    Ngày tham gia
    Oct 2012
    Bài viết
    356
    Thanks
    107
    Thanked 523 Times in 144 Posts

    Ðề: Tổng hợp nghiên cứu Gunny (không dành cho newbie)

    4.Các phần chính của source gunny
    -Source Gunny (DDTank) đầy đủ gồm 4 solution : CenterServer,GameServer,FightingServer,Request nhưng chúng ta chỉ bàn chủ yếu về GameServer

    -Trong GameServer bao gồm các project sau :
    + Bussiness : Quan trọng, dùng để thực thi query, truy xuất dữ liệu từ database.
    + Game.Base : Quan trọng, đây là phần cơ bản của game về client,server,packet,... nhưng bạn muốn develope chức năng thì không cần quan tâm cái này cho mấy
    + Game.Logic : Quan trọng, đây là phần chính của phó bạn, PVP,chứa các action của NPC,effect,...
    + Game.Server : Rất quan trọng,hầu hết các chức năng của gunny đều nằm ở đây, bạn sẽ phải tập trung chủ yếu vào phần này.
    + Game.Service : Không cần để ý đến.
    + Game.Tools : Không cần để ý đến.
    + SqlDataProvider : Quan trọng,chứa các field của các table trong database, dùng để truy xuất database
    =>Vậy ở đây ta chỉ cần để ý đến Bussiness,Game.Server và SqlDataProvider để develope chức năng gunny.
    -Bussiness : Cần để ý những file có phần Bussiness . Vd: DragonBoatBussiness,PlayerBussiness,... trong đó chứa các hàm truy xuất, thực thi với database theo từng chức năng .
    -Game.Server : Để ý kĩ những forder sau :
    +GameObject : Trong này có file GamePlayer.cs, bao gồm các thuộc tính,sự kiện,các hàm của chức năng,...
    +GameUtils : bao gồm các class để xử lí từng chức năng của player,bao gồm 2 hàm chính là LoadFromDatabase() và SaveToDatabase()
    +Packet : các class PackageType ở ngoài quy định các gói tin phải chuyển đến client của từng chức năng.
    • Client : Trong đây là những file chính dùng để xử lí từng chức năng, các file này lấy các hàm ở GameUtils,GamePlayer,GameClient,....
    • Server : --AbstractPacketLib : Có chứa các hàm để gửi packet về client

    +Manager : bao gồm các class, mỗi class có hàm Init() dùng để chạy khi start server, hàm Reload để chạy lại và các hàm khác.
    +Room : Bao gồm các chức năng của phòng , mọi loại phòng,các hàm xử lí phòng....
    -SqlDataProvider : +Data : bao gồm các class chứa các Field của table trong Database, dùng để truy xuất dữ liệu của các Field để xử lí.

    Khách viếng thăm hãy cùng meocon5000 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  10. The Following 13 Users Say Thank You to meocon5000 For This Useful Post:

    be.cun.186 (19-12-14), CunConLonTon (14-08-14), fastclient1998 (16-03-14), Hermione (16-03-14), khoctinhmhs (18-03-14), long1992yb (21-04-23), longyendbk (16-03-14), nghiadht (16-03-14), satthupro95 (17-12-14), traijangunny (02-04-14), trungbum1111 (02-02-15), trungthanh1 (20-03-14), vuongngocs (03-05-14)

  11. #6
    Thành Viên trong0981's Avatar
    Ngày tham gia
    Feb 2009
    Bài viết
    770
    Thanks
    92
    Thanked 1,424 Times in 161 Posts

    Ðề: Tổng hợp nghiên cứu Gunny (không dành cho newbie)

    Mình có kinh nghiệm nhỏ đóng góp vào cùng chung vui nhóe. meocon5000 nếu thấy được thì add vô bài viết sau nếu nhé

    * Yêu cầu trước khi tiến hành dev source Gunny:

    1. Đọc và hiểu source code nó đang thực thi cái gì. Ít nhất là nhìn vô một chức năng nào có sẵn trong source phải hiểu cách người khác họ viết như thế nào.
    2. Source client (2.png) là cần thiết. Ít nhất phải đọc sơ qua về tài liệu action script 3, như vậy bạn có thể hiểu được các chức năng nó chạy luân phiên nhau ra sao. Đến khi dev chức năng mới cũng dễ hiểu client nó nhận và gửi cái gì tới server.
    3. Đọc kỹ các bài viết của meocon ở trên

    * Cách thức dev một chức năng đơn giản.

    Để gia nhập vào làng dev gunny, các bạn là newbie thì cố gắng làm cái gì dễ dàng một chút. Ít nhất là xác định nó chạy ở phần nào trong source. Tránh các chức năng khó như skill guild, boss guild, niên thú hay bla bla vì nó liên quan tới game.logic và script và cần kinh nghiệm dev cao. Mình có thể ví dụ các chức năng khá dễ như là thuyền rồng, kim tự tháp, vv...

    Với các chức năng chỉ có tác dụng ở ngoài phòng chờ, nghĩa là giống kiểu minigame thôi ko liên quan khi vào trận đấu (battle) thì sẽ dễ dàng dev hơn. Các bạn chỉ cần code trong Game.Server là ổn. thường thì ở trong Game.Server/Packets/Client. nhưng với các chức năng liên quan tới cả ngoài lẫn trong trận đấu thì sẽ khó hơn. Có thể ví dụ như là Chúc phúc thần gà. Gia hạn hoặc free làm mới pet, free mở cb thì ở ngoài trận đấu (xử lý ở Game.Server) nhưng như Rơm cứu sinh thì lại nằm trong Game.Logic. với game.logic chạy được ở fight lẫn road. Khi vô trận đấu PVE thì sẽ xử lý ở road => ko cần gửi info tới fight đỡ phức tạp nhưng cần khởi tạo ref (IGamePlayer) để game.logic có thể đọc thông tin chúc phúc của người chơi (phát hiện còn rơm cứu sinh hay ko).

    Khi dev các bạn phải dựa 80% vào client và 20% còn lại tư duy để code sao cho hợp lý. Tốt nhất xử lý 90% trên ram (bộ nhớ đệm) và 10% trên sql. Khi cần thiết như lưu lại dữ liệu, lấy dữ liệu mới đọc từ SQL và NÊN đọc 1 lần và lưu lại khi cần thiết. Không nên đọc ghi liên tục mỗi khi nhận packet từ client. Như thế về lâu dài sẽ rất lag và gây ra nhiều lỗi bug không mong muốn.

    Có 1 điều nữa các bạn nên tránh khi dev là nên nhớ. Client giới hạn gì thì server nên check lại lần nữa. bởi vì client giới hạn chỉ đối với người chơi bình thường. còn với mấy người chơi cheater với buger chúng nó làm mọi thứ để lách luật. vì thế. check càng kỹ càng tốt để tránh khỏi bị bug sau này. Có một điều là nhiều developer mắc phải khi mở server miễn phí điển hình là dragon boat (thuyền rồng) là MaxValue (giá trị tối đa) khi tính toán vượt quá mức chứa của từng kiểu (type). Ví dụ INT thì chỉ chứa ko quá 2 tỷ. Một vài hàm tính toán nhân chia cộng trừ vượt quá khiến vượt quá mức giới hạn của hàm khiến biến thành chỉ số âm => lỗi game.
    Khách viếng thăm hãy cùng trong0981 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  12. #7
    Thành Viên
    Ngày tham gia
    Oct 2012
    Bài viết
    356
    Thanks
    107
    Thanked 523 Times in 144 Posts

    Ðề: Tổng hợp nghiên cứu Gunny (không dành cho newbie)

    6.Kinh nghiệm của các pro về develope gunny.

    -Đóp góp của bạn trong0981

    * Yêu cầu trước khi tiến hành dev source Gunny:

    1. Đọc và hiểu source code nó đang thực thi cái gì. Ít nhất là nhìn vô một chức năng nào có sẵn trong source phải hiểu cách người khác họ viết như thế nào.
    2. Source client (2.png) là cần thiết. Ít nhất phải đọc sơ qua về tài liệu action script 3, như vậy bạn có thể hiểu được các chức năng nó chạy luân phiên nhau ra sao. Đến khi dev chức năng mới cũng dễ hiểu client nó nhận và gửi cái gì tới server.
    3. Đọc kỹ các bài viết của meocon ở trên


    * Cách thức dev một chức năng đơn giản.

    - Để gia nhập vào làng dev gunny, các bạn là newbie thì cố gắng làm cái gì dễ dàng một chút. Ít nhất là xác định nó chạy ở phần nào trong source. Tránh các chức năng khó như skill guild, boss guild, niên thú hay bla bla vì nó liên quan tới game.logic và script và cần kinh nghiệm dev cao. Mình có thể ví dụ các chức năng khá dễ như là thuyền rồng, kim tự tháp, vv...

    - Với các chức năng chỉ có tác dụng ở ngoài phòng chờ, nghĩa là giống kiểu minigame thôi ko liên quan khi vào trận đấu (battle) thì sẽ dễ dàng dev hơn. Các bạn chỉ cần code trong Game.Server là ổn. thường thì ở trong Game.Server/Packets/Client. nhưng với các chức năng liên quan tới cả ngoài lẫn trong trận đấu thì sẽ khó hơn. Có thể ví dụ như là Chúc phúc thần gà. Gia hạn hoặc free làm mới pet, free mở cb thì ở ngoài trận đấu (xử lý ở Game.Server) nhưng như Rơm cứu sinh thì lại nằm trong Game.Logic. với game.logic chạy được ở fight lẫn road. Khi vô trận đấu PVE thì sẽ xử lý ở road => ko cần gửi info tới fight đỡ phức tạp nhưng cần khởi tạo ref (IGamePlayer) để game.logic có thể đọc thông tin chúc phúc của người chơi (phát hiện còn rơm cứu sinh hay ko).

    - Khi dev các bạn phải dựa 80% vào client và 20% còn lại tư duy để code sao cho hợp lý. Tốt nhất xử lý 90% trên ram (bộ nhớ đệm) và 10% trên sql. Khi cần thiết như lưu lại dữ liệu, lấy dữ liệu mới đọc từ SQL và NÊN đọc 1 lần và lưu lại khi cần thiết. Không nên đọc ghi liên tục mỗi khi nhận packet từ client. Như thế về lâu dài sẽ rất lag và gây ra nhiều lỗi bug không mong muốn.

    - Có 1 điều nữa các bạn nên tránh khi dev là nên nhớ. Client giới hạn gì thì server nên check lại lần nữa. bởi vì client giới hạn chỉ đối với người chơi bình thường. còn với mấy người chơi cheater với buger chúng nó làm mọi thứ để lách luật. vì thế. check càng kỹ càng tốt để tránh khỏi bị bug sau này. Có một điều là nhiều developer mắc phải khi mở server miễn phí điển hình là dragon boat (thuyền rồng) là MaxValue (giá trị tối đa) khi tính toán vượt quá mức chứa của từng kiểu (type). Ví dụ INT thì chỉ chứa ko quá 2 tỷ. Một vài hàm tính toán nhân chia cộng trừ vượt quá khiến vượt quá mức giới hạn của hàm khiến biến thành chỉ số âm => lỗi game.
    -Special Thanks to Trong0981 (SnapeNguyễn)
    Khách viếng thăm hãy cùng meocon5000 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  13. The Following 10 Users Say Thank You to meocon5000 For This Useful Post:

    be.cun.186 (19-12-14), CunConLonTon (14-08-14), datdn74 (01-05-14), datphu (22-07-14), Hermione (15-06-14), hoanganhgo (12-06-14), satthupro95 (17-12-14), vinh8c058 (19-03-15), vuongngocs (03-05-14), yuyumumu (27-05-14)

  14. #8
    Thành Viên
    Ngày tham gia
    Oct 2012
    Bài viết
    356
    Thanks
    107
    Thanked 523 Times in 144 Posts

    Ðề: Tổng hợp nghiên cứu Gunny (không dành cho newbie)

    5.Một vài ví dụ cơ bản về develope một số chức năng trong game
    Đây là video hướng dẫn dev chức năng rương gà , đây là 1 chức năng khá đơn giản , các bạn xem và làm theo nhé !
    Phần 1 :

    Phần 2:

    Phần 3:
    :
    Khách viếng thăm hãy cùng meocon5000 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  15. The Following 11 Users Say Thank You to meocon5000 For This Useful Post:

    be.cun.186 (19-12-14), CunConLonTon (14-08-14), datphu (22-07-14), HeadShot (20-11-14), Hermione (15-06-14), hoalong1120 (15-06-14), kool410 (17-07-14), nhoktrain (15-06-14), satthupro95 (17-12-14), silop1d (15-06-14), thmodz (15-06-14)

  16. #9
    Thành Viên
    Ngày tham gia
    Oct 2012
    Bài viết
    356
    Thanks
    107
    Thanked 523 Times in 144 Posts

    Ðề: Tổng hợp nghiên cứu Gunny (không dành cho newbie)

    Up nào !!! Up nào !!! 30 charrrrrrrrrrrr
    Khách viếng thăm hãy cùng meocon5000 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

  17. The Following 4 Users Say Thank You to meocon5000 For This Useful Post:

    be.cun.186 (19-12-14), CunConLonTon (14-08-14), hoanganhgo (16-06-14), satthupro95 (17-12-14)

  18. #10
    Thành Viên
    Ngày tham gia
    Aug 2014
    Bài viết
    3
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Ðề: Tổng hợp nghiên cứu Gunny (không dành cho newbie)

    Dear mèo con!
    Bạn có thể làm tut hướng dẫn qua về việc fix lỗi mật đạo thần bí không. Mình đang build bản gunny II 2.5 mà tìm hoài không thấy hướng dẫn về việc này. Cảm ơn bạn nhé
    Khách viếng thăm hãy cùng gon1702 xây dựng diễn đàn CLBGAMESVN vững mạnh nhé!

 

 
Trang 1 của 2 1 2 CuốiCuối

Các Chủ đề tương tự

  1. [Gunny] Topic giải đáp thắc mắc gunny cho newbie !
    Bởi bachugacon122 trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 220
    Bài viết cuối: 19-04-19, 06:17 PM
  2. [KT] Lỗi không cho sách kinh nghiệm đồng hành vào để tăng kinh nghiệm chân nguyên
    Bởi Kyo Công Tử trong diễn đàn Hỏi Đáp/ Yêu Cầu
    Trả lời: 2
    Bài viết cuối: 20-09-14, 06:41 AM
  3. [Gunny] Hướng dẫn Rip vật phẩm từ các trang gunny khác cho newbie
    Bởi haidang115 trong diễn đàn Guides - Kho Lưu trữ
    Trả lời: 1
    Bài viết cuối: 23-05-14, 11:17 AM
  4. [TLBB] Tổng hợp nghiên cứu Thiên Long Bát Bộ (Không dành cho Newbie)
    Bởi Sói Đẹp Trai trong diễn đàn Releases
    Trả lời: 8
    Bài viết cuối: 22-08-13, 08:43 PM

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Múi giờ GMT +7. Bây giờ là 10:17 PM.
vBulletin®, Copyright ©2000-2011, Jelsoft Enterprises Ltd.
CLBGamesVN không chịu trách nhiệm về Luật Bản Quyền của các tài liệu, bài viết v.v...được đăng tải trên diễn đàn này.
Diễn đàn phát triển dưới sự đóng góp của tất cả thành viên. BQT chỉ là những người thành lập ra sân chơi, quản lý và duy trì về mặt kỹ thuật, nội dung khi hợp lệ.