|
[DEFNAME def_terrain_types]
dt_t_sand = 1
dt_t_jungle = 1
dt_t_forest = 1
dt_t_swamp = 1
[FUNCTION getRandomCoordinates]
LOCAL._x = <r0,7167>
LOCAL._y = <r0,4095>
LOCAL._t = <SERV.MAP(<dLOCAL._x>, <dLOCAL._y>).TYPE>
WHILE !(<ddef.dt_<LOCAL._t>>)
LOCAL._x = <r0,7167>
LOCAL._y = <r0,4095>
LOCAL._t = <SERV.MAP(<dLOCAL._x>, <dLOCAL._y>).TYPE>
ENDIF
LOCAL._z = <SERV.MAP(<dLOCAL._x>, <dLOCAL._y>).TERRAIN.Z>
RETURN <dLOCAL._x>, <dLOCAL._y>, <dLOCAL._z>Burada MAP1 için yapıldığı için bu sistem map1 deki 7167x4095 kare içinden üstte belirtilen t_jungle, t_forest gibi bölgeler gelene kadar rastgele kare seçip seçtiği kareyi döndüren bir kod, yani bu kodu kullandığınızda orman, çöl, bataklık gibi bölgelerden birini rastgele olarak seçecektir. Daha sonra yapman gereken tek şey, burdan gelen koordinatı bir LOCAL.VARIABLE üzerine kayıt edip SERV.NEWNPC ile hangi npcyi çıkaracaksan çıkarıp P ve HOME verilerini bu koordinat olarak atamak, sonrasında HOMEDIST verisini 5 kare gibi kafana göre kaç kareye kadar npcler uzaklaşacaksa belirtmek. Eski sürümlerde otomatik güncelleme olmadığından bu işlemlerden sonra NEW.UPDATE ile güncellemen gerekebilir.[FUNCTION spawnRandom]
LOCAL.NPC = c_horse_brown_dk
IF !(<ISEMPTY <ARGS>>)
LOCAL.NPC = <ARGS>
ENDIF
LOCAL.POS = <getRandomCoordinates>
SERV.NEWNPC <LOCAL.NPC>
NEW.P = <LOCAL.POS>
NEW.HOME = <LOCAL.POS>
NEW.HOMEDIST = 5
NEW.UPDATE.spawnRandom dediğinde rastgele bir pozisyonda npc spawn olacaktır, gerisi artık hayal gücüne kalmış, bir taş yapar her belli bir sürede bir spawnRandom komutunu uygulatabilirsin, spawn ettikten sonra NEW.UPDATE altında bir VAR.VARIABLE üzerine yada taş üzerinde bir TAG ile spawn edilen NPCyi kayıt edip dialogda gösterebilirsin vs vs. Çoktandır scriptle uğraşmadığım için yukardaki komutlardan bazılarını yanlış hatırlamışta olabilirim ama bunlar sphere wiki sayfasında vardır kolaylıkla bulabilirsin.
IF !(<REGION.FLAGS> & region_flag_guarded)
[FUNCTION randomshire]
LOCAL.NPC = c_horse_shire
IF !(<ISEMPTY <ARGS>>)
LOCAL.NPC = <ARGS>
ENDIF
LOCAL.map = <getRandomCoordinates>
IF !(<REGION.FLAGS> & region_flag_guarded) && !(<REGION.FLAGS> & region_flag_safe) && !(<REGION.FLAGS> & region_flag_ship) && !((STRMATCH('Green',<serv.map(<local.map>).region.group>)) && !((STRMATCH('yew',<serv.map(<local.map>).region.group>))
SERV.NEWNPC <LOCAL.NPC>
NEW.P = <LOCAL.map>
NEW.FiX
NEW.HOME = <LOCAL.map>
NEW.HOMEDIST = 5
NEW.UPDATEboyle yaptım guard zone da cıkıyor ve greeni engelleyemedim
IF !(<REGION.FLAGS> & region_flag_guarded) && !(<REGION.FLAGS> & region_flag_safe) && !(<REGION.FLAGS> & region_flag_ship) && !((STRMATCH('Green',<serv.map(<local.map>).region.group>)) && !((STRMATCH('yew',<serv.map(<local.map>).region.group>))hepsi için birer tane örnek vereceğim kalanı kendin düzenle;(<serv.map(<dlocal.map>).region.flags>&02000) // safe zone
02000
04000
00800detaylar için "defname region_flags" olarak aratıp bakif !strmatch('*Green*','<serv.map(<dlocal.map>).region.name>')Eğer Strmatch kullanıyorsan ve ' (apostrof) içerisinde region name verirsen o region name'in tamamı olmalıdır. Örneğin senin yazdığın scriptte bire bir region adının Green olması gerekiyor. İçinde Green geçen regionlarda spawnlanmasın diyorsan * (yıldız) içine alman gerekiyor.[DEFNAME def_terrain_types]
dt_t_sand = 1
dt_t_jungle = 1
dt_t_forest = 1
dt_t_swamp = 1
dt_t_grass = 0
dt_t_snow = 1
[FUNCTION GetRandom_Coords]
LOCAL._X = <R0,7167>
LOCAL._Y = <R0,4095>
LOCAL._T = <SERV.MAP(<DLOCAL._X>, <DLOCAL._Y>).TYPE>
WHILE !(<DDEF.DT_<LOCAL._T>>)
LOCAL._X = <R0,7167>
LOCAL._Y = <R0,4095>
LOCAL._T = <SERV.MAP(<DLOCAL._X>, <DLOCAL._Y>).TYPE>
ENDIF
LOCAL._Z = <SERV.MAP(<DLOCAL._X>, <DLOCAL._Y>).TERRAIN.Z>
RETURN <DLOCAL._X>, <DLOCAL._Y>, <DLOCAL._Z>
[FUNCTION GetRandomPos]
LOCAL.POS = <GetRandom_Coords>
SERV.NEWITEM I_GOLD
NEW.P <LOCAL.POS>
// bu kısmı kullanılan emülatöre göre continue ve break kullanılarak yapılabilir.
IF (<NEW.REGION.GUARDED> == 1)
GetRandomPos
SERV.LOG Gzde ciktigi icin tekrar koordinat getir
NEW.REMOVE
ELSEIF (<NEW.REGION.SAFE> == 1)
GetRandomPos
SERV.LOG Safede ciktigi icin tekrar koordinat getir
NEW.REMOVE
//ELSEIF (<NEW.P.TYPE> == T_WATER)
//GetRandomPos
//SERV.LOG Deniz yuzeyinde ciktigi icin tekrar koordinat getir
//NEW.REMOVE
ELSEIF (<NEW.P.Z> <= -5)
GetRandomPos
SERV.LOG Cok alcakta ciktigi icin tekrar koordinat getir
NEW.REMOVE
ELSEIF (<NEW.ISNEARTYPE T_WALL>)
SERV.LOG Duvar uzerinde ciktigi icin tekrar koordinat getir
GetRandomPos
NEW.REMOVE
ELSEIF (<NEW.ISNEARTYPE T_TREE>)
GetRandomPos
SERV.LOG Agac uzerinde ciktigi icin tekrar koordinat getir
NEW.REMOVE
ENDIF
NEW.ATTR=ATTR_INVIS|ATTR_DECAY
NEW.TIMER=3
LOCAL.RESULTP = <NEW.P>
// NEW.REMOVE
RETURN <LOCAL.RESULTP>
[FUNCTION RANDOMSPAWNER]
LOCAL.P = <GetRandomPos>
SERV.NEWNPC C_SHIRE
NEW.P = <LOCAL.P>
NEW.HOME <LOCAL.P>
NEW.HOMEDIST {3 5}
src.go <new.p> //
[FUNCTION GetRandomPos]
LOCAL.POS = <GetRandom_Coords>
SERV.NEWITEM I_GOLD
NEW.P <LOCAL.POS>
if !(<serv.map(<dlocal.map>).region.flags>&02000) && !(<serv.map(<dlocal.map>).region.flags>&04000) && !(strmatch('*Green*','<serv.map(<dlocal.map>).region.name>'))
GetRandomPos
SERV.NEWNPC <LOCAL.NPC>
NEW.P = <LOCAL.map>
NEW.FiX
NEW.HOME = <LOCAL.map>
NEW.HOMEDIST = 5
NEW.UPDATE
[FUNCTION RANDOMSPAWNER]
LOCAL.P = <GetRandomPos>
SERV.NEWNPC C_SHIRE
NEW.P = <LOCAL.P>
NEW.HOME <LOCAL.P>
NEW.HOMEDIST {3 5}
src.go <new.p> //Bu sekilde daha mantıklı degilmi sorguyu istedigi gibi uzatabilir Yukarıdaki gibi sanki biraz karısacak ve zamanı uzayacak gibi geldi sadece 1 fikir
if !strmatch('*Green*','<serv.map(<dlocal.map>).region.name>')Arkadaşlar bu sorgu çıkmasını istemediğimiz bölge için geçerli oluyor tam tersi çıkmasını istediğimiz bölge için nasıl bir sorgu kullanmamız gerekiyor ?
|
|
| Konu | Kategori | Son cevap | Son yazan | Mesaj | Görüntüleme | |
|---|---|---|---|---|---|---|
|
|
arkadaslarımla server kurup birlikte oynamak için yardım!!
Son cevap: 15-08 08:37 · Son yazan: Rowall · Mesaj: 2 · Görüntü: 237
|
UO Yardım Alanı | 15-08 08:37 | 2 | 237 | |
|
|
Ultima Destek Smf Forum Kayıt Sistemi Paylaşımı
Son cevap: 11-07 20:37 · Son yazan: illumunati · Mesaj: 3 · Görüntü: 357
|
UO Yardım Alanı | 11-07 20:37 | 3 | 357 | |
|
|
Otomatik Av Sistemi
Son cevap: 07-06 12:33 · Son yazan: mithbar · Mesaj: 8 · Görüntü: 3545
|
Derleme Scriptler | 07-06 12:33 | 8 | 3545 | |
|
|
Random Torbası Hatası
Son cevap: 10-07 17:36 · Son yazan: Eren19944 · Mesaj: 3 · Görüntü: 2309
|
ITEM Script Yardımı | 10-07 17:36 | 3 | 2309 | |
|
|
Ödül sistemi ip sorgulama
Son cevap: 05-11 22:03 · Son yazan: Knuth* · Mesaj: 8 · Görüntü: 4083
|
Script Yardımı | 05-11 22:03 | 8 | 4083 |