PrudenT Mesaj tarihi: Temmuz 14, 2007 Konuyu açan Mesaj tarihi: Temmuz 14, 2007 Teşekkürler :) Ben o if'i 0.0-10.0 arası poisoning için koymuştum o yüzden :)
PrudenT Mesaj tarihi: Temmuz 14, 2007 Konuyu açan Mesaj tarihi: Temmuz 14, 2007 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 (=
Bronx Mesaj tarihi: Temmuz 16, 2007 Mesaj tarihi: Temmuz 16, 2007 ş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.
Tcpip Mesaj tarihi: Temmuz 17, 2007 Mesaj tarihi: Temmuz 17, 2007 On=@SpellEffect if ( == 20) // poison poison + {0 250})/<src.distance>)> return 1 endif belki?
Bronx Mesaj tarihi: Temmuz 17, 2007 Mesaj tarihi: Temmuz 17, 2007 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 ]
Tcpip Mesaj tarihi: Temmuz 17, 2007 Mesaj tarihi: Temmuz 17, 2007 Biri ciddi bir emek harcıyor sanırım :)
Bronx Mesaj tarihi: Temmuz 17, 2007 Mesaj tarihi: Temmuz 17, 2007 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 ]
PrudenT Mesaj tarihi: Temmuz 17, 2007 Konuyu açan Mesaj tarihi: Temmuz 17, 2007 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 :)
PrudenT Mesaj tarihi: Temmuz 20, 2007 Konuyu açan Mesaj tarihi: Temmuz 20, 2007 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] :/
Tcpip Mesaj tarihi: Temmuz 21, 2007 Mesaj tarihi: Temmuz 21, 2007 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"))
Öne çıkan mesajlar