Merhabalar,

Konu başlığını nasıl açsam diyerekten kararsız kaldım ve böyle açtım, şimdiden kusura bakmayın :)
Öncelikle uzun yıllar sonra tekrar ultima'ya sarmış bulundum nedenini bilmiyorum evdeyken uğraşılcak, vakit harcanıcak bir şeyler yapmayı planlıyorum.

Aramız da bir çok değerli scripterların bulunduğunu, yardımlarını esirgemeyecek üyelerimizin olduğunu hepimiz biliyoruz o yüzden bir hevesle açmış bulundum konuyu, gelelim şimdi sorularıma;

*Scripterlığa nereden ve nasıl başlamayalıyım?
*Scripterlık yapmak için bilmem gereken her hangi bir şey var mıdır?

*Script yazmak, düzeltmek ya da tam anlamıyla öğrenebilmek için neler yapmalıyım?

Kendiniz de eklemek istediklerinizi eklerseniz sevinirim.
Nasıl yapabilirim ben bu işi :)

Ayriyetten script pack olan varsa elinde paylaşırsa sevinirim. 
Sıfır pack indirdiğim de çoğu şey eksik oluyor, en azından editleme üzerinde de çalışabilirim tavsiyeleriniz üzerine.
 



http://wiki.spherecommunity.net/index.php?title=Main_Page

Ana kaynak bu olmalı. Sphere bir din ise, kutsal kitabı üstteki gibidir.

Sphere her ne kadar bolca hatası bulunan, çakma pek çok şey barındıran, ara sıra çıldırtan komiklikleri olan bir emülatör olsa da dökümantasyon konusunda iyi durumda.

İngilizce biliyorsan buradan sırayla okumaya başla derim. 

Sistem hayal et ve onları yaz. Tıpkı diğer programlama dillerinde olduğu gibi bunda da yazmayı böyle öğrenirsin. Sadece okumak yetmez. Kurcala, boz, hata yap. Hatalarını düzeltmesini bil yeter. Programlama geçmişin nedir bilmiyorumi. Ama önce bi algoritma nedir diye aratmakta fayda var. Dili bilip de basit algoritmaları kuramayan insanlardan olmamak için önce işin mantığını kapmak lazım.

Script packlere takılma. Default pack'i alıp sistemler bölümünden sürüm numarası uyanları indirip tek tek ekle. Hazır packlerin pek çoğu beş para etmez. İnsana öğreneceği şeyi unutturur. İngilizcen varsa sphere'ın kendi sitesine gidip scripts bölümündekilere bakmanı tavsiye ederim.

Takıldığın yer olursa yaz, vakit ve imkan dahilinde yardımcı olurum.



wiki çoğu bilgiyi doğru veriyo fakat zamanla emülatörü güncellerken ordaki bilgileri güncellemediler o yüzden eğer baktın wikide söylediği gibi değil triggerların değerleri vs. changelog da arattırıp bulabilirsin veya forumlarda sorabilirsin şimdiden kolay gelsin.



Öncelikle ilgi ve alakanız dan ötürü teşekkürlerimi sunuyorum.

Önerilerinizi sürekli paylaşırsanız sevinirim.

@Slothere 
Vermiş olduğun kaynakta tutoriallere bakındığım da her şey tamam ama tek bir anlamadığım kısım var şuan için, chapter 1 bölümün de bulunan 'src.flags' olarak belirtilen kısım nedir?
Neye göre numaralandırılır?
01  
2^0
gibi gösterilen ne oluyor? 
SRC.FLAGS |= 8192 neye göre yazıldı neyin nesidir.

Chapter1 bölümünü iyice kavramaya çalışıyorum, bu dediğim olayı çözemedim.

Ayriyetten özel mesaj attım bakarsan iyi olur.

Şimdiden teşekkürler.

@gazman594


Teşekkürler takıldığım yerler olursa sık sık sizleri rahatsız edicem. :)

Ve Ayriyetten bir şey daha eklemek istiyorum, DUPEITEM yani örnek olarak gösterilen coin scriptin de ki DUPELIST nedir? .xflip ile ilgili bir yazı yazmakta dönüştürüldüğü item gibi bir kısım mı? Yoksa başka bir çalışma alanı mı var bunun, çoğaldığında dönüşüceği item gibi midir?

