[C++, LUA] Quest ile istediğin haritaya mob spawn etmek.

AhmetTeyfik

Süper Moderatör
Süper Moderatör
Premium Üye
Geliştirici
Yardımsever Üye
Editör
Mesaj
833
Çözümler
43
Beğeni
880
Puan
959
Bu sistemle istedin haritada orda olmasan bile mob spawn edebiliyorsun.

Kanıt:
Linkleri görebilmek için giriş yap veya kayıt ol.

Linkleri görebilmek için giriş yap veya kayıt ol.


Ben göstermek için aynı haritada bulundum. Denedim farklı haritada olsan bile mobu spawn ediyor.

C++:
questlua_global.cpp

void RegisterGlobalFunctionTable(lua_State* L)

// ARAT ÜSTÜNE EKLE

int mob_spawn_ext(lua_State* L)
    {
        if(false == lua_isnumber(L, 1) || false == lua_isnumber(L, 2) || false == lua_isnumber(L, 3)
            || false == lua_isnumber(L, 4) || false == lua_isnumber(L, 5) || false == lua_isboolean(L, 6) )
        {
            lua_pushnumber(L, 0);
            return 0;
        }

        const DWORD mobVnum = static_cast<DWORD>(lua_tonumber(L, 1));
        const long mapIndex = static_cast<long>(lua_tonumber(L, 2));
        const int x = static_cast<int>(lua_tonumber(L, 3));
        const int y = static_cast<int>(lua_tonumber(L, 4));
        const size_t count = MINMAX(1, static_cast<size_t>(lua_tonumber(L, 5)), 10);
        const bool isAggresive = static_cast<bool>(lua_toboolean(L, 6));


        size_t SpawnCount = 0;

        const CMob* pMonster = CMobManager::instance().Get( mobVnum );

        if( NULL != pMonster )
        {
            //const LPCHARACTER pChar = CQuestManager::instance().GetCurrentCharacterPtr();
            for( size_t i=0 ; i < count ; ++i )
            {
                const LPCHARACTER pSpawnMonster = CHARACTER_MANAGER::instance().SpawnMobRange( mobVnum,
                        mapIndex,
                        x - number(100, 200),
                        y - number(100, 200),
                        x + number(100, 200),
                        y + number(100, 200),
                        true,
                        pMonster->m_table.bType == CHAR_TYPE_STONE,
                        isAggresive );

                if( NULL != pSpawnMonster )
                {
                    ++SpawnCount;
                }
            }

            sys_log(0, "QUEST Spawn Monstster: VNUM(%u) COUNT(%u) isAggresive(%b)", mobVnum, SpawnCount, isAggresive);
        }

        lua_pushnumber(L, SpawnCount);

        return 1;
    }
//#########################################################
{    "spawn_mob",                    _spawn_mob                        },
// ARAT ALTINA EKLE
{    "spawn_mob_ext",                    mob_spawn_ext                        },
quest_functions:
// quest_functions ekle
spawn_mob_ext
NOT: Kordinatlar oyuncuya ışınlandığında çıkanlar.
Örnek Quest:
quest mapengeli begin
    state start begin
        when login begin
            send_letter("Deneme")
        end-- when
        when info or button begin

            spawn_mob_ext(MOB_KODU,MAP_INDEX,KORDINAT_X,KORDINAT_Y,MOB_SAYISI,AGRASIFMI)
            spawn_mob_ext(101,43,873200,241800,1,false)
            -- notice("Hey")
            -- spawn_mob(104,5,true)
            send_letter("Deneme")
        end -- when
    end -- State
end -- quest
 
Son düzenleme:
Günlerdir bende bunu sorucaktım paylaşman çok iyi oldu.
Örnek bir event questine entegre yapabilirsen de hoş olur.
 
Ops bir sorunumuz var sanırım mobdan kastım benim NPC ' idi aynı kod işlem görecek mi ? :D ve ayrıca etkinlik bitişinde purge çekmesi gerekliydi kodları detaylı okudum ama pek benlik olmamış gibi :D deniyorum şuan
 
Ops bir sorunumuz var sanırım mobdan kastım benim NPC ' idi aynı kod işlem görecek mi ? :D ve ayrıca etkinlik bitişinde purge çekmesi gerekliydi kodları detaylı okudum ama pek benlik olmamış gibi :D deniyorum şuan
npcde mob sayılır ama senin için deneyelim hemen :)
 
Ops bir sorunumuz var sanırım mobdan kastım benim NPC ' idi aynı kod işlem görecek mi ? :D ve ayrıca etkinlik bitişinde purge çekmesi gerekliydi kodları detaylı okudum ama pek benlik olmamış gibi :D deniyorum şuan
x7AgXR.gif
 
