emre11 - 26-05-2019 12:44 GMT -
böyle item yaptım alttada fix içine yaptım ama olmuyor f_fizzle var ama çalışmıyor yardımcı olurmusunuz.
Son güncelleme: TheRaskol tarafından 09-06-2019 17:18 GMT tarihinde, önce.
böyle item yaptım alttada fix içine yaptım ama olmuyor f_fizzle var ama çalışmıyor yardımcı olurmusunuz.
Kod:
[typedef t_mark_yasak]
[itemdef i_mark_yasak]
defname=i_mark_yasak
id=i_crystal_green
type t_mark_yasak
name Mark Engelleyici
layer layer_special
on=@create
timer -1
color=0935
attr=080|010
tag0.silinmez=1
on=@timer
return 1
on=@destroy
if (<tag0.silinmez>==1)
return 1
endif
on=@pickup_ground
src.sysmessage @07a1 Elleme At Kafası
return 1
//////////////////////////////////////
On=@SpellCast
if <argn> == 45
foritems 100
if <baseid>==i_mark_yasak
//if <distance>==< 50
src.sysmessage @07a1 bu alanda mark yasak <distance>
src.f_fizzle
return 1
endif
endfor
Son güncelleme: TheRaskol tarafından 09-06-2019 17:18 GMT tarihinde, önce.
Axuare - 26-05-2019 23:57 GMT -
Script olduğuna faul, mesela;
Niye ayrı bir typedef açma ihtiyacı duydun ?
Niye bir layer tanımlası ihtiyacı duydun ?
Niye bir On=@Destroy kullanımına ihtiyaç duydun ?
Benim script bilgim malesef zaten çok ileri seviye değildi ama şuanda o bile yok.
Ama şöyle bir yol izlenebilir, tavsiyem.
Bir item oluştur, sade olsun mümkünse // attr tanımlamaları olsa yeter bence.
Sorgusunuda öyle fix scripti içinde değil , direk spellin kendi içerisinde (sphere.spells olması lazım tam hatırlamıyorum)
sorgulat. Örnek olarakta mesela duvar silici scriptler vardı, onları baz alarak yapabilirsin. // sonuçta aynı mantık.
Bir de xwerswoodx var, o görürse daha detaylı, yeni sorgulara uygun birşeyler yapabilir.
Script olduğuna faul, mesela;
Niye ayrı bir typedef açma ihtiyacı duydun ?
Niye bir layer tanımlası ihtiyacı duydun ?
Niye bir On=@Destroy kullanımına ihtiyaç duydun ?
Benim script bilgim malesef zaten çok ileri seviye değildi ama şuanda o bile yok.
Ama şöyle bir yol izlenebilir, tavsiyem.
Bir item oluştur, sade olsun mümkünse // attr tanımlamaları olsa yeter bence.
Sorgusunuda öyle fix scripti içinde değil , direk spellin kendi içerisinde (sphere.spells olması lazım tam hatırlamıyorum)
sorgulat. Örnek olarakta mesela duvar silici scriptler vardı, onları baz alarak yapabilirsin. // sonuçta aynı mantık.
Bir de xwerswoodx var, o görürse daha detaylı, yeni sorgulara uygun birşeyler yapabilir.
Tanthalas - 27-05-2019 04:20 GMT -
Axuare'nin bahsettiği gibi bir item oluşturup sphere_spells.scp içerisinde ilgili büyüyü bularak on=@select altında gerekli sorguları yapabilirsin.
Item ile uğraşmadan mark yada recall ile ilgili kısıtlamaları, istediğin yere gerekli flag veya eventler ile birlikte bir veya birden fazla region tanımlayarak yapabilirsin. Region ile ilgili ders Link
Axuare'nin bahsettiği gibi bir item oluşturup sphere_spells.scp içerisinde ilgili büyüyü bularak on=@select altında gerekli sorguları yapabilirsin.
Item ile uğraşmadan mark yada recall ile ilgili kısıtlamaları, istediğin yere gerekli flag veya eventler ile birlikte bir veya birden fazla region tanımlayarak yapabilirsin. Region ile ilgili ders Link
mahsuni - 27-05-2019 21:39 GMT -
Type def Olusturmasini sebibi Belki Sorgusunu Yeni Type uzerinden yapcak arkadaş Mesela Sphere spell Mark'ın içine
On=@Destroy da olusturmus fakat Tag0.silinmez die bir sorgu gecmis dikkat edersen Altina bir sysmessage olusturup Stafflar koydugu yerdeki itemi silmeye calisirsa itemin tag0.silinmez 1 E eşitse eğer itemin silinmesi yerine Sysmessage gecmesini istedigi icin olabilir... örenk
Sonuc olarak Sphere def'in icine Markyasak 10 Yazarsin 10 kare içerisinde mark yapilmamasini istiyorsan
Bu senin işini görüür
Axuare :
Script olduğuna faul, mesela;
Niye ayrı bir typedef açma ihtiyacı duydun ?
Niye bir layer tanımlası ihtiyacı duydun ?
Niye bir On=@Destroy kullanımına ihtiyaç duydun ?
Benim script bilgim malesef zaten çok ileri seviye değildi ama şuanda o bile yok.
Ama şöyle bir yol izlenebilir, tavsiyem.
Bir item oluştur, sade olsun mümkünse // attr tanımlamaları olsa yeter bence.
Sorgusunuda öyle fix scripti içinde değil , direk spellin kendi içerisinde (sphere.spells olması lazım tam hatırlamıyorum)
sorgulat. Örnek olarakta mesela duvar silici scriptler vardı, onları baz alarak yapabilirsin. // sonuçta aynı mantık.
Bir de xwerswoodx var, o görürse daha detaylı, yeni sorgulara uygun birşeyler yapabilir.
Type def Olusturmasini sebibi Belki Sorgusunu Yeni Type uzerinden yapcak arkadaş Mesela Sphere spell Mark'ın içine
Kod:
ON=@EFFECT
IF (<SRC.ISNEARTYPE T_MARK_YASAK <DDEF.MARKYASAK>>)
src.sys_kirmizi Bu alan işaretlenemez. <dDef.markyasak> kare sınırı vardır.
src.f_fizzle
RETURN 1
endif
On=@Destroy da olusturmus fakat Tag0.silinmez die bir sorgu gecmis dikkat edersen Altina bir sysmessage olusturup Stafflar koydugu yerdeki itemi silmeye calisirsa itemin tag0.silinmez 1 E eşitse eğer itemin silinmesi yerine Sysmessage gecmesini istedigi icin olabilir... örenk
Kod:
on=@destroy
if (<tag0.silinmez>==1)
src.sysmessage @07a1 bu itemi silmek yasaktir.... GİBi
return 1
endif
Sonuc olarak Sphere def'in icine Markyasak 10 Yazarsin 10 kare içerisinde mark yapilmamasini istiyorsan
Kod:
on=@select
IF (<SRC.ISNEARTYPE T_MARK_YASAK <DDEF.MARKYASAK>>)
src.sys_kirmizi Bu alan işaretlenemez. <dDef.markyasak> kare sınırı vardır.
src.f_fizzle
RETURN 1
endif
Bu senin işini görüür
Axuare - 29-05-2019 10:16 GMT -
@Mahsuni merhaba,
Ben arkadaşın oluşturduğu iteme istinaden yazdım, belkiler ile maybeler ile alakalı yazmadım.
Typedef'i o şekilde kullanması mantıklı, öyle kullanılabilir.
İtem'e neden tag verip sonra destroy altında tag sorgulanıyor ? Direk ;
Bu şekilde yapılsa ne fark ediyor ?
Ayrıca son sorguda On=@Select'ten ziyada @Success kullanırsa daha mantıklı.
@Mahsuni merhaba,
Ben arkadaşın oluşturduğu iteme istinaden yazdım, belkiler ile maybeler ile alakalı yazmadım.
Typedef'i o şekilde kullanması mantıklı, öyle kullanılabilir.
İtem'e neden tag verip sonra destroy altında tag sorgulanıyor ? Direk ;
Kod:
on=@destroy
SRC.SYSMESSAGE @,,1 Bu itemi silemezsiniz.
RETURN 1
Bu şekilde yapılsa ne fark ediyor ?
Ayrıca son sorguda On=@Select'ten ziyada @Success kullanırsa daha mantıklı.
Jada - 30-05-2019 18:28 GMT -
Mark engelleyen nesnemiz
Sphere_spells.scp kısmında Mark büyüsünün start kısmının altına eklenecek bölüm
Mark engelleyen nesnemiz
Kod:
[TYPEDEF T_MARK_YASAK]
on=@pickup_ground
if (<src.account.plevel> < 7)
src.sysmessage @38,,1 Bunu yapmaya yetkiniz bulunmuyor.
return 1
endif
[ITEMDEF i_mark_yasak]
DEFNAME=i_mark_yasak
NAME=Mark Engelleyici
ID=i_crystal_green
TYPE=t_mark_yasak
weight 60000
on=@create
color 0bb7
attr attr_static|attr_invis
timer=-1
on=@click
message @33,,1 [Bu eşyaya dokunmayın]
message @0790,,1 50 karelik çember'in marklanmasını engeller.
message @64,,1 [<name>]
return 1
Sphere_spells.scp kısmında Mark büyüsünün start kısmının altına eklenecek bölüm
Kod:
on=@START
foritems 50
if (<baseid> == i_mark_yasak)
src.sysmessage @38,,1 Bu alan marklanmaz. 50 kare sınırı vardır.
src.f_fizzle
src.skill fail
RETURN 1
endif
endfor
emre11 - 30-05-2019 22:17 GMT -
Hepinize ayrı ayrı teşekkür ederim yardımlarınızdan dolayı jada arkadaşada teşekkür ederim yazdıgı script oldu hatasız şekilde.
Hepinize ayrı ayrı teşekkür ederim yardımlarınızdan dolayı jada arkadaşada teşekkür ederim yazdıgı script oldu hatasız şekilde.
xwerswoodx - 30-05-2019 22:24 GMT -
Peki şunları deneyelim;
* 51. kareden mark büyüsüne başla mark taşına tıklama targeti bozmadan 50 kare içerisine gir ve gidip deedin tam üzerinde mark taşına tıkla.
* Aynı şekilde dışarda mark taşına tıklayıp içeri koşarsan yine aynı çözüm olacaktır.
* Deed in üzerine veya 50 kare içerisinde gate açıp, gatein diğer tarafından marka başlayıp gateden geçerek yine 50 kare içerisi marklanabilir.
On=@Start altında yapılan işlemler çözüm değil, On=@Effect altında yapmak gerekiyor.
Peki şunları deneyelim;
* 51. kareden mark büyüsüne başla mark taşına tıklama targeti bozmadan 50 kare içerisine gir ve gidip deedin tam üzerinde mark taşına tıkla.
* Aynı şekilde dışarda mark taşına tıklayıp içeri koşarsan yine aynı çözüm olacaktır.
* Deed in üzerine veya 50 kare içerisinde gate açıp, gatein diğer tarafından marka başlayıp gateden geçerek yine 50 kare içerisi marklanabilir.
On=@Start altında yapılan işlemler çözüm değil, On=@Effect altında yapmak gerekiyor.
Jada - 31-05-2019 00:01 GMT -
Hamit'in dediği de doğru ona da ek olarak 2. seçenek için Mark büyüsünün spellfreez süresini bitmeden hareket edemeyecek şekilde ayarlanırsa sorun ortadan kalkacaktır diye düşünüyorum
Son güncelleme: Jada tarafından 31-05-2019 00:12 GMT tarihinde, önce.
Hamit'in dediği de doğru ona da ek olarak 2. seçenek için Mark büyüsünün spellfreez süresini bitmeden hareket edemeyecek şekilde ayarlanırsa sorun ortadan kalkacaktır diye düşünüyorum
Son güncelleme: Jada tarafından 31-05-2019 00:12 GMT tarihinde, önce.
xrambo - 06-06-2019 10:37 GMT -
Hiç uğraşma direkt bölgenin regionuna gerekenleri ekle geç.
region_antimagic_recall_in 00002 // teleport,recall in to this, and mark
region_antimagic_recall_out 00004 // can't recall out of here.
region_antimagic_gate 00008
region_antimagic_teleport 00010 // can't teleport into here.
Ha kısıtlı bir alan için yapacaksan yeni region (areadef roomdef) kaydet ve devam et
Hiç uğraşma direkt bölgenin regionuna gerekenleri ekle geç.
region_antimagic_recall_in 00002 // teleport,recall in to this, and mark
region_antimagic_recall_out 00004 // can't recall out of here.
region_antimagic_gate 00008
region_antimagic_teleport 00010 // can't teleport into here.
Ha kısıtlı bir alan için yapacaksan yeni region (areadef roomdef) kaydet ve devam et
emre11 - 06-06-2019 11:15 GMT -
ama bana item olarak lazım sadece bir alan icin degil herhangi bir alana koydugumda orada mark yapılmasın yinede teşekkür ederim.
ama bana item olarak lazım sadece bir alan icin degil herhangi bir alana koydugumda orada mark yapılmasın yinede teşekkür ederim.
Firot - 09-06-2019 04:11 GMT -
Normalde pek yazmam, ama bu başlığı ve altındaki mesajları görünce dayanamadım. Adeta şimdiye kadar açılan sunuculardaki genel ağırlığın ve donanım israfının özeti gibi.
Mark büyüsünün altında 50 karelik for döngüsü tanımlamak, sunucuda her mark büyüsü yapıldığında bu döngünün çalışması demektir.
Fazla eşya olan bir alanda mark büyüsü yapılsa nereden baksan 100-150 ms'lik bir kayıp yaşatır. Oyuncular bu eşya konmadan önce bölgeyi marklamış olabileceğinden gate ve recall büyülerinde de aynı kontrolün yapılacağını varsayarsak durum daha da vahim bir hal alır. Sphere'de neredeyse her komut tek thread üzerinde çalışır yani sphere bir iş bitmeden diğerine geçemez. Sunucuda bunun gibi benzer kodlar çoğalırsa bir süre sonra ister istemez sunucuda yavaşlamalar başlar.
Region tanımlamak performans açısından çok daha iyi. Eğer region tanımlanmak istenmiyorsa tek bir eşya yere atmak yerine 3-5 kare ara ile istediğiniz bölgeyi mark engelleyen eşyalarla kaplayarak mark büyüsü yapıldığında 50 kareyi taramak yerine 3-5 kareyi tarayabilirsiniz. Bunun için de atıyorum staff'a bir komut verirsiniz o komutu yazınca o bölge belirli aralıklarla anti mark eşyası ile kaplanır. Bunu da çok sık kullanırsanız sunucuya eşya sayısı olarak yük olacaktır ancak her mark büyüsü yapıldığında 50 karedeki tüm eşyaları taramaktan iyidir. Bu eşyalar da sunucuda yer kaplamasın istiyorsanız, bu eşyalar oluştuğunda pozisyonlarını veritabanına atıp eşyalara tag.nosave olacaktı sanırım bu tag'i verirseniz bu eşyalar save esnasında kaydedilmezler. Sunucu açılırken veritabanından okuyup eşyaları tekrar oluşturabilirsiniz.
Yazdığınız kodların ne kadar sürde işlendiğini görmek için konsola p# yazabilirsiniz. Sphere klasöründe her fonksiyon kaç defa çağrılmış, ne kadar zaman kaybı yaratmış, kaç ms ortalama ile çalışmış hepsini görebilirsiniz. Yavaş çalıştığını düşündüğünüz kod parçalarını ayrı function'lara bölerek bu dosyadan ne kadar hızlı çalıştıklarını görebilirsiniz.
Elbette günümüzde pek oyuncu kalmadığı için bunların bir önemi kalmadı. Kod ne kadar yavaş çalışsa da pek hissedileceğini zannetmiyorum. Ancak çok oyuncu varken de bunlara dikkat eden çok fazla sunucu olduğunu düşünmüyorum.
Normalde pek yazmam, ama bu başlığı ve altındaki mesajları görünce dayanamadım. Adeta şimdiye kadar açılan sunuculardaki genel ağırlığın ve donanım israfının özeti gibi.
Mark büyüsünün altında 50 karelik for döngüsü tanımlamak, sunucuda her mark büyüsü yapıldığında bu döngünün çalışması demektir.
Fazla eşya olan bir alanda mark büyüsü yapılsa nereden baksan 100-150 ms'lik bir kayıp yaşatır. Oyuncular bu eşya konmadan önce bölgeyi marklamış olabileceğinden gate ve recall büyülerinde de aynı kontrolün yapılacağını varsayarsak durum daha da vahim bir hal alır. Sphere'de neredeyse her komut tek thread üzerinde çalışır yani sphere bir iş bitmeden diğerine geçemez. Sunucuda bunun gibi benzer kodlar çoğalırsa bir süre sonra ister istemez sunucuda yavaşlamalar başlar.
Region tanımlamak performans açısından çok daha iyi. Eğer region tanımlanmak istenmiyorsa tek bir eşya yere atmak yerine 3-5 kare ara ile istediğiniz bölgeyi mark engelleyen eşyalarla kaplayarak mark büyüsü yapıldığında 50 kareyi taramak yerine 3-5 kareyi tarayabilirsiniz. Bunun için de atıyorum staff'a bir komut verirsiniz o komutu yazınca o bölge belirli aralıklarla anti mark eşyası ile kaplanır. Bunu da çok sık kullanırsanız sunucuya eşya sayısı olarak yük olacaktır ancak her mark büyüsü yapıldığında 50 karedeki tüm eşyaları taramaktan iyidir. Bu eşyalar da sunucuda yer kaplamasın istiyorsanız, bu eşyalar oluştuğunda pozisyonlarını veritabanına atıp eşyalara tag.nosave olacaktı sanırım bu tag'i verirseniz bu eşyalar save esnasında kaydedilmezler. Sunucu açılırken veritabanından okuyup eşyaları tekrar oluşturabilirsiniz.
Yazdığınız kodların ne kadar sürde işlendiğini görmek için konsola p# yazabilirsiniz. Sphere klasöründe her fonksiyon kaç defa çağrılmış, ne kadar zaman kaybı yaratmış, kaç ms ortalama ile çalışmış hepsini görebilirsiniz. Yavaş çalıştığını düşündüğünüz kod parçalarını ayrı function'lara bölerek bu dosyadan ne kadar hızlı çalıştıklarını görebilirsiniz.
Elbette günümüzde pek oyuncu kalmadığı için bunların bir önemi kalmadı. Kod ne kadar yavaş çalışsa da pek hissedileceğini zannetmiyorum. Ancak çok oyuncu varken de bunlara dikkat eden çok fazla sunucu olduğunu düşünmüyorum.