Selasa, 18 Februari 2014

Pawno Tutorial

Membuat deathmatch dasar

Membuat deatchmatch dasar dalam PAWN tidak bisa sederhana. Buka hanya Pawno (Lihat Editor Scripting ) dan klik New. Di sana Anda memilikinya, naskah pertama Anda. Untuk menjalankannya pertama menyimpannya (kebanyakan orang menyimpannya untuk "<San Andreas Instal directory> / Samp / gamemodes / src /" tapi lebih mudah (untuk pengujian lokal) untuk menyimpannya ke "<SA> / Samp / gamemodes /" ), kemudian klik tombol pada toolbar di sebelah kiri langsung dari tombol panah biru. Hal ini akan mengkompilasi file Pwn. Anda ke AMX dalam folder yang sama., Namun untuk permainan melihatnya itu perlu di "<SA> / Samp / gamemodes /" (melihat mengapa tabungan ada lebih mudah, yang membuatnya sudah ada setelah kompilasi). Sekarang untuk menguji peta Anda, Anda perlu akan menyiapkan Server lokal dan Ubah ke mode Anda (ketik "changemode <your name> mode" pada jendela Server).

Jika semua yang bekerja, ketika Anda terhubung ke server Anda melalui klien sa-mp dan permainan dimulai Anda akan muncul di luar sebuah kasino di Las Venturas. Sayangnya, anda tidak akan dapat melihat karakter Anda memilih (saat ini hanya ada satu) tetapi kita dapat dengan mudah mengubah itu nanti. Hal ini juga tidak deathmatch sangat menarik karena Anda hanya memiliki tinju untuk bertarung dengan dan tidak ada lawan, tapi karena ini adalah server lokal ada saat ini tidak banyak yang bisa kita lakukan tentang masalah kedua.

Sekarang hal pertama Anda mungkin ingin menambahkan ke mode Anda adalah senjata, ini dikendalikan pada "per kelas" dasar. Setiap pemain Anda harus memilih dari pada awal permainan (atau nanti jika Anda mengubah) disebut pemain "kelas". Mereka semua mungkin memiliki senjata yang sama atau semua yang berbeda, atau kombinasi keduanya. Anda mengatur setiap kelas senjata secara terpisah, sehingga untuk membuat mereka semua memiliki senjata yang sama Anda hanya akan menyalin data senjata dan menambahkannya ke masing-masing kelas, ini akan menjamin pertandingan yang seimbang tapi tidak terlalu menarik, namun itu adalah terserah Anda. Dalam pencarian editor baris ini:
  AddPlayerClass (0, 1958,3783, 1343,1572, 15,3746, 269,1425, 0, 0, 0, 0, 0, 0); 
Ini adalah definisi kelas, parameter adalah sebagai berikut:
  AddPlayerClass (Pemain Model, X, Y, Z, A, 0 Senjata, Amunisi 0, 1 Senjata, Amunisi 1, 2 Senjata, Amunisi 2); 
Model Pemain bisa didapat dari "peds.ide", "X", "Y" dan "Z" adalah koordinat di mana pemain akan menelurkan saat dipilih dan "A" adalah sudut menghadap mereka, ada satu titik spawn per kelas, namun hal ini bisa mendapat sekitar dengan coding yang akan dibahas kemudian. Angka-angka dapat Senjata ditemukan di sini dan jumlah amunisi hanya jumlah amunisi yang ingin Anda Berikan Pemain per Weapon (Melee Senjata amunisi selalu 0).

Sekarang salin baris ini:
  AddPlayerClass (102, 1958,3783, 1343,1572, 15,3746, 269,1425, 5, 0, 22, 100, 32, 50); 
dan menempatkannya di bawah garis Anda temukan dalam naskah Anda. Anda sekarang akan memiliki ingame pilihan antara CJ dengan apa-apa dan Balla dengan tongkat baseball, pistol dan Tec9, jika Anda ingin bahkan hal ini mencoba menambahkan senjata Anda sendiri untuk CJ atau menambahkan kelas pemain yang lebih di bawah ini dengan senjata lainnya.

