* Poison etkisinde iken heal potion ve greater heal gibi büyü atılması.
Tüm playerlarda bulunan bir eventde;
@spellcast altına,
if ((<argn> == 4) || (<argn> == 29))
if (<src.act.findid.i_rune_poison>)
src.sysmessage @021,,1 Zehirli birisine heal veya g.heal atamazsınız.
src.f_fizzle
return 1
endif
endif
@spelleffect altına,
if ((<argn> == 4) || (<argn> == 29))
if (<src.findid.i_rune_poison>)
f_fizzle
return 1
endif
endif
Scriptlerinizde t_potion typedefi yoksa,
[typedef t_potion]
On=@Dclick
if (<more1> == s_heal) || (<more1> == s_greater_heal)
if (<src.findid.i_rune_poison>) || (<src.findid.i_rune_poison_field>)
src.sysmessage @021,,1 Zehir etkisi altındayken heal potion içemezsiniz.
return 1
endif
endif
varsa dclick altına if kodlarını ekleyebilirsiniz.
* Yumurtayı kurup sabitliğini kaldırınca süresinin sona ermesi
Ev sisteminizde release işleminin gerçekleştiği function altına;
if (strmatch('<argo.dispid>','i_nest_with_eggs'))
src.sysmessage @021,,1 Yumurtayı çıkartmadan kuluçkayı kaldıramazsınız.
return 1
endif
* Ölmeden önce bandaja tıklayıp öldükten sonra kendini resleme
Bandaj scriptinizin targon_char altına,
if !(<src.restest 1 <baseid>>)
src.sysmessage @021,,1 Bandajınız yok.
return 1
elseif (<src.flags>&statf_dead)
src.sysmessage @021,,1 Ölmüşsünüz.
return 1
endif
* Kütüphane veya herhangi bir kutunun içinde bulunan itemi çalarak skill kasılması
Sphere_skills.scp de Skill_Stealing altında on=@success altına,
ref1 <src.targ.topobj>
if !(<src.targ.isitem>) || !(<ref1.isplayer>)
src.sysmessage @021,,1 Sadece playerlardan çalabilirsiniz.
return 1
endif
Not: Npclerden çalmayı da fixler.
* 2 kişinin "all release" komutu ile taming kasması
Çok uğraşmak yerine komutu kapatmak çözümdür. sphere_speech.scp de aşağıdaki değişiklikleri yapınız.
ON=RELEASE
src.sysmessage @021,,1 Bu komut kapalıdır.
return 1
ON=ALL RELEASE
src.sysmessage @021,,1 Bu komut kapalıdır.
return 1
ON=TRANSFER
src.sysmessage @021,,1 Bu komut kapalıdır.
return 1
ON=ALL TRANSFER
src.sysmessage @021,,1 Bu komut kapalıdır.
return 1
ON=DISMISS
src.sysmessage @021,,1 Bu komut kapalıdır.
return 1
ON=DEFEND ME
src.sysmessage @021,,1 Bu komut kapalıdır.
return 1
* Bandajı bastığında silah vursada bandajın yırtılmaması
Eğer kullandığınız bandaj sistemi playera event veriyorsa, ki vermesi gerekir. ÖR. [events e_healing] o event altına,
On=@GetHit
if (!<findid.i_mem_healing>)
return 0
endif
if (<ARGN2>&dam_magic)
if (rand(7) == 1)
sayua 020,6,6,0 * Bandajları yırtılır *
while (<findid.i_mem_healing>)
findid.i_mem_healing.remove
endwhile
endif
else
if (rand(3) == 1)
sayua 020,6,6,0 * Bandajları yırtılır *
while (<findid.i_mem_healing>)
findid.i_mem_healing.remove
endwhile
endif
endif
NOT: 2 ifde de endwhilelerin sonuna delayı sıfırlayacak komutunuzu girmelisiniz. Aksi taktirde bandajı yırtılan adam bandaj delayı boyunca koşamayacaktır.
* Üzerinde zehir olan hayvana binilmesi ve binildikten sonra poison etkisi ile hayvanın ölmesi(ve bunun sonucunda etrafta bulunan tüm oyuncuların oyundan düşmesi)
Alternatif çözümdür,
Tüm playerlarda bulunan bir eventin altına, ör. fix eventi.
on=@Mount
if (<isgm>)
argo.findid.i_rune_poison.remove
endif
if (<argo.findid.i_rune_poison>)
if (<src.healing> >59.9) && (<src.anatomy> > 59.9)
argo.findid.i_rune_poison.remove
src.sayua 07d4,6,6,0 * Zehiri iyileştirir *
else
src.sysmessage @021,,1 Anatomy/Healing skilleriniz en az 60 değilse zehirli bineğe binemezsiniz.
return 1
endif
endif
Not: @Mount triggerinin çalışması için sphere.ini de Experimental flags ayarlarından // EF_New_Triggers = 00000008 aktif olmalıdır.
Örneğin, Experimental=5 ise Experimental=5|00000008 şeklinde değiştiriniz.
* Evlere duvar atılması
i_wall_stone_7 itemi gibi field büyülerinin bulunduğu scriptte @create altına,
timerf 1,f_housecheck
ekleyiniz. Daha sonra herhangi bir yere;
[FUNCTION f_housecheck]
IF (<ISNEARTYPE t_sign_gump 6>) || (<SERV.ITEMDEF.<REGION.TYPE>.TYPE> == t_multi)
REMOVE
ENDIF
ekleyiniz.
NOT: Fix Noxier'e aittir.
* Ev vendorlarının yanında binekten inip all go komutuyla vendorlarıda götürmek
Sphere_speech.scp de [SPEECH spk_pet] altındaki all go ve go da değişiklikleri yapınız;
ON=All go
ON=GO
if (<id> == c_vendoridsi)
trigger @Click
return 1
endif
Daha sonra vendorunuzun scriptine veya vendorunuza ait bir eventin scriptinde @click altına,
if !(strmatch('<eval 0<tag0.px>>','<eval <p.x>>')) || !(strmatch('<eval 0<tag0.py>>','<eval <p.y>>')) || !(strmatch('<eval 0<tag0.pz>>','<eval <p.z>>'))
p <tag0.p>
update
return 1
endif
Son olarak vendorunuzun yaratıldığı scriptte yaratıldığı yeri tag.p ye kaydettirmeyi unutmayın. Ör;
src.newnpc c_vendoridsi
src.act.p <p>
src.act.tag.p <p>
NOT: Vendorunuzun idsini scriptlerdeki c_vendoridsi ile değiştirmeyi unutmayınız.
* Olta, kazma, balta ve benzeri eşyalar ile yetenek geliştirirken ilgili eşyayı elinden çıkartmak.
Tüm playerlarda bulunan bir eventde @itemequip altına,
if (<action> == id(skill_fishing)) || (<action> == skill_fishing)
if !(<targ.type> == t_fish_pole)
sysmessage @021,,1 Oltanızı düşürdüğünüz için balık tutamadınız.
skill fail
action -1
return 1
endif
endif
if (<action> == id(skill_lumberjack)) || (<action> == skill_lumberjack)
if !(<targ.type> == t_weapon_axe)
sysmessage @021,,1 Baltanızı düşürdüğünüz için odun çıkartamadınız.
skill fail
action -1
return 1
endif
endif
if (<action> == id(skill_mining)) || (<action> == skill_mining)
if !(<targ.id> == i_pickaxe)
sysmessage @021,,1 Kazmanızı düşüğünüz için maden çıkartamadınız.
skill fail
action -1
return 1
endif
endif
* Summon polar bear'a binilebilmesi (istisnai bir durum..)
Tüm playerlarda olan bir events de @mount altına,
if (<argo.id> == c_bear_polar)
return 1
endif
Not: @Mount triggerinin çalışması için sphere.ini de Experimental flags ayarlarından // EF_New_Triggers = 00000008 aktif olmalıdır.
Örneğin, Experimental=5 ise Experimental=5|00000008 şeklinde değiştiriniz.
* Ölü hayvan ve oyunculara poison atarak yetenek geliştirmek.
Tüm playerlarda olan bir events de @spellcast altına,
if (<src.act.flags>&statf_dead) && !(<argn> == 59)
sysmessage @021,,1 Ölülere büyü atamazsınız.
f_fizzle
return 1
endif
* Silah ile explosion patlatımı. (istisnai)
Aşağıdaki typedefler scriptlerinizde kullanılmadıysa aşağıdakileri herhangi biryere ekleyebilirsiniz. Kullanıldıysa triggerleri ekleyin.
[typedef t_weapon_axe]
on=@targon_item
if (<src.targ.type> == t_potion) && (<src.targ.more> == s_explosion)
src.sysmessage @021,,1 Bu şekilde patlatamazsınız.
return 1
endif
[typedef T_WEAPON_MACE_SHARP]
on=@targon_item
if (<src.targ.type> == t_potion) && (<src.targ.more> == s_explosion)
src.sysmessage @021,,1 Bu şekilde patlatamazsınız.
return 1
endif
[typedef T_WEAPON_MACE_SMITH]
on=@targon_item
if (<src.targ.type> == t_potion) && (<src.targ.more> == s_explosion)
src.sysmessage @021,,1 Bu şekilde patlatamazsınız.
return 1
endif
[typedef T_WEAPON_sword]
on=@targon_item
if (<src.targ.type> == t_potion) && (<src.targ.more> == s_explosion)
src.sysmessage @021,,1 Bu şekilde patlatamazsınız.
return 1
endif
* cesede haddinden fazla eşya doldurup karakteri tekrardan canlandırmak ve haksız kazanç elde etmek.
i_corpse iteminin scriptini bulup scripte ekleyiniz,
ON=@DROPON_SELF
ref1=<argo>
if (<link.isplayer>)
if (<fval <eval <ref1.weight>+<weight>>> > <fval <link.maxweight>>)
src.sysmessage @021,,1 Cesede sadece ceset sahibinin taşıyabileceği kadar item atabilirsiniz.
return 1
endif
endif
* Son release'de kapandığını farkettiysem de eski release'ler için npc'nin adını bank olarak değiştirip banker'ı engellemek.
Son 2 release bu bug zaten kapatıldı. Ancak benim eskiden yazdığım bir fixi var koyayım.
Tüm bineklerinize ait bir event varsa aşağıdaki scripti evente ekleyin. Event yoksa bineklere tek tek ekleyin.
On=@Click
if (strmatch('<name>','bank'))
name Fixed
endif