UO-Dev Arama

 



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

athynas


UO-Dev Üyesi
Skill Title: Novice
Online durumu
Toplam Mesaj: 41
Oyun Tarzı: Pp
Emulatör: 0.56b
Tecrübe: World Builder
Yaş: 47
Mesaj #93646   11-10-2017 14:22 GMT    
        
Merhaba, anlayamadığım yer şurası, skill 300'den düşük olduğunda ele alınmış item vasıtasıyla belirlediğim bitkiye vurulduğunda eşya atmasını istiyorum. Bunu template ile yapacağım (template ile nasıl çantaya item düşüreceğimi göremedim ancak varsa söyleyebilecek biri sevinirim.)

Esas sorunum şu skille göre oyuncunun eline aldığı eşyayla vurduğu statik eşyadan drop alınmasını sağlamak istiyorum. Skill 300'den düşük ise 1-35 arası random reagent attırıyorum, skill 300-600 arası ise farklı bir template verdirmek istiyorum ancak gel gör ki 300-600 arası drop ayarlamasını yapamıyorum ve sanıyorum ki 600den sonra her skill için verdireceğim eşyaları toplu olarak verdirecek. Yani daha önce denk gelmedim skille göre drop almayı içeren bir scripte burada tıkandım.


Diğer esaslı sorum ise şu, hata ve başarısız uyarılarının ayrımlarını yapamadım. Gördüğünüz gibi 10'dan düşük her işlem hatasını 10'a sabitledim ancak şurada şöyle bir hata meydana geldi, daha önce item ile target alınarak toplanan bitkinin hatası ve bitki toplarken heba olan kaynak ayrımını yapamıyorum. Bunu her if içinde bir else oluşturarak ayrı ayrı mı vermem gerekiyor?

Son olarak; yine kurcalayarak bulabilirim daha önce denk geldim ancak yine de kolaylık olması açısından onu da sorayım; Özel bir eşyanın 100'de bir drop oranını nasıl ayarlarım?

Kod:
on=@Targon_item
if <src.targ.distance> > 1
src.sysmessage @0845,1,1 Çok uzaksınız!
return 1
Elseif (<Src.Targ.BaseID> = i_curuk_bitki)
Src.Targ.ID i_curuk_bitki_2
src.anim 30
src.sound 443
          Src.Targ.Color 0400
          Src.Targ.Update
          Src.Targ.Timer {1 5}
    LOCAL.CHANCE=<EVAL (<SRC.forensics> / 100) + 1> //Toplayamama oranı= forensics/10.0 + 1 (50.0/20.0 + 1 = 3) (70.0/20.0 + 1 = 4)
    IF (<DLOCAL.CHANCE> < 10)
      LOCAL.CHANCE=10
    ENDIF
    IF (<R<DLOCAL.CHANCE>>) && (<src.forensics> < 300))
      SERV.NEWITEM random_reagent,{1 35},<SRC>
          SRC.SYSMESSAGE @0bb2,,1 Bitkiyi hasat ettiniz.
  Src.gainimiverfora
          endif
    IF (<R<DLOCAL.CHANCE>>) && (<src.forensics> > 299)) -
      SERV.NEWITEM random_reagent,{1 35},<SRC>
      SERV.NEWITEM random_reagent,{1 35},<SRC>
          SRC.SYSMESSAGE @0bb2,,1 Bitkiyi hasat ettiniz.
  Src.gainimiverfora
          endif
    ELSE
      SRC.SYSMESSAGE @0bb2,,1 Bitkiyi heba ettiniz.
    return 1
    ENDIF


Son güncelleme: athynas tarafından 11-10-2017 16:01 GMT, 6 Gün önce düzenlendi.



Yazar

xwerswoodx


Sphere Destek
Skill Title: Master
Online durumu
Toplam Mesaj: 1605
Oyun Tarzı: Rp
Emulatör: 0.56b
Tecrübe: Scripter
Yaş: 8
Mesaj #93647   11-10-2017 15:49 GMT    
        
TEMPLATE i bag içine altmak için [TEMPLATE ...] in hemen altına ITEM= den önce CONTAINER=i_bag gibi container yani taşıyıcı çanta idsini belirlemen gerek.

2. soruna gelirsek;
LOCAL.CHANCE zaten 100.0 forensics de 11 oluyor maksimum yani her halukarda 10 a sabitlemişsin, 0 bile olsa forensics 10 olarak görecek onu.

2 kere Rand sorgusu döndürmüşsün ki çok gereksiz.