Not: Anlaşılır ve basit dilden anlatırsanız çok sevinirim, başlangıç düzeyindeyim biliyorsunuz ki :)
 



Bu konu icalientE tarafından düzenlendi(2018-02-22 10:47, 9 ay önce)

dupeitem ve dupelist itemler flip yapıldığında dönüşecekleri item oluyo mesela wooden box u yere atınca yönü değişiyoya 2 farklı itemdef i oluyo. Yani itemi oluşturduğunda mesela kuzey yönüne bakan wooden box çıkıyosa yere atınca batı yönüne bakan çıkması işin dupelist te onun tanımlanması lazım ve aynı şekilde itemdef in altında flip=1 yazılı olması lazım. Dönüşümü illa elmadan armuta dönüşmek gibi düşünme. Slothere' ye sorduğun soruya gelicek olursakta sphere_def.scp'ini açarsan orda her tanıma numara verilmiştir. Bunları hex sisteminde yazarak o numaralara ulaşıyolar.Ama SRC.FLAGS |= 8192 ye nasıl ulaşıyolar bende tam bilmiyorum pek ihtiyacımda olmadı çünkü şöylede yapabiliyosun ; SRC.FLAGS |= statf_invul|statf_war gibi olabiliyo bunu aslında sphere numaraya çeviriyo.



#428093 icalientE:

 

Scripts altındaki sphere_defs scriptinde belirli flag tanımlamaları mevcut. Karakter, item, region olmak üzere çeşitli flagleri kullanabiliyorsun.

Misal;

statf_freeze            000000004   // paralyzed. (spell)

Karakterine src.flags |= 04 ya da src.flags |= statf_freeze yaptığında karakterin paralyze etkisine girer. Buradaki |= operatörünün manası şudur; "önceki flaglerin üzerine statf_freeze'in karşılığı olan 04'ü ekle. 

Bu tanımlamalar onaltılık (hexadecimal) sayı tabanında belirlenmiş ifadeler.

http://serkanbozoglu.blogspot.com.tr/2011/12/bilgisayar-dilinde-bit-binary-decimal.html

Oradaki 8192 ifadesi aslında 02000'in decimal karşılığı. 2'nin 13. kuvveti 8192. 

https://www.mathsisfun.com/binary-decimal-hexadecimal-converter.html

Buraya yazıp kendiniz de teyit edebilirsiniz.

Onun da sphere_defs'deki karşılıkları kullanım yerine göre ise şöyle;

statf_insubstantial     000002000   // ghost has not manifest. or gm hidden

attr_stolen            02000   // the item is hot. m_uidlink = previous owner.

mt_run            002000

dam_nodisturb           02000   // victim won't be disturbed

can_i_replicate            002000        // things like arrows are pretty much all the same.

... gibi gibi. Hangi scriptte, hangi amaçla kullanıldığına göre hangi flag'i kullandığını bilemediğimden onu örneklendiremiyorum. Bunlardan birisi, birkaç tane daha var. Onlara da defs altından bakabilirsiniz. 



Teşekkür ediyorum ikinize de, ama her hangi bir yerde kullanmak değildi amacım sadece vermiş olduğunuz kaynakta 1.bölümde yani http://wiki.spherecommunity.net/index.php?title=Chapter_1 de gördüğüm bir şeydi anlamadığım için sorma gereksinimin de bulunmuştum. Açıklama için teşekkür ediyorum. Umarım bu uğraşların sonu hüsran ile bitmez :)

Bir dialog yazmaya kalktım araştıra araştıra sayılarla beynimi yedim desem yeridir. :)

Resizepic'i saygıyla aynıyorum.

Ayriyetten ben direk işe istediğim şeyleri yazmakla başladım, doğru mu yapıyorum bilmiyorum. Bitirmiş olduğum bir dialog var aslın da ama stone içerisine dialoğu gösterdiğim de açılan pencere deki yazılar ayarlamış olduğum boyutun dışına taşıyor.

Bunu engellemek için kullanabilceğim her hangi bir komut var mıdır?

Ve dialoglar da örneğin; 

[dialog d_ornekstone]
50,50
move

Yazılar, dtext olarak yazıldı.

