Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "utils.h"
- #include "config.h"
- #include "questmanager.h"
- #include "char.h"
- #include "char_manager.h"
- #include "party.h"
- #include "xmas_event.h"
- #include "shop_manager.h"
- #include "guild.h"
- namespace quest
- {
- //
- // "npc" lua functions
- //
- ALUA(npc_open_shop)
- {
- CQuestManager & q = CQuestManager::instance();
- int iShopVnum = 0;
- if (lua_gettop(L) == 1)
- {
- if (lua_isnumber(L, 1))
- iShopVnum = (int) lua_tonumber(L, 1);
- }
- if (q.GetCurrentCharacterPtr() && q.GetCurrentNPCCharacterPtr())
- CShopManager::instance().StartShopping(q.GetCurrentCharacterPtr(), q.GetCurrentNPCCharacterPtr(), iShopVnum);
- return 0;
- }
- ALUA(npc_is_pc)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- lua_pushboolean(L, npc && npc->IsPC());
- return 1;
- }
- ALUA(npc_get_empire)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- lua_pushnumber(L, npc ? npc->GetEmpire() : 0);
- return 1;
- }
- ALUA(npc_get_race)
- {
- CQuestManager & q = CQuestManager::instance();
- lua_pushnumber(L, q.GetCurrentNPCRace());
- return 1;
- }
- ALUA(npc_get_guild)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- CGuild * pGuild = npc ? npc->GetGuild() : NULL;
- if (npc)
- pGuild = npc->GetGuild();
- lua_pushnumber(L, pGuild ? pGuild->GetID() : 0);
- return 1;
- }
- ALUA(npc_is_quest)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- if (npc)
- {
- const std::string & r_st = q.GetCurrentQuestName();
- if (q.GetQuestIndexByName(r_st) == npc->GetQuestBy())
- {
- lua_pushboolean(L, 1);
- return 1;
- }
- }
- lua_pushboolean(L, 0);
- return 1;
- }
- ALUA(npc_kill)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER ch = q.GetCurrentCharacterPtr();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- ch->SetQuestNPCID(0);
- if (npc)
- npc->Dead();
- return 0;
- }
- ALUA(npc_purge)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER ch = q.GetCurrentCharacterPtr();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- ch->SetQuestNPCID(0);
- if (npc)
- M2_DESTROY_CHARACTER(npc);
- return 0;
- }
- ALUA(npc_is_near)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER ch = q.GetCurrentCharacterPtr();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- lua_Number dist = 10;
- if (lua_isnumber(L, 1))
- dist = lua_tonumber(L, 1);
- lua_pushboolean(L, ch && npc && DISTANCE_APPROX(ch->GetX() - npc->GetX(), ch->GetY() - npc->GetY()) < dist * 100);
- return 1;
- }
- ALUA(npc_is_near_vid)
- {
- if (!lua_isnumber(L, 1))
- {
- sys_err("invalid vid");
- lua_pushboolean(L, 0);
- return 1;
- }
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER ch = CHARACTER_MANAGER::instance().Find((DWORD)lua_tonumber(L, 1));
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- lua_Number dist = 10;
- if (lua_isnumber(L, 2))
- dist = lua_tonumber(L, 2);
- lua_pushboolean(L, ch && npc && DISTANCE_APPROX(ch->GetX() - npc->GetX(), ch->GetY() - npc->GetY()) < dist * 100);
- return 1;
- }
- ALUA(npc_unlock)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER ch = q.GetCurrentCharacterPtr();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- if (npc != NULL)
- {
- if (npc->IsPC())
- return 0;
- if (npc->GetQuestNPCID() == ch->GetPlayerID())
- npc->SetQuestNPCID(0);
- }
- return 0;
- }
- ALUA(npc_lock)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER ch = q.GetCurrentCharacterPtr();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- if (!npc || npc->IsPC())
- {
- lua_pushboolean(L, TRUE);
- return 1;
- }
- if (npc->GetQuestNPCID() == 0 || npc->GetQuestNPCID() == ch->GetPlayerID())
- {
- npc->SetQuestNPCID(ch->GetPlayerID());
- lua_pushboolean(L, TRUE);
- }
- else
- lua_pushboolean(L, FALSE);
- return 1;
- }
- ALUA(npc_get_leader_vid)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- LPPARTY party = npc ? npc->GetParty() : NULL;
- LPCHARACTER leader = party ? party->GetLeader() : NULL;
- lua_pushnumber(L, leader ? leader->GetVID() : 0);
- return 1;
- }
- ALUA(npc_get_vid)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- lua_pushnumber(L, npc ? npc->GetVID() : 0);
- return 1;
- }
- ALUA(npc_get_vid_attack_mul)
- {
- if (!lua_isnumber(L, 1))
- {
- sys_err("unkown argument");
- return 0;
- }
- lua_Number vid = lua_tonumber(L, 1);
- LPCHARACTER targetChar = CHARACTER_MANAGER::instance().Find(vid);
- lua_pushnumber(L, targetChar ? targetChar->GetAttMul() : 0.0f);
- return 1;
- }
- ALUA(npc_set_vid_attack_mul)
- {
- if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2))
- {
- sys_err("unkown argument");
- return 0;
- }
- lua_Number vid = lua_tonumber(L, 1);
- lua_Number attack_mul = lua_tonumber(L, 2);
- LPCHARACTER targetChar = CHARACTER_MANAGER::instance().Find(vid);
- if (targetChar)
- targetChar->SetAttMul(attack_mul);
- return 0;
- }
- ALUA(npc_get_vid_damage_mul)
- {
- if (!lua_isnumber(L, 1))
- {
- sys_err("unkown argument");
- return 0;
- }
- lua_Number vid = lua_tonumber(L, 1);
- LPCHARACTER targetChar = CHARACTER_MANAGER::instance().Find(vid);
- lua_pushnumber(L, targetChar ? targetChar->GetDamMul() : 0.0f);
- return 1;
- }
- ALUA(npc_set_vid_damage_mul)
- {
- if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2))
- {
- sys_err("unkown argument");
- return 0;
- }
- lua_Number vid = lua_tonumber(L, 1);
- lua_Number damage_mul = lua_tonumber(L, 2);
- LPCHARACTER targetChar = CHARACTER_MANAGER::instance().Find(vid);
- if (targetChar)
- targetChar->SetDamMul(damage_mul);
- return 0;
- }
- #ifdef ENABLE_NEWSTUFF
- ALUA(npc_get_level0)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- lua_pushnumber(L, npc->GetLevel());
- return 1;
- }
- ALUA(npc_get_name0)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- lua_pushstring(L, npc->GetName());
- return 1;
- }
- ALUA(npc_get_pid0)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- lua_pushnumber(L, npc->GetPlayerID());
- return 1;
- }
- ALUA(npc_get_vnum0)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- lua_pushnumber(L, npc->GetRaceNum());
- return 1;
- }
- ALUA(npc_is_available0)
- {
- CQuestManager & q = CQuestManager::instance();
- LPCHARACTER npc = q.GetCurrentNPCCharacterPtr();
- lua_pushboolean(L, npc != NULL);
- return 1;
- }
- #endif
- void RegisterNPCFunctionTable()
- {
- luaL_reg npc_functions[] =
- {
- { "getrace", npc_get_race },
- { "get_race", npc_get_race },
- { "open_shop", npc_open_shop },
- { "get_empire", npc_get_empire },
- { "is_pc", npc_is_pc },
- { "is_quest", npc_is_quest },
- { "kill", npc_kill },
- { "purge", npc_purge },
- { "is_near", npc_is_near },
- { "is_near_vid", npc_is_near_vid },
- { "lock", npc_lock },
- { "unlock", npc_unlock },
- { "get_guild", npc_get_guild },
- { "get_leader_vid", npc_get_leader_vid },
- { "get_vid", npc_get_vid },
- { "get_vid_attack_mul", npc_get_vid_attack_mul },
- { "set_vid_attack_mul", npc_set_vid_attack_mul },
- { "get_vid_damage_mul", npc_get_vid_damage_mul },
- { "set_vid_damage_mul", npc_set_vid_damage_mul },
- #ifdef ENABLE_NEWSTUFF
- { "get_level0", npc_get_level0 }, // [return lua number]
- { "get_name0", npc_get_name0 }, // [return lua string]
- { "get_pid0", npc_get_pid0 }, // [return lua number]
- { "get_vnum0", npc_get_vnum0 }, // [return lua number]
- { "is_available0", npc_is_available0 }, // [return lua boolean]
- #endif
- { NULL, NULL }
- };
- CQuestManager::instance().AddLuaFunctionTable("npc", npc_functions);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement