[Tutorial] Hướng dẫn làm sever SA-MP hoàn chỉnh!GTA SA Online

Thảo luận trong 'Grand Theft Auto' bắt đầu bởi nic0nhan, 9/12/12.

  1. nic0nhan

    nic0nhan Youtube Master Race

    Tham gia ngày:
    25/8/12
    Bài viết:
    18
    Lời nói đầu:
    Bạn đã từng chơi GTA? Vậy bạn có biết đến tựa game thật hay đó là Grand Theft Auto -San Andreas.
    Với SAMP, nó sẽ giúp bạn kết nối giữa người chơi khác trên internet.Sau đây mình sẽ hướng dẫn các bạn làm 1 sever SAMP hoàn chỉnh.:D
    Bài hướng dẫn bao gồm:

    » Downloading, installing + playing sa-mp
    » Tạo một sever cho riêng bạn
    » Cho phép máy chủ kết nối online
    » Edit , config và biết rõ cách sử dụng của Pawno.



    Downloading, installing + playing SA-MP:
    Việc đầu tiên là tải client : http://files.sa-mp.com/sa-mp-0.3e-install.exe .Sau khi đã tải hoàn thành , bạn install nó vào gta sa của bạn.-:D-

    Sau khi mở SA-MP , bạn sẽ thấy một cửa sổ như thế này :
    Để thêm một máy chủ ưa thích , sử dụng[​IMG] và nhập vào IP : PORT của máy chủ.
    Để xem danh sách của tất cả các máy chủ SA-MP, click http://www.solidfiles.com/i/9b91.png sau đó nó sẽ hiện ra danh sách các sever bạn có thể vào chơi ( đa số là IP nước ngoài ).
    Nhấn[​IMG] để kết nối với máy chủ đã chọn.

    Kết nối:
    Để kết nối với máy chủ của mình , sử dụng ip LAN mới có thể kết nối :
    vào start->run->cmd -> gõ ipconfig tìm dòng IPv4 Hay Ip Address gì đó rồi add vào mục ưa thích của samp.Khi bạn bật máy chủ lên ( samp-sever.exe ) nó sẽ hoạt động trên ip này , nếu muốn online thì phải open port cho modem.Sau đó người chơi khác connect = ip WAN . Vào www.ipchicken.com để biết ip WAN của bạn.
    Lưu ý:IP LAN sẽ quy định port nếu bạn điều chỉnh port trong .cfg , vậy để connect bạn sẽ phải add IPLAN: PORT thật đúng với những gì bạn đã config.Mở IP LAN sẽ không cần cải đặt port như nếu muốn online thì phải cài port.
    Ở đây mình có ip lan là : 192.168.1.33 và config trong sever.cfg là port 7777 ( nên để port 7777 ).
    vậy thì add ip vào SAMP Client sẽ là 192.168.1.33:7777 ! -:D-

    Tạo một máy chủ cho riêng bạn:
    [HIDE]Trước khi bạn có thể thay đổi máy chủ của bạn, trước tiên bạn phải tải về một số tập tin ở đây : http://files.sa-mp.com/samp03e_svr_R2_win32.zip
    (Lưu ý : Phần hướng dẫn không áp dụng cho HĐH Linux Sever , Windows XP - Windows 7,8 vẫn chạy ok -:D- )
    Sau khi tải về , bạn sẽ thấy file .zip và bạn hãy giải nén nó ra , bạn thấy được :
    » server.cfg (file)
    » server-readme.txt (file)
    » samp-server.exe (file)
    » samp-licence.txt (file)
    » announce.exe (file)
    » scriptfiles (folder)
    » pawno (folder)
    » gamemodes (folder)
    » filterscripts (folder)

    Ví dụ, chúng ta sẽ sử dụng gamemode lvdm.pwn (bạn cũng có thể tạo ra chế độ của riêng bạn, nhưng trước tiên bạn phải biết cách thực hiện.)
    [/HIDE]

    Cấu hình server.cfg của bạn:
    [HIDE][​IMG]
    Bây giờ bạn hãy open file này = notepad nhé :D .
    Khi bạn mở nó, bạn sẽ thấy điều này:
    [​IMG]

    Giải thích các dòng:
    - echo Executing Sever Config : dòng này ám chỉ thiết lập cấu hình ở dưới ( được xem là vô nghĩa nên bạn đừng động chạm gì đến nó cả ).
    - lanmode: chế độ Local Area Network
    - rcon_password: pass của host ( Lưu ý không phải pass của admin cũng ko phải pass để Connect sever , đây là pass RCON , để config các lệnh cho SAMP - không liên qua đến mode nhưng liên quan đến SAMP.)
    - max_player: số người chơi tối đa. max = 500,
    - port: Là port ( cổng ) để kết nối vào sever của bạn.IP:PORT
    - hostname: là tên của máy chủ được hiện ở SAMP
    - gamemode: là chế độ chơi từ thư mục /gamemode
    - filterscripts: load script từ thư mục /filterscripts,
    - announce: muốn sv của mình có trong sa-mp sever list thì chuyển "announce 0" thành "announce 1"
    - weburl, địa chỉ web của sever, sẽ được hiển thị khi click vào sever trong sa-mp sv list.
    - maxnpc: số "Non-playing Character" (bot) tối đa trên sever
    - ( những dòng sau bạn không nên quan tâm ex: onfoot_rate,onfoot_rate,.... )
    *Lưu ý nếu muốn đặt pass cho máy chủ , bạn nên add thêm dòng config sau đây
    - password : là mật khẩu để vào máy chủ.Nếu không muốn sử dụng pass thì khỏi cần làm dòng này.
    Ví dụ : đặt dòng này
    Mã:
    password 12345
    như vậy nếu muốn vào sever nó sẽ đòi hỏi pass là 12345.;)

    **Bạn không nên add thêm bất cứ dòng config nào nếu dòng đó không có nghĩa - có thể nó sẽ gặp trở ngại.[/HIDE]

    Tiến hành code
    [HIDE]Bây giờ chúng ta sẽ tiến hành điều chỉnh , thiết lập thông số , mã lệnh và làm quen với Pawno.Lưu ý : tất cả những mục đều tương tác với nhau : filterscrips , gamemode , plugins , scriptfile ....! Vì thế , nên sữ dụng những code đơn giản hoặc nếu có trở ngại ở mục này hãy tìm phần hướng dẫn được nằm trong mục khác.
    *Cách chạy sever : config sever.cfg phù hợp , dòng gamemode để mặc định hoặc có thể thay đổi khi muốn sử dụng 1 gamemode khác . Sau đó ra chạy file samp-sever.exe Nếu bảng đen(CMD) hiện ra và chạy suôn sẽ , có nghĩa là bạn đã thành công nhưng nếu CMD hiện ra nhưng tắt trong vòng 3-4s thì bạn nên xem xét xem có nhầm lẫn ở đâu không nhé.Thường thì đặt sai tên gamemode , plugins, thiếu file .amx , ... hoặc config không đúng cách ở .cfg
    Ex: bạn muốn config password trong .cfg nhưng bạn không ghi
    Mã:
    password matkhaucuaban
    mà lại ghi
    Mã:
    pass matkhaucuaban 
    -Bạn có nhận ra 2 sự khác biệt? Đó là password và pass , từ pass nếu không ghi rõ ràng nó sẽ trở nên vô nghĩa và khi bật samp-sever.exe sẽ có trở ngại , các phần khác cũng kiểm tra tương tự như vậy :).[/HIDE]
    I.Filterscripts:
    [HIDE]Cái này được ví như thành phần bổ sung và cài nó dễ hơn bao giờ hết :))
    Định nghĩa filterscripts : giống như một kịch bản được ghép vào sever . Có cũng được hoặc không cũng được,nhưng mình khuyên các bạn thực tập trước với mấy cái này sever mau hiểu hơn.
    Ở đây ta ví dụ Sever là cái máy Laptop và filterscripts là thanh RAM , những thành phần phụ cho gamemode mặc dù có chức năng như gamemode nhưng chỉ là một phần của máy chủ.
    Nếu muốn máy mạnh lên thì phải gắn thêm RAM ( filterscripts ) =)) .
    Để tìm các filterscripts , bạn có thể vào trang này http://forum.sa-mp.com/forumdisplay.php?f=17 hoặc tự tạo riêng cho mình( nếu muốn tạo thì phải học code Pawno đã :">).Giờ sài vặt nào.
    Sau khi bạn đã tìm được một cái theo ý thích ,hãy tải nó về và bạn sẽ được 2 file(có khi 1 file tùy người up)
    ***.amx và ***.pwn
    Giải thích về:
    amx: là dữ liệu chính để samp-sever.exe có thể đọc được , nguồn dữ liệu amx được suy ra từ pwn.(Không thể edit file này nếu ko có pwn , một số người tạo ra có thể chỉ muốn cho bạn sử dụng chứ không cho bạn edit nó)
    pwn: là dữ liệu phụ để bạn có thể edit , chĩnh tùy thuộc vào bạn.Mở file này = cách vào /pawno/pawno.exe sau khi pawno đã mở chọn file->open -> đường dẫn đến file pwn hoặc Ctrl + O.Sau khi đã edit ấn F5 hoặc [​IMG] để complie ra file .amx với tên tương tự được đặt trong cùng thư mục.
    Lưu ý: 2 file này áp dụng cho cả filterscripts và gamemode vì 2 cái này tương đương nhau.
    Áp dụng filterscripts cho máy chủ:
    Mở sever.cfg = notepad và tìm dòng
    filterscript ***

    *** là tên filterscript amx của bạn.Ví dụ : new.amx ( không đặt .amx , chỉ đặt tên file )
    Vậy , ta có:
    Mã:
    filterscript new
    Vậy là bạn đã gán filterscript thành công.*
    *Lưu ý:Một số filterscript đòi hỏi plugins , include , scriptfile hoặc npcmodes có dữ liệu tương đương cho file đó -> nếu không thành công thì bạn cần phải suy ngẫm và xem xét kĩ hơn cho filterscript của mình.
    Ví dụ:Bạn tìm được 1 filterscript có tên là audio.... chẳng hạn.Vậy có thể bạn sẽ không add thành công file này nếu không có plugins audio ( phần plugins mình sẽ hướng dẫn sau ).
    Vậy là đã hoàn thành cách add filterscript , nếu muốn hiểu hết nguyên lý làm việc của filterscript thì bạn nên thực hành với nó , làm đi làm lại nhiều lần.[/HIDE]

    II.Gamemode
    [HIDE]Định nghĩa Gamemode: là chế độ chơi sau khi bạn host sever , bạn có thể tự make chế độ chơi cho riêng mình như
    : Roleplay,DeathMath,MiniGame,Run and Run , Capture , Cop and Robber , .... tùy ý của bạn mà :))
    Bạn cần phải biết cách đổi gamemode trước đã nào ;)
    Tìm trong thư mục /gamemode sẽ có các gamemode có sẵn, muốn chuyển sang gamemode nào thì vào sever.cfg, ví dụ mình muốn chuyển sang gamemode "lvdm", đổi dòng
    Mã:
    gamemode0 grandlarc 1
    thành
    Mã:
    gamemode0 lvdm 1
    Ngoài ra vào http://forum.sa-mp.com/forumdisplay.php?f=71 tìm và chọn gamemode bạn thích, làm theo installation của gamemode đó.
    Các gamemode thông dụng là:
    - Raven Roleplay (cần streamer plugin)
    - Godfather RP
    - SATDM...
    - vâng vâng và vâng vâng :))
    Cách tải về và cài đặt thì có vẻ hơi khác một chút và có thể liên quan đến cả Sever Folder.
    Bạn tìm một mode , tải về thì thấy .zip :| như vậy là người ta đã làm thì bạn chỉ việc giải nén file đó ra , bật samp-sever.exe nếu nó chạy thì ok , config lại tại sever.cfg , và edit code = pawno.(Bật pawno lên ấn Ctrl+O chọn file .pwn trong /gamemode mở nó lên và thấy núi code :)) . Tí bạn sẽ được làm quen code PWN sau.Ấn F5 sau khi edit để suy ra file amx lần nữa).[/HIDE]

    III.Pawno Scripting
    [HIDE]
    1/Includes
    Định nghĩa Includes: là phần hỗ trợ cho code trong Pawno , includes là phần bao gồm dựa theo mã Pawno nhưng được đặt trong notepad với đuôi là .inc . Bạn có thể tìm những file này tại /pawno/include
    Includes đều liên quan đến code nhưng không thể ghép chung lại được như Filterscript và Gamemode.Phần include là bao gồm và được đặt trong code ở PWN/gamemode hoặc filterscript để liên kết với các đoạn mã khác.Nếu hiểu đơn giản thì includes là cây cầu giúp liên kết các code lại với nhau qua file .inc
    Ví dụ:
    Ở đây mình tìm thấy file .inc có sẵn trong thư mục pawno với tên time.inc
    Vậy nếu muốn sử dụng nó ta sẽ có code như sau
    Mã:
    #include <time>
    =>Include này giúp nhận biết thời gian trên máy tính của bạn đế thiết lập các mã lệnh khác như thời gian trong sever.(nhớ đặt nó vào trong <...> nhé :)) )
    Có thể sử dụng được cho cả filterscript hoặc gamemode.Nếu muốn biết trình tự sắp xếp mã lệnh trong Pawno Scripting.Vui lòng đọc tiếp ở dưới.
    *Lưu ý : Với mọi filterscript và gamemode , phải luôn có
    Mã:
    #include <a_samp>
    đứng đầu.
    2/Pawno Scripting
    Định nghĩa Pawno Codes: Là công cụ giúp bạn edit , điều chỉnh , make những code dành cho file .pwn và suy ra file .amx .Nó là thành phần quan trọng nhất nếu muốn sever phát triển dựa trên công cụ này .Với Pawno Scripting , bạn sẽ học tất cả những code và những thứ có liên quan đến nó để phát triển máy chủ của mình.Đây quả thật liên quan đến ngôn ngữ lập trình , nó giống như C++ , thực hiện complie gỡ lỗi , chuẩn đoán code sai , ....
    Có rất nhiều phần mềm Pawno Scripting tùy theo nhu cẩu người sử dụng ,cái nào cũng tiện lợi , tiện ích khác nhau như:
    -Pawno Scripting ( mặc định )
    -SA-MP Editor ( cần sử dụng NET 2.0)
    -PawnoX
    -Official Quincy Editor
    -PawnSciTE
    -SAM[P]CE
    -QuickPawn
    -Scripting Machine
    Thật hay phải không nào?-:D- Bạn có thể tìm thấy chúng tại đây : http://wiki.sa-mp.com/wiki/Scripting_Editors
    Nhưng mình khuyên các bạn nên sử dụng Pawno mặc định đi đã.
    Bắt đầu nào :)
    a/Trình tự sắp xếp code trong Pawno
    Mã:
    #include <a_samp>
    #include <cuaban>
    
    #define DINHNGHIA
    enum toi cao {....};
    navite duongdanfile([]..._);
    forward TenCong;
    Public CongKhaiCODE
    
    .....
    
    *Lưu ý: #include và #define luôn luôn để trên cao theo thứ tự 1.include 2.define cao nhất có thể.Còn lại sắp xếp tự do nhưng đôi khi lỗi và tôi khuyên các bạn nên sắp xếp thế nào cho nó gọn gàng ngăn nắp.Hãy luôn luôn để ý dấu ";" chấm phẩy ở mỗi code.Nó là nguyên nhân gây ra lỗi , hãy phụ thuộc vào các code khác để học dễ hơn.
    Định nghĩa mã khởi đầu
    -Include -> liên kết.....
    -Define -> định nghĩa cho 1 thứ gì đó , giống như viết tắt , làm đường tắt.
    -enum -> tương đương với define nhưng định nghĩa theo string , mã hóa.
    -native -> liên quan đến việc create,move những thứ như file , .....
    -forward -> Tạo một cổng public để công khai code.
    -public -> bao gồm các public mặc định và các public bạn đã create.
    -.....
    b/Mã toán học.
    Định nghĩa : Là những phép tính cho máy chủ có thể thực hiện , phân chia đồng đều , sự sắp xếp và điều chỉnh của bạn đối với một cái gì đó trong code cần sự tính toán.
    Mã:
    ==  ->  Bằng
    =  ->  Có không bằng
    <=  ->  Nhỏ hơn hoặc tương đương với
    =  ->  Là lớn hơn hoặc tương đương với
    >  ->   Lớn hơn
    <  ->   Nhỏ hơn
    &&  ->   Và sử dụng điều kiện sau đây
    | |  ->  Hoặc sử dụng các điều kiện sau đây
    + +   ->  Thêm (1) giá trị
    -   ->  Trừ (1) giá trị
    + / / Thêm bất kỳ giá trị nào sau đây để giá trị bắt đầu
    - / / Trừ bất kỳ giá trị nào sau đây để giá trị bắt đầu
    + = / / Thêm bất kỳ giá trị nào sau đây / / biến chỉ!
    - = / / Trừ bất kỳ giá trị nào sau đây / / biến chỉ!
    * / / Rõ ràng, phải không? Nó có nghĩa là căn bậc hai! (không nghiêm túc, bạn biết những gì nó có nghĩa là ngu dại)
    / / / Chia cho bất kỳ giá trị nào sau đây để giá trị bắt đầu
    Các dấu mã khác , ví dụ như "/" nó là dấu phân cách mã số nếu sử dụng liên tục "/" -> "//" thì đoạn code sau nó sẽ trở thành chú thích , nếu bạn không tách đoạn bằng cách ấn enter , có thể bạn sẽ nhầm lẫn về code trong đó.
    Phân chia bố cục màu:
    Ở Pawno , màu mè được phân chia rõ ràng và nó biểu hiện mức độ mã như sau:
    -Màu đen -> thể hiện mã lệnh của Include , đa số là sử dụng và là màu đen ,bạn không được chỉnh sửa nó - nếu có dòng chữ bạn viết màu đen mà chưa được định nghĩa , bạn sẽ gặp lỗi ; Nếu muốn định nghĩa , sử dụng : #define
    -Màu xanh dương sáng : là những dòng mà code thiết yếu , quan trong hỗ trợ cho những đoạn code tiếp theo - với mã màu xanh , nếu bạn viết đúng đoạn mã mặc định , nó sẽ chuyển xanh màu xanh dương sáng.
    -Màu xanh dương nhẹ: là những dòng mà bạn có thể edit nó , có nghĩa như những lời hội thoại , tin nhắn = chữ .Bạn có thể chỉnh sửa những dòng này.
    -Màu xanh lục : là những dòng ghi chú sau "//" ***
    ***Lưu ý: Nếu muốn ghi chú hoặc "tạm bỏ" một đoạn code dài không sử dụng hay một đoạn ghi chú dài - sử dụng
    "/* .......... */"
    Ví dụ:
    Mã:
    /* Doan ma hoac chu thich chua ban */
    Như thế , nó sẽ "tạm bỏ: và trở thành những dòng code "vô nghĩa" nếu bạn không bỏ "/* */"
    Warning: : Trong Pawno , bạn không được sử dụng tiếng việt có dấu :P
    [/HIDE]
    Scripting

    Bước 1 - Scripting.
    [HIDE]Bây giờ, Chúng ta sẽ bắt đầu bằng cách đi vào> pawno> pawno.exe.
    Mở tập tin, nó sẽ được để trống. Tạo một file mới bằng cách đi vào> File> New, ở góc bên trái trên cùng.
    Và điều này sẽ xuất hiện
    Mã:
    #include <a_samp>
    #if defined FILTERSCRIPT
    
    public OnFilterScriptInit()
    {
        print("\n--------------------------------------");
        print(" Blank Filterscript by your name here");
        print("--------------------------------------\n");
        return 1;
    }
    
    public OnFilterScriptExit()
    {
        return 1;
    }
    
    #else
    
    main()
    {
        print("\n----------------------------------");
        print(" Blank Gamemode by your name here");
        print("----------------------------------\n");
    }
    
    #endif
    
    public OnGameModeInit()
    {
        // Don't use these lines if it's a filterscript
        SetGameModeText("Blank Script");
        AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
        return 1;
    }
    
    public OnGameModeExit()
    {
        return 1;
    }
    
    public OnPlayerRequestClass(playerid, classid)
    {
        SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
        SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
        SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
        return 1;
    }
    
    public OnPlayerConnect(playerid)
    {
        return 1;
    }
    
    public OnPlayerDisconnect(playerid, reason)
    {
        return 1;
    }
    
    public OnPlayerSpawn(playerid)
    {
        return 1;
    }
    
    public OnPlayerDeath(playerid, killerid, reason)
    {
        return 1;
    }
    
    public OnVehicleSpawn(vehicleid)
    {
        return 1;
    }
    
    public OnVehicleDeath(vehicleid, killerid)
    {
        return 1;
    }
    
    public OnPlayerText(playerid, text[])
    {
        return 1;
    }
    
    public OnPlayerCommandText(playerid, cmdtext[])
    {
        if (strcmp("/mycommand", cmdtext, true, 10) == 0)
        {
            // Do something here
            return 1;
        }
        return 0;
    }
    
    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
        return 1;
    }
    
    public OnPlayerExitVehicle(playerid, vehicleid)
    {
        return 1;
    }
    
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
        return 1;
    }
    
    public OnPlayerEnterCheckpoint(playerid)
    {
        return 1;
    }
    
    public OnPlayerLeaveCheckpoint(playerid)
    {
        return 1;
    }
    
    public OnPlayerEnterRaceCheckpoint(playerid)
    {
        return 1;
    }
    
    public OnPlayerLeaveRaceCheckpoint(playerid)
    {
        return 1;
    }
    
    public OnRconCommand(cmd[])
    {
        return 1;
    }
    
    public OnPlayerRequestSpawn(playerid)
    {
        return 1;
    }
    
    public OnObjectMoved(objectid)
    {
        return 1;
    }
    
    public OnPlayerObjectMoved(playerid, objectid)
    {
        return 1;
    }
    
    public OnPlayerPickUpPickup(playerid, pickupid)
    {
        return 1;
    }
    
    public OnVehicleMod(playerid, vehicleid, componentid)
    {
        return 1;
    }
    
    public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
    {
        return 1;
    }
    
    public OnVehicleRespray(playerid, vehicleid, color1, color2)
    {
        return 1;
    }
    
    public OnPlayerSelectedMenuRow(playerid, row)
    {
        return 1;
    }
    
    public OnPlayerExitedMenu(playerid)
    {
        return 1;
    }
    
    public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
    {
        return 1;
    }
    
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
        return 1;
    }
    
    public OnRconLoginAttempt(ip[], password[], success)
    {
        return 1;
    }
    
    public OnPlayerUpdate(playerid)
    {
        return 1;
    }
    
    public OnPlayerStreamIn(playerid, forplayerid)
    {
        return 1;
    }
    
    public OnPlayerStreamOut(playerid, forplayerid)
    {
        return 1;
    }
    
    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
        return 1;
    }
    
    public OnVehicleStreamOut(vehicleid, forplayerid)
    {
        return 1;
    }
    
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
        return 1;
    }
    
    public OnPlayerClickPlayer(playerid, clickedplayerid, source)
    {
        return 1;
    }
    
    Đây là một kịch bản trống. Bây giờ bấm F5 để biên dịch, điều này sẽ thông báo cho bạn nếu có lỗi nào.
    Nếu bạn đang biên soạn kịch bản của bạn cho lần đầu tiên, bạn sẽ phải lưu nó. Lưu nó như là cái tên mà bạn cho gamemode0 cài đặt trong file configs máy chủ để các máy chủ có thể chạy kịch bản.
    [/HIDE]
    Bước 2 - Scripting.

    [HIDE]Bây giờ chúng ta hãy loại bỏ 3 dòng đầu tiên bằng cách nhấn enter chúng ta sẽ tách được thêm dòng , mục đích của 3 dòng này là các bạn có thể viết bất cứ thứ gì như : code by , version , credits , Những người thực hiện .....
    Mã:
    /*******************************************************************************
    *                SERVER NAME: Gamemode
    *                SERVER VERSION: Mode v1.0
    *                SERVER DEVELOPER: sA_leM
    *
    *   INFORMATION:
    *
    *******************************************************************************/
    
    Bây giờ tôi muốn giới thiệu những lời biên dịch ở CMD khi chạy samp-sever.exe
    Hãy đến chức năng "main()" . Bạn sẽ có điều này:
    Mã:
    main()
    {
        print("\n----------------------------------");
        print(" Blank Gamemode by your name here");
        print("----------------------------------\n");
    }
    
    Đây là gì? Đây là những gì được in vào giao diện điều khiển của bạn (samp-server)
    Vì vậy, điều này về cơ bản sẽ hiển thị những gì kịch bản máy chủ đang chạy.
    Hãy làm điều này:
    Mã:
    main()
    {
        print("SERVER: Gamemoder");
        print("VERSION: Mode v1.0");
        print("DEVELOPER: sA_leM");
    }
    
    Hoàn thành bước khởi đầu , bây giờ bạn hãy thử biên dịch ( suy ) ra file amx rồi chạy nó xem trong samp-sever.exe đã có những thứ bạn ghi chưa :))

    Bây giờ chúng ta hãy làm việc trên chức năng OnGameModeInit ().
    Tôi có điều này:
    Mã:
    public OnGameModeInit()
    {
        // Don't use these lines if it's a filterscript
        SetGameModeText("Blank Script");
        AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
        return 1;
    }
    
    Bạn hãy để ý dòng "SetGameModeText".Đây là đoạn mã sẽ hiện thị chế độ chơi ( Gamemode ) của máy chủ trên samp.Hãy edit nó , đây là text nên các bạn có thể edit phần "Blank Script" thành bất cứ thứ gì.
    ví dụ:
    Mã:
    public OnGameModeInit()
    {
        // Don't use these lines if it's a filterscript
        SetGameModeText("Party v2.0.0");
        AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
        return 1;
    }
    
    Bây giờ đến đoạn mã AddPlayerClass , nó giúp nhân vật chúng ta sau khi đăng nhập sẽ được hiển thị ở đâu.
    Theo mặc định các tọa độ được thiết lập High Roller casino ở Las Venturas.
    Bây giờ chúng ta sẽ loại bỏ các tọa độ mặc định và thêm tọa độ riêng. Để có được tọa độ bạn phải sử dụng lệnh này trên máy chủ "/save" , ( bạn sử dụng trong samp-debug hay trực tiếp máy chủ đều được ). Bây giờ các tọa độ được lưu trong /GTA San Andreas/SAMP/Savepositions.
    Đây là những tọa độ mà tôi đã thu thập được.
    Mã:
      AddPlayerClass (23, 2038,5416, 1342,3601, 10,6719, 270,0824, 0, 0, 0, 0, 0, 0); 
      AddPlayerClass (46, 1831,0970, 1682,6102, 13,5469, 88,3051, 0, 0, 0, 0, 0, 0); 
      AddPlayerClass (45, 1481,3297, 1748,6530, 15,4453, 359,7071, 0, 0, 0, 0, 0, 0); 
      AddPlayerClass (83, 723,3815, 1494,9203, 1,9343, 359,2792, 0, 0, 0, 0, 0, 0); 
      AddPlayerClass (92, 1126,6831, 1425,8101, 15,7969, 357,7497, 0, 0, 0, 0, 0, 0); 
    
    Bây giờ thêm tọa độ vào kịch bản nào....ta sẽ có điều này:
    Mã:
    public OnGameModeInit()
    {
        SetGameModeText("Party v2.0.0");
        //------------------------[PLAYER CLASS SELECTION]--------------------------
        AddPlayerClass(23,2038.5416,1342.3601,10.6719,270.0824,0,0,0,0,0,0);
        AddPlayerClass(46,1831.0970,-1682.6102,13.5469,88.3051,0,0,0,0,0,0);
        AddPlayerClass(45,1481.3297,-1748.6530,15.4453,359.7071,0,0,0,0,0,0);
        AddPlayerClass(83,723.3815,-1494.9203,1.9343,359.2792,0,0,0,0,0,0);
        AddPlayerClass(92,1126.6831,-1425.8101,15.7969,357.7497,0,0,0,0,0,0);
        return 1;
    }
    
    Ok chứ :)) Bây giờ hãy thử add 1 chiếc xe nào.
    Lưu ý: Tọa độ trong đoạn code trên được phân biệt như sau
    Phân tích đoạn
    Mã:
    AddPlayerClass(23,2038.5416,1342.3601,10.6719,270.0824,0,0,0,0,0,0);
    
    23 là skin của nhân vật
    2038.5416 là tọa độ X
    1342.3601 là tọa độ Y
    10.6719 là tọa độ Z
    270.0824 là độ quay mình của nhân vật 
    những số 0 ở đằng sau là weapon 1, ammo 1, weapon12, ammo 2, weapon13, ammo 3.
    
    Tìm hiểu thêm về độ xoay của nhân vật - SetPlayerFacingAngle
    Mã:
                    Bắc (0)
                     |
            (90)Tây-   - Đông (270)  
                     |
                  Nam (180)
    
    [/HIDE]
    Bước 3 - Vehicle.
    [HIDE]Để add 1 chiếc xe , chúng ta đặt lệnh này "AddStaticVehicle" dưới OnGameModeInt

    Vào samp_debug.exe trong thư mục GTA SA (sa-mp client chứ không phải sever nhé) -> Launch Debug
    - Đến chỗ nào bạn muốn spawn vehicle, gõ /v [ID của vehicle], bạn có thể tìm thấy id của vehicle ở http://wiki.sa-mp.com/wiki/Category:Vehicle
    - Gõ /save [tên] để lưu chỗ spawn (Vào xe nhé)
    - Thoát ra, tìm file "savedpositions.txt" trong thư mục GTA User files -> SAMP, sẽ thấy dòng sau:
    Mã:
     
    AddStaticVehicle([COLOR="#FF0000"][id của vehicle][/COLOR], -2704.3149, 224.6218, 3.8592, 191.0172, 1, 1) <-- Vị trí của vehicle; // tên vừa đặt trong /save
    Ở đây mình đã có sẵn code nên ví dụ như sau:
    Mã:
    public OnGameModeInit()
    {
        SetGameModeText("Party v2.0.0");
        //------------------------[PLAYER CLASS SELECTION]--------------------------
        AddPlayerClass(23,2038.5416,1342.3601,10.6719,270.0824,0,0,0,0,0,0);
        AddPlayerClass(46,1831.0970,-1682.6102,13.5469,88.3051,0,0,0,0,0,0);
        AddPlayerClass(45,1481.3297,-1748.6530,15.4453,359.7071,0,0,0,0,0,0);
        AddPlayerClass(83,723.3815,-1494.9203,1.9343,359.2792,0,0,0,0,0,0);
        AddPlayerClass(92,1126.6831,-1425.8101,15.7969,357.7497,0,0,0,0,0,0);
        //---------------------------[SERVER VEHICLES]------------------------------
        AddStaticVehicle(402,1478.9257,-1737.8595,13.2929,270.0982,0,0);
        return 1;
    }
    
    Xong!Bạn hãy thử ấn F5 -> complie nó rồi bắt đầu sever xem nào .[/HIDE]
    Bước 4 - Command.
    [HIDE]Nào!Thử làm một lệnh cho người chơi xem nào . :) Đơn giản thôi nhé
    Đây là những gì chúng ta có:
    Mã:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
        if (strcmp("/mycommand", cmdtext, true, 10) == 0)
        {
            // Do something here
            return 1;
        }
        return 0;
    }
    
    Hãy chỉnh command theo ý bạn:
    Mã:
     if (strcmp("/help", cmdtext, true, 10) == 0)
    
    Bây giờ chúng ta hãy thêm SendClientMessage .
    Mã:
    SendClientMessage(playerid,0xFFFFFF,"Day la che do Deathmatch.");
    Và chúng ta có:
    Mã:
    public OnPlayerCommandText(playerid, cmdtext[])
    {
        if (strcmp("/help", cmdtext, true, 5) == 0)
        {
          SendClientMessage(playerid,0xFFFFFF,"Day la che do Deathmatch.");
        }
        return 0;
    }
    
    [/HIDE]

    Bước 5 - Add map.
    [HIDE]Vào http://forum.sa-mp.com/forumdisplay.php?f=64 tìm map và down file .pwn về, mở = notepad, copy tất cả code trong đó (hoặc copy code có sẵn trên vài topic map), sau đó vào /gamemode, tìm gamemode nào bạn muốn add map, mở = notepad, ctrl + f tìm dòng "OnGameModeInit" hoặc "OnFilterScriptInit", paste dòng code vừa copy bên dưới dòng đó rồi vào test.
    Nếu muốn tạo cho mình một map riêng , sử dụng tools "Map Editor" hoặc MTA Object
    http://www.mathpudding.com/topsecretsamp/editor.rar
    Tải về giải nén copy nó vào thư mục GTA SA của bạn ! Không phải thư mục sever nhé !Copy vào gta sa rồi chạy file editor.exe rồi ấn Load ( yêu cầu chạy trên máy độ phân giải 32bit hoặc cao hơn ).

    Ví dụ mình có code này
    Mã:
    CreateObject(19341, 2035.70, 1343.21, 10.49,   0.00, 0.00, 0.00);
    19341 -> là id của object ( ở đây mình có object cái trứng , bạn có thể tìm thấy id object trong map editor)
    2035.70 -> toạ độ object X
    1343.21 -> toạ độ y
    10.49 -> độ cao , toạ độ z
    0.00 , 0.00 , 0.00 -> toạ độ Rotation ( độ nghiêng ) rX,ry,rZ.

    Bây giờ add nó vào dưới OnGameModeInt thì sẽ có như sau:
    Mã:
    public OnGameModeInit()
    {
        SetGameModeText("Party v2.0.0");
        //------------------------[PLAYER CLASS SELECTION]--------------------------
        AddPlayerClass(23,2038.5416,1342.3601,10.6719,270.0824,0,0,0,0,0,0);
        AddPlayerClass(46,1831.0970,-1682.6102,13.5469,88.3051,0,0,0,0,0,0);
        AddPlayerClass(45,1481.3297,-1748.6530,15.4453,359.7071,0,0,0,0,0,0);
        AddPlayerClass(83,723.3815,-1494.9203,1.9343,359.2792,0,0,0,0,0,0);
        AddPlayerClass(92,1126.6831,-1425.8101,15.7969,357.7497,0,0,0,0,0,0);
        //---------------------------[SERVER VEHICLES]------------------------------
        AddStaticVehicle(402,1478.9257,-1737.8595,13.2929,270.0982,0,0);
        //---------------------------[SERVER MAPPING]------------------------------
        CreateObject(19341, 2035.70, 1343.21, 10.49,   0.00, 0.00, 0.00);
        return 1;
    }
    
    Complie nó và vào game, ngay toạ độ đó bạn sẽ thấy cái trứng này
    [​IMG][/HIDE]

    Bước 6 - Add Pickup.
    [HIDE][​IMG]
    Cũng vào sa-mp debug, save position on foot, vào GTA SA User files -> saved position lấy code...
    Mã:
    AddPlayerClass(skin-id, x, y, z, rotation, weapon 1, ammo 1, weapon12, ammo 2, weapon13, ammo 3)
    sửa thành
    Mã:
    AddStaticPickup(pickupid ,pickuptype, x, y, z);
    pickupid: id của weapon/toy. Pickup có thể tìm thấy ở http://weedarr.wikidot.com/pickups , pickup của gun ở http://weedarr.wikidot.com/gunlist.
    pickup type: dạng pickup,
    Mã:
    0 Không hiện =))
    2 Nhặt được, respawn sau vài phút
    3 Nhặt được nhưng không respawn
    4 Sau khi spawn sẽ biến mất trong vài giây
    5 Giống cái 4
    8 Nhặt được (mà không có tác dụng)/sau khi spawn sẽ biến mất trong vài giây
    11 Sau khi spawn sẽ nổ trong vài giây
    12 ^ 
    13 Pickup từ từ "bay" xuống theo hình chữ Z (parachute?)
    15 Nhặt được, không respawn
    19 Nhặt được nhưng mà pickup không có tác dụng gì cả =)) 
    22 Nhặt được, không respawn được
    
    x,y,z: tọa độ
    Ví dụ mình muốn add parachute, nhặt được, respawn được... vào tọa độ 2035.7024, 1343.2145, 10.4934...
    Mã:
    AddStaticPickup(1310,2, 2035.7024, 1343.2145, 10.4934)
    Sau đó tìm trong /gamemode những gmd nào bạn muốn add pickup, mở = pawno rồi tìm dòng "OnGameModeInit", paste cái code trên đằng sau dòng đó. Cuối cùng là complie nào :))[/HIDE]

    ...........................CONTINUE...........................
    ...........................Write by sA_leM...........................​
     
  2. .Frost.

    .Frost. Mr & Ms Pac-Man

    Tham gia ngày:
    30/11/11
    Bài viết:
    226
    bài viết rất hay, cảm ơn bạn khi nào rãnh vọc thử :d
     
  3. nic0nhan

    nic0nhan Youtube Master Race

    Tham gia ngày:
    25/8/12
    Bài viết:
    18
    yahoo của mình đây có gì add vào thảo luận nha bạn :) y!h: lov3_sky18
     
  4. .Frost.

    .Frost. Mr & Ms Pac-Man

    Tham gia ngày:
    30/11/11
    Bài viết:
    226
    Đã add .
    ------------------------------------------------------
     
  5. sieu_way_f2

    sieu_way_f2 Youtube Master Race

    Tham gia ngày:
    11/12/10
    Bài viết:
    63
    Nơi ở:
    Sì Gòn
    Bài hay, đáng đễ đọc :9cool_haha:
     
  6. nic0nhan

    nic0nhan Youtube Master Race

    Tham gia ngày:
    25/8/12
    Bài viết:
    18
    cảm ơn bạn :)...........................
     
  7. Bu.

    Bu. Youtube Master Race

    Tham gia ngày:
    3/11/11
    Bài viết:
    33
    mình đang tự hỏi ko biết Mod ở Box GTA này có nên lập 1 box con dành cho việc hướng dẫn tạo Server ko nhỷ kiểu như bên Box war là hướng dẫn tạo Map đó =,=". Công nhận bài viết này rất bổ ích và hay nhưng mình thấy vẫn khó hiểu cho mấy bạn newbie ^^. Mình thì gà code chỉ toàn xài hàng có sẵn thôi. Mà dạo này ko khoái dùng mấy Mode của SA-MP nữa vì toàn là roleplay chán lắm ko phù hợp dân Việt, mình đang tính đổi sang MTA thử xem sao, bạn có rành về MTA ko hướng dẫn mình mở sv = MTA đi ^^
     
  8. motphatchetluon

    motphatchetluon Youtube Master Race

    Tham gia ngày:
    18/3/13
    Bài viết:
    15
    hay lắm đúng cái em cần, cảm ơn bác
     

Chia sẻ trang này