Catatan: senjata yang tercantum pada halaman terkait di atas yang mengatakan "(crash jika Anda mencoba untuk api)" atau "(Tidak Dapat Digunakan)" tidak bekerja dengan SA-MP baik.
[ sunting ]

Mendapatkan koordinat, sudut dan Model id

Anda mungkin akan ingin memindahkan beberapa poin bibit Anda tentang sehingga semua orang tidak bertelur di tempat yang sama, yang akan membuat deathmatch agak membosankan dan berkemah luar biasa mudah. Di sinilah modus debug masuk Jalankan "samp_debug.exe" dalam direktori root San Andreas Anda dan setiap kali Anda ingin menyimpan tipe koordinasi "/ save" dalam permainan (tekan "t" atau tombol di bawah melarikan diri untuk membuka teks / chatting prompt). Ini akan menyimpan posisi Anda saat ini, sudut dan playerid ke sebuah file yang bernama "savedpositions.txt" dalam direktori root SA Anda.
[ sunting ]

Pengenalan fungsi dan callback

Sebelum kita bisa terus Anda akan perlu diperkenalkan kepada callback. Ini adalah potongan kode yang sudah di gamemode Anda yang terlihat seperti ini:
  Public OnPlayerDisconnect (playerid)
 {
     printf ("OnPlayerDisconnect (% D)", playerid);
     kembali 1;
 } 
Ini adalah callback OnPlayerDisconnect, itu berarti bagian kode dijalankan oleh server setiap kali terputus pemain, jadi jika Anda ingin menampilkan pesan di layar besar ketika seorang pemain membuat Anda akan menempatkan kode untuk itu di sini. Semua callback penggunaan permainan (kecuali 2, tetapi mereka digunakan oleh filterscripts, tidak gamemodes dan tidak dibahas di sini) dalam file Anda, Anda tidak dapat membuat Anda sendiri. Sebagian besar dari mereka muncul sebagai satu di atas tidak, tetapi beberapa (yaitu "OnPlayerCommandText", "OnPlayerRequestClass", "OnGameModeInit" dan "utama" (yang tidak sepenuhnya callback dan tidak pernah memiliki lebih dari judul game Anda)) memiliki bit lainnya di sudah, baik untuk membuat permainan bekerja atau untuk menunjukkan apa yang harus dilakukan di sana. Anda juga dapat menggunakan lainnya, blok yang sama (seperti kita hendak) yang terlihat sama tetapi disebut fungsi, ini harus dipanggil oleh Anda sendiri. Berikut ini adalah fungsi yang disebut "IMadeThis" (perhatikan kurangnya ruang).
  IMadeThis ()
 {
     / / Ini adalah komentar dan diabaikan oleh permainan / compiler
     / * Jadi  	
          adalah 
          ini * /
     Print ("Ini Akan Dicetak ke jendela Server");
     return 0;
 } 
Anda mungkin juga telah melihat pengenalan yang sangat cepat untuk komentar di sana, segala sesuatu pada baris setelah "/ /" akan diabaikan, seperti yang akan apapun di manapun di antara "/ *" dan "* /". Sebagai fungsi tidak disebut oleh permainan kita perlu menyebutnya diri dari callback, ini mati mudah karena sebagian besar perintah yang Anda gunakan untuk kode dengan sebenarnya fungsi premade (perintah yang sebenarnya berbeda), jadi jika Anda ditempatkan :
  IMadeThis (); 