Burada ki 50,50 ne işe yarıyor öylesine yazdım ama amacını çözemedim.. :)



50,50 ekranda menünü ekranda başlayacağı orijin. Ekranın en sol üst pikselinden başladığında 0,0'a karşılık geliyor. 50,50 yaparak yukarıdan 50 soldan 50. pixelden başla manasına geliyor.

move kullanmana gerek yok. nomove etiketi var. Manası; dialogu yerinden oynatama. 

noclose etiketi var. Manası; sağ tıkla vs. dialogu kapatma. Ama staff ile ya da bir fonksiyonla dialogclose dialogismin yaptın mı kapanır. 

resizepic'in manası şudur;

resizepic x y arkaplan uzunluk yükseklik

x: yatay koordinat 

y: dikey koordinat

arkaplan: Misal: 5054, 3000, 3500, 2620, 3600 bazı temel dialog görüntüleri. 

Örneklendirelim;

[dialog d_test]
0,0
nomove
noclose

resizepic 100 100 3000 250 250
 

dtext'in taşması mevzusu da dialogun yeterince geniş olmamasıdır. Uzunluğa tekabül eden değeri artırırsan sıkıntın giderilir.

Ayrıca bilmen gereken diğer nokta dialoglara buton tanımladığında 0 dialog kapanınca devreye girer.

[dialog d_test]
0,0
nomove

resizepic 100 100 3000 250 250

[dialog d_test button]
on=0
sysmessage dialog kapatildi

Bir de 50,50'yi örneklendirelim. Şimdi üstteki örnekte dialog 0,0'da başlayacağı için 100 100'e denk gelen yerden başlayacka. Ama oradaki 0,0'ı 50,50 ile değiştirdiğinde 100'lere 50 daha ekleneceği için dialogun biraz daha içeride 150 150 yazmışsın gibi konumlanacak. Bu tüm dialog elemanları için geçerli.




 

Yazmış olduğum dialog da her hangi bir sorun yok gibi görünüyor isterseniz bir inceleyin :)

Başlangıç düzeyidir, dalga geçmezsek sevinirim..

[dialog d_ornekstone]
50,50
move

resizepic 68 290 3500 215 50 // Alt Taraf
resizepic 0 0 3500 360 300 // Arka Beyaz Font
resizepic 20 20 9300 320 260 // Ön Sarı Font
dtext 105 304 0455 < Ornek Shard >
dtext 127 20 0490 < Ornek MENU >
dtext 25 50 0480 Merhaba,
text 25 50 0480
dtext 25 65 0480 xxx.
text 25 65 0480
dtext 25 80 0480 xxxx.
text 25 80 0480
dtext 25 95 0481 xxx.
text 25 95 0481

dtext 115 260 098 calientE'den Sevgilerle!

button 309 258 1151 1150 1 0 1 / X Butonu

src.sysmessage @038,3 Merhaba <name>, ornek stone'umuza hosgeldiniz!
endif 

[dialog d_ornekstone button]

on=1
dialogclose d_ornekstone
src.sysmessage @038,3 islem iptal edildi..
on=0
sysmessage @39,,1 Ornek Menusunden Ciktiniz
return 1

[itemdef i_ornek_stone]
defname=i_ornek_stone
id=0ed5
weight=9999
type=t_eq_script
name=Ornek Stone

on=@create
attr=010
color=0480 //renk

On=@dclick
If (<distance> < 3)
src.dialog d_ornekstone
return 1
endif

 

 



dtext kullanırsan yazı eğer dialog boyutundan uzunsa taşar. Onun yerine dhtmlgump kullanabilirsin veya ikinci bi dtext kullanıp alt satıra yazının devamını getirebilirsin. Dialogla ilgili komutlara http://wiki.spherecommunity.net/index.php?title=DIALOG burdan bakarsan zaten az çok nerde ne kullanıcağını anlayabilirsin. Bu arada başlangıç olarak sıkıcı bi konu seçmişin kendine ben nefret ederim dialoglarla uğraşmaktan :P



Valla ben de baya bi acı çekmedim desem yalan olur.

Sayılar, hangisi hangisiydi acaba diye diye yaptım bir şey işte, bakalım hayırlısı diyorum.