Diğer yandna sorunun ne olduğunu anlamadım ama kodda çok hata var gibi, mesela 2. ifden önce - var, ayrıca son else en üstteki if sorgusunun içinde kalıyor sanki oda hatalı gibi.


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

Yazar

athynas


UO-Dev Üyesi
Skill Title: Novice
Online durumu
Toplam Mesaj: 41
Oyun Tarzı: Pp
Emulatör: 0.56b
Tecrübe: World Builder
Yaş: 47
Mesaj #93648   11-10-2017 15:58 GMT    
        
Alıntı
xwerswoodx :
TEMPLATE i bag içine altmak için [TEMPLATE ...] in hemen altına ITEM= den önce CONTAINER=i_bag gibi container yani taşıyıcı çanta idsini belirlemen gerek.

2. soruna gelirsek;
LOCAL.CHANCE zaten 100.0 forensics de 11 oluyor maksimum yani her halukarda 10 a sabitlemişsin, 0 bile olsa forensics 10 olarak görecek onu.

2 kere Rand sorgusu döndürmüşsün ki çok gereksiz.

Diğer yandna sorunun ne olduğunu anlamadım ama kodda çok hata var gibi, mesela 2. ifden önce - var, ayrıca son else en üstteki if sorgusunun içinde kalıyor sanki oda hatalı gibi.




Container kullanmadan direkt düşmesini sağlayamaz mıyız?



Sorun şu, skill toplayıcılık skilli olacak. Bitkilerden bir eşya vasıtasıyla bir şeyler toplayacak. Eşya vasıtasıyla toplanan bitkiden bir daha toplanamayacak ve burada bir uyarı verecek, ancak bunu beceremedim, rand ile başarısız olduğunda vereceği hatayla aynı hatayı veriyor, if ve elseler birbirine girdi.

Kısacası randlı olarak (toplama başarısız oldu gibi) uyarı vermesinin yanında toplanmış bitkide de uyarı vermesini istiyorum burada işin içinden çıkamadım

Sondaki else başarısız olunduğunda verilen else olması gerekiyor, belki yanlışlık olabilir tam toparlayamadım gibi. Randları skill miktarına göre ayarladım ancak esas sorunlarımı halletmeden tekrar ona bakmak istemedim.



Yazar

xwerswoodx


Sphere Destek
Skill Title: Master
Online durumu
Toplam Mesaj: 1605
Oyun Tarzı: Rp
Emulatör: 0.56b
Tecrübe: Scripter
Yaş: 8
Mesaj #93649   11-10-2017 16:14 GMT    
        
Ha sen oyuncunun çantasına mı düşsün istiyorsun? Eğer öyle istiyorsan itemi yarattığın yerin altına NEW.CONT=<PLAYERIN UIDI> şeklinde belirleyeceksin, mesela SRC.NAME playerin adı ise, NEW.CONT=<SRC> gibi, eğer <NAME> playerin adı ise, NEW.CONT=<UID> gibi...

Şimdi biz bunu

Kod:
on=@Targon_item
if <src.targ.distance> > 1
src.sysmessage @0845,1,1 Çok uzaksınız!
return 1
Elseif (<Src.Targ.BaseID> = i_curuk_bitki)
Src.Targ.ID i_curuk_bitki_2
src.anim 30
src.sound 443
          Src.Targ.Color 0400
          Src.Targ.Update
          Src.Targ.Timer {1 5}
    LOCAL.CHANCE=<EVAL (<SRC.forensics> / 100) + 1> //Toplayamama oranı= forensics/20.0 + 1 (50.0/20.0 + 1 = 3) (70.0/20.0 + 1 = 4)
    IF (<DLOCAL.CHANCE> < 10)
      LOCAL.CHANCE=10
    ENDIF
    IF (<R<DLOCAL.CHANCE>>) && (<src.forensics> < 300))
      SERV.NEWITEM random_reagent,{1 35},<SRC>
          SRC.SYSMESSAGE @0bb2,,1 Bitkiyi hasat ettiniz.
  Src.gainimiverfora
          endif
    IF (<R<DLOCAL.CHANCE>>) && (<src.forensics> > 299)) -
      SERV.NEWITEM random_reagent,{1 35},<SRC>
      SERV.NEWITEM random_reagent,{1 35},<SRC>
          SRC.SYSMESSAGE @0bb2,,1 Bitkiyi hasat ettiniz.
  Src.gainimiverfora
          endif
    ELSE
      SRC.SYSMESSAGE @0bb2,,1 Bitkiyi heba ettiniz.
    return 1


itemin, seçeneği olarak var sayıyoruz, toparlayalım tek tek;

