Hepiniz görmüşsünüzdür. TEMPLATE kullanmayan parçalar. Diyelim ki bu parçalar üzerinde bir ejderha öldürdüğünüzde ve onu yağmalamaya gittiğinizde, düzgün bir şekilde organize edilmiş çantalar yerine, ganimet penceresine dağılmış 100 iksir olduğunu görürsünüz. Sadece bu da değil, tüm büyülü silahlarınız onların altına düzgünce gömülü!
Bu sorunu nasıl çözeriz? SPHERE bize kullanışlı bir TEMPLATE aracı verdi. Bunlar, bir kapsayıcı itemi VE içindeki itemleri AYNI ANDA tanımlamanıza olanak tanır. Bu güzel değil mi? Ne olduklarını ilk anladığımda ben de öyle düşündüm. Geleneksel senaryoyu parçalara ayırma bölümümüzü yapalım. spheretemp_loot.scp dosyasından güzel bir TEMPLATE yerleştireceğim.
[TEMPLATE 101505]
DEFNAME=backpack_poor
CATEGORY=Item Templates
SUBSECTION=Loot Templates
DESCRIPTION=Poor Backpack
CONTAINER=i_backpack
ITEM={ random_food 1 0 3 },{ 1 3 }
ITEM={ random_bottle 1 0 8 }
ITEM={ random_light 1 0 8 }
ITEM={ random_male_tops 1 0 4 }
COLOR=colors_all
ITEM={ random_male_pants 1 0 4 }
COLOR=colors_all
ITEM=POOR_GOLD_PILEBu kafa karıştırıcı görünüyor. Ama merak etmeyin, işimiz bittiğinde bunun tam olarak ne anlama geldiğini anlayacaksınız![TEMPLATE 101505]: Her şeyden önce, şablonumuzun başlığına bakıyoruz. Şablonlarla ilgili ilginç bir şey, item adının diğer tüm komut dosyaları gibi bir DEFNAME olamamasıdır. 101505 gibi gülünç derecede yüksek bir sayı olmalı.
DEFNAME=backpack_poor: Tabii ki, SPHERE geliştiricileri tamamen kötü değiller ve bize bu korkutucu numaralara daha kolay erişim için bir DEFNAME verme yeteneği sağladılar. Söyle bana, hangisini yazmayı tercih edersin? ".add 101505" mi yoksa ".add backpack_poor" mi?
Not: Sphere.56c'den bu yana, DEFNAME'i [TEMPLATE ...]'a taşıyın, örneğin [TEMPLATE backpack_poor]
CATEGORY, SUBSECTION, DESCRIPTION: Opsiyonel. Bunların ne işe yaradığının açıklaması için önceki bölümlere bakın.
CONTAINER=i_backpack: Şimdi bu şeyin özüne iniyoruz. Bu, bu şablondaki diğer tüm öğelerin içinde olacağı tutma kabını belirtir. Eşyayı oyuna eklediğinizde bu kabı göreceksiniz. Bu durumda, bu bir sırt çantası. Yeterince basit. Bu, t_container veya t_container_locked türü olan herhangi bir geçerli öğe olabilir.
ITEM={ random_food 1 0 3},{1 3} Eh, bu kesinlikle şifreli. Bence bu çizgiyi daha da yıkmamız gerekiyor.
Ama önce, RASTGELE SEÇİCİLERİ ele alacağız! Kulağa eğlenceli geliyor değil mi? Hayır, bana da eğlenceli gelmiyor ama iyi bir script için kesinlikle gerekli.
Temel olarak, tek bir komutla farklı numaralar elde etmenin kolay bir yoludur. Bir ejderhayı öldürdüğünüz ve her seferinde bir Sihirli Şey Platformu ve bir Süper Kandırılan Güç Kılıcı aldığınız bir parça ne kadar eğlenceli olurdu? Herkes onlarla birlikte koşuşturuyor olurdu. İhtiyacımız olan şey biraz çeşitlilik!
İki tür rastgele seçici vardır: ağırlıklı rastgele ve aralıklı rastgele. Ağırlıklı rastgele şöyle bir ifade yapar: "Tamam, 10 seferden 1'i A numarasını seçer, 10 defadan 3'ü B numarasını seçer ve 10 defadan 6'sı C numarasını seçer". Aralıklı rastgele şöyle bir ifade yapar: "Size verdiğim iki sayı arasında herhangi bir sayı seçin".
Örneğimiz aslında hem aralıklı rastgele hem de ağırlıklı rastgele bir örneğe sahiptir. Bunları göründükleri sırayla ele alacağız:
{ random_food 1 0 3}Bu, ağırlıklı bir rastgele seçicidir. Bunları yorumlamanın yolu, parantez içinde görünen sayıları alıp ikişerli kümelere ayırmaktır:random_food 1
0 3Her iki setteki ikinci sayıları toplayın ve 4 elde ederiz. Bu, SPHERE'e "Tamam, dört seferden 1'i, random_food seçmenizi istiyorum ve dört seferden 3'ü, sıfırı seçmenizi istiyorum" diyor. Rastgele kümeler içinde rastgele kümelere bile sahip olabilirsiniz, ancak o zaman sadece kafa karıştırıcı hale gelir.{ random_food 1 0 3} 1 random_clothing 1} [/code
Bunu çözebilir misin?
[code] random_clothing 1 { random_food 1 0 3} 12 bu durumda sihirli sayımızdır. SPHERE iki seferden birini seçecek random_clothing seçecek ve iki seferden birini seçecek ve SPHERE önceki rastgele seçicimizi seçecek ve bu da kendi seçeneklerinden birini seçecektir. Bu noktada kafanız karıştıysa endişelenmeyin. Bu son derece nadirdir ve birazdan şablonların bu sorunu çözmemize nasıl yardımcı olduğunu göreceğiz.Yine de, başka bir rastgele seçici türü olduğundan bahsetmiştim ve muhtemelen ne olduğunu görebilirsiniz:
{1 3}
NOT: Buradaki boşluk önemlidir. { ile ilk sayı veya } ile son sayı arasında SIFIR boşluk olmalıdır. Aksi takdirde garip bir şekilde davranacaktır.
Bu, SPHERE'e "1 ile 3 arasında bir sayı seçin" der. Kapsayıcı, SPHERE'in 1, 3 veya aradaki herhangi bir sayıyı seçebileceği anlamına gelir. Bu durumda, aralık oldukça sınırlıdır. SPHERE burada size 1, 2 veya 3 verecektir. Aralıklı rastgele seçiciler aslında ağırlıklı rastgele seçicilerin içinde daha sık kullanılır.
{ {1 3} 3 {4 9} 1}
"Dört seferden birinde, 4 ile 9 arasında bir sayı seçin. Dört seferden üçü, 1 ile 3 arasında bir sayı seçin."
Ve bunu aradan çıkardıktan sonra, senaryonun gerçek satırını yukarıdan analiz edeceğiz. The Piece What the Line does ITEM= Bu, script'e "Tamam, bu konteynere bir item ekleyeceğiz. = işaretinden sonraki herhangi bir şey, komut dosyasına tam olarak ne eklediğimizi ve hangi miktarlarda eklediğimizi söyler. Gizemli { } bölümleri olmadan kolayca ITEM=i_platemail_chest veya buna benzer bir şey söyleyebilirsiniz, ancak şablonların ilginç olmasının nedeni büyük ölçüde değişebilmeleridir.
{ random_food 1 0 3}Bu, oluşturacağınız öğedir. Ağırlıklı rastgele seçici dersimizden de görebileceğimiz gibi 4 kere 1 kere random_food, 4 kere üzerinden 3 kere sıfır olacaktır. Bir ÖĞE sıfır ise, bu sefer hiçbir şey oluşturulmayacaktır. Temel olarak bu, "Bu konteynerde random_food alma şansı dörtte bir olacak" diyor. Sorduğunuz random_food nedir? Sanırım spheretemplate.scp'de tanımlanan başka bir şablon oluyor.{1 3} Bu, oluşturulacak öğenin miktarıdır. Bunu aralıklı bir rastgele seçici olarak tanımalısınız. Bu, SPHERE'e bu öğeden 1 ile 3 arasında bir tanesini kabın içine koymasını söyler. Tabii ki, eğer öğe yukarıda seçildiği gibi sıfırsa, bunun hiçbir etkisi yoktur çünkü bir hiçbir şey ve üç hiçbir şey hala hiçbir şeydir.
Yani temelde, bu bir TEMPLATE komut dosyasıdır. Daha sonra istediğiniz kadar öğeyle doldurursunuz. Aşağıdaki yapıyı da fark edebilirsiniz:
ITEM=i_sword_long,R11
Bu, bunu yazmanın kısa bir yoludur:
ITEM={ i_sword_long 1 0 10 }
R11, "bu öğeyi bulma şansı 11'de bir" anlamına gelir. Ve bunun sonuna da bir miktar seçici ekleyebilirsiniz, bu da uzun ve korkutucu görünmesini sağlar:
ITEM=i_sword_long,R11,{4 5}Ama neden tek bir eşyada 4 veya 5 uzun kılıç isteyesiniz ki? Bu tuhaf olurdu. 
Ve şablonlar için bu kadar. Şimdi, bir sonraki bölümde izlenecek örnekleri anlayabilmelisiniz. Sizi temin ederim ki, SPHERE komut dosyası oluşturmanın neredeyse her yönü sonraki bölümlerde ele alınacak.
[TEMPLATE tm_necromancer]
CONTAINER=i_bag
ITEM=random_necro_scroll
ITEM=random_necro_scroll
ITEM=random_necro_reagent, {5 12}
ITEM=random_reagent, {5 12}
ITEM=random_necro_reagent, {5 12}