Bir, iki tane daha dialog yapsam seri bir şekil de tam olarak çözeceğimi düşünüyorum.
Şimdi ki hedefim dialog yaratıp, o dialog üzerinden item almak ya da yerleştirmek gibi bir düşüncem var.

Bu konu da önerilerinizi de alabilirim.

Ayriyetten butonlar gibi şekillere inside uo'dan bakıyorum, daha doğrusu gump bölümün den istediklerimi eklemek için hangi kodu girmem gerekiyor?

Sıralama da ' X ' işaretinin kodunu nasıl bulabilirim, kodlar misal veriyorum 3 olarak geçiyorsa bazılarının ki farklı görüntü veriyor..
Hangi dosya ile alaka acaba bu?

Bir de sphere 56d üzerin de çalışmalarımı sürdürüyorum sizce sorun çıkartır mı bana?

Yoksa 56b ye geçiş gibi dökümanları da incelememe gerek var mıdır?

Sphere 56d 
ML -> Client.exe 
 

+

Dialog çalışmalarım da butonlar daki page ekleme konusu hakkında araştırma yaptım fakat kesin bir bilgiye daha doğrusu açık kaynağa rastlıyamadım.
Yaptığım dialog üzerin de page0, page1 olarak resizepicleri ayırdığım da butonların oraya geçişini nasıl sağlıyabilirim ?

button 322 266 3 4 1 0 1        // X Butonu

Sonda ki 1-0-1 i sayılarla oynadığım da kimi açılıyor fakat butona tıkladığım da yazmış olduğum, sys.message yi okumuyor.

Yanlış giden birşeyler var ama nedir çözemedim.

1 0 1 olarak yazılan kodların çalışma stili nedir? Bunları da araştırdım ama bulamadım ya da yanlış konu üzerin de araştırdım..

 

Örn; 

button 308 20 4005 4006 1 0 3 // İleri Butonu

on=3
src.sysmessage @038,3 xxx sayfasina hoşgeldiniz!
return 1

Üstte belirttiğim gibi 1 0 3 rakamlarıyla oynadığım da yazmış olduğum mesajı veriyor ama page 2 yi açmıyor mesela.

+

Sayua olarak bilgi gösterilen bir page box scriptin de de sorun yaşıyorum.
Stone üzerinde tek tık yaptığım zaman client göçüyor. 



Bu konu icalientE tarafından düzenlendi(2018-02-23 19:06, 9 ay önce)

-Bir de sphere 56d üzerin de çalışmalarımı sürdürüyorum sizce sorun çıkartır mı bana?

56d şu an çok sorunlu ve kararsız bir sürüm. 56b'de de kritik bazı açıklar mevcut. 56c ile devam etmeni tavsiye ediyorum.

-Yaptığım dialog üzerin de page0, page1 olarak resizepicleri ayırdığım da butonların oraya geçişini nasıl sağlıyabilirim ?

button x y id1 id2 0 sayfa 0

sayfa yazan yere gosterilecek page'in id'si girilecek.

-1 0 1 olarak yazılan kodların çalışma stili nedir? Bunları da araştırdım ama bulamadım ya da yanlış konu üzerin de araştırdım..

İlk 1: tuşa basılabilsin mi, kullanılabilsin mi.

0: varsa geçilecek sayfa id'si.

Son 1: button id'si. Mesela orası 5 ise o butona basınca on=5 tetiklenir.

-Sayua olarak bilgi gösterilen bir page box scriptin de de sorun yaşıyorum. Stone üzerinde tek tık yaptığım zaman client göçüyor. 

Kelime anlamıyla 20 senelik page box scriptlerini kullanmayın. Alternatifleri mevcut.

Ya font ya da renk kodlarında bir sıkıntı olmuştur ya da scriptte farklı bir hata vardır. 55 sürümünden bile eski kodlar onlar, her şey olabilir. 



Öncelikle cevabın için teşekkür ederim, ama ' Son 1: button id'si. Mesela orası 5 ise o butona basınca on=5 tetiklenir. ' olarak belirttiğiniz buton tetiklemesini sağlıyamıyorum.

on=3
src.sysmessage @038,3 xxx sayfasina hoşgeldiniz!
endif

