Pinke - 19-05-2018 03:57 GMT -
Kolay gelsin hayırlı sahurlar Dostlar. Kafama takılan bir kaç soru var bunları düşündügüm gibi cöze bilirmiyiz. Mesela ben bir özel dragon yaptım kendini tedavi ediyor falan istedigim büyüleri yemiyor ama bu dragonu 3 4 kişi kesmeye kalktığnda dragonnun bu oyunculara büyü atma gibi şansı olmuyo sürekli ok atan biri fizzletiyor bende diyorumki bu dragon 5 dk bir Ortam büyüsü atsın 50 hp götürsün ve ne atılırsa atılsın bu dragona fizzlemesin ben bunu nasıl yapa bilirim basitce anlatırsanız sevinirim tşklr biraz acemiyimde bu konularda
Kolay gelsin hayırlı sahurlar Dostlar. Kafama takılan bir kaç soru var bunları düşündügüm gibi cöze bilirmiyiz. Mesela ben bir özel dragon yaptım kendini tedavi ediyor falan istedigim büyüleri yemiyor ama bu dragonu 3 4 kişi kesmeye kalktığnda dragonnun bu oyunculara büyü atma gibi şansı olmuyo sürekli ok atan biri fizzletiyor bende diyorumki bu dragon 5 dk bir Ortam büyüsü atsın 50 hp götürsün ve ne atılırsa atılsın bu dragona fizzlemesin ben bunu nasıl yapa bilirim basitce anlatırsanız sevinirim tşklr biraz acemiyimde bu konularda
MirroR - 19-05-2018 04:05 GMT -
https://www.uo-developer.com.....-npc__n-last.html#bottom
bu konuda senin cevaplamıştım ama görmedin sanırım.
https://www.uo-developer.com.....-npc__n-last.html#bottom
bu konuda senin cevaplamıştım ama görmedin sanırım.
Pinke - 19-05-2018 04:43 GMT -
yok gördümde ben bunu anlıyamadım bir ikincisi benim istedigim gibi bitşey degil bu cok karışık
yok gördümde ben bunu anlıyamadım bir ikincisi benim istedigim gibi bitşey degil bu cok karışık
MirroR - 19-05-2018 16:51 GMT -
Dene bu zaten senin istediğin gibi bir şey.
Kod:
[defname EffectType]
_EffectType i_fire_column,i_fx_explode,i_fx_glow_spike
Kod:
on=@gethit
ref1 = <uid>
tag0._Multi +=<dargn1>
if (<dtag._Hasar> >= 150)
forplayers 18
local._EffectType = <R1,3>
damage <R40,50>,0,<ref1>
effect = 3,<getargvx <dlocal._EffectType>,<def._EffectType>>
endfor
tag._Multi =
endif
Kod:
[function getargvx]
if (<argv[0]> == -1)
return <eval <argv>-1>
else
return <argv[<argv[0]>]>
endif
Dene bu zaten senin istediğin gibi bir şey.
Slothere - 20-05-2018 13:58 GMT -
Custom spell yazmak istemiyorsan şöyle bir alternatif de kullanabilirsin.
args "s_flamestrike, s_fire_bolt, s_magic_arrow, s_poison, s_earthquake, s_chain_lightning"
Buraya atmasını istediğin büyüleri aralarına virgül girerek belirtmen yeterli. Başka bir yeri değiştirmene lüzum yok.
Burada spelleffect ile hardcoded büyü attırdığın için custom efekt verip hasar verdirmeye oranla çok daha performanslı çalışacaktır. Ama tabi özel bir beklentin varsa kendine göre düzenlemen gerekir.
Şu anki yapısıyla yaratık her hasar alışta böyle vurur. 5dk'da bir ya da belirli şartlarda vursun diyorsan o şartları ayrıca eklemek lazım.
Custom spell yazmak istemiyorsan şöyle bir alternatif de kullanabilirsin.
Kod:
on=@gethit
ref1 <uid>
forplayers 18
if <isonline>
args "s_flamestrike, s_fire_bolt, s_magic_arrow, s_poison, s_earthquake, s_chain_lightning"
local.spell <argv[<R0,<eval <argv>-1>>]>
spelleffect <local.spell> 1000 <ref1>
endif
endfor
args "s_flamestrike, s_fire_bolt, s_magic_arrow, s_poison, s_earthquake, s_chain_lightning"
Buraya atmasını istediğin büyüleri aralarına virgül girerek belirtmen yeterli. Başka bir yeri değiştirmene lüzum yok.
Burada spelleffect ile hardcoded büyü attırdığın için custom efekt verip hasar verdirmeye oranla çok daha performanslı çalışacaktır. Ama tabi özel bir beklentin varsa kendine göre düzenlemen gerekir.
Şu anki yapısıyla yaratık her hasar alışta böyle vurur. 5dk'da bir ya da belirli şartlarda vursun diyorsan o şartları ayrıca eklemek lazım.
MirroR - 20-05-2018 16:21 GMT -
if sorgundaki'ı görünce aklıma geldi. Sadece aktif oyuncuları göz önünde bulunduran forclients, bende forplayers olarak yapmıştım.
if sorgundaki
Pinke - 22-05-2018 05:20 GMT -
Slothere dedigin gibi yaptık olduda ama dragonun hitsi düşmüyor kesmek isteyince hic bir sekilde canı gitmiyor..
Son güncelleme: Pinke tarafından 22-05-2018 06:40 GMT tarihinde, önce.
Slothere dedigin gibi yaptık olduda ama dragonun hitsi düşmüyor kesmek isteyince hic bir sekilde canı gitmiyor..
Son güncelleme: Pinke tarafından 22-05-2018 06:40 GMT tarihinde, önce.
Slothere - 22-05-2018 11:10 GMT -
Şu an nasıl kullanıyorsun? Üstteki örnekte canın gitmesini engelleyen bir durum yok. Yanlış yerde return kullanımı vs. ile olmuş olabilir. Kodları bir görelim.
Şu an nasıl kullanıyorsun? Üstteki örnekte canın gitmesini engelleyen bir durum yok. Yanlış yerde return kullanımı vs. ile olmuş olabilir. Kodları bir görelim.
Pinke - 23-05-2018 04:00 GMT -
bu şekilde..
bu şekilde..
Kod:
[CHARDEF c_dragoncuk2]
DEFNAME=c_dragoncuk2
NAME=King Of Dragon
ID=c_exodus_overseer
SOUND=snd_MONSTER_DAEMON1
ICON=i_pet_dragon
DAM=25,45
ARMOR=20
CAN=MT_WALK|MT_FLY|MT_RUN
FOODTYPE=10 t_meat_raw
//SHELTER=r_caves,r_dungeon
DESIRES=i_gold
AVERSIONS=r_civilization,r_water
on=@click
message @38 <name>
message @38,1,1,1 [Str:<str> | Hits:<hits>]
return 1
ON=@Create
COLOR=0
NPC=brain_dragon
STR={6500 6700}
DEX={9000 9000}
INT={800 1000}
PARRYING={100.0 100.0}
MAGERY={5000.0 5000.0}
MAGICRESISTANCE={5000.0 7500.0}
TACTICS=5000.0
WRESTLING=5000.0
KARMA={-5000 -6000}
FAME={800 900}
ITEMNEWBIE=i_spellbook
ADDSPELL=s_flamestrike
ADDSPELL=s_teleport
CATEGORY=Monsters
SUBSECTION=New
DESCRIPTION=Eleminatethree
on=@npcrestock
item {i_deri5 5 i_deri4 4 i_deri3 3 i_deri2 2 i_deri1 1}
item {i_ss_24 17 i_mace_war_24 16 i_axe_24 15 i_axe_24 14 i_mace_24 13 i_club_24 12 i_war_24 11 i_cutlas_24 10 i_scm_24 9 i_krs_24 8 i_tc_bs24 7 i_katana_24 5 i_spear_24 4 i_halberd_21 3 i_bardic_24 2 i_pit_24 1},R2
ITEM=i_power_scroll,R3
ITEM=i_power_scroll
ITEM=i_power_scroll
ITEM=i_power_scroll
ITEM=i_gold,50000
ITEM=i_gold,50000
ITEM=i_define_haritasi
ITEM=i_sc,3
item {i_fenc_robe 5 i_mf_robe 4 i_sv_robe 3 i_tame30 2 i_ostard_egg 1},R3
item {i_malzeme1 3 i_malzeme2 2 i_malzeme3 1}
ON=@Gethit
if (<hits> < 300)
sayua 68,2,0,eng,* Kendini Tedavi Eder *
effect=3,025e0,6,35,1
sound snd_spell_greater_heal
hits=(<hits> + 75)
endif
if (<act.baseid>=c_vortex)
sayua 68,2,0,eng,* Etkilenmez *
effect=3,025e0,6,35,1
sound snd_spell_greater_heal
src.remove
endif
if (<act.baseid>=c_blade_spirit)
sayua 68,2,0,eng,* Etkilenmez *
effect=3,025e0,6,35,1
sound snd_spell_greater_heal
src.remove
endif
if (<act.baseid>=c_daemon)
sayua 68,2,0,eng,* Etkilenmez *
effect=3,025e0,6,35,1
sound snd_spell_greater_heal
src.remove
endif
if (<act.baseid>=c_bear_polar)
sayua 68,2,0,eng,* Etkilenmez *
effect=3,025e0,6,35,1
sound snd_spell_greater_heal
src.remove
endif
ref1 <uid>
forplayers 18
if <isonline>
args "s_explosion"
local.spell <argv[<R0,<eval <argv>-1>>]>
spelleffect <local.spell> 1000 <ref1>
endif
endfor
ON=@spelleffect
if (<argn> == 20)
sayua 68,6,6,1 * buyuyu geri cevirir *
effect=3,025e0,6,35,1
spelleffect 29 {500 1000}
src.poison 9999
src.effect 3,i_fx_curse,6,16,0
src.sound snd_SPELL_POISON
return 1
elseif (<argn> == 20)
sayua 68,6,6,1 * etkilenmez *
effect=3,025e0,6,35,1
spelleffect 29 {500 1000}
return 1
endif
if (<ARGN>=27) //Des Sanct
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
if (<ARGN>=30) //Des Sanct
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
if (<ARGN>=37) //Des Sanct
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
if (<ARGN>=57) //Des Sanct
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
if (<ARGN>=1) //Uus Jux
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
if (<ARGN>=3) //Rel Wis
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
if (<ARGN>=5) //In Por Ylem
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
if (<ARGN>=8) //Des Mani
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
if (<ARGN>=38) //Des Mani
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
if (<ARGN>=39) //Des Mani
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
if (<ARGN>=47) //Des Mani
sayua 68,6,6,1 * Etkilenmez *
effect=3,025e0,6,35,1
RETURN 1
ENDIF
IF (<src.findid.i_rune_clumsy>) || (<src.findid.i_rune_feeblemind>) || (<src.findid.i_rune_magic_arrow>) || (<src.findid.i_rune_weaken>)
src.findid.i_rune_clumsy.remove
src.findid.i_rune_feeblemind.remove
src.findid.i_rune_magic_arrow.remove
src.findid.i_rune_weaken.remove
SPELLEFFECT=s_cure,150.0,1
endif
ennudgeupdif
on=@death
src.newitem 02634
src.act.color 0
src.act.p <src.p>
src.act.timer 120
src.act.attr attr_decay
src.act.move d 1
src.newitem 02c80
src.act.color 38
src.act.p <src.p>
src.act.timer 10
src.act.attr attr_decay
src.act.move nw 1
B3LyRsy2 - 23-05-2018 05:18 GMT -
@Slothere'nin dediği gibi return kullanımı olsaydı canının gitmemesi durumu söz konusu olabilir di. ancak bu durumda geriye kalan aklımda ki tek soru Gm charla mı damage/hasar vermeye çalışıyorsun? bazı istisnai durumlarda Gm karakter hasar vermiyor olabilir. oyuncu karakterle dene, bazı büyülerden canı gitmiyor diyorsan @spelleffect kısmındaki büyüleride kontrol et. poi yediği zaman canı gitmsin die Return 1 ile durdurulmuş ve Argn==30,37,57 büyüleri hasar büyüleri. 39 ve 47 ise field büyüsü.
//- ayrıca NPC üzerinde başka bir event varmı @GETHIT trigger'ı tetikleyecek onu kontrol et, ve belki dalgınlık ve unutmuş olabilirsin hasar vermeye çalıştığın bölge safe alan mı. Star gibi (bazen bazı sunucuların starı safe olabiliryor) Green Acres bölgeleri vs.
bir de @GETHIT altındaki src.remove'leri act.remove olarak değiştir. kendini silme ihtimali var.
@SPELLEFFECT altında 2 kere poi büyüsünü tanımlamışsın. onu şu şekilde değiştir.
Son güncelleme: B3LyRsy2 tarafından 25-05-2018 02:16 GMT tarihinde, önce.
@Slothere'nin dediği gibi return kullanımı olsaydı canının gitmemesi durumu söz konusu olabilir di. ancak bu durumda geriye kalan aklımda ki tek soru Gm charla mı damage/hasar vermeye çalışıyorsun? bazı istisnai durumlarda Gm karakter hasar vermiyor olabilir. oyuncu karakterle dene, bazı büyülerden canı gitmiyor diyorsan @spelleffect kısmındaki büyüleride kontrol et. poi yediği zaman canı gitmsin die Return 1 ile durdurulmuş ve Argn==30,37,57 büyüleri hasar büyüleri. 39 ve 47 ise field büyüsü.
//- ayrıca NPC üzerinde başka bir event varmı @GETHIT trigger'ı tetikleyecek onu kontrol et, ve belki dalgınlık ve unutmuş olabilirsin hasar vermeye çalıştığın bölge safe alan mı. Star gibi (bazen bazı sunucuların starı safe olabiliryor) Green Acres bölgeleri vs.
bir de @GETHIT altındaki src.remove'leri act.remove olarak değiştir. kendini silme ihtimali var.
@SPELLEFFECT altında 2 kere poi büyüsünü tanımlamışsın. onu şu şekilde değiştir.
Kod:
IF (<ARGN> == 20)
SAYUA 68,6,6,0 * büyüyü geri çevirir *
EFFECT=3,025E0,6,35,1
SPELLEFFECT=29 {500 1000}
SRC.POISON=9999
SRC.EFFECT=3,I_FX_CURSE,6,16,0
SRC.SOUND=snd_SPELL_POISON
RETURN 1 // poi ile canı gitsin istiyorsan bunu kaldır.
ENDIF
//- Etkilenmez büyüleri için de böyle yapabilirsin.
IF ((<ARGN> == 1) || (gibi) || (gibi) || (<ARGN> == XX))
SAYUA 68,6,6,0 * Etkilenmez *
EFFECT=3,025e0,6,35,1
RETURN 1
ENDIF
Son güncelleme: B3LyRsy2 tarafından 25-05-2018 02:16 GMT tarihinde, önce.
Slothere - 23-05-2018 12:46 GMT -
@Pinke
Teknik olarak ölümsüz bir yaratık yapmışsın. Özellikle 300 canın altında sürekli 75 can basılması eğer çok yüksek miktarda ve ani bir hasar almazsa karakterin ölmemesine sebep olacaktır.
Hesap kitapta eval kullanmanı öneririm.
hits=( + 75)
yerine
hits += 75
veya
hits+75>
gibi.
Sorgularda tek yerine çift == sorgulamalısın. = atama operatörüdür. Çalışıyor gibi görünse de arka planda ekstra bir sorguya sebep oluyorsun. Bu da performans düşüklüğüne sebep oluyor.
if = 1
yerine
if == 1
kullanılmalı.
Yalnızca explosion atılmasını istiyorsan verdiğim kodu şöyle de düzenleyebilirsin. Ekstra hesap kitaba gerek kalmaz.
ref1
forplayers 18
if
spelleffect s_explosion 1000
endif
endfor
Bunun dışında canın gitmesini engelleyen farklı bir yer göremedim. Belki dikkatli bakmamışımdır. @B3LyRsy2'in dediği gibi farklı bir event olabilir mi ona bir bakmanı öneririm. Bulunan bölgenin region'ı da tekrar bahsedildiği gibi önemli. Gethit altına parametre ekleyip kaç damage geldiğini falan sorgula. Önce işlem yapmayan kaç damage verdildiğine bak. İşlemden sonra bu değer kaça düşüyor onu sorgula. Aralarda kesilme varsa oradan müdahalede bulunursun.
@Pinke
Teknik olarak ölümsüz bir yaratık yapmışsın. Özellikle 300 canın altında sürekli 75 can basılması eğer çok yüksek miktarda ve ani bir hasar almazsa karakterin ölmemesine sebep olacaktır.
Hesap kitapta eval kullanmanı öneririm.
hits=(
yerine
hits += 75
veya
hits
gibi.
Sorgularda tek yerine çift == sorgulamalısın. = atama operatörüdür. Çalışıyor gibi görünse de arka planda ekstra bir sorguya sebep oluyorsun. Bu da performans düşüklüğüne sebep oluyor.
if
yerine
if
kullanılmalı.
Yalnızca explosion atılmasını istiyorsan verdiğim kodu şöyle de düzenleyebilirsin. Ekstra hesap kitaba gerek kalmaz.
ref1
forplayers 18
if
spelleffect s_explosion 1000
endif
endfor
Bunun dışında canın gitmesini engelleyen farklı bir yer göremedim. Belki dikkatli bakmamışımdır. @B3LyRsy2'in dediği gibi farklı bir event olabilir mi ona bir bakmanı öneririm. Bulunan bölgenin region'ı da tekrar bahsedildiği gibi önemli. Gethit altına parametre ekleyip kaç damage geldiğini falan sorgula. Önce işlem yapmayan kaç damage verdildiğine bak. İşlemden sonra bu değer kaça düşüyor onu sorgula. Aralarda kesilme varsa oradan müdahalede bulunursun.