Anda di OnPlayerDisconnect callback (itu harus Antara "{" dan "}" dan juga sebelum "mengembalikan 1;" itu akan berjalan dan fungsi yang mencetak pesan di jendela server bila Anda terputus (mengingat hal-hal lain di sana yang diabaikan). Kami tidak umumnya ingin mencetak sesuatu ke jendela Server dan semua "print" dan "printf" fungsi sudah dalam file umumnya dihapus oleh coder. Hanya hal-hal antara kawat gigi dalam fungsi / callback ( dari sekarang pada fungsi mengacu pada callback serta mereka adalah kasus khusus dari fungsi), baris di atas adalah nama fungsi. "publik" berarti fungsi tersebut dapat dijalankan oleh setiap bit lain dari kode, ini pada dasarnya berarti kode Anda dapat dijalankan ketika Anda menyebutnya, kami tidak khawatir tentang fungsi swasta karena mereka umumnya tidak digunakan dalam SA-MP (jika sama sekali). Kurung setelah nama fungsi melampirkan daftar parameter, kami belum dibahas ini belum tetapi Anda dapat melihat contoh penggunaannya di beberapa callback dalam file kosong Anda, perhatikan bahwa parameter-parameter tersebut otomatis lolos saat pertandingan panggilan fungsi, jika kita menggunakan fungsi kustom (yaitu tidak callback) dan kami ingin menggunakan beberapa parameter kita perlu melewati mereka sendiri. Satu hal kecil yang harus disebutkan adalah bahwa semua baris selain baris dengan kawat gigi pada (dan bahkan mereka dalam keadaan tertentu, tetapi ini akan dibahas kemudian) dan garis langsung sebelum penjepit terbuka (kawat gigi mungkin pada akhir baris yang atau, seperti yang ditunjukkan di sini, pada baris baru), diakhiri dengan titik koma untuk menunjukkan akhir dari suatu proses.
[ sunting ]

Membuat deathmatch tim

OK, sekarang Anda tahu bagaimana membuat kelas dan menempatkan mereka kalau kita akan menunjukkan cara untuk mengatur tim, ini akan menjadi bit pertama dari coding nyata tetapi cukup mudah. Saya hanya akan menggunakan dua kelas yang dijelaskan pada halaman ini sehingga jika Anda memiliki lebih menghapusnya untuk saat ini atau mulai modus baru dan pastikan hanya dua masuk Kelas diberi nomor dalam urutan dari 0, sehingga kelas pertama dalam file Anda adalah 0, yang kedua adalah 1 dan seterusnya (komputer dan program hampir selalu mulai dari 0 dalam penghitungan (Anda akan menemukan bahwa playerid Anda dalam permainan uji 0) ). Kami ingin mengatur tim berdasarkan kelas mana yang mereka pilih (baik Grove atau Balla), Anda mungkin melihat callback dan berpikir bahwa ini akan pergi dalam fungsi OnPlayerRequestClass, dan Anda akan benar. Ketika memilih kelas mereka Anda ingin mengatur tim berdasarkan itu, kita tidak bisa melakukannya dalam fungsi OnPlayerSpawn pada saat itu kita tidak tahu kelas mereka telah memilih (yang merupakan parameter dan hanya parameter kita melewati atau yang bersifat global dalam script Anda (kita akan membahas ini nanti) dapat digunakan dalam fungsi apapun). Pertama kita perlu mendefinisikan tim kami, di bawah "# include" baris (s) di bagian atas file Anda menambahkan baris ini:
  # Tentukan TEAM_GROVE 1
 # Tentukan TEAM_BALLA 2
 # Menentukan TEAM_GROVE_COLOR 0x00FF00AA / / Terang Hijau (dalam format RGBA)
 # Menentukan TEAM_BALLA_COLOR 0xFF00FFAA / / cerah Purple 
Jika Anda ingin mengubah warna, itu bagus, hanya ingat bahwa dua digit terakhir adalah alpha dan rendah yaitu semakin sedikit Anda bisa melihat warna. Mendefinisikan adalah murni pengganti, jika Anda pernah ingin menggunakan nomor 1 dalam naskah Anda, Anda dapat menggunakan TEAM_GROVE bukan, ini bukan ide yang baik untuk perhitungan normal seperti itu membuat mereka sulit untuk dibaca, tapi untuk menggunakan untuk menunjukkan tim, yang hanya dilambangkan dengan angka, itu membuat jauh lebih jelas apa yang terjadi (dan membuatnya sangat mudah untuk mengubah tim sekitar atau memodifikasi kemudian sebagai Anda hanya perlu mengubah 1 dalam menentukan daripada semua contoh itu seluruh kode. . ketika kode dikompilasi, semua "TEAM_GROVE" s akan digantikan oleh 1, tidak seperti variabel, itu adalah konstan, tidak berubah Sekarang di bawah garis menambahkan:
  baru gTeam [MAX_PLAYERS]; 
Ini disebut array global. Array pada dasarnya adalah banyak variabel (tempat Anda menyimpan data untuk membaca dan menulis) mengelompok bersama-sama untuk menyimpan banyak data sekaligus. The "MAX_PLAYERS" adalah konstanta yang telah ditetapkan (dilakukan dengan cara yang persis sama seperti yang kita lakukan mendefinisikan kami MAX_PLAYERS sebenarnya ditetapkan sebesar 500 di SA-MP 0.3A., Jadi ini berarti bahwa array kita dapat menyimpan hingga 500 lembar data . The g pada nama berarti global, tapi itu tidak membuatnya global yang (itu hanya membuat lebih mudah untuk mengatakan apa variabel melakukan apa, mendefinisikan di luar fungsi artinya adalah global dan dapat digunakan oleh semua fungsi kami. Setiap variabel didefinisikan dalam fungsi adalah lokal untuk fungsi itu dan tidak dapat memiliki nama yang sama dengan variabel lain dalam fungsi yang sama atau variabel global (yang juga mengapa g berguna), namun hal itu dapat memiliki nama yang sama dengan variabel lain dalam fungsi lain. Semua "playerid" variabel dalam skrip kosong Anda sebenarnya semua variabel independen, masing-masing lokal untuk fungsi yang berbeda, namun mereka semua lulus data yang sama, tapi ingat bahwa setiap fungsi yang Anda buat tidak akan secara otomatis memiliki . data yang Sekarang kita memiliki yang mengatur kita dapat mengatur tim:
  SetPlayerTeamFromClass (playerid, classid)
 {
	 if (classid == 0)
	 {
		 gTeam [playerid] = TEAM_GROVE;
	 }
	 lain
	 {
		 gTeam [playerid] = TEAM_BALLA;
	 }
 } 
Tempatkan kode yang LUAR fungsi dalam kode Anda (seperti fungsi baru) dan menempatkan garis-garis ini sebagai hal pertama setelah kurung kurawal buka di callback OnPlayerRequestClass Anda (perhatikan cara variabel tidak global sehingga kami harus melewati mereka Untuk fungsinya juga):
  SetPlayerTeamFromClass (playerid, classid); 
Ini akan menghemat tim pemain untuk array melalui fungsi baru. Data dalam array direferensikan oleh nomor, sehingga array [0] adalah item pertama data, array [1] adalah yang kedua dan seterusnya, seperti kita menggunakan gTeam [playerid], tergantung pada playerid kita lulus akan menentukan di mana dalam array untuk menyimpan data, sehingga untuk pemain 5 data mereka akan disimpan di berbagai posisi 5 (ingat, ini adalah bagian ke-6 data). Sekarang salin fungsi ini:
  SetPlayerToTeamColor (playerid)
 {
	 if (gTeam [playerid] == TEAM_GROVE)
	 {
		 SetPlayerColor (playerid, TEAM_GROVE_COLOR);
	 }
	 else if (gTeam [playerid] == TEAM_BALLA)
	 {
		 SetPlayerColor (playerid, TEAM_BALLA_COLOR);
	 }
 } 
Dan tambahkan baris berikut ke OnPlayerSpawn:
  SetPlayerToTeamColor (playerid); 
Kami sekarang memiliki tim kami, tapi apa yang telah kita benar-benar dilakukan?
  if (classid == 0)
	 {
		 gTeam [playerid] = TEAM_GROVE;
	 } 
Dalam fungsi pertama kami, kami memeriksa kelas mereka memilih (ingat kita mengatakan bahwa kelas didefinisikan dalam file Anda adalah kelas 0?) "==" Berarti "sama dengan", sebuah equals tunggal menandatangani hanya menetapkan variabel ke nomor diberikan (seperti yang terlihat pada baris berikutnya tapi satu). Kurung kurawal memisahkan fungsi antara mereka dari sisa kode, bit di sana hanya dijalankan jika kelas yang dipilih adalah 0 (cj), jika tidak, perintah yang lain datang ke dalam bermain dan mengeksekusi bukan (ini mengeksekusi setiap kali "jika" perintah salah (yaitu kelas tidak 0)), karena kita hanya memiliki dua kelas untuk memilih dari ini harus berarti kita Balla:
  lain
	 {
		 gTeam [playerid] = TEAM_BALLA;
	 } 
Kita tidak perlu kembali di sini karena tidak ada data untuk kembali.

Babak kedua mengatur warna pemain ketika mereka bertelur, sehingga Anda dapat memberitahu siapa yang ada di tim mana. Seperti kita diselamatkan tim mereka ke array global, kita masih bisa mengakses data meskipun dalam fungsi yang terpisah.
  if (gTeam [playerid] == TEAM_GROVE)
	 {
		 SetPlayerColor (playerid, TEAM_GROVE_COLOR);
	 } 
Mudah-mudahan Anda dapat melihat apa ini lakukan sekarang, jika pemain yang baru saja melahirkan (seperti yang direferensikan oleh playerid) di TEAM_GROVE, kita mengatur warna mereka untuk TEAM_GROVEs warna.
  else if (gTeam [playerid] == TEAM_BALLA)
	 {
		 SetPlayerColor (playerid, TEAM_BALLA_COLOR);
	 } 
Bagian berikut ini sedikit berbeda, itu bisa easilly telah dilakukan seperti ini:
  lain
	 {
		 SetPlayerColor (playerid, TEAM_BALLA_COLOR);
	 } 
Tetapi cara itu dilakukan memungkinkan Anda untuk mengatur warna mereka untuk TEAM_BALLAs warna hanya jika bagian pertama adalah palsu (seperti yang diurutkan oleh ELSE yang) DAN jika mereka berada di TEAM_BALLA, ini memungkinkan Anda untuk menambahkan lebih banyak pilihan dengan menambahkan lebih "else if ( ) "blok sampai akhir sebagai salah satu hanya akan dieksekusi jika semua blok sebelum tidak.
[ sunting ]

Kendaraan

OK, jika Anda memiliki bab-bab sebelumnya Anda harus memiliki deathmatch sangat dasar atau tim-deathmatch dengan menumbuhkan ditempatkan di manapun Anda inginkan, sehingga memungkinkan menambahkan beberapa kendaraan. Sebagian besar perintah dalam PAWN melakukan cukup banyak persis seperti mereka bernama, kita ingin menambahkan kendaraan sehingga memungkinkan mencari perintah kendaraan:
  CreateVehicle ();

 AddStaticVehicle (); 
Jika Anda mengklik salah satu dari ini dan melihat di status bar (bar di bagian bawah editor), Anda akan melihat sintaks mereka (informasi apa / parameter Anda harus memberikan mereka untuk bekerja):
  [A_samp.inc] CreateVehicle asli (vehicletype, Float: x, float: y, Float: z, Float: rotasi, color1, color2, respawn_time);

 [A_samp.inc] AddStaticVehicle asli (modelid, Float: spawn_x, Float: spawn_y, Float: spawn_z, Float: z_angle, color1, color2);
Sekarang mereka berdua tampak sama-sama baik, tapi ini adalah di mana pengetahuan sebelumnya masuk, CreateVehicle hanya menempatkan satu ingame mobil, AddStaticVehicle menciptakan bibit kendaraan, sehingga ketika mobil hancur atau desynched itu akan muncul kembali kembali di mana Anda menempatkan bibit tersebut. Ini perlu dibuat pada awal permainan sehingga Anda akan menempatkan ini dalam Anda "OnGameModeInit ()" callback.

Daftar warna mobil yang tersedia
Memperbesar
Daftar warna mobil yang tersedia
Angka-angka modelid / vehicletype dapat ditemukan dalam file vehicles.ide Anda, Mengapung nomor hanya non keseluruhan, pada dasarnya koordinat dan sudut, dan nomor warna dapat ditemukan dalam file carcols.dat Anda, mencari nomor referensi untuk warna yang Anda inginkan, jadi "hitam" adalah "0", "taksi kuning" adalah "6", "currant poli biru" adalah "32" dll, "-1" berarti acak (dari warna default yang mobil, ditemukan lebih rendah pada file carcols.dat). Jika Anda ingin mendapatkan posisi untuk kendaraan, masuk ke mode debug, pilih kendaraan Anda, masuk dan ketik "/ save" kemudian membuka "savedpositions.txt" dan salin baris. Jika Anda ingin menelurkan kendaraan dalam mode debug, ketik "/ v <vehicleid>" ingame dan kendaraan yang akan menelurkan (VehicleID diambil lagi dari vehicles.ide), atau jenis "/ VSEL" untuk membuka layar command kendaraan.

Aku punya ini koordinat:
  2040.2279, 1344.4127, 11,0, 3,5436
Catatan: ini disebut mengapung, 11.0 adalah pelampung meskipun keseluruhan, setiap bilangan bulat yang digunakan sebagai pelampung harus memiliki trailing ".0" untuk menunjukkan sebagai pelampung. Jumlah ini dalam format bahasa Inggris menggunakan titik desimal ("."), Koma digunakan untuk parameter terpisah. Juga ingat nomor 4 adalah sudut, jadi jika sekarang kita tambahkan baris berikut ke modus permainan di OnGameModeInit, mengkompilasi ulang dan uji, kita akan mendapatkan Infernus pink cerah di luar kasino yang merupakan posisi default bertelur untuk CJ. Catatan: pada mobil yang menggunakan warna sekunder (seperti mobil polisi (id 596)) ini akan menjadi merah muda dan mobil biru karena itu adalah warna sekunder.
  AddStaticVehicle (411, 2040,2279, 1344,4127, 10,6719, 3,5436, 126, 54); 
Sekarang Anda dapat dengan mudah pergi tentang menyimpan posisi dan menciptakan mobil sebanyak yang Anda inginkan, sampai batas mesin didefinisikan dari 2000 mobil individu model apapun. Namun, karena kendaraan secara dinamis mengalir, itu adalah ide yang baik untuk menjaga jumlah model kendaraan di bawah 150.

6

6 komentar:

  1. min ane mau tanya, kan gua ada file .pwn cara biar ada .amx nya gimana yah ?

    BalasHapus
    Balasan
    1. Saya kok gak bisa di compile min

      Hapus
    2. download ini dulu bro https://docs.google.com/document/d/14nyWWv306ekzxHG5D0hSEWaHJ8-mKgKed54_h1CZwyU/edit

      Hapus
  2. min kan pawnonya gua bikin buat kasih tekstur buat mapping nah cara masukin code yang udah di hapus ke dalam pawnonya gimana?

    BalasHapus
  3. min cara ganti "playerid" itu ganti nama playernya atau id nya?

    BalasHapus