Kod:
on=@TargOn_Item
if <SRC.DISTANCE <ARGO>> > 1
  SRC.SYSMESSAGE @0845,1,1 Çok uzaksınız!

Burda 1 kareden daha uzak ise engelledik,

Kod:
ELIF (<ARGO.BASEID> = i_curuk_bitki)
  ARGO.ID i_curuk_bitki_2
  SRC.ANIM 30
  SRC.SOUND 443
  ARGO.COLOR 0400
  ARGO.UPDATE
  ARGO.TIMER {1 5}
  LOCAL.CHANCE=<EVAL (<SRC.FORENSICS>/100) + 1>
  IF (<dLOCAL.CHANCE> < 1) //Bu ihtimal olmaz ancak eğer 0 ise R de sorun çıkacağından 1 e sabitleyelim;
      LOCAL.CHANCE=1
  ENDIF

Buraya kadar targetlediğimiz eşyayı güncelleyip şansı belirledik.

Kod:
  IF (<R<dLOCAL.CHANCE>>)
    IF (<SRC.FORENSICS> <= 300) //Skill 30.0 dan düşükse
      SERV.NEWITEM random_reagent,{1 35},<SRC>
      SRC.SYSMESSAGE @0bb2,,1 Bitkiyi hasat ettiniz.
      SRC.GAINIMIVERFORA
    ELIF (<SRC.FORENSICS> > 300) //Skill 30.0 dan yüksekse
      SERV.NEWITEM random_reagent,{1 35},<SRC>
      SERV.NEWITEM random_reagent,{1 35},<SRC>
      SRC.SYSMESSAGE @0bb2,,1 Bitkiyi hasat ettiniz.
      SRC.GAINIMIVERFORA
    ENDIF
  ELSE
    SRC.SYSMESSAGE @0bb2,,1 Bitkiyi heba ettiniz.
  ENDIF

Buraya kadar CHANCE değeri ile ne yapacağımızı ayarladık.

Kod:
  RETURN 1
ENDIF

Burada ilk açtığımı ifi kapatıp, RETURN 1 ile sonradan gelecek SPHERE-BASE işlemleri engelledik, kısaca hepsini alt alta toplarsak;

Kod:
on=@TargOn_Item
if <SRC.DISTANCE <ARGO>> > 1
  SRC.SYSMESSAGE @0845,1,1 Çok uzaksınız!
ELIF (<ARGO.BASEID> = i_curuk_bitki)
  ARGO.ID i_curuk_bitki_2
  SRC.ANIM 30
  SRC.SOUND 443
  ARGO.COLOR 0400
  ARGO.UPDATE
  ARGO.TIMER {1 5}
  LOCAL.CHANCE=<EVAL (<SRC.FORENSICS>/100) + 1>
  IF (<dLOCAL.CHANCE> < 1) //Bu ihtimal olmaz ancak eğer 0 ise R de sorun çıkacağından 1 e sabitleyelim;
      LOCAL.CHANCE=1
  ENDIF

  IF (<R<dLOCAL.CHANCE>>)
    IF (<SRC.FORENSICS> <= 300) //Skill 30.0 dan düşükse
      SERV.NEWITEM random_reagent,{1 35},<SRC>
      SRC.SYSMESSAGE @0bb2,,1 Bitkiyi hasat ettiniz.
      SRC.GAINIMIVERFORA
    ELIF (<SRC.FORENSICS> > 300) //Skill 30.0 dan yüksekse
      SERV.NEWITEM random_reagent,{1 35},<SRC>
      SERV.NEWITEM random_reagent,{1 35},<SRC>
      SRC.SYSMESSAGE @0bb2,,1 Bitkiyi hasat ettiniz.
      SRC.GAINIMIVERFORA
    ENDIF
  ELSE
    SRC.SYSMESSAGE @0bb2,,1 Bitkiyi heba ettiniz.
  ENDIF
  RETURN 1
ENDIF


Kodu bu şekilde yaptığımızda sorun vermemesi gerekiyor, onun dışında Gainimiverfora functionunun ne yaptığı hakkında fikrim yok, o nedenle itemi onun içinde veriyorsan çantaya aktarma vb şeyler orda yapılmalı.


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

Yazar

athynas


UO-Dev Üyesi
Skill Title: Novice
Online durumu
Toplam Mesaj: 41
Oyun Tarzı: Pp
Emulatör: 0.56b
Tecrübe: World Builder
Yaş: 47
Mesaj #93650   11-10-2017 16:53 GMT    
        
Kod:
if <SRC.DISTANCE <ARGO>> > 1
  SRC.SYSMESSAGE @0845,1,1 Çok uzaksınız!
