UO-Dev Arama

 



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

serkserk


UO-Dev Üyesi
Skill Title: Novice
Online durumu
Toplam Mesaj: 41
Oyun Tarzı: Pvp
Emulatör: Sphere
Tecrübe: Scripter
Yaş: 33
Mesaj #99282   22-07-2020 18:07 GMT    
        
Kod:
[itemdef i_gate_bomber_enter]/////////////////////////////
id i_moongate_black
name Bomberman Etkinligi

on=@create
color 0bb4
dispid i_moongate_blue
for x 1 20
tag.girenuid<dlocal.x>
endfor

on=@click
message @58,,1 Bomberman Yarismasi
if (<timer> >= 60)
message @38,,1 [Kalan Sure: <eval (<timer>/60)> dakika]
else
message @38,,1 [Kalan Sure: <timer> saniye]
endif
return 1

on=@dclick
if (<src.isgm>)
src.go bomberman alani
return 1
endif

if !(0<tag.girenuid10> == 0)
src.sysmessage @50 Yarismaya maximum kisi olan 10 kisi zaten girmis..
timer 1
return 1
endif

FORCHARS 15
IF (<MEMORYFINDTYPE.MEMORY_IPET>)
IF (<MEMORYFINDTYPE.MEMORY_IPET.LINK>==<SRC.UID>)
SRC.SYSMESSAGE @39,0,1 Etrafınızda size ait hayvan varken yarışmaya katılamazsınız.
RETURN 1
ENDIF
ENDIF
ENDFOR

YARISMAKOMUTLAR

VAR0.bombe_COUNT += 1

SRC.OTOBOMBERYARISMAYAGIR

for x 1 50
if (<tag0.girenuid<eval <local.x>>> == 0)
serv.allclients sysmessage @58,,1 <dlocal.x>. kişi bomberman yarışmasına girdi.
serv.allclients sysmessage @58,,1 Bomberman yarışmasına girişin kapanmasına ve yarışmanın başlamasına son <eval <timer>/60> dakika veya <eval 10-<local.x>> kişi.
tag.girenuid<eval <local.x>> <src.uid>
return 1
endif
endfor

return 1

on=@step
src.sysmessage @39,1,1 <src.name>, lütfen gate'e iki kere tıklayın.
return 1
endif

on=@timer
IF (<DVAR0.bombe_COUNT> >= 2)
REMOVE
serv.allclients sysmessage @50,,1 Bomberman yarışmaşı 10 sn sonra başlıyor.
TRY UID.<VAR0.BOMBESTARTERUID>.TIMER 10
RETURN 1
ELSE
BOMBERIPTAL
REMOVE
RETURN 1
ENDIF


Kod:
[FUNCTION OTOBOMBERYARISMAYAGIR]
local.place <r1,10>
src.go <def.playerp<dlocal.place>>

events +e_bomberman
src.tag.bomberhak 3
tag0.firedist 1
tag0.bombtime 5
tag0.bomb
f_fizzle
//stone 1
nightsight 1
hits <str>
serv.allclients sysmessage @0785,1,1 <name> Bomberman yarışmasına katıldı.
//DORAND 10

//SRC.GO 5598,1130,1
//SRC.GO 5578,1136,1
//SRC.GO 5588,1134,1
//SRC.GO 5592,1126,1
//SRC.GO 5594,1118,1
//SRC.GO 5588,1112,1
//SRC.GO 5586,1118,1
//SRC.GO 5586,1124,1
//SRC.GO 5578,1120,1
//SRC.GO 5582,1128,1

//ENDDO
SRC.HITS <SRC.STR>
SRC.STAM <SRC.DEX>
FOR 0 28
IF (<DLOCAL._FOR> != 21) && (<DLOCAL._FOR> != 29) && (<DLOCAL._FOR> != 11) && (<DLOCAL._FOR> != 16)
REF1 = <SRC.FINDLAYER.<DLOCAL._FOR>.UID>
IF (<EVAL <REF1>> != 0)
REF1.P = 1,1,1
SRC.CTAG.GMBOMBEITEM<DLOCAL._FOR> = <REF1.UID>
REF1.CONT = <SRC.FINDLAYER.LAYER_PACK.UID>
REF1.UPDATE
REF1.FIX
ENDIF
ENDIF
ENDFOR
SRC.NEWITEM 01517
NEW.COLOR 1983
NEW.ATTR 010
NEW.EQUIP
SRC.NEWITEM 0152E
NEW.COLOR 1983
NEW.ATTR 010
NEW.EQUIP
SRC.NEWITEM 0170F
NEW.COLOR 1983
NEW.ATTR 010
NEW.EQUIP
SRC.FLAGS = <SRC.FLAGS>|04
SRC.CTAG.GMBOMBEITEM21 = <SRC.FINDLAYER.21.UID>
SRC.FINDLAYER.21.CONT = <SRC.FINDLAYER.29.UID>
BANK
UPDATE
FIX


