Mobların, Petlerin, Pazarların, Metinlerin İçinden Geçme

  • Konuyu açan Konuyu açan hasanmacit
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 5
  • Gösterim Gösterim 1K

hasanmacit

Premium Üye
Premium Üye
Geliştirici
Yardımsever Üye
Emekli Üye
Editör
Mesaj
5.501
Çözümler
232
Beğeni
6.403
Puan
3.850
Ticaret Puanı
7
Selamlar. Optimizasyonum nasıl diye çok metin çağırdım ama baktım içlerinden geçilmiyor. Araştırdım. Bizim forumda da yokmuş. Artık var. Hayırlı kullanımlar. Npc definesini kapatırsanız eğer sadece pet, pazar ve bineklerin içinden geçecektir. Eğer npc definesi açıksa her şeyin içinden geçecektir. IsStone kontrolünü ben ekledim çünkü metinlerin içinden geçmiyordu. Metinlerin içinden geçmesini kapatmak istiyorsanız IsStone kontrolünü de manuel kapatın.

ActorInstanceCollisionDetection:
Genişlet Daralt Kopyala
#define ENABLE_NPC_WITHOUT_COLLISIONS
#ifndef ENABLE_NPC_WITHOUT_COLLISIONS
#define ENABLE_PETS_WITHOUT_COLLISIONS
#define ENABLE_SHOPS_WITHOUT_COLLISIONS
#define ENABLE_MOUNTS_WITHOUT_COLLISIONS
#endif
BOOL CActorInstance::TestActorCollision(CActorInstance& rVictim)
{
    if (rVictim.IsDead())
        return FALSE;

    if (rVictim.IsStone())
        return FALSE;

#ifdef ENABLE_NPC_WITHOUT_COLLISIONS
    if (rVictim.IsNPC())
        return FALSE;
#endif

#ifdef ENABLE_PETS_WITHOUT_COLLISIONS
    if (rVictim.GetRace() >= 34001 && rVictim.GetRace() <= 34099)
        return FALSE;
#endif

#ifdef ENABLE_SHOPS_WITHOUT_COLLISIONS
    if (rVictim.GetRace() >= 30000 && rVictim.GetRace() <= 30001)
        return FALSE;
#endif

#ifdef ENABLE_MOUNTS_WITHOUT_COLLISIONS
    if (rVictim.GetRace() >= 20101 && rVictim.GetRace() <= 20299)
        return FALSE;
#endif
 
rica ederim hayırlı kullanımlar

slm aleykum abi,
ben birseyi anlamiyorum, benim aktuel kod böyle gözüküyor:
Kod:
Genişlet Daralt Kopyala
DOSYANIN EN ÜSTÜNE BUNU ATTIM:

#define ENABLE_NPC_WITHOUT_COLLISIONS
#ifndef ENABLE_NPC_WITHOUT_COLLISIONS
#define ENABLE_PETS_WITHOUT_COLLISIONS
#define ENABLE_SHOPS_WITHOUT_COLLISIONS
#define ENABLE_MOUNTS_WITHOUT_COLLISIONS
#endif

ONDAN SONRA BUNU DEGISTIRDIM BÖYLE SENIN YOLLADIGIN GIBI YAZDIM; FAKAT ISSTONE SILDIMKI; METINLERDEN GECMESIN DIYE;
FAKAT METINLERDEN HALEN GECMESINE IMKANI VAR. AYRIYETTEN ILK DEFINI SILDIM MESELA; NPCLERDEN GECMESIN DIYE;
AYNISI; YINE NPCLERDEN GECIYOR.. NEDEN ACEBA?

BOOL CActorInstance::TestActorCollision(CActorInstance& rVictim)
{
    if (rVictim.IsDead())
        return FALSE;

#ifdef ENABLE_NPC_WITHOUT_COLLISIONS
    if (rVictim.IsNPC())
        return FALSE;
#endif

#ifdef ENABLE_PETS_WITHOUT_COLLISIONS
    if (rVictim.GetRace() >= 34001 && rVictim.GetRace() <= 34099)
        return FALSE;
#endif

#ifdef ENABLE_SHOPS_WITHOUT_COLLISIONS
    if (rVictim.GetRace() >= 30000 && rVictim.GetRace() <= 30001)
        return FALSE;
#endif

#ifdef ENABLE_MOUNTS_WITHOUT_COLLISIONS
    if (rVictim.GetRace() >= 20101 && rVictim.GetRace() <= 20299)
        return FALSE;
#endif
}

Kusura bakma, kodun icinde büyük yazdimki, gör diye abi
 
Selamlar. Optimizasyonum nasıl diye çok metin çağırdım ama baktım içlerinden geçilmiyor. Araştırdım. Bizim forumda da yokmuş. Artık var. Hayırlı kullanımlar. Npc definesini kapatırsanız eğer sadece pet, pazar ve bineklerin içinden geçecektir. Eğer npc definesi açıksa her şeyin içinden geçecektir. IsStone kontrolünü ben ekledim çünkü metinlerin içinden geçmiyordu. Metinlerin içinden geçmesini kapatmak istiyorsanız IsStone kontrolünü de manuel kapatın.

ActorInstanceCollisionDetection:
Genişlet Daralt Kopyala
#define ENABLE_NPC_WITHOUT_COLLISIONS
#ifndef ENABLE_NPC_WITHOUT_COLLISIONS
#define ENABLE_PETS_WITHOUT_COLLISIONS
#define ENABLE_SHOPS_WITHOUT_COLLISIONS
#define ENABLE_MOUNTS_WITHOUT_COLLISIONS
#endif
BOOL CActorInstance::TestActorCollision(CActorInstance& rVictim)
{
    if (rVictim.IsDead())
        return FALSE;

    if (rVictim.IsStone())
        return FALSE;

#ifdef ENABLE_NPC_WITHOUT_COLLISIONS
    if (rVictim.IsNPC())
        return FALSE;
#endif

#ifdef ENABLE_PETS_WITHOUT_COLLISIONS
    if (rVictim.GetRace() >= 34001 && rVictim.GetRace() <= 34099)
        return FALSE;
#endif

#ifdef ENABLE_SHOPS_WITHOUT_COLLISIONS
    if (rVictim.GetRace() >= 30000 && rVictim.GetRace() <= 30001)
        return FALSE;
#endif

#ifdef ENABLE_MOUNTS_WITHOUT_COLLISIONS
    if (rVictim.GetRace() >= 20101 && rVictim.GetRace() <= 20299)
        return FALSE;
#endif
Hocam buradaki fonksiyonlardan hangisi yanlızca metinler içinden geçmemi sağlıyor?

Şu mu if (rVictim.IsStone())
 
Hocam buradaki fonksiyonlardan hangisi yanlızca metinler içinden geçmemi sağlıyor?

Şu mu if (rVictim.IsStone())
Evet, şu şekilde kullanabilirsiniz;

GameLib/ActorInstanceCollisionDetection.cpp:
Genişlet Daralt Kopyala
#define ENABLE_STONES_WITHOUT_COLLISIONS

BOOL CActorInstance::TestActorCollision(CActorInstance& rVictim)
{
    if (rVictim.IsDead())
        return FALSE;

#ifdef ENABLE_STONES_WITHOUT_COLLISIONS
    if (rVictim.IsStone())
        return FALSE;
#endif
 
Geri
Üst