ELIF (<ARGO.BASEID> = i_curuk_bitki)
  ARGO.ID i_curuk_bitki_2
  SRC.ANIM 30
  SRC.SOUND 443
  ARGO.COLOR 0400
  ARGO.UPDATE
  ARGO.TIMER {1 5}
  LOCAL.CHANCE=<EVAL (<SRC.FORENSICS>/100) + 1>
  IF (<dLOCAL.CHANCE> < 3)
      LOCAL.CHANCE=3
  ENDIF

Else (<ARGO.BASEID> = i_curuk_bitki_2)
      SRC.SYSMESSAGE @0bb2,,1 Bu bitki daha önce hasat edilmiş!
return 1
endif

  IF (<R<dLOCAL.CHANCE>>)
    IF (<SRC.FORENSICS> <= 600) //Skill 60.0 dan düşükse
      Serv.newitem random_reagent,{1 35},<SRC>
      Src.sysmessage @0bb2,,1 Bitkiyi hasat ettiniz.
      Src.gainimiverfora
    Elif (<SRC.FORENSICS> > 600) //Skill 60.0 dan yüksekse
      Serv.newitem random_reagent,{1 35},<SRC>
      Serv.newitem random_reagent,{1 35},<SRC>
      Src.sysmessage @0bb2,,1 Bitkiyi hasat ettiniz.
      Src.gainimiverfora
    ENDIF
  ELSE
      Src.sysmessage @0bb2,,1 Bitkiyi heba ettiniz.
  ENDIF
  RETURN 1
ENDIF


Aşağıdaki sorunu şu şekilde çözdüm
aynı soruna çözüm arayan biri olursa diye bırakıyorum. Düşme ihtimalini ayarlamak için dorand kullandım.
'Serv.newitem i_aroma_viski,R2,{1 35},<SRC>' işe yaramıyor

'Forensics skilli 79.9 üzerinde ve 90.0 altında olanlar bu işlemi yaptığında' tadında;


Elif ((<SRC.FORENSICS> > 799) && (<SRC.FORENSICS> < 900))


Araya else sokarak bitkinin hasat edilip edilmediğini de kontrol ettirdim. Yani evet bu işimi görüyor.

Normalde hasat edilir mesajını görmek için 3'te 1 ihtimal verecektim o hale getirdim. O da tamam.

Şimdi tek kalan şu, tamam skill bazında 2 ihtimal olduğunda (600 altı ve 600 skill üstü) bu sorunsuz şekilde çalışır. Ancak ben bu ihtimalleri 800 üstü 900 üstü yaparsam oyuncu önceki iflerin verdiklerini de toplu olarak almaz mı?

Bununla beraber son olarak bir eşyanın yüzde ihtimalle düşmesini nasıl sağlayabilirim? Mesela rare tohumu ekleyeceğim, 100'de bir ihtimal ile düşsün istiyorum, tamam eşyayı çantayı düşürebiliyorum ancak ihtimal düşüremiyorum.

Not: gainimiverfora ile kullanımını kapattığım forensicsin gain almasını sağlıyorum.


Son güncelleme: athynas tarafından 11-10-2017 18:34 GMT, 6 Gün önce düzenlendi.



Yazar

xwerswoodx


Sphere Destek
Skill Title: Master
Online durumu
Toplam Mesaj: 1605
Oyun Tarzı: Rp
Emulatör: 0.56b
Tecrübe: Scripter
Yaş: 8
Mesaj #93651   11-10-2017 18:38 GMT    
        
Alıntı
athynas :
Aşağıdaki sorunu şu şekilde çözdüm
aynı soruna çözüm arayan biri olursa diye bırakıyorum. Not: belirli bir yüzde ile eşyayı nasıl düşüreceğim konusunda hala emin değilim ona çözüm arıyorum Mesela şu
'Serv.newitem i_aroma_viski,R2,{1 35},<SRC>' işe yaramıyor



NewItem sorgusunda rand değeri yoktur,
Kod:
NEWITEM id, amount, cont, triggerEquip


Eğer rand sorgulanacaksa,
Kod:
IF !(<R2>)
  SERV.NEWITEM i_item, {1 35}, <SRC>
ENDIF


Şeklinde yapılmalıdır.

Alıntı
athynas :
Şimdi tek kalan şu, tamam skill bazında 2 ihtimal olduğunda (600 altı ve 600 skill üstü) bu sorunsuz şekilde çalışır. Ancak ben bu ihtimalleri 800 üstü 900 üstü yaparsam oyuncu önceki iflerin verdiklerini de toplu olarak almaz mı?