Kod:
[events e_bomberman]
on=@click
message @075f,1,1 Bomber <eval <tag.bomberhak>> hakkı var
message @07a1,1,1 <name>
return 1

on=@attack
return 1

on=@spellcast
return 1

on=@spelleffect
return 1

on=@death

if (<tag.bomberhak> > 0)
src.sys_beyaz <eval <tag.bomberrhak>> hakkınız kaldı..
src.hits <src.str>
src.tag.bomberhak -=1
serv.allclients sysmessage @07a1,1,1 <name> öldü ve <eval <tag.bomberhak>> bomberman hakkı kaldı.
local.place <r1,10>
src.go <def.playerp<dlocal.place>>
timerf 3,kalankontrol
return 1
endif

YARISMAGENELFLAGSIL_
VAR0.BOMBE_COUNT --
SRC.EVENTS -E_BOMBERMAN
src.stonemgitsinbeabi
SRC.GO guvenli alan
serv.allclients sysmessage @033,1,1 Bomberman yarismasinda kalan kisi :<eval <var0.bombe_count>>
resurrect 1
SRC.HITS <SRC.STR>
BOMBERCIKIS
byebye
RETURN 1

ON=@LOGOUT
TRIGGER=@DEATH
RETURN 0


Kod:
[function kalankontrol]
IF (<eval <VAR0.BOMBE_COUNT>> == 1)
BOMBERCIKIS
BOMBERMANBIRINCI
endif
return 1


Kod:
[function BOMBERMANBITTI]
foritems 64000
if <baseid> == i_box_art
remove
endif
endfor

VAR0.BIRYARISMAVAR 0
VAR0.BOMBEBASLADIBASKAN 0


Kod:
[function BOMBERMANBIRINCI]
forchars 65000
if (<isevent.e_BOMBERMAN>)
events -e_bomberman
go GUVENLI ALAN
timerf,1 TOPUKODUL
resurrect 1
SRC.HITS <SRC.STR>
bombermanbitti
serv.allclients sysmessage @07b1,,1 <name> Bomberman yarışmasını kazandı.
return 1
endif
endfor


Şimdi iki sistemin harmanlanması ve ufak eklentiler ile otonatik bomberman yapımına giriştim. Sonuç istediğim gibi olmak üzere sadece son kalan oyuncunun ödülünü verip gönderme kısmı sıkıntılı. Şimdiki halinde bir kez daha ölmesi gerekiyor. Sorgulama "Event" "on=@death" altından hariç başka bir şekilde yapılabilinir mi?


Son güncelleme: serkserk tarafından 22-07-2020 18:12 GMT, 21 Gün önce düzenlendi.


Discord=Serkan#6764

Yazar

4s3d3


UO-Dev Üyesi
Skill Title: Journeyman
Online durumu
Toplam Mesaj: 234
Oyun Tarzı: Rp
Emulatör:
Tecrübe: Player
Yaş: 30
Mesaj #99284   22-07-2020 19:57 GMT    
        
Şöyle bir ayar çekebilirsin:
1.Etkinliğe giren herkesin UID'ini bir listeye alırsın daha sonra öldükçe listeden çıkartırsın list.count 1 oluncada ödülü o kişiye verip listeyi silersin
2. alternatif ise bir tane taş olur tüm girenlerin uidleri bu taşa ya da iteme tag olarak verilir şöyleki Tag.Katilan<Src> ve Tag.ToplamKatilan ++ olarak eklersin elenince ya da ölüncede tagı silip Tag.ToplamKatilan -=1 olarak yaparsın tag.counttan son kalana ödül verebilirsin
3.alternatifin ise var olarak kaydedersin en son kalanı aynı şekilde ödül verirsin

Bana soracak olursan 1. ilk tercihim olur eğer çok fazla kişi olarak düşünüyorsan limiti 200 gibi o zaman 2.yi tercih ederim



Yazar

serkserk


UO-Dev Üyesi
Skill Title: Novice
Online durumu
Toplam Mesaj: 41
Oyun Tarzı: Pvp
Emulatör: Sphere
Tecrübe: Scripter
Yaş: 33
Mesaj #99285   22-07-2020 20:11 GMT    
        
Alıntı
4s3d3 :
Şöyle bir ayar çekebilirsin:
1.Etkinliğe giren herkesin UID'ini bir listeye alırsın daha sonra öldükçe listeden çıkartırsın list.count 1 oluncada ödülü o kişiye verip listeyi silersin
2. alternatif ise bir tane taş olur tüm girenlerin uidleri bu taşa ya da iteme tag olarak verilir şöyleki Tag.Katilan<Src> ve Tag.ToplamKatilan ++ olarak eklersin elenince ya da ölüncede tagı silip Tag.ToplamKatilan -=1 olarak yaparsın tag.counttan son kalana ödül verebilirsin
3.alternatifin ise var olarak kaydedersin en son kalanı aynı şekilde ödül verirsin

Bana soracak olursan 1. ilk tercihim olur eğer çok fazla kişi olarak düşünüyorsan limiti 200 gibi o zaman 2.yi tercih ederim



