Merge branch 'timer'

This commit is contained in:
KimLS 2014-03-07 20:00:11 -08:00
commit 1476ebdfe6
4 changed files with 107 additions and 10 deletions

View File

@ -670,11 +670,11 @@ int PerlembParser::SendCommands(const char *pkgprefix, const char *event, uint32
ret_value = perl->dosub(std::string(pkgprefix).append("::").append(event).c_str());
#ifdef EMBPERL_XS_CLASSES
std::string eval_str = (std::string)"$" + (std::string)pkgprefix + (std::string)"::client = undef;";
eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::npc = undef;";
eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::questitem = undef;";
eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::entity_list = undef;";
perl->eval(eval_str.c_str());
// std::string eval_str = (std::string)"$" + (std::string)pkgprefix + (std::string)"::client = undef;";
// eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::npc = undef;";
// eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::questitem = undef;";
// eval_str += (std::string)"$" + (std::string)pkgprefix + (std::string)"::entity_list = undef;";
// perl->eval(eval_str.c_str());
#endif
} catch(const char * err) {
@ -687,7 +687,8 @@ int PerlembParser::SendCommands(const char *pkgprefix, const char *event, uint32
error += "::";
error += event;
error += " - ";
error += err;
if(strlen(err) > 0)
error += err;
AddError(error);
}
}

View File

@ -168,14 +168,38 @@ void lua_set_timer(const char *timer, int time_ms) {
quest_manager.settimerMS(timer, time_ms);
}
void lua_set_timer(const char *timer, int time_ms, Lua_ItemInst inst) {
quest_manager.settimerMS(timer, time_ms, inst);
}
void lua_set_timer(const char *timer, int time_ms, Lua_Mob mob) {
quest_manager.settimerMS(timer, time_ms, mob);
}
void lua_stop_timer(const char *timer) {
quest_manager.stoptimer(timer);
}
void lua_stop_timer(const char *timer, Lua_ItemInst inst) {
quest_manager.stoptimer(timer, inst);
}
void lua_stop_timer(const char *timer, Lua_Mob mob) {
quest_manager.stoptimer(timer, mob);
}
void lua_stop_all_timers() {
quest_manager.stopalltimers();
}
void lua_stop_all_timers(Lua_ItemInst inst) {
quest_manager.stopalltimers(inst);
}
void lua_stop_all_timers(Lua_Mob mob) {
quest_manager.stopalltimers(mob);
}
void lua_depop() {
quest_manager.depop(0);
}
@ -1099,9 +1123,15 @@ luabind::scope lua_register_general() {
luabind::def("spawn_from_spawn2", (Lua_Mob(*)(uint32))&lua_spawn_from_spawn2),
luabind::def("enable_spawn2", &lua_enable_spawn2),
luabind::def("disable_spawn2", &lua_disable_spawn2),
luabind::def("set_timer", &lua_set_timer),
luabind::def("stop_timer", &lua_stop_timer),
luabind::def("stop_all_timers", &lua_stop_all_timers),
luabind::def("set_timer", (void(*)(const char*, int))&lua_set_timer),
luabind::def("set_timer", (void(*)(const char*, int, Lua_ItemInst))&lua_set_timer),
luabind::def("set_timer", (void(*)(const char*, int, Lua_Mob))&lua_set_timer),
luabind::def("stop_timer", (void(*)(const char*))&lua_stop_timer),
luabind::def("stop_timer", (void(*)(const char*, Lua_ItemInst))&lua_stop_timer),
luabind::def("stop_timer", (void(*)(const char*, Lua_Mob))&lua_stop_timer),
luabind::def("stop_all_timers", (void(*)(void))&lua_stop_all_timers),
luabind::def("stop_all_timers", (void(*)(Lua_ItemInst))&lua_stop_all_timers),
luabind::def("stop_all_timers", (void(*)(Lua_Mob))&lua_stop_all_timers),
luabind::def("depop", (void(*)(void))&lua_depop),
luabind::def("depop", (void(*)(int))&lua_depop),
luabind::def("depop_with_timer", (void(*)(void))&lua_depop_with_timer),

View File

@ -484,6 +484,29 @@ void QuestManager::settimerMS(const char *timer_name, int milliseconds) {
QTimerList.push_back(QuestTimer(milliseconds, owner, timer_name));
}
void QuestManager::settimerMS(const char *timer_name, int milliseconds, ItemInst *inst) {
if (inst) {
inst->SetTimer(timer_name, milliseconds);
}
}
void QuestManager::settimerMS(const char *timer_name, int milliseconds, Mob *mob) {
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
end = QTimerList.end();
while (cur != end) {
if (cur->mob && cur->mob == mob && cur->name == timer_name)
{
cur->Timer_.Enable();
cur->Timer_.Start(milliseconds, false);
return;
}
++cur;
}
QTimerList.push_back(QuestTimer(milliseconds, mob, timer_name));
}
void QuestManager::stoptimer(const char *timer_name) {
QuestManagerCurrentQuestVars();
@ -504,6 +527,25 @@ void QuestManager::stoptimer(const char *timer_name) {
}
}
void QuestManager::stoptimer(const char *timer_name, ItemInst *inst) {
if (inst) {
inst->StopTimer(timer_name);
}
}
void QuestManager::stoptimer(const char *timer_name, Mob *mob) {
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
end = QTimerList.end();
while (cur != end) {
if (cur->mob && cur->mob == mob && cur->name == timer_name) {
QTimerList.erase(cur);
return;
}
++cur;
}
}
void QuestManager::stopalltimers() {
QuestManagerCurrentQuestVars();
@ -523,6 +565,24 @@ void QuestManager::stopalltimers() {
}
}
void QuestManager::stopalltimers(ItemInst *inst) {
if (inst) {
inst->ClearTimers();
}
}
void QuestManager::stopalltimers(Mob *mob) {
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end, tmp;
end = QTimerList.end();
while (cur != end) {
if (cur->mob && cur->mob == mob)
cur = QTimerList.erase(cur);
else
++cur;
}
}
void QuestManager::emote(const char *str) {
QuestManagerCurrentQuestVars();
if (!owner) {

View File

@ -66,9 +66,15 @@ public:
void addloot(int item_id, int charges = 0, bool equipitem = true);
void Zone(const char *zone_name);
void settimer(const char *timer_name, int seconds);
void settimerMS(const char *timer_name, int milliseconds);
void settimerMS(const char *timer_name, int milliseconds);
void settimerMS(const char *timer_name, int milliseconds, ItemInst *inst);
void settimerMS(const char *timer_name, int milliseconds, Mob *mob);
void stoptimer(const char *timer_name);
void stoptimer(const char *timer_name, ItemInst *inst);
void stoptimer(const char *timer_name, Mob *mob);
void stopalltimers();
void stopalltimers(ItemInst *inst);
void stopalltimers(Mob *mob);
void emote(const char *str);
void shout(const char *str);
void shout2(const char *str);