Bu tamamen sorgulama yaptığın sıraya bağlıdır,

Bunun 3 yolu vardır;
Kod:
IF (<SKILL> > 30.0)
  SYSMESSAGE 1
ELIF (<SKILL> > 50.0)
  SYSMESSAGE 2
ELIF (<SKILL> > 75.0)
  SYSMESSAGE 3
ELIF (<SKILL> > 90.0)
  SYSMESSAGE 4
ENDIF


Yapar isen eğer, SKILL'in 100.0 olsa dahi, ilk sorgu 30.0 olduğundan ve buna uyduğundna "1" cevabı dönecek, 2, 3, 4, devreye girmeyecektir.

Kod:
IF (<SKILL> > 90.0)
  SYSMESSAGE 4
ELIF (<SKILL> > 75.0)
  SYSMESSAGE 3
ELIF (<SKILL> > 50.0)
  SYSMESSAGE 2
ELSE (<SKILL> > 30.0)
  SYSMESSAGE 1
ENDIF

Eğer böyle yaparsak, skill 90.0 dan büyükse, ilk sorgu 90.0 olduğundna ve uyduğundan "4" olarak dönecektir, diğerleri yine devreye girmeyecektir.

Kod:
IF (<SKILL> > 30.0)
  SYSMESSAGE 1
ENDIF
IF (<SKILL> > 50.0)
  SYSMESSAGE 2
ENDIF
IF (<SKILL> > 75.0)
  SYSMESSAGE 3
ENDIF
IF (<SKILL> > 90.0)
  SYSMESSAGE 4
ENDIF


Bu şekilde her döngüyü ayrı sorgular halinde yaparsan, 90.0 üstündeyse skillin, 1,2,3,4 hepsi dönecektir.


Yani senin istediğğini nasıl yaparız;
Kod:
IF (<SRC.FORENSICS> >= 90.0)
  //90.0 üstü olunca olacaklar...
ELIF (<SRC.FORENSICS> >= 80.0)
  //80.0 ile 90.0 arasında iken olacaklar...
ELIF (<SRC.FORENSICS> >= 70.0)
  //70.0 ile 80.0 arasında iken olacaklar...
ELIF (<SRC.FORENSICS> >= 60.0)
  //60.0 ile 70.0 arasında iken olacaklar..
ELSE
  //60.0dan düşükken olacaklar.
ENDIF


Alıntı
athynas :
Bununla beraber son olarak bir eşyanın yüzde ihtimalle düşmesini nasıl sağlayabilirim? Mesela rare tohumu ekleyeceğim, 100'de bir ihtimal ile düşsün istiyorum, tamam eşyayı çantayı düşürebiliyorum ancak ihtimal düşüremiyorum.

Kod:
IF !(<R100>) //100 de 1. 100'de 2 = (<R100> < 2), 100'de 9 = (<R100> < 9)
  SERV.NEWITEM i_rare_tohum,1,<SRC>
ENDIF


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

Yazar

athynas


UO-Dev Üyesi
Skill Title: Novice
Online durumu
Toplam Mesaj: 41
Oyun Tarzı: Pp
Emulatör: 0.56b
Tecrübe: World Builder
Yaş: 47
Mesaj #93655   12-10-2017 01:08 GMT    
        
xwerswoodx teşekkür ediyorum, dediğim gibi kendi yazdığım scriptle bunu çözebildim, ancak merak ettiğim sphere yorma ihtimali hangi script yazılımında yüksek?





Yazar

xwerswoodx


Sphere Destek
Skill Title: Master
Online durumu
Toplam Mesaj: 1605
Oyun Tarzı: Rp
Emulatör: 0.56b
Tecrübe: Scripter
Yaş: 8
Mesaj #93656   12-10-2017 01:21 GMT    
        
IF ELSEIF ELSE ENDIF yerine IF ENDIF IF ENDIF gibi sürekli benzer şeyleri sorgularsan sphere yorulur, ancak sphere çok yüksek veriye dayanabilecek kapasitededir yani bu tarz basit kodlar sphere yormaz


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

Sayfalar: 1



Benzer Konular

KonularMesajlarSon gönderenTarih
Npc saldırıyı Kill'e göre engelleme3Wasabi-san03-03-2017
Haritada güvenli alan yapmak4xwerswoodx22-02-2017
etheral llama süre verilmesin hata6eren199415-01-2017
Bir itemı çoklu yapmak2xwerswoodx09-12-2016
Mage Eşyasında Hata Yardım.9emre1119-11-2016


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