Teşekkürler tavsiyelerini deneyeceğim.


Discord=Serkan#6764

Yazar

Slothere


UO-Dev Üyesi
Skill Title: Expert
Online durumu
Toplam Mesaj: 324
Oyun Tarzı: Rp
Emulatör: Sphere
Tecrübe: Scripter
Yaş: 28
Mesaj #99286   23-07-2020 12:08 GMT    
        
sona kalanı aldırman için önce total kullanıcıların olduğu bir kaydın olması lazım. buna çeşitli şekillerde erişebilirsin.

list yöntemi ilki. liste oluşturup kullanıcıları ekle çıkar yöntemiyle kalan sayısını buradan kestirebilirsin. dikkat edilmesi gereken nokta list'den bir eleman sildiğinde indexlerin tümü kayıyor ona dikkat edilmesi gerekir.

var.oyuncu1 gibi sıradan girdikçe ekletip oradan da kontrol ettirebilirsin. ama gereksiz iş yükü yaratır çok tavsiye ettiğim bir yöntem değil.

üçüncü alternatif ise zaten bu etkinliği bir region üzerinde yapacaksın region.allchars gibi komutlarla bölgedeki toplam kişi sayısını hesaplatıp 1 kişi kaldıysa o kişiye rahatça erişebilirsin. en etkili yöntem de bu olur. ekle çıkar hesapla ile uğraşmazsın.

her girene bir unique item verebilirsin i_bomberman_memory atıyorum. forinstances i_bomberman_memory ile sorgulatıp topobj ile sahiplerini ve toplam sayılarını basitçe alabilirsin. kişi sayısı 1 se zaten döngü tek bir sonuç vereceğinden o kişiye erişip ödülünü verdirirsin.

forchars,foritems 65000 gibi kodlar ciddi bir yük bindirir, kullanmamalısın. bölgesel işlemlerde tüm dünyayı taratmanın çok bir anlamı yok. sıkıntılara yol açacaktır.


 serkserk
discord id: slothere#5079

Yazar

serkserk


UO-Dev Üyesi
Skill Title: Novice
Online durumu
Toplam Mesaj: 41
Oyun Tarzı: Pvp
Emulatör: Sphere
Tecrübe: Scripter
Yaş: 33
Mesaj #99287   23-07-2020 12:36 GMT    
        
Slothere peki forchars,foritems 65000 yanlış bilmiyorsam kare mantığıyla sorguluyorsa başlangıç noktası neresi oluyor. Yani demek istediğim 65000 değilde 100 yazdık sadece yarışmanın olduğu koordinatlarda çalışması için orada bulunan bir eşya üzerinden mi çalışması lazım veya böyle birşey yok mu?


Discord=Serkan#6764

Yazar

Slothere


UO-Dev Üyesi
Skill Title: Expert
Online durumu
Toplam Mesaj: 324
Oyun Tarzı: Rp
Emulatör: Sphere
Tecrübe: Scripter
Yaş: 28
Mesaj #99288   23-07-2020 12:44 GMT    
        
forchars ve foritems mantığı şudur. 0 noktası olarak işlem yapılan koordinat esas alınır ve kaç sayısı girildiyse o sayı kadar dışa doğru tarama yapar. ayın haleleri gibi düşün. kademe kademe ileriye doğru tarar. harita uzunluğunu da göz önüne alınca 65k gibi girilen değerle aslında haritanın sonuna kadar for çalıştırmış oluyorsunuz. o yüzden mantıklı bir yaklaşım değil. bu tip sistemlerde foritems gibi komutlar kullanışlı değil. atıyorum alanda 1000 eşya varsa sen orada ufak bir if eklesen dahi hepsini süzgeçten geçirmek durumunda kalır ki bu da ekstra bir iş yükü. daha verimli olan forinstances komutu mesela girilen item bazında sadece o itemı komple nereye olursa olsun tarar. container içi olur char üstü olur hiç fark etmez.


 serkserk
discord id: slothere#5079

Yazar

4s3d3


UO-Dev Üyesi
Skill Title: Journeyman
Online durumu
Toplam Mesaj: 234
Oyun Tarzı: Rp
Emulatör:
Tecrübe: Player
Yaş: 30
Mesaj #99289   23-07-2020 19:51 GMT    
        
Region.P genelde haritanın merkezi olur yapacağın alanı bir kare etrafında eşit mesafeler ile belirlersen foritems alanın çok kısa olur senin içinde kolaylık olur


 Slothere, serkserk

Sayfalar: 1



Benzer Konular

KonularMesajlarSon gönderenTarih
Vds de ultima online nasıl açacağım4yalin5928-04-2020
Görünebilir deniz dibi nasıl yapılır?8Athynas24-03-2020
timer ayarlama nasıl yapılır ?54s3d301-03-2020
silahın vurucağı damage nasıl ayarlanır ?5xwerswoodx04-03-2020
Butun Serveri Guards Zoneden Nasıl Cıkartırım4xwerswoodx09-08-2019


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