UO-Dev Arama

 



İçerde : 1 misafir, 0 üye : --- Sayfalar: 1
Yazar

emre11


UO-Dev Üyesi
Skill Title: Apprentice
Online durumu
Toplam Mesaj: 80
Oyun Tarzı: Pvp
Emulatör:
Tecrübe: Player
Yaş: 25
Mesaj #97305   26-05-2019 09: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.

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 14:18 GMT, 104 Gün önce düzenlendi.



Yazar

Axuare


UO-Dev Üyesi
Skill Title: Expert
Online durumu
Toplam Mesaj: 341
Oyun Tarzı: Rp
Emulatör: 0.56b
Tecrübe: Diğer
Yaş: 27
Mesaj #97306   26-05-2019 20: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.


Özür dilemek;
Senin haksız, karşıdakinin haklı olduğu anlamına gelmez.
"Karşıdaki insana verdiğin değerin, egondan yüksek olduğunu ifade eder".


Ultima Online : Rise of Dragons..

Yazar

Tanthalas


UO-Dev Üyesi
Skill Title: Apprentice
Online durumu
Toplam Mesaj: 52
Oyun Tarzı: Rp
Emulatör: Sphere
Tecrübe: Scripter
Yaş: 27
Mesaj #97308   27-05-2019 01: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



Yazar

mahsuni


UO-Dev Üyesi
Skill Title: Journeyman
Online durumu
Toplam Mesaj: 151
Oyun Tarzı: Rp
Emulatör:
Tecrübe: Scripter
Yaş: 28
Mesaj #97309   27-05-2019 18:39 GMT    
        
Alıntı
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


Warsa Atarin Cezani Yatarim . .

Yazar

Axuare


UO-Dev Üyesi
Skill Title: Expert
Online durumu
Toplam Mesaj: 341
Oyun Tarzı: Rp
Emulatör: 0.56b
Tecrübe: Diğer
Yaş: 27
Mesaj #97315   29-05-2019 07: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 ;

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ı.


Özür dilemek;
Senin haksız, karşıdakinin haklı olduğu anlamına gelmez.
"Karşıdaki insana verdiğin değerin, egondan yüksek olduğunu ifade eder".


Ultima Online : Rise of Dragons..

Yazar

Jada


UO-Dev Üyesi
Skill Title: Apprentice
Online durumu
Toplam Mesaj: 86
Oyun Tarzı: Rp
Emulatör: Sphere
Tecrübe: Scripter
Yaş: 39
Mesaj #97317   30-05-2019 15:28 GMT    
        
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


Yazar

emre11


UO-Dev Üyesi
Skill Title: Apprentice
Online durumu
Toplam Mesaj: 80
Oyun Tarzı: Pvp
Emulatör:
Tecrübe: Player
Yaş: 25
Mesaj #97319   30-05-2019 19: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.



Yazar

xwerswoodx


Sphere Destek
Skill Title: Master
Online durumu
Toplam Mesaj: 1750
Oyun Tarzı: Rp
Emulatör: Sphere
Tecrübe: Scripter
Yaş: 10
Mesaj #97320   30-05-2019 19: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.


 Jada
Geçmişi olmayanın, geleceği olmaz.

Scripting Destek Discord: https://discord.gg/yXQ3m5S

Yazar

Jada


UO-Dev Üyesi
Skill Title: Apprentice
Online durumu
Toplam Mesaj: 86
Oyun Tarzı: Rp
Emulatör: Sphere
Tecrübe: Scripter
Yaş: 39
Mesaj #97322   30-05-2019 21: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 30-05-2019 21:12 GMT, 114 Gün önce düzenlendi.


Yazar

xrambo


UO-Dev Üyesi
Skill Title: Journeyman
Online durumu
Toplam Mesaj: 132
Oyun Tarzı: Pvp
Emulatör: Sphere
Tecrübe: Scripter
Yaş: 27
Mesaj #97336   06-06-2019 07: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



Yazar

emre11


UO-Dev Üyesi
Skill Title: Apprentice
Online durumu
Toplam Mesaj: 80
Oyun Tarzı: Pvp
Emulatör:
Tecrübe: Player
Yaş: 25
Mesaj #97338   06-06-2019 08: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.



Yazar

Firot


UO-Dev Üyesi
Skill Title: Neophyte
Online durumu
Toplam Mesaj: 3
Oyun Tarzı: Pvp
Emulatör:
Tecrübe: Diğer
Yaş: 31
Mesaj #97344   09-06-2019 01: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.


 TheRaskol

Sayfalar: 1



Benzer Konular

KonularMesajlarSon gönderenTarih
cesetlere item koyulması engellenmesi2xwerswoodx15-06-2019
staff item silinmesi9Slothere15-05-2018
item yükseltmek44s3d321-04-2018
Bag'e Belirli bir item koyabilme3Daemon19-02-2018
Özel robelerde eldeki item gözükmüyor2Previus04-02-2018


Keywords:

ultima online, RunUO, ultima online download, sphere scripting, role play, uo grafik, second age ultima, uo loop, macroman, pvp server, server kurulumu, sphere, multool, ml mulls, 56b 55r 55i, htmlgumps, client 4x, client edit, sphere release, osi, rp server, sunucular, ghost mouse, inside uo, kingdom reborn, stygian abyss, uo nasıl oynanır, mondain's legacy, age of shadows, world build, grandmaster, ultima online pvp, player dosyaları, ultima online indir, frp game, RunUO 1.0.0, razor, uo rice, hue editör, skill tools, ultima online patch, axis, world build, verdata, verdata patcher, map editör, gump editör, mul patcher, aos mulls, scriptler, anim edit, anim publish, hues mul, hosting vps, event dialog, account sistemi, skill gain, static yapımı,