Merhabalar.
Açık olan veya yeni açmayı düşündüğünüz bir serveriniz varsa oyuncuların birbiriyle aynı nickleri kullanmasını engellemek isterseniz bu paylaştığım komutlar dizisine ihtiyacınız olacaktır. Site de veya farklı platformlar da benzer yardımcı komutlar bulabilirsiniz ancak bunlar forplayers veya forchars ile yapılmış functionlardır. Yani bu negibi bir sorun yapabilir diye düşünebilirsiniz.

Hemen anlatayım;
Eğer ki birden fazla map dosyası kullanıyorsanız oyuncuları forplayers ile sorguladığınız da sadece o map üzerinde ki oyuncuları sorgularsınız. Yani biz genelde sosaria kullanırız ama son zamanlar da map2.mul map3.mul da kullanılır duruma geldi bu yüzden forplayers ile nick kontrolü yapmaktansa accountlara ve account içinde ki charlara bakmak daha sağlıklı olacağını düşünerek bir kod yazdım ve bunu paylaşmak istedim.
NOT: Ben aynı nickte açılmış 2. karakteri direkt sildirttim. Siz isterseniz hatalı isim yapıp dialog ile ismi de değiştirttirebilirsiniz.
Eğer karakterin silinmesini istemiyorsanız ref1.f_karaktersil kısmını kaldırabilirsiniz.Hatalı isim ve isim değiştirme dialogu için eski nesil nick kontrol scriptlerini inceleyebilirsiniz.


56B için;
Komutu kullanmak için sphere_serv_triggers.scp içerisin de f_onchar_create altına da ufak ekleme yapmamız gerekmektedir.

f_onchar_create altına eklenecek kodlar ;

src.name <strarg <src.name>> // yazılan ilk isim de boşluk bırakılmasını istemiyorsak bu şekilde yapabiliriz. Örneğin karakter açarken nick Yakup Abi yazıldıysa Yakup olacaktır.
src.update // Karakteri hemen update edelim.. Çok gerekli gibi görünmese de fazla update göz cıkarmaz :)
src.timerf 1,f_newchar_nick_control // Bu da nicki kontrol edicek komutu 1 saniye sonra calıstırmamızı sağlar.

 

Nick kontrol kısımını yapacak olan functionumuz ;

[function f_newchar_nick_control]
ref1=<uid>
for X 0 <eval <serv.accounts>-1>
for Y 0 <serv.maxcharsperaccount>
if (<serv.account.<dlocal.x>.char.<dlocal.y>>) 
if (<serv.account.<dlocal.x>.char.<dlocal.y>.uid>!=<ref1>) && (strmatch('<ref1.name>','<serv.account.<dlocal.x>.char.<dlocal.y>.name>'))
ref1.sysmessage @021,,1 Kullanmaya çalıştığınız nick başkası tarafından kullanılıyor.
ref1.sysmessage @021,,1 Farklı bir isimle yeni karakter oluşturunuz.
ref1.f_karaktersil 
return 1
endif
endif
endfor
endfor

[function f_karaktersil]
ref1=<uid>
for 0 <serv.maxcharsperaccount>
if (<ref1.account.char.<dlocal._for>.uid>==<ref1>)
serv.newitem i_char_remover,1,<ref1>
new.timer 1
new.more <dlocal._for>
return 1
endif
endfor

[itemdef i_char_remover]
name Char remove item
id i_memory 
type t_eq_script
weight 0 

On=@Create 
attr attr_invis|attr_decay 

On=@Timer
local.contplevel <cont.account.plevel>
cont.account.plevel 1
cont.disconnect
cont.account.plevel <local.contplevel>
cont.account.char.<dmore>.remove 1
remove 


[EOF]

 



Bu konu Nefrelius tarafından düzenlendi(2023-03-02 23:06, 1 yıl önce)

Üye Ol veya Giriş Yap

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