Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- service.h ekle
- #define ENABLE_MAPINDEX_MOB_SPAWN_SYSTEM // Haritada istenilen kordinata npc çagirma fonksiyonu
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- quest fonksiyonu'da ekledim lazım olabilur :) questlua_pc.cpp
- arat üzerine ekle
- void RegisterPCFunctionTable()
- {
- #ifdef ENABLE_MAPINDEX_MOB_SPAWN_SYSTEM
- int pc_spawn_mob_at(lua_State* L)
- {
- if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2) || !lua_isnumber(L, 3))
- return 0;
- uint32_t dwVnum = (uint32_t)lua_tonumber(L, 1);
- long x = (long)lua_tonumber(L, 2);
- long y = (long)lua_tonumber(L, 3);
- LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
- if (!ch) return 0;
- LPSECTREE_MAP pkMap = SECTREE_MANAGER::instance().GetMap(ch->GetMapIndex());
- if (pkMap)
- {
- CHARACTER_MANAGER::instance().SpawnMob(dwVnum, ch->GetMapIndex(), pkMap->m_setting.iBaseX + (x * 100), pkMap->m_setting.iBaseY + (y * 100), 0, false, -1);
- }
- return 0;
- }
- #endif
- arat müsait yere ekle
- void RegisterPCFunctionTable()
- {
- #ifdef ENABLE_MAPINDEX_MOB_SPAWN_SYSTEM
- { "spawn_mob_at", pc_spawn_mob_at },
- #endif
- quest_functions ekle
- pc.spawn_mob_at
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- cmd.cpp ekle
- #ifdef ENABLE_MAPINDEX_MOB_SPAWN_SYSTEM
- ACMD(do_npc_map);
- #endif
- #ifdef ENABLE_MAPINDEX_MOB_SPAWN_SYSTEM
- { "npc_map", do_npc_map, 0, POS_DEAD, GM_IMPLEMENTOR },
- #endif
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- #ifdef ENABLE_MAPINDEX_MOB_SPAWN_SYSTEM
- ACMD(do_npc_map)
- {
- char arg1[256], arg2[256], arg3[256];
- three_arguments(argument, arg1, sizeof(arg1), arg2, sizeof(arg2), arg3, sizeof(arg3));
- if (!*arg1 || !*arg2 || !*arg3)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "Kullanim: /npc_map <npc_vnum> <x> <y>");
- return;
- }
- uint32_t dwVnum = strtoul(arg1, NULL, 10);
- long x = atol(arg2);
- long y = atol(arg3);
- LPSECTREE_MAP pkMap = SECTREE_MANAGER::instance().GetMap(ch->GetMapIndex());
- if (pkMap)
- {
- long real_x = pkMap->m_setting.iBaseX + (x * 100);
- long real_y = pkMap->m_setting.iBaseY + (y * 100);
- // HATA VEREN YERI BURAYLA DEGISTIR:
- // GM ile NPC arasindaki açiyi manuel hesapliyoruz (atan2 kullanarak)
- float fDegree = 0.0f;
- float fDeltaX = (float)(ch->GetX() - real_x);
- float fDeltaY = (float)(ch->GetY() - real_y);
- if (fDeltaX != 0.0f || fDeltaY != 0.0f)
- {
- fDegree = atan2f(-fDeltaX, fDeltaY) * (180.0f / 3.1415926535f);
- }
- if (fDegree < 0)
- fDegree += 360.0f;
- // NPC'yi dogur (Hesapladigimiz fDegree açisiyla)
- LPCHARACTER npc_obj = CHARACTER_MANAGER::instance().SpawnMob(dwVnum, ch->GetMapIndex(), real_x, real_y, (int)fDegree, false, -1);
- if (npc_obj)
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "NPC %d çagrildi. Sana dönük açisi: %d", dwVnum, (int)fDegree);
- }
- else
- {
- ch->ChatPacket(CHAT_TYPE_INFO, "HATA: NPC çagrilamadi!");
- }
- }
- }
- #endif
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- örnek quest lua
- quest koordinat_test begin
- state start begin
- when 40004.use begin
- say_title("Spawn Sistemi Testi:")
- say("Şu an bulunduğun haritada bir koordinat gir.")
- say("Örnek: 150 200")
- say_reward("X Koordinatı:")
- local test_x = input_number()
- say_reward("Y Koordinatı:")
- local test_y = input_number()
- if test_x > 0 and test_y > 0 then
- -- Fonksiyonun: pc.spawn_mob_at(vnum, x, y)
- pc.spawn_mob_at(9003, test_x, test_y)
- syschat("Vnum: 9003 Market | Koordinat: "..test_x..", "..test_y.." noktasına gönderildi.")
- else
- syschat("Geçersiz koordinat.")
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment