[C++]Owsap SoulSystem Fix

  • Konuyu açan Konuyu açan okan4141
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 12
  • Gösterim Gösterim 349

okan4141

D E L I
Geliştirici
MT Üye
Mesaj
752
Çözümler
26
Beğeni
1.737
Puan
1.029
Ticaret Puanı
0
Herkese Merhaba

Öncelikle Hepinizin Ramazan Bayramı Mübarek Olsun.


Files Geliştiriyorum ve Bu Sistemi de Eklediğimiz Uzunca Bir Süre Oldu.
İtemlere Tıkladığınızda Karakterin Etrafında Dönen 2 Adet Bir Efekt Var.
Malumunuz Bu İtemler REAL_TIME Olarak Çalışıyor.
Bu Ne Demek?

Siz Oyundayken veya Oyunda Değilken Bu İtemlerden Herhangi Biri Silindiği Zaman O Efekt Sizin Üzerinizden Silinmeyecek.
Diyelim Ki Bende Her 2 Efekt'de Var. Bu Mix Efektinin de Çalıştığı Anlamına Gelir.

İtemlerden Herhangi Biri Silindiği Zaman Örneğin: Blue Efekti

Red Efektinin Üzerimde Olması Gerekirken Mix Efekti Var. Çünkü İtem Silindiği Zaman Efekt Silinmiyor.
Bir Kaç Yol Denedim Fakat Bana Şuanlık En Mantıklı Gelen Yol Buydu.

char_item.cpp'de

C++:
Genişlet Daralt Kopyala
bool CHARACTER::UseItemEx(LPITEM item, const TItemPos DestCell)

Burada 2'ci Parametrede Window'un Pos'unu Bekliyor.

Tamam Zaten Item.cpp'de İtem'in Hangi Window'da ve Hangi POS'da Olduğunu Alabiliyoruz.


NOTE:

İtem Kilitlendiği İçin Efekt Varken POS Değişikliği Olmaz.

C++:
Genişlet Daralt Kopyala
        TItemPos    GetItemPos()            { return TItemPos(GetWindow(), GetCell()); }

Bayram Hediyesidir

Burayı görüntülemek için üye girişi yapmalı veya kayıt olmalısınız.



KANIT:

 
Son düzenleme:
Owsap olduğuna emin misin sendekinin, bende böyle şeyler yok.
 
bende direkt bu fonksiyonlar yok
Hangi fonksiyonlar yok kanka. Zaten bu konudaki fonksiyonları ben kendim ekledim. Owsap'ın kodlarına bak itemler silindiği zaman efektleri silen bir kod yok. Zaten Metin2'nin tabanında item silindiği zaman efekt silen bir mantık yok. RemoveItem veya EVENT içinde ben öyle biliyorum.
 
Bu tür sistemlerin pek çoğunda char_affect.cpp içindeki ::UpdateEffect fonksiyonuna da ekleme yapılıyor. Amaç ise çoğu zaman bu gibi durumların oluşmasını yüksek oranda engellemek ve garanti altına almak.
Alternatif olarak fikrimi belirteyim;

Konudaki sistemin çalışma şeklini bilmiyorum, daha önce hiç kullanmadım. Fakat eğer efektler affect olarak veriliyorsa UpdateEffect içine item ve affect için gerekli kontrolleri yapan ve sonuca göre hareket eden ufak bir check fonksiyonu ekleyebilirsin. Oluşturduğun bu kontrol fonksiyonunu hem UpdateEffect hem de input_login->EnterGame içinde çağırarak bu durumun tamamen önüne geçilebilir diye düşünüyorum.
 
Burada asıl sorun AddAffect de, GetSocket 0 olarak alıyor zamanı ama soketi yaratırken mevcut zaman + item_proto değeri olarak oluşturuyor.
 
Bu tür sistemlerin pek çoğunda char_affect.cpp içindeki ::UpdateEffect fonksiyonuna da ekleme yapılıyor. Amaç ise çoğu zaman bu gibi durumların oluşmasını yüksek oranda engellemek ve garanti altına almak.
Alternatif olarak fikrimi belirteyim;

Konudaki sistemin çalışma şeklini bilmiyorum, daha önce hiç kullanmadım. Fakat eğer efektler affect olarak veriliyorsa UpdateEffect içine item ve affect için gerekli kontrolleri yapan ve sonuca göre hareket eden ufak bir check fonksiyonu ekleyebilirsin. Oluşturduğun bu kontrol fonksiyonunu hem UpdateEffect hem de input_login->EnterGame içinde çağırarak bu durumun tamamen önüne geçilebilir diye düşünüyorum.
Siz Efektlerin Süreleri ile alakalı konuşuyorsunuz. Fakat Efektler verilirken bu efektlerin süresi tamamen sizin tercihiniz ile alakaldırı.

Örneğin:

Ben iteme tıkladım efekt verildi 10 dakika sonra benim efekti kapatmam ile alakalıdır. Kısacası süresiz gibi düşünebilirsin. Benim yapmış olduğum mantık itemin silinmesi ile alakalıdır. Bu itemler REAL_TIME olarak çalışıyor yani gerçek zamanlı olarak. Siz oyunda olsanız da olmasanız da sizden silinir. Benim yapmış olduğum item.cpp'de REAL_TIME EVENT'inin içinde item silindiği zaman bu etkileri silmek. Oyunda değilken de LoadAffect içinde for döngüsünde birşeyler yapılır. Bakacağım ona da.
 
Siz Efektlerin Süreleri ile alakalı konuşuyorsunuz. Fakat Efektler verilirken bu efektlerin süresi tamamen sizin tercihiniz ile alakaldırı.

Örneğin:

Ben iteme tıkladım efekt verildi 10 dakika sonra benim efekti kapatmam ile alakalıdır. Kısacası süresiz gibi düşünebilirsin. Benim yapmış olduğum mantık itemin silinmesi ile alakalıdır. Bu itemler REAL_TIME olarak çalışıyor yani gerçek zamanlı olarak. Siz oyunda olsanız da olmasanız da sizden silinir. Benim yapmış olduğum item.cpp'de REAL_TIME EVENT'inin içinde item silindiği zaman bu etkileri silmek. Oyunda değilken de LoadAffect içinde for döngüsünde birşeyler yapılır. Bakacağım ona da.
Efektlerin silinmemesi bakımından bahsetmiştim zaten, itemin kendisiyle veya affect süresiyle alakalı değildi söylediklerim.
"Bu İtemlerden Herhangi Biri Silindiği Zaman O Efekt Sizin Üzerinizden Silinmeyecek." bu kısıma ithafen;
C++:
Genişlet Daralt Kopyala
if(ilgili_item_yoksa)
    RemoveAffect(AFFECT_ADI);

gibi basit bir kontrole değindim sadece. Fakat dediğim gibi, sistemin çalışma şeklini falan bilmiyorum, belki de söylediğim şey tamamen uyumsuzdur emin değilim.
 
Geri
Üst