Knk ona bakıcaktımda benim laptopun fanı sürtmeye başladı tamire verdim. Onu bekliyorum
 
3 4 haritaya aynı anda birden çok göndermek istesek questi nasıl olması gerek hocam
Sol menüde olan Görev Parşomenlerinden göndermek için fonksiyon oluşturmamız gerekiyor. Fonksiyonda hali hazırda bizde mevcut değil. Bizdeki sistem src üzerinden yapıldı. Src üzeri birden fazla map e event flaglar ile yapılabiliyor. Ancak quest halinde bilgim yok malesef.
 
mobları regen.txt değil de farklı bir şekilde mesela source üzerinden belirlediğimiz mobları belirlediğimiz map ve xy de 30 dakikada bir mesela çıkartacak düzenlemeyi nasıl yapabiliriz çünkü şöyle bir problem var mesela boss 30 dk ayarlı kesiyorsun 30 dk sonra gelmiyor 10 dk sonra geliyor 20 dk sonra geliyor tam zamanında gelmiyor sebebi ymir hepsini oyun başlatırken spawm ettirmiş sonra mesela oyunu 20:00 da açtın boss 30 dk 20:30 da tekrar cıkıyor sen istersen 20:27 de kes 30 dk sonra değil yani kesildikten sonra değil de 20:30 da çıkıyor ama bu iyi değil boss kesildikten 30dk sonra cıkması mantıklı olan
 
mobları regen.txt değil de farklı bir şekilde mesela source üzerinden belirlediğimiz mobları belirlediğimiz map ve xy de 30 dakikada bir mesela çıkartacak düzenlemeyi nasıl yapabiliriz çünkü şöyle bir problem var mesela boss 30 dk ayarlı kesiyorsun 30 dk sonra gelmiyor 10 dk sonra geliyor 20 dk sonra geliyor tam zamanında gelmiyor sebebi ymir hepsini oyun başlatırken spawm ettirmiş sonra mesela oyunu 20:00 da açtın boss 30 dk 20:30 da tekrar cıkıyor sen istersen 20:27 de kes 30 dk sonra değil yani kesildikten sonra değil de 20:30 da çıkıyor ama bu iyi değil boss kesildikten 30dk sonra cıkması mantıklı olan
Muhtemelen source üzerinde bunla alakalı dosyada timer hatası vardır. Ve ya kod bloğunda seninde dediğin gibi server saatine göre çıkartır. O dediğin olayı malesef tam olarak bilmiyorum. Bizim bu konudaki mob spawn komuyu evet flaglar aktif edildiğinde köye npc gelmesiyle alakalıydı. Bosslar konusunda malesef bir bilgim yok. Ama txt dosyasından çekmiyor olabilir belki regenleri. İyi kurcalamak lazım. Src deki tüm dosyaları tarat boss koduyla gerekli komutu bulursun muhtemelen
 
Muhtemelen source üzerinde bunla alakalı dosyada timer hatası vardır. Ve ya kod bloğunda seninde dediğin gibi server saatine göre çıkartır. O dediğin olayı malesef tam olarak bilmiyorum. Bizim bu konudaki mob spawn komuyu evet flaglar aktif edildiğinde köye npc gelmesiyle alakalıydı. Bosslar konusunda malesef bir bilgim yok. Ama txt dosyasından çekmiyor olabilir belki regenleri. İyi kurcalamak lazım. Src deki tüm dosyaları tarat boss koduyla gerekli komutu bulursun muhtemelen
bahsettiğim olay konuyla alakası yok zaten sadece mob spawn diyince aklıma geldi ve benim sourcemlede alakası yok tüm sourcelerde bu durum var deneyebilirsin ymirdan kalma bir şey aslında sorun değil yanlış yapılmış bir şey bir boss ayarla 30dk oyunu ac 15 dk sonra kes dk tut boss 15 dk sonra tekrar geri gelir normal olması gereken mantıken kesildikten sonraki 30 dk ama işte regen eventi öyle işlemiyor.
 
bahsettiğim olay konuyla alakası yok zaten sadece mob spawn diyince aklıma geldi ve benim sourcemlede alakası yok tüm sourcelerde bu durum var deneyebilirsin ymirdan kalma bir şey aslında sorun değil yanlış yapılmış bir şey bir boss ayarla 30dk oyunu ac 15 dk sonra kes dk tut boss 15 dk sonra tekrar geri gelir normal olması gereken mantıken kesildikten sonraki 30 dk ama işte regen eventi öyle işlemiyor.
o zaman buna quest yazılacak. Regenden sabitlikten tamamiyle çıkartılacak. Tek çözümü bu ve ya o ymir in nerden çektiğini bulmak lazım. Filesda henüz o bölümlere gelmedik. Eğer gelir de bulursak çözümünü paylaşırım
 
Geri
Üst