void SectorManager::MakeTimedCall(TimeNode *this_node) { TimeNode node; memcpy(&node, this_node, sizeof(TimeNode)); RemoveTimedCall(this_node); int ShutdownTimes[] = { 15, 10, 5 }; Player *p = g_PlayerMgr->GetPlayer(node.player_id); if ((node.player_id != NODE_NO_LONGER_NEEDED) && ((node.player_id == SECTOR_SERVER_CONNECTIONLESS_NODE) || p) ) { switch(node.func) { case B_WARP_BROADCAST: p->StartWarp(); break; case B_DESTROY_RESOURCE: m_ObjectMgr->DestroyObject(node.obj, 0, node.i1); break; case B_WARP_RESET: p->FinalWarpReset(); break; case B_WARP_TERMINATE: p->TerminateWarp(); break; case B_MINE_RESOURCE://(time_to_drain, obj, stack_val, slot); p->PullOreFromResource(node.obj, node.i1, node.i2, node.i3, node.i4); break; case B_COLLECT_RESOURCE: p->TakeOreOnboard(node.obj, node.i3); break; case B_MOB_DAMAGE: node.obj->DamageMOB(node.i1, node.i2, node.a, node.i3); break; case B_SHIP_DAMAGE: p->ShipDamage(node.i1, node.a, (short)node.i2); break; case B_RECHARGE_REACTOR: RechargeReactor(p); break; case B_RECHARGE_SHIELD: RechargeShield(p); break; case B_FORCE_LOGOUT: ForceLogout(p); break; case B_BUFF_TIMEOUT: BuffTimeout(p); break; case B_CAMERA_CONTROL: p->SendCameraControl(node.i1, node.i2); break; case B_MANUFACTURE_ACTION: p->ManufactureTimedReturn(node.i1); break; case B_ITEM_INSTALL: p->m_Equip[node.i1].FinishInstall(); break; case B_ITEM_COOLDOWN: p->m_Equip[node.i1].CoolDown(); break; case B_TEST_MESSAGE: p->SendVaMessage("Test Message time: %d [%d]",node.event_time, node.i1); break; case B_ABILITY_REMOVE: p->AbilityRemove(node.i1); break; case B_PLAYER_BUFFS: p->m_Buffs.Update(node.i1); break; case B_SHOOT_AMMO: p->m_Equip[node.i1].ShootAmmo(node.i2); break; case B_SERVER_SHUTDOWN: char Msg[60]; sprintf(Msg, "Server shutdown in %d seconds!", ShutdownTimes[m_ShutDownMark]); g_ServerMgr->m_PlayerMgr.GlobalAdminMessage(Msg); AddTimedCall(0, B_SERVER_SHUTDOWN, ShutdownTimes[m_ShutDownMark] * 1000, NULL); m_ShutDownMark++; if (m_ShutDownMark > 2) { // Shutdown the server g_ServerShutdown = true; } } } }