Komutunu bir türlü tetiklemesini sağlayamadım.
0 2 3 yapıyorum olmuyor..

-56d şu an çok sorunlu ve kararsız bir sürüm. 56b'de de kritik bazı açıklar mevcut. 56c ile devam etmeni tavsiye ediyorum.

56d sürümünden 56c ye dönüşümü için sphereyi değiştirmem yeterli olur mu?

-1 0 1 olarak yazılan kodların çalışma stili nedir?

Sorduğum soruda bir sorun var, 1, basılabildin mi demişsiniz ama benim şuan da ayarlamış olduğum dialog da 0 olarak duruyor, 1 e yükselttiğim zaman komple dialog kapanıyor.

0 1 2 olarak page geçişisini sağlıyabiliyorum, ama sonda ki ' 2 ' on=2 yi tetiklemiyor.

1  1 2 olarak yaptığım da direk dialogu kapatıyor on=2 yi tetikliyor.

Benim istediğim hem on=x i tetiklesin hem de page geçişisini sağlasın.

Ama ;
button 322 280 5603 5607 1 0 2
on=2
src.dialog d_ornekstone
src.sysmessage @038,3 Ana sayfaya donus yaptiniz!

Yapip dialogu gösterdiğim de her hangi bir sorun olmuyor.
Ama ikinci sayfaya geçişler de dediğim gibi yazıyı tetiklemiyor.

Çok karışık oldu sanırım  :)



Bu konu icalientE tarafından düzenlendi(2018-02-24 16:04, 9 ay önce)

[dialog d_test]

0,0

resizepic 50 50 3000 100 100

page 1
button 70 70 4005 4006 1 0 1
dtext 70 70 0 ilk sayfa

page 2
dtext 70 70 0 diger sayfa

[dialog d_test button]
on=1
dialog d_test 2 // 2 nin manası page 1 i göster
sysmessage diger sayfayi gosteriyorum.

-------------

[dialog d_test]

0,0

resizepic 50 50 3000 100 100

page 1
button 70 70 4005 4006 0 2 0
dtext 70 70 0 ilk sayfa

page 2
dtext 70 70 0 diger sayfa

Bu arada page 0 her zaman dialogda görünür.

-56d sürümünden 56c ye dönüşümü için sphereyi değiştirmem yeterli olur mu?

Temelde 56d ile 56c aynı sürüm. 56c update almıyor, tek farkı odur. Bir de nightly dediğimiz güncellenen ama kararlı/kararsız olduğu meçhul sürümlerde eklenenler 56c de yoktur. sphere.exe, sphere.ini, crypt dosyalarını değiştir. sphere_defs gibi scriptlerde de değişiklik var diye biliyorum. Onları da değiştir. Gerisine bakarsın, hata oldukça değiştirirsin.

-Son 1: button id'si. Mesela orası 5 ise o butona basınca on=5 tetiklenir. ' olarak belirttiğiniz buton tetiklemesini sağlıyamıyorum.

5 id'yi verdiğin butona basınca alttaki on=5 in altındakiler çalışır. Tetiklemekten kasıt o. 



Teşekkür ederim, ayriyetten butonlara ' 1 0 1 ' komutuyla göstererek de geçiş sağlıyabiliyormuşuz.
Deneme yanılmayla çözmüş oldum.

Dediğim sayfa geçişlerini öğrenmek istiyen arkadaşlar için de ;

button 308 20 4005 4006 1 0 3    // İleri Butonu yapmak istiyorsanız eğer 

Page sayfası olarak ' 0 ' ı belirtmenize gerek kalmadan ;

on=3
dialog d_xxx 1

Olarak yapılabiliyormuş.
Dialog d_xx deki 1 sayısı geçiş sayfasını belirtiyormuş, @Slothere'ın da belirttiği gibi.
Button bölümü altında belirttiğiniz de de sorunsuz bir şekilde geçiş sağlıyormuş.
Yazdığım dialog scriptin de gayet düzgün bir şekil de çalıştı şuan için.

@Slothere teşekkür ediyorum ilgin ve alakan için :)

Yanlış bir bilgi verildiyse affola.



Üye Ol veya Giriş Yap

Bu forum başlığına mesaj atmak istiyorsanız hemen üye olun veya giriş yapın.