void l_updateammo(CallHandler& handler, Object::unique_deque& args, Object::unique_list& results) { ident weapon_id = make_ident(ReadNumber<DWORD>(*args[0])); s_halo_weapon* weapon = (s_halo_weapon*)GetObjectAddress(weapon_id); if (!weapon) handler.RaiseError("updateammo: invalid weapon id!"); weapon->SyncAmmo(weapon_id); }
// will change this when i rework the script system void check_script_reload(CallHandler& handler, const std::string& cmd) { std::vector<std::string> tokens = TokenizeArgs(cmd); if (tokens.size() && tokens[0] == "sv_script_reload") handler.RaiseError("scripts cannot execute sv_script_reload."); }
void l_setammo(CallHandler& handler, Object::unique_deque& args, Object::unique_list& results) { ident weapon_id = make_ident(ReadNumber<DWORD>(*args[0])); WORD clip_ammo = ReadNumber<WORD>(*args[1]); WORD pack_ammo = ReadNumber<WORD>(*args[2]); s_halo_weapon* weapon = (s_halo_weapon*)GetObjectAddress(weapon_id); if (!weapon) handler.RaiseError("setammo: invalid weapon id!"); weapon->SetAmmo(pack_ammo, clip_ammo); weapon->SyncAmmo(weapon_id); }
void l_log_msg(CallHandler& handler, Object::unique_deque& args, Object::unique_list&) { //todo: lets hope everything is null terminated. // find calls, and rip pout. DWORD log_id = ReadNumber<DWORD>(*args[0]); COutStream* stream; switch (log_id) { case 1: // game log { // can't treat the gaming log as a normal stream std::vector<std::wstring> msgs = ReadString(*args[1]); for (size_t x = 0; x < msgs.size(); x++) _TRACE_DEBUG_SCRIPT_EVENT(msgs[x].c_str()) return; } break; case 2: //phasor log { //stream = g_PhasorLog.get(); } break; case 3: // rcon log { //stream = g_RconLog.get(); } break; case 4: // script log { //stream = g_ScriptsLog.get(); } break; default: { std::stringstream ss; ss << "log_msg : '" << log_id << "' is not a valid id."; handler.RaiseError(ss.str()); } break; } _TRACE_DEBUG("_l_log_msg: %s", *args[1]) // todo: //WriteMessageToStream(*stream, *args[1]); }
int main() { CallHandler handler; handler.employ(new Fresher("Lily")); handler.employ(new Fresher("Ben")); handler.employ(new Fresher("Carlos")); handler.employ(new Fresher("David")); handler.employ(new Fresher("Thomas")); handler.employ(new TechLead("Anglela")); handler.employ(new ProductManager("Benson")); Call call1_1(CallHandler::FRESHER); Call call1_2(CallHandler::FRESHER); Call call1_3(CallHandler::FRESHER); Call call1_4(CallHandler::FRESHER); Call call1_5(CallHandler::FRESHER); Call call2(CallHandler::TECHLEAD); Call call3(CallHandler::TECHLEAD); Call call4(CallHandler::PRODUCTMANAGER); handler.dispatchCall(&call1_1); handler.dispatchCall(&call1_2); handler.dispatchCall(&call1_3); handler.dispatchCall(&call1_4); handler.dispatchCall(&call1_5); handler.dispatchCall(&call2); handler.dispatchCall(&call3); handler.dispatchCall(&call4); call1_1.disconnect(); call2.complain(); call3.disconnect(); // Call Handler updates and dispatch Call4 to ProductManager handler.update(); call4.disconnect(); // Call Handler updates and dispatch Call2 to ProductManager handler.update(); // Complain again, product manager just give up ... call2.complain(); // ... return 0; }
void l_removetimer(CallHandler& handler, Object::unique_deque& args, Object::unique_list& results) { DWORD id = ReadNumber<DWORD>(*args[0]); if (!g_Timers.RemoveTimer(id)) handler.RaiseError("removetimer : invalid timer id or a timer tried removing itself in its callback."); }