Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

Anlayamadığım Bir Sorun


Öne çıkan mesajlar

Mesaj tarihi:
Abi fix eventine şu şekilde ekledim ama hiçbir etkisi olmadı yani 15 kareden 0 poisoning ile deathly atılabiliyor. :(


[spo]if ( == 20) // poison
if ( == 1) && ( > 980)
if (rand(5) == 1)
poison 950
else
poison (850 + {-50 50})
endif
elseif ( == 1) && ( > 899)
poison 800
elseif ( == 1) && ( > 799)
poison (750 + {-50 50})
elseif ( == 1) && ( > 699)
poison (700 + {-50 50})
elseif ( == 1) && ( > 599)
poison (550 + {-50 50})
elseif ( == 1) && ( > 499)
poison (500 + {-50 50})
elseif ( == 1) && ( > 399)
poison (450 + {-50 50})
elseif ( == 1) && ( > 299)
poison (300 + {-50 50})
elseif ( == 1) && ( > 199)
poison (250 + {-50 50})
elseif ( == 1) && ( > 99)
poison (200 + {-50 50})
elseif ( == 1) && ( > 0)
poison (150 + {-50 50})
elseif ( == 1) && ( == 0)
poison (100 + {-50 50})

elseif ( == 2) && ( > 980)
if (rand(5) == 1)
poison 850
else
poison 800
endif
elseif ( == 2) && ( > 899)
if (rand(5) == 1)
poison 800
else
poison 750
endif
elseif ( == 2) && ( > 799)
poison (700 + {-50 50})
elseif ( == 2) && ( > 699)
poison (650 + {-50 50})
elseif ( == 2) && ( > 599)
poison 550
elseif ( == 2) && ( > 499)
poison (500 + {-50 50})
elseif ( == 2) && ( > 399)
poison (400 + {-50 50})
elseif ( == 2) && ( > 299)
poison (300 + {-50 50})
elseif ( == 2) && ( > 199)
poison 250
elseif ( == 2) && ( > 99)
poison 200
elseif ( == 2) && ( > 0)
poison (100 + {-50 50})
elseif ( == 2) && ( == 0)
poison 100

elseif ( == 3) && ( > 980)
if (rand(15) == 1)
poison 850
elseif (rand(7) ==1)
poison 800
else
poison 750
endif
elseif ( == 3) && ( > 899)
if (rand(10) == 1)
poison 800
elseif (rand(2) ==1)
poison 750
else
poison 700
endif
elseif ( == 3) && ( > 799)
poison (650 + {-50 50})
elseif ( == 3) && ( > 699)
poison (600 + {-50 50})
elseif ( == 3) && ( > 599)
poison (450 + {-50 50})
elseif ( == 3) && ( > 499)
poison (350 + {-50 50})
elseif ( == 3) && ( > 399)
poison (300 + {-50 50})
elseif ( == 3) && ( > 299)
poison (250 + {-50 50})
elseif ( == 3) && ( > 299)
poison 200
elseif ( == 3) && ( > 199)
poison 150
elseif ( == 3) && ( > 99)
poison (100 + {-50 50})
elseif ( == 3) && ( > 0)
poison 100
elseif ( == 3) && ( == 0)
poison 100

elseif ( > 3) && ( > 980)
if (rand(20) == 1)
poison 800
elseif (rand(5) ==1)
poison 750
else
poison 700
endif
elseif ( > 3) && ( > 899)
elseif (rand(10) ==1)
poison 750
else
poison 700
endif
elseif ( > 3) && ( > 799)
poison (600 + {-50 50})
elseif ( > 3) && ( > 699)
poison 550
elseif ( > 3) && ( > 599)
poison 500
elseif ( > 3) && ( > 499)
poison (400 + {-50 50})
elseif ( > 3) && ( > 399)
poison 350
elseif ( > 3) && ( > 299)
poison 250
elseif ( > 3) && ( > 199)
poison (150 + {-50 50})
elseif ( > 3) && ( > 99)
poison (100 + {-50 50})
elseif ( > 3) && ( > 99)
poison (100 + {-50 50})
elseif ( > 3) && ( > 0)
poison 50
elseif ( == 2) && ( == 0)
poison 50

elseif ( > 7) && ( > 980)
if (rand(25) == 1)
poison 800
elseif (rand(6) ==1)
poison 750
else
poison 700
endif
elseif ( > 7) && ( > 899)
elseif (rand(20) ==1)
poison 750
elseif (rand(13) == 1)
poison 700
else
poison 650
endif
elseif ( > 7) && ( > 799)
poison (550 + {-50 50})
elseif ( > 7) && ( > 699)
poison 500
elseif ( > 7) && ( > 599)
poison 450
elseif ( > 7) && ( > 499)
poison (400 + {-50 50})
elseif ( > 7) && ( > 399)
poison 300
elseif ( > 7) && ( > 299)
poison (150 + {-50 50})
elseif ( > 7) && ( > 199)
poison (100 + {-50 50})
elseif ( > 7) && ( > 99)
poison 100
elseif ( > 7) && ( > 0)
poison 50
elseif ( == 2) && ( == 0)
poison (100 + {-50 50})
endif
return 0
endif[/spo]

help mi (=
Mesaj tarihi:
şimdi bir tek poison büyüsü için süveyş kanalı gibi script yazarsan pek iyi olmaz bu işin sonu..

Her poison seviyesi için ayrı if case açacağına

poison + {0 250})>

şeklinde birşey kullanabilirsin, src.poisoning mesela 98.2 ise o 982 olarak alınır dolayısıyla yapmak istediğini bunca if karmaşına gerek kalmadan yapabilirsin.

ayrıca her if'te distance'ı da sorgulaman pek sağlıklı değil, herhangi birşey yazmadan önce kendine bir skeç çiz,

[büyü başladı] -> [atan kişi ne kadar yakın] -> [3 kareden yakınsa vesaire vesaire'ye git] -> [değilse sonlandır] ... gibi

mantıksal döngüyü kafanda daha düzgün görebilmeni sağlar.

ayrıca nerede hata yaptığını bulmanı kolaylaştırması için mesela distance > 5 if case inin altına "say distance 5'ten büyük" gibi bir komut koy ki test yaparken scriptin nerede çalıştığını görebilesin.

if öbekleri oluştururken mesela distance'da büyükten küçüğe doğru gitmelisin, yani sen distance > 3 dersen altına da distance > 7 dersen o script asla distance > 7 bloğuna ulaşamaz. çünkü + sonsuz dahil tüm sayılar mantıksal olarak 3'ten büyüktür ve scriptin orada bitmesine sebep olur.
Mesaj tarihi:
harika bi fikir, biraz beraber geliştirebiliriz

f(x,y) = poison büyüsü diil mi yapmak istediğimiz şey

x = büyüyü atanın poisoningi
y = uzaklığı

şimdi bu fonksiyonda tam olarak yanındayken tam değer poison vuracaktır, adamın üstündeyken fonksiyon hata verecektir (0'a bölünememezlik), 5 kare uzaktayken değeri 5 e bölüp çok düşürecektir, 9 kare uzaktan iyice düşürecektir, mesela biz her 3 karede bir azalma istiyoruz, yani 0-2 kare uzağa kadar tam vursun 3-5 arası yarı hasar vursun, 6-8 arası 3'te 1 hasar vursun diyelim, 9 ve üstüde çeyrek hasar vursun, yani

0-1-2 3-4-5 6-7-8 9+>

şeklinde gruplar oluşturduk, matematiksel olarak bu grupları nası yönereceğiz?

% = modülüs operatörü, kalan hesaplar, r serisinde geldi sphere'e,
yani 3 % 3 = 0 dır, 3 ün 3 e bölümünden kalan 0'dır
12 % 10 = 2 dir, gibi.

((( - ( % 3)) / 3) + 1)

şeklinde bir ifade kullanmamız gerekir tam sayılar elde edebilmek için, bu durumda örneğin uzaklık 8 kare olsun,

(((8 - (8 % 3)) / 3) + 1) = (((8 - (2)) / 3) + 1) = (((6) / 3) + 1) = 3

tam bölünebilen bir örnek verelim 3 olsun;

(((3 - (3 % 3)) / 3) + 1) = (((3 - (0)) / 3) + 1) = (((3) / 3) + 1) = 2

her 3 karede bir sonucu bir artan bir fonksiyon yaratmış olduk. bunu da ilk fonksiyonumuza bölersek;

poison val (( / ((( - ( % 3)) / 3) + 1) + {0 250})>

şeklinde bir fonksiyon elde etmiş olduk, if caselerinden ÇOK daha hızlı çalışır tek satırlık fonksiyonlar bunu unutmayalım.

tabi hala rakibin tam üzerinizde olduğunuzda 0 distance'ı fonksiyona entegre etmedik, ayrıca fonksiyonumuz 3 ten küçük sayılar için belirsiz, bunu çözmek için if case kullanmak mantıklı gözüküyor, illa tek satır diyorsak, qval kullanabiliriz;



şeklinde tek satırlık bir if casedir biz distance'ın 0 olup olmadığını test etmek istiyoruz

poison >= 3) ? val (( / ((( - ( % 3)) / 3) + 1) + {0 250})> : val (( + {0 250})>>

voila

*beyni pişer*

güncelleme: test ettim qval'e gerek yok fonksiyon her aralıkta geçerli

poison / ((( - ( % 3)) / 3) + 1) + {0 250})>

[ Mesaj 17 Temmuz 2007, Salı - 15:30 tarihinde, Bronx tarafından güncellenmiştir ]
Mesaj tarihi:
aslında 4 karede bir düşse daha hoş olur dimi :)

maksat insanlar eğlenirken öğrensin, öğrenirken eğlensin "sdf" :p

[ Mesaj 17 Temmuz 2007, Salı - 19:25 tarihinde, Bronx tarafından güncellenmiştir ]
Mesaj tarihi:
pek bir şey anladığımı söyleyemem ama biraz incelersem anlarım sanırım :P

bronx sana pm de attım ama cevap vermedin :) acaba bana msn vb. aracılığıyla bir yardımcı olabilir misin housing sorunu çözülmek bilmiyor help :)
Mesaj tarihi:
Neyse çözüldü sorun birisi scripte

on=@environchange
if ()
src.events -e_house
endif

eklemiş. lol :D

şimdiki önemli problemim ise serverin main loopta kalması. vendor scriptinde parayı alma olayında main loopa griyor arada 3-4 dk kalıyor. haliyle gıcık ediyor. sözkonusu function:

[spo][FUNCTION parayial]
IF ( < )
RETURN 1
ENDIF
LOCAL.AMOUNT=
WHILE ()
IF (0)
LOCAL.GOLD=
IF (-> < 0)
FINDLAYER.21.FINDID.i_gold.AMOUNT -=
LOCAL.AMOUNT=0
ELSE
FINDLAYER.21.FINDID.i_gold.remove
LOCAL.AMOUNT -=
ENDIF
ELIF (0)
LOCAL.GOLD=
IF (-> < 0)
FINDLAYER.29.FINDID.i_gold.AMOUNT -=
LOCAL.AMOUNT=0
ELSE
FINDLAYER.29.FINDID.i_gold.remove
LOCAL.AMOUNT -=
ENDIF
ENDIF
ENDWHILE
UPDATE[/spo]

:/
Mesaj tarihi:
adamın bankasındaki bütün itemlere para mı bu diye bakıyorsun. dogal olarak bizim oyuncularda dolduruyor bankayı reg idi çöp idi derken. loopda kalması normal

oyle bakmak yerine
findid değilde findcont ile yazmak lazım ozaman okadar kasmıyor.

if (strmatch(">>.baseid>","i_gold"))
×
×
  • Yeni Oluştur...