Yazar: NGA- Taki kariyeri
Bu makalenin amacı başlamak için sıfırdan başlamaktır. Harita atölyesinin ne olduğunu zaten anladıysanız, bu makale size pek yardımcı olmayabilir.
Harita atölyesinin gizemli "perdesini" "ortaya çıkarmak" için önce birkaç soruyu kullanıyoruz:
Kural nedir
Harita atölyesi birçok "kural" dan oluşur. Kurallar neler? Bunu birer birer "yönetmelikler" olarak düşünebilirsiniz. "Kural" yürütüldüğünde, yürütülür.
Örneğin: hayatta işe geç kalırsanız, patronunuz maaşınızı kesecektir. Sabah alarm çaldığında kalkmalısın. Bunlar hayattaki "kurallar" dır.
Kurallar üç bölümden oluşur: olaylar, koşullar ve eylemler. Yine de yukarıdaki örnek, işe geç kaldığınızda ve bugün izinli olmadığınızda, patron maaşınızı kesecektir. Bu kural da işe geç kalma bir olay, bugün izin günü değildir bir koşul ve ücret kesintisi bir eylemdir.
Bu oyuna nasıl yansıyor? Örneğin, DVA'nın nükleer patlamasının belirli bir menzil içindeki düşmanlara zarar verebileceğini biliyoruz. O halde, "Mecha patlaması" bir olaydır, "Oyuncu patlama menzilinde ve oyuncu ile DVA düşmanca bir ilişki içindedir", "Hasara neden olmak "Eylemdir. (Not: Olaylar, koşullar ve eylemler arasındaki ilişkiyi anlamanıza izin verecek "Mecha Patlaması" örneğini burada bulabilirsiniz)
Sonuç olarak, kural şudur: Bir şey (olay) meydana geldiğinde ve koşullar karşılandığında, bazı eylemler yapın.
Kuralları yaz
"Kuralların" ne olduğunu zaten bildiğinize inanın, sonra, "kurallar" aracılığıyla basit bir şey yapacağız: oyuncunun her sakatlandığında 10 sağlık puanı kurtarmasına izin verin.
Süreç aslında çok basit: oyuncu sakatlandı iyileşiyor. Öyleyse ilgili kurallar ne olmalıdır?
Olaylar listesine baktığımızda, bir olayın tam olarak doğru olduğunu gördük: oyuncu yaralandı. Sonra bunu bir etkinlik olarak kullanacağız.
Herhangi bir özel gereksinimimiz olmadığından "koşullara" gerek yoktur.
Eylem, oyuncuya kanı geri vermektir. Hangi eylemi kullanmalıyız? Belgeye baktığımızda, bir "tedavi" eylemi bulduk. Birkaç şey seçmesi gerekiyor:
"Oyuncu", kime tedavi edilecek olan bu eylemin hedefidir. Oyuna, tedavinin hedefinin sakatlanan oyuncu olduğunu nasıl bildiririz? "Event player" kullanabiliriz. Adından da anlaşılacağı gibi "etkinlik oyuncusu", etkinliği tetikleyen oyuncuyu ifade eder. Yukarıdaki "sakatlanan oyuncu" olayını kullandık, bu nedenle buradaki "olay oyuncusu" sakatlanan oyuncuya atıfta bulunuyor. Benzer şekilde, "oyuncu öldürüldü" ifadesini etkinlik olarak kullanırsak, ölen oyuncuya atıfta bulunmak için "olay oynatıcı" yı kullanabiliriz.
Bu durumda şifacının kim olduğu önemli değildir, bu yüzden biz sadece "yok" u seçeriz.
Son olarak tedavi miktarını 10 puan olarak belirledik, bu yüzden "sayı" seçip 10 giriyoruz.
değişken
Programlamaya hiç katılmamış arkadaşlar bu şeyi anlamakta biraz zorlanabilir. Ancak hayal edildiği kadar zor değil. Matematiği anlamak için kullanabiliriz.
Örneğin, bir denklemimiz var: y = x + 1. Matematiksel olarak, x'e bağımsız değişken deriz: Farklı x koyduğumuzda, y farklıdır. "Denklemimiz" sadece x'ten y'ye bir süreci tanımlar.
Yukarıdaki örneğimizde bir eylemimiz var: etkinlik oyuncusunu 10 sağlık puanı iyileştirmek. Burada, "etkinlik oynatıcı" bir değişkendir çünkü bir etkinliği tetikleyen birçok oyuncu olabilir. Süreç, oyuncuyu iyileştirmektir. Ve biz buna genellikle "sabit" diyoruz - çünkü değişmez, hangi oyuncu sakatlanırsa sakatlanırsa iyileşme miktarı 10'dur.
Tabii ki, bu sadece en temel değişken kavramı. Aslında değişken bir "kutu" gibidir, bir şeyler koyabilir veya içindekileri çıkarabiliriz.
OW'de değişkenler ve sabitler topluca "değerler" olarak adlandırılır.
"Donmuş Bomba" yı elde edin
Şimdi biraz daha karmaşık kurallar yazalım. McCree'nin mermilerinin "donmuş mermiler" haline gelmesini umuyoruz - McCree'nin vurduğu oyuncular 1 saniye boyunca dondurulacak.
Benzer şekilde, önce süreci düşünelim: oyuncuya McCree vurur oyuncuyu dondur.
"Olay" ın "McCray tarafından vurulmadığını" gördük. Nasıl yapılır? "Koşulların" gitmesine izin verme zamanı. McCree tarafından dövülmek bir tür sakatlıktır, bu nedenle "yaralı oyuncu" yu "olay" için kullanmaya devam edebiliriz. Ancak ek bir koşulumuz var: hasarın kaynağı bir McRae oyuncusu olmalıdır.
Belgeyi gözden geçirdik ve "saldırı tarafının" hasarın kaynağına başvurabileceğini gördük. Ama doğrudan karşılaştırmalı mıyız? Bunu dikkatlice düşünün, "Oyuncu McCree'yi kullanıyor", onu oyuncuyla değil, kahramanla karşılaştırmak için. Bu nedenle, oyuncunun hangi kahramanı kullandığını nasıl bileceğimizi aramaya devam ediyoruz. Sonunda "kahraman" seçeneğini bulduk. Koşul: hero (saldırı tarafı) == hero (McRae)
Not: Eşittir işaretinin sol ve sağ tarafları aynı türden olmalıdır, yani benzer etkinlik oyuncusu == kahraman (McRae) yanlıştır, çünkü sol oyuncu, sağ ise kahramandır. Yazmanın doğru yolu kahraman (etkinlik oyuncusu) == kahraman (McRae)
Eylem ne olmalı? "Karlar Ülkesi" resmi devletlerden biridir, doğrudan "set durumu" kullanabiliriz.
"Oyuncu" yukarıdaki ile aynıdır, sadece "etkinlik oynatıcı" yı kullanın. Asist, "saldırgan" dır. Durum "dondu". "Süre" için "1" girin.
İki "özel" etkinlik
Yukarıdaki içerik sayesinde, kuralların ne olduğunu zaten biliyoruz ve temel kurallar yazılıyor. Ancak çok az "olay" olduğunu görüyorsunuz. Örneğin, başka bazı işlevleri yapmak istiyorsak, oyuncunun yeniden doğduktan hemen sonra onu belirli bir pozisyona getirmesini isteriz, bu bir alma, hasara neden olma veya bir ölüm olayı olsun, gereksinimleri karşılamayacaktır. Şu anda, sürekli olayları + koşulları kullanmanız gerekir.
Sürekli olaylar diğer olaylarla aynı değildir. Diğer olaylar "bu olduğunda" ve sürekli olay "Koşullar karşılanana kadar bekleyeceğim" dir.
Örneğin, oyuncunun öldürülüp öldürülmediğine karar vermek için "hayatta kalma" yı kullanabiliriz. Yukarıda bahsettiğimiz sürekli olaylarla birlikte şu kuralı yazabiliriz:
Bunun anlamı ne? Yukarıdaki girişe göre, onu "tercüme ediyoruz", yani: oyuncu hayatta olana kadar bekleyin, ardından aşağıdaki işlemleri yapın.
Resmi belgede bir açıklama var: "İlk kontrol için şart sağlandığında, eylem yürütülecektir. Koşul listesi karşılanmadığında, ancak koşul daha sonra yerine getirildiğinde, eylem tekrar denenecektir."
Bu nedenle, yukarıdaki kuralımız aslında şudur: Oyuncu öldürüldüğünde, oyun, oyuncu dirilinceye kadar bekleyecek ve ardından ilgili eylemi gerçekleştirecektir. Oyuncu tekrar öldürüldükten sonra oyun beklemeye devam edecektir. Yukarıdaki işlemi sürekli tekrarlayın.
Benzer şekilde, yerde olmayan oyunculara interaktif tuşa (F) basarak cevap verebilecek bir kural yazacağız, o zaman böyle yazabiliriz
Etkinlik:
* Oyuncu başına sürekli
durum:
* Yerde (etkinlik oyuncusu) == yanlış
* Düğmeye basıldığında (etkinlik oynatıcı, etkileşim) == true
Bir model yapmak
Yukarıdaki makale sayesinde kuralları nasıl yazacağımızı zaten biliyoruz. Ama hala basit bir oyun yazmayı bilmediğine inanıyorum. "Ateşi İzlemek" olarak bilinen "sıcak patates" modunu oynadınız mı bilmiyorum? Burada bu modeli örnek alıyoruz. (Daha önce oynamadıysanız, deneyimleyebilirsiniz)
Not: Bu makale öğretici bir makale olduğu için oyun modunun tamamını kapsamayacaktır.
Ateş yaymak
Bu modun nasıl oynandığını düşünelim mi? "Ateş" e sahip oyuncular, diğer oyunculara saldırarak (yöntem ne olursa olsun) diğerlerine "ateş" verebilirler.
Peki, bu süreç kurallarla nasıl tanımlanıyor? Şunu söyleyebiliriz: Bir oyuncu sakatlandığında ve ateşi olmadığında, ancak ona saldıran oyuncunun ateşi olduğunda, ateşi oyuncuya verin.
Yukarıdaki açıklamadan, "sakatlanan oyuncu" olayını seçmemiz gerektiğini görmek zor değil. Ama oyuncunun "ateşi" olup olmadığını nasıl anlarız? Ashin "Geciktirici Patlatıcı" yı hatırlıyor musunuz bilmiyorum - ateşleme durumunu ateşi temsil etmek için kullanabiliriz. Kılavuzu okuyarak birkaç şey bulabiliriz: "durumu var", "durumu ayarla" ve "durumu temizle". Bu şekilde koşulları birleştirebiliriz.
Koşul, sakatlanan oyuncunun ateşi olmaması ve saldırganın ateş olmasıdır. "Oyuncu yaralanan" olayını kullandığımız için, birincisine atıfta bulunmak için "olay oyuncusunu", ikincisine atıfta bulunmak için "saldırı tarafını" kullanıyoruz. Koşullar şunlardır:
Eylem, yangını başka bir oyuncuya "geçirmektir". "Geçme" süreci yangını "kaybeden" bir oyuncu ve ateşi "alan" bir oyuncuya bölünmüştür. Bu nedenle iki kural vardır:
* Durumu ayarla (etkinlik oynatıcı, yok, ateşleme, 9999)
* Durumu temizle (saldırı tarafı, tutuştur)
Ek olarak, "ateşleme" yalnızca bir etkidir - görülebilir veya görülmez, bu nedenle başka bir "hasar" eylemi eklememiz gerekir:
* Sürekli hasarı başlat (etkinlik oyuncusu, yok, 9999, 50)
* Oyuncu değişkenlerini ayarlayın (etkinlik oyuncusu, A, son sürekli hasar etkisi kimliği)
* Sürekli hasarı durdur (oyuncu değişkeni (saldırı grubu, A))
Burada değişkenleri kullanıyoruz. Yukarıdaki değişkenler bölümünü birleştirebilir ve bunu neden yapmak istediğinizi düşünebilirsiniz. (Not: Değişkenleri bir "kutu" olarak düşünebilirsiniz, ayar bir şeyleri "kutuya" koymaktır)
Son kural şekilde gösterilmiştir:
Puan ekleyin
Diyor ki, "Başlangıçta her şey zor." Artık en temel şeyleri yaptığımıza göre, bir sonraki şeyi yapabiliriz: zafer yargısı. Mantığımız şudur: Bir oyuncu kaldığında, o oyuncuya bir puan ekleyeceğiz.
Bir oyuncunun ne zaman kalacağını bilmiyoruz - belki bir oyuncu öldükten sonra, ama bir oyuncunun oyunu bırakmasından sonra da olabilir. Tam olarak ne zaman olduğunu bilmemizin bir yolu yok, ancak durumumuz çok açık: hayatta sadece bir oyuncu var. Bu nedenle, bunu yapmak için sürekli olayları + koşulları kullanırız. Kılavuza baktık ve "Hayatta Kalan Oyuncu Sayısı" adlı bir değer bulabiliriz. Doğrudan kullanıyoruz:
Ve tek yapmamız gereken ona bir puan vermek. Kılavuzda "hayatta kalan tüm oyuncular" adlı bir içerik bulduk, ancak şunu unutmayın: bu bir dizi. Çünkü oyunda birçok oyuncu hayatta olabilir veya hiç olmayabilir. Oyun o kadar akıllı değil, kurallarımızın sadece bir oyuncuya sahip olması gerektiğini bilmiyor. Bu nedenle, "dizideki değerler" kullanmamız gerekir:
Sonra, tüm oyuncuları diriltmeli ve yeni bir oyuna başlamalıyız:
Son kural şekilde gösterilmiştir:
Rastgele ateş
Şimdi genel çerçeve var, ancak bazı özel durumlarla ilgilenmedik: örneğin, oyuncu öldüğünde veya oyuncu oyunu bırakıp "yangının" kaybolmasına neden olduğunda, oyuncuya rastgele "ateş" vermemiz gerekiyor. . Yukarıdaki gibi, sürekli olayları + koşulları kullanıyoruz.
Durumumuz, tüm oyuncular ateşten çıktığında olmalı. Başka bir deyişle, kovulan oyuncuların sayısı = 0 olduğunda. Oyun, yanmakta olan oyuncuları doğrudan elde edemez, ancak bunu yapmak için "filtrelenmiş diziyi" kullanabiliriz: hayatta kalan tüm oyunculardan ateşte olan oyuncuları filtreleyebiliriz.
Koşul için şu şekilde yazılmalıdır: Miktar (filtrelenmiş dizi (tüm canlı oyuncular, durum (geçerli dizi öğesi, yanan))) == 0. (Bu kuralı iyi anlamadıysanız lütfen köşeli parantezleri içeriden dışarıya doğru çözmeyi deneyin, kılavuzu birleştirin, yavaş yavaş okuyun)
Eylem, hayatta kalan oyunculardan rastgele bir oyuncu seçmek ve "ateş" etmesine izin vermektir. Benzer şekilde, "dizileri" tekrar kullanmalıyız:
Nihai kurallar aşağıdaki gibidir:
Sorunu çöz: ölüm ve ateş
Şimdi birkaç arkadaşınızı davet edin veya oyuna girmek için daha fazla hesap açın. Bir oyun başlatın. Ateşi mutlu bir şekilde geçerken bir oyuncu öldü. Ancak, "yangının" bir sonraki kişiye geçmediğini gördünüz. Ev sahibi "Map Workshop Viewer" ı açtı ve bir göz attı, ha? Rastgele yangın yayma kuralları neden işe yaramadı?
Ölümün otomatik olarak alev almayacağı ortaya çıktı, bununla manuel olarak da ilgilenmemiz gerekiyor:
* Etkinlik: Oyuncu öldü
* Durumu vardır (etkinlik oynatıcı, ateşleme) == doğru
"Ateşleme" aslında durumu kaldırıyor, bu nedenle işlem de çok basit, temelde yukarıdaki kuralları kopyalayıp yapıştırın:
* Durumu temizle (olay oynatıcı, tutuştur)
* Sürekli hasarı durdur (oyuncu değişkeni (etkinlik oyuncusu, A))
Nihai kurallar aşağıdaki gibidir:
sonuç olarak
Birkaç kurala göre basit bir "sıcak patates" kalıbı yazdık. Bulduğuna inanıyorum, bu zor değil. İhtiyacınız olan tek şey, bir şeyi küçük bir şeye dönüştürmek ve sonra onu tamamlamak için kuralları kullanmak.