SA:MP Destek Blogu
Samp Destek Sitesi

Deathmatch Sistemi Yapmak (ZCMD-DCMD)

Herkese selam, bugün çok uzun zaman önce yaptığım anlatımın daha gelişmiş versiyonu ile karşınızdayım. Bu anlatım ile, eğer modunuz ZCMD gibi kodlama şekli ile kodlanmışsa ona göre de yöntemlerimiz olacaktır. Önceki anlatımımda eğer modunuz ZCMD ise bir işe yaramıyordu. Oyuncu yine komut kullanabiliyordu. Fakat bu anlatım ile oyuncu komutları hiçbir şekilde kullanamayacak.

İlk olarak, yine önceki anlatımımızda olduğu gibi bir değişken oluşturmamız gerekiyor. Bunun sebebi oyuncunun deathmatch oynayıp oynamadığını tespit etmek. Eğer oynuyorsa if yardımı ile birtakım şeyleri kullanmasını engelleyeceğiz.

Modumuzun başına aşağıdaki kodu ekliyoruz:
new dmstate[MAX_PLAYERS];

Deathmatch gitmek için bir komut hazırlıyoruz. Modunuz ZCMD ise aşağıdaki komutu modun boş bir kısmına yerleştirin. (Örneğin modun sonu olabilir, boş aralıklar olabilir. Sığdırabildiğiniz yere artık.)

CMD:dm(playerid,params[])
{
if(IsPlayerInAnyVehicle(playerid)){ // Burada eğer araçtaysa parantezini açtık.
GameTextForPlayer(playerid,"~w~Hop, aractan in delikanli.",1000,3); // Buraya ise araçtaysa olacakları işledik.
}else{ // Burada eğer araçta değilse olacaklar parantezini açtık.
SetPlayerPos(playerid,246.375991,109.245994,1003.218750); // Burası San Fierro Polis Departmanı oluyor.
SetPlayerInterior(playerid,10); // Etrafın siyah görünmemesi için 0 olan interior değerini SFPD değeri ile değiştik.
SetPlayerVirtualWorld(playerid,51); // Default dünyadaki oyuncu ile karşılaşmaması için dünyalarını değiştik.
dmstate[playerid] = 1; // Oyuncunun dm değişkenini 1 yaptık. Oyuncu artık deathmatch moduna girmiş bulunmakta.
SendClientMessage(playerid,-1,"{74E8CD}[D-System]: {FFFFFF}Deathmatch moduna hoş geldiniz!");
} // Açtığımız parantezi kapattık.
return 1;
} // En başta komutu başlatırken açtığımız parantezi kapattık.


Burada yaptığımız işlemleri bir tekrarlayalım.
  • Oyuncu "/dm" yazarak deathmatch alanına ışınlandı.
  • Interior değeri 10 oldu.
  • Dünyası değişti.
  • Deathmatch değişkeni aktif oldu.
Değişmeniz gereken kısımları öğrenelim.

SetPlayerPos(playerid,x,y,z); X,Y,Z kısmına oyun içerisinde aldığınız kordinat değerlerini yazacaksınız.
SetPlayerInterior(playerid,x); X kısmına eğer ışınlandığı yer bir interior ise o interior değerini yazacaksınız. Eğer 0 ise, yani interior yoksa bu satırı silebilirsiniz.
SetPlayerVirtualWorld(playerid,X); Burada, oyuncuyu 0 haricinde herhangi bir dünyaya postalıyoruz. /dm komutunu kullananlar o değeri benimseyecek. Diğer dünyadakiler haritada asla karşılaşmayacaklar.

Burayı artık anladığımızı varsayıyorum. Sıradaki durağımız OnPlayerSpawn oluyor. Bu callback oyuncu doğduğunda yapılacak işlemleri uygulamamıza yaramakta.

public OnPlayerSpawn(playerid)
{
if(dmstate[playerid] == 1)
{
SetPlayerPos(playerid,246.375991,109.245994,1003.218750); // Burası San Fierro Polis Departmanı oluyor.
SetPlayerInterior(playerid,10); // Etrafın siyah görünmemesi için 0 olan interior değerini SFPD değeri ile değiştik.
SetPlayerVirtualWorld(playerid,51); // Default dünyadaki oyuncu ile karşılaşmaması için dünyalarını değiştik.
dmstate[playerid] = 1; // Oyuncunun dm değişkenini 1 yaptık. Oyuncu artık deathmatch moduna girmiş bulunmakta.
}
return 1;
}


/dm komutunda yaptığımız işlemleri aynen buraya aktarıyoruz. Oyuncunun değeri 1 ise yeniden oraya ışınlanmış oluyor. Bunu kullanıp kullanmamak sizin elinizde. Eğer oyuncunun her doğduğunda /dm yazarak gitmesini istiyorsanız bunu OnPlayerSpawn bölümüne eklemeyin, unutun gitsin. Eğer otomatik olarak /dmcik yazmadıkça çıkmamasını istiyorsanız, bu tam size göre.

Evet, belki de en kolayına geldik. Sıra geldi oyuncunun komut kullanamama yasağına.

Burada eğer modunuz ZCMD ise OnPlayerCommandText callbacki geçersiz olmakta. Onun yerine yeni bir callback işimizi görecek. OnPlayerCommandPerformed ile tanıştınız mı bilmiyorum ama eğer bir diğer anlatımımız olan, Unknown Command anlatımımıza bakmış iseniz kesinlikle tanışmışsınız demektir.

Modunuzun boş bir kısmına aşağıdaki kodu ekleyiniz:

public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(dmstate[playerid] == 1) return SendClientMessage(playerid,-1,"{74E8CD}[D-System]: {FFFFFF}Şu an ölüm modunuz aktif. (Çıkmak için /ayril komutunu kullanınız.)");
/* Eğer modda hatalı komut yazıldığında hata mesajını değiştirmek istiyorsanız aşağıdaki kodu ekleyiniz */
if(!success) return SendClientMessage(playerid,-1,"{74E8CD}[System]: {FFFFFF}Hatalı komut girdiniz.");
/* Konumuz ile alakası yok ama bir faydamız dokunsun istedik. */
return 1;
}


Eğer modunuz DCMD ise endişe yapmanıza gerek yok demektir. OnPlayerCommandText sizin yardımınıza koşacaktır. Biliyorsunuz ki DCMD kodlama mantığında komutu oluşturduğumuzda birde OnPlayerCommandText'e bir not düşmemiz gerekmekte. Örnek not olarak dcmd(asd,3,cmdtext); diyebiliriz. Şimdi bizim alttaki kodu hepsinin üzerine, OnPlayerCommandText'in başına eklememiz gerekiyor.

public OnPlayerCommandText(playerid, cmdtext[])
{
if(dmstate[playerid] == 1) return SendClientMessage(playerid,-1,"{74E8CD}[D-System]: {FFFFFF}Şu an ölüm modunuz aktif. (Çıkmak için /ayril komutunu kullanınız.)");


New butonuna bastığınızda OnPlayerCommandText callbacki otomatik gelmekte. Fakat ZCMD sonradan ekleme, yani bir üyenin kodlamasıyla geliştiği için gelmemekte. OnPlayerCommandText'te gösterdiğimiz gibi başına ekleyip compile ederseniz işlem tamam demektir.

Eh, geldik en kolay kısmına. Deathmatch'dan ayrılma komutuna, değerleri sıfırlayarak ölüm maçından şutlama kısmına.

CMD:ayril(playerid,params[])
{
SpawnPlayer(playerid); // Oyuncuyu geri OnPlayerSpawn kısmına yolladık, yani spawn ettik.
SetPlayerInterior(playerid,0); // Etrafın siyah görünmemesi için geri default değerine aldık.
SetPlayerVirtualWorld(playerid,0); // Default dünyaya geri postaladık.
dmstate[playerid] = 0; // Oyuncunun dm değişkenini 0 yaptık. Oyuncu artık deathmatch modundan çıkmış bulunmakta.
SendClientMessage(playerid,-1,"{74E8CD}[D-System]: {FFFFFF}Deathmatch modundan ayrıldınız.");
return 1;
// En başta komutu başlatırken açtığımız parantezi kapattık.

 
 
Mesaj At
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol