Deathmatch Sistemi Yapmak (ZCMD-DCMD)
Merhaba Arkadaşlar. Bu anlatimda Deathmatch sistemi nasil yapilir onu anlattim ,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.
Modun 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) 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) 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) 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.
Konunun orjinal:http://samp-destek-sitesi.tr.gg/Deathmatch-Sistemi-Yapmak--k1-ZCMD_DCMD-k2-.htm (http://samp-destek-sitesi.tr.gg/Deathmatch-Sistemi-Yapmak--k1-ZCMD_DCMD-k2-.htm)
Elinize sağlık konu biraz daha düzenlenebilir.
Alıntı yapılan: ReDDooM - 08 Aralık 2017, 08:50:02
Elinize sağlık konu biraz daha düzenlenebilir.
Rica Ederim
Anlatımın iyi gelişiyorsun :helal:. Başarılar.
Alıntı yapılan: STaRDuST10 - 08 Aralık 2017, 10:03:16
Anlatımın iyi gelişiyorsun :helal:. Başarılar.
[Alıntı]Alıntı yapmayı bırakıp, kendin bir şeyler yapmalısın.
Alıntı yapılan: STaRDuST10 - 08 Aralık 2017, 10:03:16
Anlatımın iyi gelişiyorsun :helal:. Başarılar.
Teşekkürler :D
Alıntı yapılan: Excision - 08 Aralık 2017, 10:36:03
Alıntı yapılan: STaRDuST10 - 08 Aralık 2017, 10:03:16
Anlatımın iyi gelişiyorsun :helal:. Başarılar.
[Alıntı]
Alıntı yapmayı bırakıp, kendin bir şeyler yapmalısın.
Tmm abi :helal:
Alıntı yapılan: Excision - 08 Aralık 2017, 10:36:03
Alıntı yapılan: STaRDuST10 - 08 Aralık 2017, 10:03:16
Anlatımın iyi gelişiyorsun :helal:. Başarılar.
[Alıntı]
Alıntı yapmayı bırakıp, kendin bir şeyler yapmalısın.
Katılıyorum. Varolan birseyi herkes paylaşır. Ya gelistir yada yeni birşey yap
Alıntı yapılan: DeliOqlan - 10 Aralık 2017, 18:35:19
Alıntı yapılan: Excision - 08 Aralık 2017, 10:36:03
Alıntı yapılan: STaRDuST10 - 08 Aralık 2017, 10:03:16
Anlatımın iyi gelişiyorsun :helal:. Başarılar.
[Alıntı]
Alıntı yapmayı bırakıp, kendin bir şeyler yapmalısın.
Katılıyorum. Varolan birseyi herkes paylaşır. Ya gelistir yada yeni birşey yap
:helal:
Kaynak belirtmelisin. Aldığın yerde daha ayrıntılı bir şekilde anlatıldı.
Alıntı yapılan: Jawié - 10 Aralık 2017, 21:11:23
Kaynak belirtmelisin. Aldığın yerde daha ayrıntılı bir şekilde anlatıldı.
Eklendi :helal:
Eline Sağlık Güzel Anlatım Olmuş :helal:
Alıntı yapılan: Afrodeath - 02 Ocak 2018, 00:48:18
Eline Sağlık Güzel Anlatım Olmuş :helal:
Rica Ederim.
Eline Sağlık güzel anlatım. :helal:
Oyuncu ayril yazınca onu da engellemeyecek mi?
Alıntı yapılan: SelimBasKaN - 06 Ocak 2018, 13:56:00
Oyuncu ayril yazınca onu da engellemeyecek mi?
Suan Bilgisayarım Arızalı Engellermi Bilmiyorum Bi Deneyin İsterseniz İyi Günler.
Yararlı.