Jump to content

CHELOVEG

Inactive Member
  • Posts

    2
  • Joined

  • Last visited

  • Feedback

    0%

About CHELOVEG

Informations

  • Gender
    Male

Recent Profile Visitors

286 profile views

CHELOVEG's Achievements

Newbie

Newbie (1/16)

  • Reacting Well
  • First Post
  • Conversation Starter
  • Week One Done
  • One Month Later

Recent Badges

0

Reputation

  1. #include "stdafx.h" #include <sstream> #include "constants.h" #include "char.h" #include "char_manager.h" #include "log.h" #include "questmanager.h" #include "questlua.h" #include "questevent.h" #include "config.h" #include "mining.h" #include "fishing.h" #include "priv_manager.h" #include "utils.h" #include "p2p.h" #include "item_manager.h" #include "mob_manager.h" #include "start_position.h" #include "over9refine.h" #include "OXEvent.h" #include "regen.h" #include "cmd.h" #include "guild.h" #include "guild_manager.h" #include "sectree_manager.h" #include "db.h" #undef sys_err #ifndef __WIN32__ #define sys_err(fmt, args...) quest::CQuestManager::instance().QuestError(__FUNCTION__, __LINE__, fmt, ##args) #else #define sys_err(fmt, ...) quest::CQuestManager::instance().QuestError(__FUNCTION__, __LINE__, fmt, __VA_ARGS__) #endif extern ACMD(do_block_chat); namespace quest { int _get_locale(lua_State* L) { lua_pushstring(L, g_stLocale.c_str()); return 1; } int _number(lua_State* L) { if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2)) lua_pushnumber(L, 0); else lua_pushnumber(L, number((int)lua_tonumber(L, 1), (int)lua_tonumber(L, 2))); return 1; } int _time_to_str(lua_State* L) { time_t curTime = (time_t)lua_tonumber(L, -1); lua_pushstring(L, asctime(gmtime(&curTime))); return 1; } int _say(lua_State* L) { ostringstream s; combine_lua_string(L, s); CQuestManager::Instance().AddScript(s.str() + "[ENTER]"); return 0; } int _chat(lua_State* L) { ostringstream s; combine_lua_string(L, s); CQuestManager::Instance().GetCurrentCharacterPtr()->ChatPacket(CHAT_TYPE_TALKING, "%s", s.str().c_str()); return 0; } int _cmdchat(lua_State* L) { ostringstream s; combine_lua_string(L, s); CQuestManager::Instance().GetCurrentCharacterPtr()->ChatPacket(CHAT_TYPE_COMMAND, "%s", s.str().c_str()); return 0; } int _syschat(lua_State* L) { ostringstream s; combine_lua_string(L, s); CQuestManager::Instance().GetCurrentCharacterPtr()->ChatPacket(CHAT_TYPE_INFO, "%s", s.str().c_str()); return 0; } int _notice(lua_State* L) { ostringstream s; combine_lua_string(L, s); CQuestManager::Instance().GetCurrentCharacterPtr()->ChatPacket(CHAT_TYPE_NOTICE, "%s", s.str().c_str()); return 0; } int _left_image(lua_State* L) { if (lua_isstring(L, -1)) { string s = lua_tostring(L,-1); CQuestManager::Instance().AddScript("[LEFTIMAGE src;"+s+"]"); } return 0; } int _top_image(lua_State* L) { if (lua_isstring(L, -1)) { string s = lua_tostring(L,-1); CQuestManager::Instance().AddScript("[TOPIMAGE src;"+s+"]"); } return 0; } int _set_skin(lua_State* L) // Quest UI style { if (lua_isnumber(L, -1)) { CQuestManager::Instance().SetSkinStyle((int)rint(lua_tonumber(L,-1))); } else { sys_err("QUEST wrong skin index"); } return 0; } int _set_server_timer(lua_State* L) { int n = lua_gettop(L); if ((n != 2 || !lua_isnumber(L, 2) || !lua_isstring(L, 1)) && (n != 3 || !lua_isstring(L, 1) || !lua_isnumber(L, 2) || !lua_isnumber(L, 3))) { sys_err("QUEST set_server_timer argument count wrong."); return 0; } const char * name = lua_tostring(L, 1); double t = lua_tonumber(L, 2); DWORD arg = 0; CQuestManager & q = CQuestManager::instance(); if (lua_isnumber(L, 3)) arg = (DWORD) lua_tonumber(L, 3); int timernpc = q.LoadTimerScript(name); LPEVENT event = quest_create_server_timer_event(name, t, timernpc, false, arg); q.AddServerTimer(name, arg, event); return 0; } int _set_server_loop_timer(lua_State* L) { int n = lua_gettop(L); if ((n != 2 || !lua_isnumber(L, 2) || !lua_isstring(L, 1)) && (n != 3 || !lua_isstring(L, 1) || !lua_isnumber(L, 2) || !lua_isnumber(L, 3))) { sys_err("QUEST set_server_timer argument count wrong."); return 0; } const char * name = lua_tostring(L, 1); double t = lua_tonumber(L, 2); DWORD arg = 0; CQuestManager & q = CQuestManager::instance(); if (lua_isnumber(L, 3)) arg = (DWORD) lua_tonumber(L, 3); int timernpc = q.LoadTimerScript(name); LPEVENT event = quest_create_server_timer_event(name, t, timernpc, true, arg); q.AddServerTimer(name, arg, event); return 0; } int _clear_server_timer(lua_State* L) { CQuestManager & q = CQuestManager::instance(); const char * name = lua_tostring(L, 1); DWORD arg = (DWORD) lua_tonumber(L, 2); q.ClearServerTimer(name, arg); return 0; } int _set_named_loop_timer(lua_State* L) { int n = lua_gettop(L); if (n != 2 || !lua_isnumber(L, -1) || !lua_isstring(L, -2)) sys_err("QUEST set_timer argument count wrong."); else { const char * name = lua_tostring(L, -2); double t = lua_tonumber(L, -1); CQuestManager & q = CQuestManager::instance(); int timernpc = q.LoadTimerScript(name); q.GetCurrentPC()->AddTimer(name, quest_create_timer_event(name, q.GetCurrentCharacterPtr()->GetPlayerID(), t, timernpc, true)); } return 0; } int _get_server_timer_arg(lua_State* L) { lua_pushnumber(L, CQuestManager::instance().GetServerTimerArg()); return 1; } int _set_timer(lua_State* L) { if (lua_gettop(L) != 1 || !lua_isnumber(L, -1)) sys_err("QUEST invalid argument."); else { double t = lua_tonumber(L, -1); CQuestManager& q = CQuestManager::instance(); quest_create_timer_event("", q.GetCurrentCharacterPtr()->GetPlayerID(), t); } return 0; } int _set_named_timer(lua_State* L) { int n = lua_gettop(L); if (n != 2 || !lua_isnumber(L, -1) || !lua_isstring(L, -2)) { sys_err("QUEST set_timer argument count wrong."); } else { const char * name = lua_tostring(L,-2); double t = lua_tonumber(L, -1); CQuestManager & q = CQuestManager::instance(); int timernpc = q.LoadTimerScript(name); q.GetCurrentPC()->AddTimer(name, quest_create_timer_event(name, q.GetCurrentCharacterPtr()->GetPlayerID(), t, timernpc)); } return 0; } int _timer(lua_State * L) { if (lua_gettop(L) == 1) return _set_timer(L); else return _set_named_timer(L); } int _clear_named_timer(lua_State* L) { int n = lua_gettop(L); if (n != 1 || !lua_isstring(L, -1)) sys_err("QUEST set_timer argument count wrong."); else { CQuestManager & q = CQuestManager::instance(); q.GetCurrentPC()->RemoveTimer(lua_tostring(L, -1)); } return 0; } int _getnpcid(lua_State * L) { const char * name = lua_tostring(L, -1); CQuestManager & q = CQuestManager::instance(); lua_pushnumber(L, q.FindNPCIDByName(name)); return 1; } int _is_test_server(lua_State * L) { lua_pushboolean(L, test_server); return 1; } int _is_speed_server(lua_State * L) { lua_pushboolean(L, speed_server); return 1; } int _raw_script(lua_State* L) { if ( test_server ) sys_log ( 0, "_raw_script : %s ", lua_tostring(L,-1)); if (lua_isstring(L, -1)) CQuestManager::Instance().AddScript(lua_tostring(L,-1)); else sys_err("QUEST wrong argument: questname: %s", CQuestManager::instance().GetCurrentQuestName().c_str()); return 0; } int _char_log(lua_State * L) { CQuestManager& q = CQuestManager::instance(); LPCHARACTER ch = q.GetCurrentCharacterPtr(); DWORD what = 0; const char* how = ""; const char* hint = ""; if (lua_isnumber(L, 1)) what = (DWORD)lua_tonumber(L, 1); if (lua_isstring(L, 2)) how = lua_tostring(L, 2); if (lua_tostring(L, 3)) hint = lua_tostring(L, 3); LogManager::instance().CharLog(ch, what, how, hint); return 0; } int _item_log(lua_State* L) { CQuestManager& q = CQuestManager::instance(); LPCHARACTER ch = q.GetCurrentCharacterPtr(); DWORD dwItemID = 0; const char* how = ""; const char* hint = ""; if ( lua_isnumber(L, 1) ) dwItemID = (DWORD)lua_tonumber(L, 1); if ( lua_isstring(L, 2) ) how = lua_tostring(L, 2); if ( lua_tostring(L, 3) ) hint = lua_tostring(L, 3); LPITEM item = ITEM_MANAGER::instance().Find(dwItemID); if (item) LogManager::instance().ItemLog(ch, item, how, hint); return 0; } int _syslog(lua_State* L) { if (!lua_isnumber(L, 1) || !lua_isstring(L, 2)) return 0; if (lua_tonumber(L, 1) >= 1) { if (!test_server) return 0; } PC* pc = CQuestManager::instance().GetCurrentPC(); if (!pc) return 0; LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if (!ch) return 0; sys_log(0, "QUEST: quest: %s player: %s : %s", pc->GetCurrentQuestName().c_str(), ch->GetName(), lua_tostring(L, 2)); if (true == test_server) { ch->ChatPacket(CHAT_TYPE_INFO, "QUEST_SYSLOG %s", lua_tostring(L, 2)); } return 0; } int _syserr(lua_State* L) { if (!lua_isstring(L, 1)) return 0; PC* pc = CQuestManager::instance().GetCurrentPC(); if (!pc) return 0; LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if (!ch) return 0; sys_err("QUEST: quest: %s player: %s : %s", pc->GetCurrentQuestName().c_str(), ch->GetName(), lua_tostring(L, 1)); ch->ChatPacket(CHAT_TYPE_INFO, "QUEST_SYSERR %s", lua_tostring(L, 1)); return 0; } // LUA_ADD_BGM_INFO int _set_bgm_volume_enable(lua_State* L) { CHARACTER_SetBGMVolumeEnable(); return 0; } int _add_bgm_info(lua_State* L) { if (!lua_isnumber(L, 1) || !lua_isstring(L, 2)) return 0; int mapIndex = (int)lua_tonumber(L, 1); const char* bgmName = lua_tostring(L, 2); if (!bgmName) return 0; float bgmVol = lua_isnumber(L, 3) ? lua_tonumber(L, 3) : (1.0f/5.0f)*0.1f; CHARACTER_AddBGMInfo(mapIndex, bgmName, bgmVol); return 0; } // END_OF_LUA_ADD_BGM_INFO // LUA_ADD_GOTO_INFO int _add_goto_info(lua_State* L) { const char* name = lua_tostring(L, 1); int empire = (int)lua_tonumber(L, 2); int mapIndex = (int)lua_tonumber(L, 3); int x = (int)lua_tonumber(L, 4); int y = (int)lua_tonumber(L, 5); if (!name) return 0; CHARACTER_AddGotoInfo(name, empire, mapIndex, x, y); return 0; } // END_OF_LUA_ADD_GOTO_INFO // REFINE_PICK int _refine_pick(lua_State* L) { BYTE bCell = (BYTE) lua_tonumber(L,-1); CQuestManager& q = CQuestManager::instance(); LPCHARACTER ch = q.GetCurrentCharacterPtr(); LPITEM item = ch->GetInventoryItem(bCell); int ret = mining::RealRefinePick(ch, item); lua_pushnumber(L, ret); return 1; } // END_OF_REFINE_PICK int _fish_real_refine_rod(lua_State* L) { BYTE bCell = (BYTE) lua_tonumber(L,-1); CQuestManager& q = CQuestManager::instance(); LPCHARACTER ch = q.GetCurrentCharacterPtr(); LPITEM item = ch->GetInventoryItem(bCell); int ret = fishing::RealRefineRod(ch, item); lua_pushnumber(L, ret); return 1; } int _give_char_privilege(lua_State* L) { int pid = CQuestManager::instance().GetCurrentCharacterPtr()->GetPlayerID(); int type = (int)lua_tonumber(L, 1); int value = (int)lua_tonumber(L, 2); if (MAX_PRIV_NUM <= type) { sys_err("PRIV_MANAGER: _give_char_privilege: wrong empire priv type(%u)", type); return 0; } CPrivManager::instance().RequestGiveCharacterPriv(pid, type, value); return 0; } int _give_empire_privilege(lua_State* L) { int empire = (int)lua_tonumber(L,1); int type = (int)lua_tonumber(L, 2); int value = (int)lua_tonumber(L, 3); int time = (int) lua_tonumber(L,4); LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if (MAX_PRIV_NUM <= type) { sys_err("PRIV_MANAGER: _give_empire_privilege: wrong empire priv type(%u)", type); return 0; } if (ch) sys_log(0, "_give_empire_privileage(empire=%d, type=%d, value=%d, time=%d), by quest, %s", empire, type, value, time, ch->GetName()); else sys_log(0, "_give_empire_privileage(empire=%d, type=%d, value=%d, time=%d), by quest, NULL", empire, type, value, time); CPrivManager::instance().RequestGiveEmpirePriv(empire, type, value, time); return 0; } int _give_guild_privilege(lua_State* L) { int guild_id = (int)lua_tonumber(L,1); int type = (int)lua_tonumber(L, 2); int value = (int)lua_tonumber(L, 3); int time = (int)lua_tonumber( L, 4 ); if (MAX_PRIV_NUM <= type) { sys_err("PRIV_MANAGER: _give_guild_privilege: wrong empire priv type(%u)", type); return 0; } sys_log(0, "_give_guild_privileage(empire=%d, type=%d, value=%d, time=%d)", guild_id, type, value, time); CPrivManager::instance().RequestGiveGuildPriv(guild_id,type,value,time); return 0; } int _get_empire_privilege_string(lua_State* L) { int empire = (int) lua_tonumber(L, 1); ostringstream os; bool found = false; for (int type = PRIV_NONE + 1; type < MAX_PRIV_NUM; ++type) { CPrivManager::SPrivEmpireData* pkPrivEmpireData = CPrivManager::instance().GetPrivByEmpireEx(empire, type); if (pkPrivEmpireData && pkPrivEmpireData->m_value) { if (found) os << ", "; os << LC_TEXT(c_apszPrivNames[type]) << " : " << pkPrivEmpireData->m_value << "%" << " (" << ((pkPrivEmpireData->m_end_time_sec-get_global_time())/3600.0f) << " hours)" << endl; found = true; } } if (!found) os << "None!" << endl; lua_pushstring(L, os.str().c_str()); return 1; } int _get_empire_privilege(lua_State* L) { if (!lua_isnumber(L,1) || !lua_isnumber(L,2)) { lua_pushnumber(L,0); return 1; } int empire = (int)lua_tonumber(L,1); int type = (int)lua_tonumber(L,2); int value = CPrivManager::instance().GetPrivByEmpire(empire,type); lua_pushnumber(L, value); return 1; } int _get_guild_privilege_string(lua_State* L) { int guild = (int) lua_tonumber(L,1); ostringstream os; bool found = false; for (int type = PRIV_NONE+1; type < MAX_PRIV_NUM; ++type) { const CPrivManager::SPrivGuildData* pPrivGuildData = CPrivManager::instance().GetPrivByGuildEx( guild, type ); if (pPrivGuildData && pPrivGuildData->value) { if (found) os << ", "; os << LC_TEXT(c_apszPrivNames[type]) << " : " << pPrivGuildData->value << "%" << " (" << ((pPrivGuildData->end_time_sec - get_global_time()) / 3600.0f) << " hours)" << endl; found = true; } } if (!found) os << "None!" << endl; lua_pushstring(L, os.str().c_str()); return 1; } int _get_guildid_byname( lua_State* L ) { if ( !lua_isstring( L, 1 ) ) { sys_err( "_get_guildid_byname() - invalud argument" ); lua_pushnumber( L, 0 ); return 1; } const char* pszGuildName = lua_tostring( L, 1 ); CGuild* pFindGuild = CGuildManager::instance().FindGuildByName( pszGuildName ); if ( pFindGuild ) lua_pushnumber( L, pFindGuild->GetID() ); else lua_pushnumber( L, 0 ); return 1; } int _get_guild_privilege(lua_State* L) { if (!lua_isnumber(L,1) || !lua_isnumber(L,2)) { lua_pushnumber(L,0); return 1; } int guild = (int)lua_tonumber(L,1); int type = (int)lua_tonumber(L,2); int value = CPrivManager::instance().GetPrivByGuild(guild,type); lua_pushnumber(L, value); return 1; } int _item_name(lua_State* L) { if (lua_isnumber(L,1)) { DWORD dwVnum = (DWORD)lua_tonumber(L,1); TItemTable* pTable = ITEM_MANAGER::instance().GetTable(dwVnum); if (pTable) lua_pushstring(L,pTable->szLocaleName); else lua_pushstring(L,""); } else lua_pushstring(L,""); return 1; } int _mob_name(lua_State* L) { if (lua_isnumber(L, 1)) { DWORD dwVnum = (DWORD) lua_tonumber(L,1); const CMob * pkMob = CMobManager::instance().Get(dwVnum); if (pkMob) lua_pushstring(L, pkMob->m_table.szLocaleName); else lua_pushstring(L, ""); } else lua_pushstring(L,""); return 1; } int _mob_vnum(lua_State* L) { if (lua_isstring(L,1)) { const char* str = lua_tostring(L, 1); const CMob* pkMob = CMobManager::instance().Get(str, false); if (pkMob) lua_pushnumber(L,pkMob->m_table.dwVnum); else lua_pushnumber(L,0); } else lua_pushnumber(L,0); return 1; } int _get_global_time(lua_State* L) { lua_pushnumber(L, get_global_time()); return 1; } int _get_channel_id(lua_State* L) { lua_pushnumber(L, g_bChannel); return 1; } int _do_command(lua_State* L) { if (!lua_isstring(L, 1)) return 0; const char * str = lua_tostring(L, 1); size_t len = strlen(str); LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); ::interpret_command(ch, str, len); return 0; } int _find_pc(lua_State* L) { if (!lua_isstring(L, 1)) { sys_err("invalid argument"); lua_pushnumber(L, 0); return 1; } const char * name = lua_tostring(L, 1); LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(name); lua_pushnumber(L, tch ? tch->GetVID() : 0); return 1; } int _find_pc_cond(lua_State* L) { if (!lua_isnumber(L, 1) || !lua_isnumber(L, 2) || !lua_isnumber(L, 3)) { sys_err("invalid argument"); lua_pushnumber(L, 0); return 1; } int iMinLev = (int) lua_tonumber(L, 1); int iMaxLev = (int) lua_tonumber(L, 2); unsigned int uiJobFlag = (unsigned int) lua_tonumber(L, 3); LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); LPCHARACTER tch; if (test_server) { sys_log(0, "find_pc_cond map=%d, job=%d, level=%d~%d", ch->GetMapIndex(), uiJobFlag, iMinLev, iMaxLev); } tch = CHARACTER_MANAGER::instance().FindSpecifyPC(uiJobFlag, ch->GetMapIndex(), ch, iMinLev, iMaxLev); lua_pushnumber(L, tch ? tch->GetVID() : 0); return 1; } int _find_npc_by_vnum(lua_State* L) { if (!lua_isnumber(L, 1)) { sys_err("invalid argument"); lua_pushnumber(L, 0); return 1; } DWORD race = (DWORD) lua_tonumber(L, 1); CharacterVectorInteractor i; if (CHARACTER_MANAGER::instance().GetCharactersByRaceNum(race, i)) { CharacterVectorInteractor::iterator it = i.begin(); while (it != i.end()) { LPCHARACTER tch = *(it++); if (tch->GetMapIndex() == CQuestManager::instance().GetCurrentCharacterPtr()->GetMapIndex()) { lua_pushnumber(L, tch->GetVID()); return 1; } } } //sys_err("not find(race=%d)", race); lua_pushnumber(L, 0); return 1; } // »х·Оїо stateё¦ ёёµзґЩ. int _set_quest_state(lua_State* L) { if (!lua_isstring(L, 1) || !lua_isstring(L, 2)) return 0; CQuestManager& q = CQuestManager::instance(); QuestState * pqs = q.GetCurrentState(); PC* pPC = q.GetCurrentPC(); //assert(L == pqs->co); if (L!=pqs->co) { luaL_error(L, "running thread != current thread???"); sys_log(0,"running thread != current thread???"); return -1; } if (pPC) { //const char* szQuestName = lua_tostring(L, 1); //const char* szStateName = lua_tostring(L, 2); const string stQuestName(lua_tostring(L, 1)); const string stStateName(lua_tostring(L, 2)); if ( test_server ) sys_log(0,"set_state %s %s ", stQuestName.c_str(), stStateName.c_str() ); if (pPC->GetCurrentQuestName() == stQuestName) { pqs->st = q.GetQuestStateIndex(pPC->GetCurrentQuestName(), lua_tostring(L, -1)); pPC->SetCurrentQuestStateName(lua_tostring(L,-1)); } else { pPC->SetQuestState(stQuestName, stStateName); } } return 0; } int _get_quest_state(lua_State* L) { if (!lua_isstring(L, 1) ) return 0; CQuestManager& q = CQuestManager::instance(); PC* pPC = q.GetCurrentPC(); if (pPC) { std::string stQuestName = lua_tostring(L, 1); stQuestName += ".__status"; int nRet = pPC->GetFlag( stQuestName.c_str() ); lua_pushnumber(L, nRet ); if ( test_server ) sys_log(0,"Get_quest_state name %s value %d", stQuestName.c_str(), nRet ); } else { if ( test_server ) sys_log(0,"PC == 0 "); lua_pushnumber(L, 0); } return 1; } int _under_han(lua_State* L) { if (!lua_isstring(L, 1)) lua_pushboolean(L, 0); else lua_pushboolean(L, under_han(lua_tostring(L, 1))); return 1; } #ifdef __FULL_NOTICE_SYSTEM__ int _big_notice(lua_State* L) { ostringstream s; combine_lua_string(L, s); CQuestManager::Instance().GetCurrentCharacterPtr()->ChatPacket(CHAT_TYPE_BIG_NOTICE, "%s", s.str().c_str()); return 0; } int _big_notice_in_map( lua_State* L ) { const LPCHARACTER pChar = CQuestManager::instance().GetCurrentCharacterPtr(); if (NULL != pChar) { SendNoticeMap(lua_tostring(L,1), pChar->GetMapIndex(), true); } return 0; } int _big_notice_all( lua_State* L ) { ostringstream s; combine_lua_string(L, s); TPacketGGNotice p; p.bHeader = HEADER_GG_BIG_NOTICE; p.lSize = strlen(s.str().c_str()) + 1; TEMP_BUFFER buf; buf.write(&p, sizeof(p)); buf.write(s.str().c_str(), p.lSize); P2P_MANAGER::instance().Send(buf.read_peek(), buf.size()); // HEADER_GG_NOTICE SendNotice(s.str().c_str(), true); return 1; } #endif int _notice_all( lua_State* L ) { ostringstream s; combine_lua_string(L, s); TPacketGGNotice p; p.bHeader = HEADER_GG_NOTICE; p.lSize = strlen(s.str().c_str()) + 1; TEMP_BUFFER buf; buf.write(&p, sizeof(p)); buf.write(s.str().c_str(), p.lSize); P2P_MANAGER::instance().Send(buf.read_peek(), buf.size()); // HEADER_GG_NOTICE SendNotice(s.str().c_str()); return 1; } EVENTINFO(warp_all_to_village_event_info) { DWORD dwWarpMapIndex; warp_all_to_village_event_info() : dwWarpMapIndex( 0 ) { } }; struct FWarpAllToVillage { FWarpAllToVillage() {}; void operator()(LPENTITY ent) { if (ent->IsType(ENTITY_CHARACTER)) { LPCHARACTER ch = (LPCHARACTER) ent; if (ch->IsPC()) { BYTE bEmpire = ch->GetEmpire(); if ( bEmpire == 0 ) { sys_err( "Unkonwn Empire %s %d ", ch->GetName(), ch->GetPlayerID() ); return; } ch->WarpSet( g_start_position[bEmpire][0], g_start_position[bEmpire][1] ); } } } }; EVENTFUNC(warp_all_to_village_event) { warp_all_to_village_event_info * info = dynamic_cast<warp_all_to_village_event_info *>(event->info); if ( info == NULL ) { sys_err( "warp_all_to_village_event> <Factor> Null pointer" ); return 0; } LPSECTREE_MAP pSecMap = SECTREE_MANAGER::instance().GetMap( info->dwWarpMapIndex ); if (NULL != pSecMap) { FWarpAllToVillage f; pSecMap->for_each( f ); } return 0; } int _warp_all_to_village( lua_State * L ) { int iMapIndex = static_cast<int>(lua_tonumber(L, 1)); int iSec = static_cast<int>(lua_tonumber(L, 2)); warp_all_to_village_event_info* info = AllocEventInfo<warp_all_to_village_event_info>(); info->dwWarpMapIndex = iMapIndex; event_create(warp_all_to_village_event, info, PASSES_PER_SEC(iSec)); SendNoticeMap(LC_TEXT("АбЅГИД ёрµО ё¶А»·О АМµїµЛґПґЩ."), iMapIndex, false); return 0; } int _warp_to_village( lua_State * L ) { LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); if (NULL != ch) { BYTE bEmpire = ch->GetEmpire(); ch->WarpSet( g_start_position[bEmpire][0], g_start_position[bEmpire][1] ); } return 0; } int _say_in_map( lua_State * L ) { int iMapIndex = static_cast<int>(lua_tonumber( L, 1 )); std::string Script(lua_tostring( L, 2 )); Script += "[ENTER]"; Script += "[DONE]"; struct ::packet_script packet_script; packet_script.header = HEADER_GC_SCRIPT; packet_script.skin = CQuestManager::QUEST_SKIN_NORMAL; packet_script.src_size = Script.size(); packet_script.size = packet_script.src_size + sizeof(struct packet_script); FSendPacket f; f.buf.write(&packet_script, sizeof(struct packet_script)); f.buf.write(&Script[0], Script.size()); LPSECTREE_MAP pSecMap = SECTREE_MANAGER::instance().GetMap( iMapIndex ); if ( pSecMap ) { pSecMap->for_each( f ); } return 0; } struct FKillSectree2 { void operator () (LPENTITY ent) { if (ent->IsType(ENTITY_CHARACTER)) { LPCHARACTER ch = (LPCHARACTER) ent; #ifdef NEW_PET_SYSTEM if (!ch->IsPC() && !ch->IsPet() && !ch->IsNewPet()) #else if (!ch->IsPC() && !ch->IsPet()) #endif ch->Dead(); } } }; int _kill_all_in_map ( lua_State * L ) { LPSECTREE_MAP pSecMap = SECTREE_MANAGER::instance().GetMap( lua_tonumber(L,1) ); if (NULL != pSecMap) { FKillSectree2 f; pSecMap->for_each( f ); } return 0; } struct FkaybolSectree2 { void operator () (LPENTITY ent) { if (ent->IsType(ENTITY_CHARACTER)) { LPCHARACTER ch = (LPCHARACTER) ent; /*{ if (ch->GetGMLevel()) return; }*/ PIXEL_POSITION pos = ch->GetXYZ(); int rect[4]; if (ch->IsPC()) rect[0] = 892500; rect[1] = 22700; rect[2] = 900400; rect[3] = 26600; pos = ch->GetXYZ(); { if (ch->IsPC() && (pos.x < rect[0] || pos.x > rect[2] || pos.y < rect[1] || pos.y > rect[3])) return; } if (quest::CQuestManager::instance().GetEventFlag("ox_gorunmezlik_engel") == 1) { return; } if (ch->IsPC()) ch->AddAffect(AFFECT_INVISIBILITY, POINT_NONE, 0, AFF_INVISIBILITY, 26, 0, true); } } }; int _kaybol_all_in_map ( lua_State * L ) { LPSECTREE_MAP pSecMap = SECTREE_MANAGER::instance().GetMap( lua_tonumber(L,1) ); if (NULL != pSecMap) { FkaybolSectree2 f; pSecMap->for_each( f ); } return 0; } //БЦАЗ: ёч ё®БЁАМ ѕИµЗґВ ёКїЎј­ёё »зїл int _regen_in_map( lua_State * L ) { int iMapIndex = static_cast<int>(lua_tonumber(L, 1)); std::string szFilename(lua_tostring(L, 2)); LPSECTREE_MAP pkMap = SECTREE_MANAGER::instance().GetMap(iMapIndex); if (pkMap != NULL) { regen_load_in_file( szFilename.c_str(), iMapIndex, pkMap->m_setting.iBaseX ,pkMap->m_setting.iBaseY ); } return 0; } int _enable_over9refine( lua_State* L ) { if ( lua_isnumber(L, 1) == true && lua_isnumber(L, 2) == true ) { DWORD dwVnumFrom = (DWORD)lua_tonumber(L, 1); DWORD dwVnumTo = (DWORD)lua_tonumber(L, 2); COver9RefineManager::instance().enableOver9Refine(dwVnumFrom, dwVnumTo); } return 0; } int _add_ox_quiz(lua_State* L) { int level = (int)lua_tonumber(L, 1); const char* quiz = lua_tostring(L, 2); bool answer = lua_toboolean(L, 3); if ( COXEventManager::instance().AddQuiz(level, quiz, answer) == false ) { sys_log(0, "OXEVENT : Cannot add quiz. %d %s %d", level, quiz, answer); } return 1; } EVENTFUNC(warp_all_to_map_my_empire_event) { warp_all_to_map_my_empire_event_info * info = dynamic_cast<warp_all_to_map_my_empire_event_info *>(event->info); if ( info == NULL ) { sys_err( "warp_all_to_map_my_empire_event> <Factor> Null pointer" ); return 0; } LPSECTREE_MAP pSecMap = SECTREE_MANAGER::instance().GetMap( info->m_lMapIndexFrom ); if (pSecMap) { FWarpEmpire f; f.m_lMapIndexTo = info->m_lMapIndexTo; f.m_x = info->m_x; f.m_y = info->m_y; f.m_bEmpire = info->m_bEmpire; pSecMap->for_each(f); } return 0; } int _block_chat(lua_State* L) { LPCHARACTER pChar = CQuestManager::instance().GetCurrentCharacterPtr(); if (pChar != NULL) { if (lua_isstring(L, 1) != true && lua_isstring(L, 2) != true) { lua_pushboolean(L, false); return 1; } std::string strName(lua_tostring(L, 1)); std::string strTime(lua_tostring(L, 2)); std::string strArg = strName + " " + strTime; do_block_chat(pChar, const_cast<char*>(strArg.c_str()), 0, 0); lua_pushboolean(L, true); return 1; } lua_pushboolean(L, false); return 1; } int _spawn_mob(lua_State* L) { if( false == lua_isnumber(L, 1) || false == lua_isnumber(L, 2) || false == lua_isboolean(L, 3) ) { lua_pushnumber(L, 0); return 1; } const DWORD dwVnum = static_cast<DWORD>(lua_tonumber(L, 1)); const size_t count = MINMAX(1, static_cast<size_t>(lua_tonumber(L, 2)), 10); const bool isAggresive = static_cast<bool>(lua_toboolean(L, 3)); size_t SpawnCount = 0; const CMob* pMonster = CMobManager::instance().Get( dwVnum ); if( NULL != pMonster ) { const LPCHARACTER pChar = CQuestManager::instance().GetCurrentCharacterPtr(); for( size_t i=0 ; i < count ; ++i ) { const LPCHARACTER pSpawnMonster = CHARACTER_MANAGER::instance().SpawnMobRange( dwVnum, pChar->GetMapIndex(), pChar->GetX() - number(200, 750), pChar->GetY() - number(200, 750), pChar->GetX() + number(200, 750), pChar->GetY() + number(200, 750), 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)", dwVnum, SpawnCount, isAggresive); } lua_pushnumber(L, SpawnCount); return 1; } int _notice_in_map( lua_State* L ) { const LPCHARACTER pChar = CQuestManager::instance().GetCurrentCharacterPtr(); if (NULL != pChar) { SendNoticeMap( lua_tostring(L,1), pChar->GetMapIndex(), lua_toboolean(L,2) ); } return 0; } int _get_locale_base_path( lua_State* L ) { lua_pushstring( L, LocaleService_GetBasePath().c_str() ); return 1; } struct FPurgeArea { int x1, y1, x2, y2; LPCHARACTER ExceptChar; FPurgeArea(int a, int b, int c, int d, LPCHARACTER p) : x1(a), y1(b), x2(c), y2(d), ExceptChar(p) {} void operator () (LPENTITY ent) { if (true == ent->IsType(ENTITY_CHARACTER)) { LPCHARACTER pChar = static_cast<LPCHARACTER>(ent); if (pChar == ExceptChar) return; #ifdef NEW_PET_SYSTEM if (!pChar->IsPet() && !pChar->IsNewPet() && (true == pChar->IsMonster() || true == pChar->IsStone())) #else if (!pChar->IsPet() && (true == pChar->IsMonster() || true == pChar->IsStone())) #endif { if (x1 <= pChar->GetX() && pChar->GetX() <= x2 && y1 <= pChar->GetY() && pChar->GetY() <= y2) { M2_DESTROY_CHARACTER(pChar); } } } } }; int _purge_area( lua_State* L ) { int x1 = lua_tonumber(L, 1); int y1 = lua_tonumber(L, 2); int x2 = lua_tonumber(L, 3); int y2 = lua_tonumber(L, 4); const int mapIndex = SECTREE_MANAGER::instance().GetMapIndex( x1, y1 ); if (0 == mapIndex) { sys_err("_purge_area: cannot get a map index with (%u, %u)", x1, y1); return 0; } LPSECTREE_MAP pSectree = SECTREE_MANAGER::instance().GetMap(mapIndex); if (NULL != pSectree) { FPurgeArea func(x1, y1, x2, y2, CQuestManager::instance().GetCurrentNPCCharacterPtr()); pSectree->for_each(func); } return 0; } struct FWarpAllInAreaToArea { int from_x1, from_y1, from_x2, from_y2; int to_x1, to_y1, to_x2, to_y2; size_t warpCount; FWarpAllInAreaToArea(int a, int b, int c, int d, int e, int f, int g, int h) : from_x1(a), from_y1(b), from_x2(c), from_y2(d), to_x1(e), to_y1(f), to_x2(g), to_y2(h), warpCount(0) {} void operator () (LPENTITY ent) { if (true == ent->IsType(ENTITY_CHARACTER)) { LPCHARACTER pChar = static_cast<LPCHARACTER>(ent); if (true == pChar->IsPC()) { if (from_x1 <= pChar->GetX() && pChar->GetX() <= from_x2 && from_y1 <= pChar->GetY() && pChar->GetY() <= from_y2) { ++warpCount; pChar->WarpSet( number(to_x1, to_x2), number(to_y1, to_y2) ); } } } } }; int _get_table_postfix2(lua_State* L) { lua_pushstring(L, get_table_postfix()); return 1; } int _mysql_direct_query2(lua_State* L) { // char szQuery[1024]; if (!lua_isstring(L, 1)) return 0; // strncpy(szQuery, lua_tostring(L, 1), sizeof(szQuery)); int i=0, m=1; MYSQL_ROW row; MYSQL_FIELD * field; MYSQL_RES * result; // SQLMsg * pMsg = DBManager::instance().DirectQuery(szQuery); std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery(lua_tostring(L, 1))); if (pMsg.get()) { // ret1 (number of affected rows) lua_pushnumber(L, pMsg->Get()->uiAffectedRows); //-1 if error such as duplicate occurs (-2147483648) // ret2 (table of affected rows) lua_newtable(L); if ((result = pMsg->Get()->pSQLResult) && !(pMsg->Get()->uiAffectedRows == 0 || pMsg->Get()->uiAffectedRows == (uint32_t)-1)) { // LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); // ch->ChatPacket(CHAT_TYPE_INFO, "<%s> Retrieved %u fields\n", __FUNCTION__, mysql_num_fields(result)); // ch->ChatPacket(CHAT_TYPE_INFO, "<%s> Retrieved %u rows\n", __FUNCTION__, mysql_num_rows(result)); // ch->ChatPacket(CHAT_TYPE_INFO, "<%s> Affected %u rows\n", __FUNCTION__, pMsg->Get()->uiAffectedRows); // ch->ChatPacket(CHAT_TYPE_INFO, "<%s> Num %u rows\n", __FUNCTION__, pMsg->Get()->uiNumRows); while((row = mysql_fetch_row(result))) { lua_pushnumber(L, m); lua_newtable(L); while((field = mysql_fetch_field(result))) { lua_pushstring(L, field->name); if (!(field->flags & NOT_NULL_FLAG) && (row[i]==NULL)) { // lua_pushstring(L, "NULL"); lua_pushnil(L); } else if (IS_NUM(field->type)) { double val = NAN; lua_pushnumber(L, (sscanf(row[i],"%lf",&val)==1)?val:NAN); } else if (field->type == MYSQL_TYPE_BLOB) { lua_newtable(L); for (DWORD iBlob=0; iBlob < field->max_length; iBlob++) { lua_pushnumber(L, row[i][iBlob]); lua_rawseti(L, -2, iBlob+1); } } else lua_pushstring(L, row[i]); // LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); // ch->ChatPacket(CHAT_TYPE_INFO, "<%s> Retrieved %d flag %s for %s\n", __FUNCTION__, field->type, field->name, row[i]?row[i]:"NULL"); lua_rawset(L, -3); i++; } mysql_field_seek(result, 0); i=0; lua_rawset(L, -3); m++; } } } else {lua_pushnumber(L, 0); lua_newtable(L);} // delete pMsg; return 2; } int _mysql_escape_string2(lua_State* L) { char szQuery[1024] = {0}; if (!lua_isstring(L, 1)) return 0; // mysql_escape_string(szQuery, lua_tostring(L, 1), sizeof(szQuery)); DBManager::instance().EscapeString(szQuery, sizeof(szQuery), lua_tostring(L, 1), strlen(lua_tostring(L, 1))); lua_pushstring(L, szQuery); return 1; } int _warp_all_in_area_to_area( lua_State* L ) { int from_x1 = lua_tonumber(L, 1); int from_y1 = lua_tonumber(L, 2); int from_x2 = lua_tonumber(L, 3); int from_y2 = lua_tonumber(L, 4); int to_x1 = lua_tonumber(L, 5); int to_y1 = lua_tonumber(L, 6); int to_x2 = lua_tonumber(L, 7); int to_y2 = lua_tonumber(L, 8); const int mapIndex = SECTREE_MANAGER::instance().GetMapIndex( from_x1, from_y1 ); if (0 == mapIndex) { sys_err("_warp_all_in_area_to_area: cannot get a map index with (%u, %u)", from_x1, from_y1); lua_pushnumber(L, 0); return 1; } LPSECTREE_MAP pSectree = SECTREE_MANAGER::instance().GetMap(mapIndex); if (NULL != pSectree) { FWarpAllInAreaToArea func(from_x1, from_y1, from_x2, from_y2, to_x1, to_y1, to_x2, to_y2); pSectree->for_each(func); lua_pushnumber(L, func.warpCount); sys_log(0, "_warp_all_in_area_to_area: %u character warp", func.warpCount); return 1; } else { lua_pushnumber(L, 0); sys_err("_warp_all_in_area_to_area: no sectree"); return 1; } } void RegisterGlobalFunctionTable(lua_State* L) int _mysql_direct_query(lua_State* L) { // char szQuery[1024]; if (!lua_isstring(L, 1)) return 0; // strncpy(szQuery, lua_tostring(L, 1), sizeof(szQuery)); int i = 0, m = 1; MYSQL_ROW row; MYSQL_FIELD* field; MYSQL_RES* result; // SQLMsg * pMsg = DBManager::instance().DirectQuery(szQuery); std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery(lua_tostring(L, 1))); if (pMsg.get()) { // ret1 (number of affected rows) lua_pushnumber(L, pMsg->Get()->uiAffectedRows); //-1 if error such as duplicate occurs (-2147483648 via lua) // if wrong syntax error occurs (4294967295 via lua) // ret2 (table of affected rows) lua_newtable(L); if ((result = pMsg->Get()->pSQLResult) && !(pMsg->Get()->uiAffectedRows == 0 || pMsg->Get()->uiAffectedRows == (uint32_t)-1)) { // LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); // ch->ChatPacket(CHAT_TYPE_INFO, "<%s> Retrieved %u fields\n", __FUNCTION__, mysql_num_fields(result)); // ch->ChatPacket(CHAT_TYPE_INFO, "<%s> Retrieved %u rows\n", __FUNCTION__, mysql_num_rows(result)); // ch->ChatPacket(CHAT_TYPE_INFO, "<%s> Affected %u rows\n", __FUNCTION__, pMsg->Get()->uiAffectedRows); // ch->ChatPacket(CHAT_TYPE_INFO, "<%s> Num %u rows\n", __FUNCTION__, pMsg->Get()->uiNumRows); while ((row = mysql_fetch_row(result))) { lua_pushnumber(L, m); lua_newtable(L); while ((field = mysql_fetch_field(result))) { lua_pushstring(L, field->name); if (!(field->flags & NOT_NULL_FLAG) && (row[i] == NULL)) { // lua_pushstring(L, "NULL"); lua_pushnil(L); } else if (IS_NUM(field->type)) { double val = NAN; lua_pushnumber(L, (sscanf(row[i], "%lf", &val) == 1) ? val : NAN); } else if (field->type == MYSQL_TYPE_BLOB) { lua_newtable(L); for (DWORD iBlob = 0; iBlob < field->max_length; iBlob++) { lua_pushnumber(L, row[i][iBlob]); lua_rawseti(L, -2, iBlob + 1); } } else lua_pushstring(L, row[i]); // LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr(); // ch->ChatPacket(CHAT_TYPE_INFO, "<%s> Retrieved %d flag %s for %s\n", __FUNCTION__, field->type, field->name, row[i]?row[i]:"NULL"); lua_rawset(L, -3); i++; } mysql_field_seek(result, 0); i = 0; lua_rawset(L, -3); m++; } } } else { lua_pushnumber(L, 0); lua_newtable(L); } // delete pMsg; return 2; } { extern int quest_setstate(lua_State* L); luaL_reg global_functions[] = { { "sys_err", _syserr }, { "sys_log", _syslog }, { "char_log", _char_log }, { "item_log", _item_log }, { "set_state", quest_setstate }, { "set_skin", _set_skin }, { "setskin", _set_skin }, { "time_to_str", _time_to_str }, { "say", _say }, { "chat", _chat }, { "cmdchat", _cmdchat }, { "syschat", _syschat }, { "get_locale", _get_locale }, { "setleftimage", _left_image }, { "settopimage", _top_image }, { "server_timer", _set_server_timer }, { "clear_server_timer", _clear_server_timer }, { "server_loop_timer", _set_server_loop_timer }, { "get_server_timer_arg", _get_server_timer_arg }, { "timer", _timer }, { "loop_timer", _set_named_loop_timer }, { "cleartimer", _clear_named_timer }, { "getnpcid", _getnpcid }, { "is_test_server", _is_test_server }, { "is_speed_server", _is_speed_server }, { "raw_script", _raw_script }, { "number", _number }, // LUA_ADD_BGM_INFO { "set_bgm_volume_enable", _set_bgm_volume_enable }, { "add_bgm_info", _add_bgm_info }, // END_OF_LUA_ADD_BGM_INFO // LUA_ADD_GOTO_INFO { "add_goto_info", _add_goto_info }, // END_OF_LUA_ADD_GOTO_INFO // REFINE_PICK { "__refine_pick", _refine_pick }, // END_OF_REFINE_PICK { "add_ox_quiz", _add_ox_quiz }, { "__fish_real_refine_rod", _fish_real_refine_rod }, // XXX { "__give_char_priv", _give_char_privilege }, { "__give_empire_priv", _give_empire_privilege }, { "__give_guild_priv", _give_guild_privilege }, { "__get_empire_priv_string", _get_empire_privilege_string }, { "__get_empire_priv", _get_empire_privilege }, { "__get_guild_priv_string", _get_guild_privilege_string }, { "__get_guildid_byname", _get_guildid_byname }, { "__get_guild_priv", _get_guild_privilege }, { "item_name", _item_name }, { "mob_name", _mob_name }, { "mob_vnum", _mob_vnum }, { "get_time", _get_global_time }, { "get_global_time", _get_global_time }, { "get_channel_id", _get_channel_id }, { "command", _do_command }, { "find_pc_cond", _find_pc_cond }, { "find_pc_by_name", _find_pc }, { "find_npc_by_vnum", _find_npc_by_vnum }, { "set_quest_state", _set_quest_state }, { "get_quest_state", _get_quest_state }, { "under_han", _under_han }, { "notice", _notice }, { "notice_all", _notice_all }, { "notice_in_map", _notice_in_map }, #ifdef __FULL_NOTICE_SYSTEM__ { "big_notice", _big_notice }, { "big_notice_all", _big_notice_all }, { "big_notice_in_map", _big_notice_in_map }, #endif { "warp_all_to_village", _warp_all_to_village }, { "warp_to_village", _warp_to_village }, { "say_in_map", _say_in_map }, { "kill_all_in_map", _kill_all_in_map }, { "kaybol_all_in_map", _kaybol_all_in_map }, { "regen_in_map", _regen_in_map }, { "enable_over9refine", _enable_over9refine }, { "block_chat", _block_chat }, { "spawn_mob", _spawn_mob }, { "get_locale_base_path", _get_locale_base_path }, { "purge_area", _purge_area }, { "warp_all_in_area_to_area", _warp_all_in_area_to_area }, { "get_table_postfix2", _get_table_postfix2 }, { "mysql_direct_query2", _mysql_direct_query2 }, { "mysql_escape_string2", _mysql_escape_string2 }, { "mysql_direct_query", _mysql_direct_query }, { NULL, NULL } }; int i = 0; while (global_functions[i].name != NULL) { lua_register(L, global_functions[i].name, global_functions[i].func); ++i; } } } beginning of line 1543: int _mysql_direct_query(lua_State* L) 1725 This is the last bracke
  2. Error screenshot Help please, how to fix? questlua_global.cpp
×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.